• Что почитать на выходных №5

    Поехали, техническое:

    • MVC vs. OOP

      Замечания Егора Бугаенко об известных паттернах.

    • What’s Wrong With Object-Oriented Programming?

      У того же автора: подборка цитат известных программистов о том, что ООП отстой.

    • Using CORS

      Отличный мануал как прикрутить кросс-доменные запросы к серверу и клиенту. Намереваюсь написать свой туториал по следам недавних изысканий.

    На сладкое:

  • Мой вклад в clj-http

    В проект clj-http приняли мой скромный пулл-реквест. Теперь, если запрос был вызван с флагом :throw-exceptions true и вернулся плохой ответ (статус не 2хх, 3хх), то во вбрасываемый словарь добавляеся ключ :type :clj-http.client/unexceptional-status. Это на ура работает с библиотекой Slingshot, потому что отлов исключений по полю :type стал негласным стандартом.

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

    Библиотека упрощает работу с исключениями до мыслимого предела. Теперь можно вбрасывать не только объект, унаследованный от Throwable, а вообще что угодно. Лучше всего подходит словарь. Форма отлова исключения, выброшенного из slingshot, может иметь разную структуру. Например, предикат, но удобней и короче будет вектор двух элементов, где первый – ключ, а второй – значение.

    Если раньше приходилось передавать неочевидный предикат, который проверял, что в словаре есть поле status, и оно числовое:

    (catch
      (fn [response]
        (-> response :statsus integer?))
      ...)
    

    , то теперь достаточно сравнить так:

    (catch [:type :clj-http.client/unexceptional-status])
    

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

    Пока пулл-реквест не приняли, приходилось писать свой костыль для добавления ключа. Теперь с этим покончено.

  • Статья в Associated Press

    ivan

    В издании Associated Press опубликована статья об айти-специалистах Воронежа, в том числе из нашего офиса. Я немного рассказал про удаленку, деньги и прочие детали, словом, все то, что описывал в посте про удаленную работу. Мой коллега Михаил поделился взглядами на рынок специалистов и воздействие кризиза на айти.

    Фотографии в хорошем качестве и видео на сайте AP доступны только по платной подписке.

  • Синтаксис

    Незрелый программист судит о языке по синтаксису. Эти скобочки люблю, а такие нет. Языки с отступами не рассматриваю. Требую коммерческую ИДЕ с дебагом мышкой.

    Это проблема.

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

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

    Бывает, синтаксис не только справляется со своей задачей, но и привносит преимущества, недоступные в другим синтаксисам. Например, любой диалект Лиспа автоматически несет мощь макросов и метапрограммирования в дополнение к языку.

    Обыватели полагают, что Кложа – это очередной “современный” Лисп. Это рассуждение дилетанта. Кложа – самостоятельный язык с принципиально новыми идеями, оформленный в виде Лиспа. Его создатель мог бы выбрать сишный или питонячий синтаксис и получить какой-нибудь Котлин или Скалу со своими особенностями.

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

    seth-godin

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

    Сделал он столько всего хорошего, что другим и за несколько жизней не сделать. С такой внешностью, да.

    Следующий тезис выделю особо.

    Я слышал много раз, что у Лиспа странный синтаксис, но ни разу не слышал, что он не решил какую-то задачу

    Когда вы жаловались, пытались сделать что-то полезное? Например, распарсить XML, JSON, дернуть урл или сходить в базу. Спорю, что даже не пытались, потому что все это Лисп делает на раз.

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

    Человек привыкает ко всему. Садишься за Лисп, и непривычно. А недавно, после двух месяцев Кложи, сел за Питон и все вызовы функций напихал в скобки. Уже автомат.

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

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

  • Что почитать на выходных №4

    Поехали:

    • Starting a Node.js app with ClojureScript and Boot (английский)

      Небольшой туториал как начать проект на Ноде с Кложе-скриптом. Да, под Ноду можно спокойно писать на cljs.

    • Что значит «сделать»?

      Николай Товеровский (сотрудник Бюро Горбунова) объясняет разницу между “делать” и “сделать”. В рамочку и на стену.

  • Двенадцатая встреча

    Провели двенадцатую встречу. Двенадцатую, Карл! Целый год без пропусков, в жару и холод, в будни и на майских. 25 выступлений, 12 докладчиков. Отдельным постом я расскажу, с чего все начиналось и как вообще держится, я пока что свежие видосы.

    Антон Чикин рассказал про мердж в Гите:

    Слайды

    Артем Трубачев топил за веб-сокеты, послушал с удовольствием:

    Слайды

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

    На следующую встречу уже запланированы выступления: про Докер и No-SQL базы данных. Следите за новостями. Хотите выступить – пишите в личку. Напомню, на тему Рефакторинга мы общаемся в чате Телеграма.

  • Что почитать на выходных №3

    В этом выпуске:

  • Емакс в терминале

    Долгое время я пользовался Емаксом с графическим интерфейсом. Для Мака такой Емакс качается с сайта Emacs For Mac OS X и ставится как обычное приложение в папке Applications.

    Два месяца назад перешел на версию для терминала. Ниже короткие заметки о том, как это сделать и что изменилось.

    Установка из пакетов. Для Мака ставится из brew: brew install emacs. На момент написания статьи скачивается версия 25.1. Важно: бинарник находится по пути /usr/local/Cellar/emacs/25.1/bin/emacs! Если вы введете в терминале просто emacs, то запустится /usr/bin/emacs, у меня это какое-то старье.

    Внешний вид. Я использую стандартную цветовую схему light-blue из коробки. Включается командой (load-theme 'light-blue t). В терминальной версии цвета немного другие. Сравните графическую версию:

    gui

    и терминал:

    terminal

    Размер текста. Для комфортной работы я нашел полезным ставить шрифт покрупнее. Глаза нам даны одни на всю жизнь, так что лучше их поберечь. В графической версии высота шрифта меняется командой (set-face-attribute 'default nil :height 140) (140 – моя метрика, подобранная эмпирически). В терминале, конечно, это не прокатит. Поэтому я просто жму три раза Cmd + =. Получается как на рисунке ниже (картинка специально обрезана, чтобы вошла в колонку без масштабирования):

    font

    Курсор. Больше недели не мог настроить цвет курсора в терминале. В графической версии был красный, а в терминале серый. Сливается в голубым фоном, глазам трудно найти. Команды вроде (set-cursor-color "#ffffff") не помогают. Оказывается, в маковском терминале Iterm2 цвет курсора и текста под ним регулируется силами самого терминала. Пришлось поправить настройки:

    iterm2

    Вместе с цветом курсора (Cursor) можно включить легкое цветовое выделение текущей строки (Cursor Guide).

    Общие впечатления. В целом мне показалось, что терминальная версия работает быстрее графической. Изредка бывают артефакты при сложной прорисовке (несколько рабиений окна, например), а так все ок. Мини-буфер, попапы работают как надо.

    Напомню, мой конфиг Емакса с комментариями лежит в Гитхабе.

  • Что почитать на выходных №2

    В этом выпуске:

    • История одного тестового задания (русский) – забавный пост о том, как кандидаты справляются с практическим заданием при трудоустройстве. Каждый абзац прекрасен. С юмором, тонко и по делу.

    • Simple Made Easy (видео, слайды, английский) – ТОТ САМЫЙ доклад Рича Хики, что делит жизнь пополам. Серьезно: очень мощное выступление Рича. Без привязки к конкретному языку.

    • Культ женской глупости (русский) – Арина Холина о женщинах и интеллекте.

    Что, мало про технологии? Да забейте. Дайте мозгу отдохнуть.

  • Отказ

    Дональд Трамп отказался от президентской зарплаты в $400.000. Вместо этого он будет получать один доллар. На меня это произвело большое впечатление. Когда я упоминаю об этом, слышу гнилой базар что у Трампа денег много, и он чуть ли не был обязан так поступить.

    Те, кто так рассуждают, мещане. Давайте-ка я объясню.

    Во-первых, считать чужие деньги некрасиво. Да, Трамп богат, но мещанин всегда видит только одну сторону медали. То, что богатый человек выплачивает по 25 миллионов долларов в судах, его не интересует.

    Далее, нет установленной суммы, после которой считается, что ты получаешь “много” и можно отказываться от денег. У каждого человека эта планка своя, но в среднем стремится к бесконечности.

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

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

    Легко обещать, зная, что никогда не понесешь ответственность за сказанное.

    Вот вы зарабатываете 50 тысяч рублей, на жизнь хватает. Откажетесь ли вы от халявных 100 тысяч? Нет же. Вы скажете: будь у меня миллион, я бы не взял. А будь миллион, скажете, что все равно на квартиру не хватит, так что возьму.

    Вам вообще приходилось от чего-то отказываться? Например, от денег, на которые вы морально не претендуете. Или от вещей, которые в прекрасном состоянии, но просто вы ими не пользуетесь?

    Вот вам на размышление: под Новый Год дают премию в размере одной зарплаты. Вы знаете, что работали хреново, без конца срались в чатиках и смотрели смешные картинки. Откажетесь от денег?

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

    Сделайте что-то подобное, а потом говорите.

    Вердикт: даже очень богатый человек, отказываясь от крупной суммы денег, поступает благородно. Искать этому причину в размере доходов – мудачество.

Страница 21 из 46