Tom Adler’s blog

рекомендую fish shell

до недавнего времени моим любимым шеллом был zsh с крутыми настройками дополнения. Однако уже несколько месяцев я использую ещё более прекрасный шелл fish. Больше всего мне в нём нравится полноценное автодополнение, потому что я им пользуюсь почти в каждой команде, но и прочие функции там прекрасны. Всё в нём как-то человечнее по сравнению с другими шеллами. Но лучше всего про это узнавать не в моём посте, а на основном сайте fish, или во введении в использование

mustache и with

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

mustache оказался удивительным. Не только благодаря претензиям на отсутствие логики в шаблонах (они заменили if и for на # и думают, что логики нет). Сильнее меня удивило, что в таком молодом синтаксисе почти всё построено на приёме, который давно считается вредным. Я имею в виду оператор with из яваскрипта

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

function sum(foo) {
    var baz = 10;
    return baz + foo.bar;
}

это можно переписать в следующем виде:

function sum(foo) {
    var baz = 10;
    with (foo) {
        return baz + bar;
    }
}

всё будет неплохо работать до тех пор, пока где-то в совершенно другом месте приложения мы не решим, что объекту foo нужно содержать и значение baz. В результате sum будет прибавлять к bar не 10, а foo.baz

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

{{#people}}
    Hello, {{title}} {{name}}
{{/people}}

как думаете, здесь title это заголовок страницы или титул человека?

, ,

dmarc, dkim, spf и linkedin

из любопытства настроил для своего почтового сервера антиспам-подписи. Собственно, DMARC и SPF «настраиваются» добавлением записей в DNS о том, какие серверы могут посылать почту от имени этого домена, и как реагировать на нарушение этих правил:

@   SPF "v=spf1 a mx -all"
_dmarc  TXT "v=DMARC1; p=reject; rua=mailto:me@arty.name"

DKIM у меня работал уже довольно давно, но с ним несколько сложнее: приходится возиться с почтовым сервером и цифровыми подписями

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

а вот другая проблема была смешнее. Видите ли, LinkedIn любит посылать свои письма от вашего имени и емейла. Естественно, сервер и подпись там совсем другие. Логично, что проверки соответствия они проваливают. Я не знаю, как отучить его от этого, поэтому приходится проявлять гибкость на своей стороне. Пока что добавил его в список разрешённых отправителей в SPF:

@   SPF "v=spf1 a mx ?include:linkedin.com -all"

а вот что делать с DKIM, не очень ясно, скорее всего придётся разбираться дальше. Или может кто из читателей подскажет?

,

код для тестировщика

недавно меня посетило очередное прозрение на тему юнит-тестов. Нет, я не открыл Америку, и для многих это наверняка очевидно, но, как и в прошлый раз, именно такую простую формулировку я ещё не встречал у проповедников

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

гибкий язык типа javascript позволяет создавать очень изолированные от внешнего мира программы, и в нём даже нет Reflection, чтобы научить их уму-разуму. Очень много нашего кода написано в такой манере, и писать под них тесты — сплошное неудовольствие. Однако если помнить о требовании «код должно быть легко тестировать», то сравнительно нудный процесс создания тестов становится намного менее пугающим

в общем, код нужно писать для компилятора, программиста и тестировщика

доступная работа в Берлине в Нокии

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

в свою очередь, хочу напомнить читателям, что переехать работать в отличный город Берлин всей семьёй на всё готовое просто: собеседование по телефону, собеседование в Берлине (билеты/гостиница оплачиваются), подача документов в посольство, два-три месяца ожидания, оплаченные переезд и перевоз вещей

если чувствуете ко мне благодарность, отправьте резюме в Нокию через меня, мне тогда дадут бонус ; )