• Теги и Instant View

    Вчера обновил блог. Первое достижение – появились теги. Я и раньше проставлял их, но не было возможности искать по ним. Теперь под заголовком каждого поста указаны его теги. Ссылка по тегу открывает список постов с ним.

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

    Второй прорыв – сделал для блога Instant View в Телеграме. Это когда пост можно просмотреть прямо в клиенте без перехода на сайт. Это был очень интересный опыт. Еще не успел ничего автоматизировать, эту заметку заброшу вручную в канал. Дальше буду думать. И напишу отдельный пост, как все сделать по шагам.

  • Исключения в Clojure

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

    Содержание

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

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

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

    Начинающие программисты пишут код, следуя только положительному пути. Отчасти поэтому так трудно расследовать ошибки. Сервер вернул статус 500. Почему? Возможны сотни причин, по которым запрос не удался. Но запись в логе слишком скупа, чтобы расследовать инцидент.

    Опытный программист внимателен к ошибкам. Приходит понимание, что сэкономив на обработке исключений, разработчик на самом деле не выиграет. В перспективе он потратит время на расследование непонятных ошибок.

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

    Read more →

  • UI-тесты в браузере

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

  • Беда с парком

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


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

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

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

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

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

    Я и другие жители требуем вывезти старые аттракционы из парка. С предпринимателей, кому принадлежит это имущество, взыскать штраф.

    Прикладываю набор фотографий. Обратите внимание на смену времен года. Фотографии охватывают осень, зиму и весну.

    Read more →

  • Clojure.spec

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

    Содержание

    В этой главе мы рассмотрим clojure.spec – библиотеку для проверки данных в 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 над протоколом, чтобы сделать разработку быстрой и удобной.

    Каждый год компания 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 →

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