• Clojure.spec

    Это вторая глава предполагаемой книги по Кложе на русском языке. См. первую главу про веб-разработку.

    Содержание

    В этой главе мы рассмотрим clojure.spec – библиотеку для проверки данных в Clojure. Это особенная библиотека, поэтому уделим пристальное внимание.

    Внимание! Вы читаете черновик к книге “Clojure на производстве”. Для книги я переписывал его много раз, но в блоге осталась старая версия. Здесь она для истории, а вам я рекомендую купить книжку.

    Spec это сокращение от specification, т.е. спецификация, описание. В общих словах, это набор функций и макросов, чтобы схематично описывать структуры данных. Например, из каких ключей состоит словарь и каких типов его значения. Такое описание называют спецификацией, или сокращенно спекой.

    Особые функции принимают спеку, данные и проверяют, подходят ли данные под спеку. Если нет, то возвращают отчет: в каком узле данных произошла ошибка и почему.

    Spec входит в стандартную поставку Clojure начиная с версии 1.9. Полное имя модуля clojure.spec.alpha. Пусть вас не смущает частичка alpha на конце имени. Она осталась по историческим причинам.

    Появление spec стало важной вехой в развитии Clojure. Ключевое свойство spec в том, что она фундаментальна. Валидация данных это всего лишь малая часть ее возможностей. Spec не только проверяет данные, но и преобразует и анализирует их. Например, на spec легко написать преобразование данных или парсер.

    Технически spec основана на абстракциях, которые предлагает Clojure. Формально это обычная библиотека. Но абстракции spec оказались настолько мощны, что Clojure переиспользует их в работе. Начиная с 1.10, Clojure анализирует собственный код с помощью spec. Так проекты дополняют друг друга.

    Мы начнем описание spec с валидации данных. Но прежде чем браться за техническую часть, разберемся с теорией. Как между собой связаны классы, типы и валидация.

    Read more →

  • Харассмент

    У всех на уме сплошной харассмент. А задумывались ли вы, откуда взялся термин? В Википедии наваляли статьи на шести языках, а насчет происхождения — ни слова. Тем интересней узнать про термин подробнее, ведь пришел он из области, которая не имеет ничего общего с отношениями.

    В корейском языке слово “харрас” означает раздражать, отвлекать, надоедать. Этот термин активно употребляли игроки в первый Старкрафт. На их жаргоне харрасом называют раннюю атаку на базу противника одним-двумя юнитами.

    Конечно, уничтожить базу противника столь малыми войсками невозможно. Но цель харраса в том, чтобы отвлечь внимание противника от основных действий. Например, отбиваясь от харраса, противник забыл построить важное здание или потратил ресурсы на войска, хотя мог бы на развитие.

    Еще во время харраса пытаются убить рабочих. Число рабочих критично на ранней стадии игры. Бывает, что после потери большей части рабов профессиональные игроки выходят, не дожидаясь формального поражения.

    Любопытно, что ни в английском, ни в русском языке не нашлось подходящего синонима. Английские комментаторы банально переняли иностранное слово. Jaedong is going to harass his opponent with six lings. What a successful harassment it has been! Потом термин перекочевал в русский как что-то само собой разумеющееся.

    Каждый раз, когда слышу про харассмент, представляю шестой пул и шесть лингов, бегущих на базу к противнику. Я так делал много раз. Ох, как подгорало у соперников!

  • Отвлеченное

    Это укороченная версия текста, который я написал на выходных. Чтобы не быть слишком резким, я вырезал отдельные части. Понимаю, что текст кажется бессвязным, но уверен, отдельные тезисы все же удались.

    В моем мире профессионализм несовместим с жалобами. Это ортогональные понятия. Не могу представить, чтобы действительно опытный человек исходился на жалобы. От профессионала мы ждем взвешенный ответ: с одной стороны так, но с другой эдак. Основной критерий профессионализма — это резкое снижение радикальных ноток в голосе. Ответ профессионала располагает к размышлению, выходу на новый уровень.

    Я читал одно время Твиттер Джо Армстронга, создателя Эрланга. Он мило подтрунивает над безумием современного веба, в частности Джаваскриптом. Конечно, нелегко ему, ветерану индустрии, начинавшему с перфокарт, писать на современном JS. Но Джо всегда делает это вежливо, с долей самоиронии. Даже с тридцатью годами опыта он не позволяет себе постов с жалобами.

    Read more →

  • Введение в веб-разработку на Clojure. Часть I

    (This is my attempt to compose a book about Clojure. I decided to start with a web development section to see how far I could go. It’s in Russian because here Clojure isn’t popular and its popularity across developers is low. I hope I’ll translate this in English one day.)

    Содержание

    В этой главе мы рассмотрим азы разработки на Clojure под веб-платформу. Поговорим о том, как устроен протокол HTTP и как передавать по нему данные. Рассмотрим, какие абстракции использует Clojure над протоколом, чтобы сделать разработку быстрой и удобной.

    Внимание! Вы читаете черновик к книге “Clojure на производстве”. Для книги я переписывал его много раз, но в блоге осталась старая версия. Здесь она для истории, а вам я рекомендую купить книжку.

    Каждый год компания Cognitect опрашивает Clojure-разработчиков. Среди прочих вопросов встречается о том, в какой области вы работаете? В 2010 году веб-разработкой занимались 50% опрошенных, то есть каждый второй. К 2018 году эта цифра выросла до 82%. Это уже четыре человека из пяти.

    Развитие веба не связано напрямую с Clojure. Похожую динамику показывают ежегодные опросы StackOverflow. Согласно им, все больше разработчиков переходит из смежных областей в веб.

    Справедливо утверждать, что если вы найдете работу на Clojure, то скорее всего это будет веб-приложение. Речь необязательно идет о сайте компании. Иногда такие сайты даже бывают статичными, то есть состоят из набора HTML-файлов. Но веб-приложение — это не только текст с картинками. В общем значении это передача и обработка данных по протоколу HTTP.

    Напомним, протокол изначально предназначен для передачи HTML-разметки. Но удивительным образом подошел для обмена данными. Для этого даже не пришлось менять стандарт. Причина кроется в его изящном дизайне, простоте и гибкости.

    Прежде чем перейти к Clojure, давайте освежим в памяти устройство протокола. Из каких частей он состоит и по каким правилам сервер его обрабатывает. Это важно, потому что языки и фреймворки меняются, а протокол нет.

    Read more →

  • Tagging programmers

    На позапрошлом митапе рассказал, как оцениваю разработчиков. Если коротко, меньше смотрю на классический грейд джун-мидл-синьор, но больше на характер. Привел примеры основных типажей и попытался связать это с возрастом и развитием. Доклад недолгий, обсуждение с 18 минуты.

  • Питон и ненависть

    По работе пришлось снова вернуться в Питон. Один чудак состряпал сервис на Кложе, но не осилил тесты и написал их на Питоне. Пока исправлял за ним, хлебнул тонны ненависти.

    Во-первых, компилятор не обращает внимания на несуществующие переменные. Если допустить опечатку, то скрипт все равно запуститься, чтобы упасть на середине с ошибкой name "foo" is not defiened.

    Я в курсе, что в Питоне сто способов подсунуть переменную в рантайм минуя обычное присваивание. Скажем, через globals:

    >>> globals()["foo"] = 42
    >>> foo + 1
    43
    

    Но за это отрывают руки, поэтому так все равно не делают. А кроме того, компилятор мог бы и ворнинг кинуть. Друг, ты используешь переменную accounts, а откуда она взялась я хз. Не хуйню ли ты пишешь часом? Я бы такой — ок, поправил. Но нет.

    Read more →

  • Дети

    Я согласен с Лебедевым, что детей нужно заводить раньше. Дети это самое важное. То, чем ты занимаешься — нет. Даже если ты второй Стив Джобс или спаситель человечества. Все равно нет.

    Мы живем не в средневековье, и не бывает так, чтобы на целый город приходился один мудрец. Все проблемы человечество решает коллективно. В Гугле работают сто тысяч инженеров. Ученые трудятся в НИИ и огромных лабораториях. Гениям одиночкам ничего не светит.

    Поэтому неважно, что дети мешают изобретать лекарство от рака. Если ты его не придумаешь, это сделает кто-то другой через пять-десять лет. В историческом масштабе это не играет роли. Достаточно сделать вклад.

    Сюда же относится опен-сорс, консалтинг, сертификаты, конференции, вебинары, курсы роста, ссылки на Хакер-Ньюз и прочее говно. Все это не важно и отвалится через пару лет. Бизнес продадут, код перепишут. Божественную Кложу заменят на блевотный Яваскрипт. Дизайн сделают серым на белом.

    А с детьми по-другому. Если ты ими не займешься, этого не сделает никто. Если не привить с детства честность, не уделить внимания и любви, то это катастрофа. Ребенок вырастет обделенным, ущербным. Самостоятельно вырулить ему будет сложно.

    Мы не раз видели фильмы с таким сюжетом. Родитель не может выстроить отношения с подростком. Ты не уделял мне внимания в детстве! Но я же работал! Обеспечивал семью! Мы хотели твоей заботы, а не денег! Я делал все что мог! Дочь выбегает из комнаты. Да что с ней не так! Папуля морщит лоб и судорожно соображает.

    Типовой случай. А секрет в том, что ты бы мог сделать и то, и другое. И работать, и заботиться о детях. Одно другому не мешает.

    Ребенок — это продолжение тебя, твой контриб в будущее. Но неполный — что-то возьмут, что-то выкинут. Точную копию передать невозможно, и это круто.

    Бездетные пары банально пролетают мимо огромного пласта жизни. Он и не хороший и не плохой, он просто другой — со своими проблемами и ништяками. Умение общаться с ребенком и наставлять его это особый скилл. Получить его можно только на практике.

  • Пять новых прочитанных книг

    В разделе Книжная полка – пять новых книг. Политология, война, алгоритмы, выступления и детская повесть. Описания стали длиннее. Про одну из книг – политологию Шульман – потом напишу отдельно.

  • Зачем и как писать

    Раз в неделю я занимаюсь английским. Обсуждаем с собеседником все подряд — книги, фильмы, политику. В последний раз говорили о пользе записывать мысли. Я веду блог с 2012 года, скромный опыт есть. А препод, оказывается, ведет обычный бумажный дневник, что очень круто. Не знал этого раньше.

    Блог и дневник это разные вещи, но и общее у них есть. Оба помогают структурировать идеи и очистить голову. Дневник — это больше внутреннее, в то время как блог — про внешнее. Но в обоих случаях мы пишем.

    Я считаю, когда мы пишем, то стравливаем ментальное напряжение. Записывать мысли — это как приводить порядок, только на этот раз не дома или на рабочем месте, а в голове.

    С незаписанной мыслью беда — она не держится в голове слишком долго. Человек не может держать одновременно в голове больше трех-пяти идей, так уж он устроен. Мы устанавливаем календари, туду-листы, будильники, напоминалки. Это прекрасно, но будет круто еще и записывать. Потому что со временем идеи либо теряются, либо перестают приходить, так как им некуда поместиться.

    Если носить в голове одну и те же идею, начинает казаться, что она гениальна. И как следствие, ты сам гениален. Я вижу два недостатка: мысленный застой и высокомерие.

    Read more →

  • Хватит выгорать

    Давно хотел написать пост про выгорания. Не буду ходить вокруг да около.

    Ребята, хватит выгорать. Перестаньте это делать. Не выгорайте.

    Не читайте статей про выгорание. Не пишите сочувствующие комментарии. Это как удобрять сорняки.

    Выгорание стало модным. Все выгорают. Откроешь Твиттер, Хабр, а там — этот устал, другой выгорел, третий, четвертый…

    Хватит уже.

    Достаточно одной громкой статьи, и пожалуйста. Ее читают тысячи молодых людей, и у каждого срабатывает эффект “это про меня”. Это старый, как мир, принцип, когда человек примеряет на себя прочитанное.

    Это было еще в “Трое в лодке”:

    Это поразительно, но всякий раз, когда я читаю объявление о каком-нибудь патентованном лекарстве, мне приходится сделать вывод, что я страдаю именно той болезнью, о которой в нем говорится, и притом в наиболее злокачественной форме. Диагноз в каждом случае точно совпадает со всеми моими ощущениями.

    Заинтересовавшись своим состоянием, я решил исследовать его основательно и стал читать в алфавитном порядке. Я прочитал про атаксию и узнал, что недавно заболел ею и что острый период наступит недели через две. Брайтовой болезнью я страдал, к счастью, в легкой форме и, следовательно, мог еще прожить многие годы. У меня был дифтерит с серьезными осложнениями, а холерой я, по-видимому, болен с раннего детства.

    Счастливым, здоровым человеком вошел я в эту читальню, а вышел из нее разбитым инвалидом.

    Заканчиваешь читать подобную статью, и думаешь: это же обо мне! На работе не прет, поссорился с близкими, устал… черт, Я ЖЕ ВЫГОРЕЛ! Все, как в интернете написано. Чувак, сочувствую! У меня то же самое!

    Где-то в интернете лежит смешной текст. Обычный человек разговаривает со Вселенной. Жалуется на проблемы: тяжело на работе, не понимают родители, разлад с половинкой… Словом, типовой набор, через который проходят все. А Вселенная слушает с гротескным вниманием, кивает, поддакивает.

    Не понимают родители? Никогда такого не слышала. Ах, на работе не получается? Это первый случай в моей практике. Вы слышали, ему тяжело! Миллионы лет не было такого, и вдруг! Все для тебя сделаю, дорогой. Поставлю на паузу процессы, остановлю время и займусь лично.

    Читать этот диалог смешно. Главный герой считает, что уникален и неповторим, а его проблемы не имеют аналогов. На самом деле это стандартный набор, к которому средний гражданин подходит к тридцати годам. Кризис развития, по сути такой же, как в подростковый период, только немного в другой форме.

    Выгорание стало модным трендом, способом снискать дешевой популярности. Выгорел — пост написал, лайков собрал.

    Я ни разу не отрицаю выгорание и депрессию с медицинской точки зрения. Такие проблемы есть, и они подлежат лечению. Проблема в том, что ни один автор не пишет о том, что он делал для преодоления трудностей. Типовой пост про выгорание — это много экранов боли, что все не так, все плохо… Я не вижу в этом смысла.

    Заболел — лечись. Если видишь, что все плохо, то почему сидишь на пятой точке полгода, пока не станет хуже? Почему не меняешь работу, не заводишь новых друзей, не меняешь деятельность?

    Я работаю с 17 лет, но ни разу не выгорал. Где только ни бывал. На телевидении, в типографии, в газете, в веб-студии, в госконторе, в аутсорсе… Бывало разное: и дико перло, и люто бомбило. Но никогда не было свинцового уныния и желания ныть. Пожаловался раз, выпустил пар — и дальше.

    Предвкушение нового дня, жажда узнать и попробовать что-то новое — вот что перечеркивало все недостатки. Утром на работу как на крыльях. Если этого чувства нет, следует как-то его взрастить, развить в себе.

    Читаешь кого-то: все, выгорел, больше никогда и на за что. Через месяц — как ни в чем не бывало занимается тем, чем раньше. Чувак, ты просто устал. Отдохни, сделай паузу в два месяца между проектами. Съезди куда, книжки художественные почитай. Перестань кодить по ночам, спи по девять часов, принимай ванны.

    Настроение человека неразрывно связано с тем, что он потребляет, читает, смотрит. Если запереться в темной комнате, включить Нирвану и выкурить пачку сигарет, обязательно покажется, что все тлен. А если сходить в бассейн, съесть апельсин, почитать любимую книжку — то не покажется.

    Теперь по аналогии. Ночью ты задрачиваешь Хаскель, днем вареный пишешь на кровавой Джаве, кофе и сигареты каждые полчаса, под вечер возбуждение и опять ночь перед монитором. Прибавьте сюда опенсорс. Как же тут не устать? Но это усталость, а не выгорание. А причина усталости — отсутствие режима и лень следить за собой.

    Не надо этих постов, что выгорел. Ты отравляешь мозг молодым и неопытным. За очередным постом про выгорание нет ничего, кроме инфантильного нарциссизма, упоения страданием.

    И не стоит чрезмерно себя жалеть. Жизнь — это тоже трудности. Преодолевать усталость и тоску — нормально.

Страница 44 из 87