будни

Составляем карту технологических зависимостей Медузы.

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

Посередине слева — полный список «пользовательских view»: то, откуда можно читать Медузу. Web, iOS, Android, Instant Articles, etc. 20 пунктов.

Ряд сверху — список зависимостей для каждого View. Зависимости есть от внутренних сервисов и от внешних.

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

Где лучше составлять такие схемы? Я пока остановился на Scapple. Кстати, эта же компания уже много лет производит очень мощную программу для писателей Scrivener — ведь не всем писателям нравится WordStar.

Извините, что не хайрез. Смысл, надеюсь, понятен.

Отлаживаем отправку статистики из мобильных приложений.

Делаем на сервере tail -f /sv/log/nginx/access.log | grep 'stat/put' | grep 92. и видим пустоту, хотя если оставить только первый grep — то всё нормально. Это мы пытаемся в реальном времени вывести на экран все обращения к определенным ссылкам на сервере с определенных IP-адресов.

Оказывается, дело в буферизации и добавление параметра --line-buffered к grep'у решает проблему.

Век живи — век учись.

Купил вчера Android телефон в редакцию, для тестирования секретного проекта Медузы (самая большая наша разработка so far).

Motorola Moto G4, отличный Android телефон с 2 симками, поддержкой Android 8 и стоит всего 150 евро.

Так вот, утром он обновил свой Android 6 и навремя затих. В обед обновился до Android 7, а теперь вот уже пару часов подряд скачивает и устанавливает обновления для Android 7, перезагружался раза 3.

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

Если ищете Android телефон для того, чтобы познакомиться с этой платформой, то Moto G4 — идеальный выбор.

Вчера мне пришло удивительное письмо:

Мой друг в составе команды исследователей шельфа северного ледовитого океана сейчас «болтается» в **, чуть западнее острова N на корабле Z. В море им быть ещё минимум два месяца. Говорит, без новостей с большей земли пухнет голова. У них есть интернет, через спутниковый телефон, но канал очень узкий. Если это не сложно для вашего технического отдела, не могли бы организовать отправку дайжеста новостей на электронную почту текстом в архиве на электронную почту xxx@xxx.ru размером письма не более 100 кБ?

Письма Вечерней Медузы за последнюю неделю весят в среднем 50-70KB. Львиная доля объема — код, что позволяет выглядеть письмам одинаково во всех почтовых клиентах; это почище кроссбраузерной верстки.

Давайте попробуем убрать всю красоту и оставим только текст и минимальные выделения. Текст ниже — для компьютерщиков. TL;DR: «вот так, с помощью нехитрых приспособлений...»

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

Что в самой программе? Зная ID почтовой рассылки мы можем через API мейлчимпа получить тело письма. Но оно не особо красивое и вычищать его не хочется. Как насчет API Медузы? И вправду, в plaintext версии письма последняя ссылка — всегда на это же письмо на сайте. Например, вот вчерашнее письмо https://meduza.io/brief/2017/09/05/vechernyaya-meduza.

Добавляем `api/v3/` в адрес новости после имени сервера и получаем адрес API https://meduza.io/api/v3/brief/2017/09/05/vechernyaya-meduza. Тут уж есть поля .root.mail.subject и body, которые содержат тему и тело письма, без лишних стилей. Отлично, вычленяем нужные поля с помощью утилиты парсинга json jq и схлопываем их вместе в готовый email.html файл утилитой cat.

Как отправить получившееся письмо? У сервиса отправки писем Amazon Simple Email Service есть отличный SMTP-интерфейс и я как раз недавно нашел программу sendemail (не путать с sendmail, которая позволяет отправлять письма через SMTP из командой строки.

Теперь исследователь севера каждый вечер будет получать «высушенную» версию Вечерней Медузы весом всего 15КБ.

А вы можете подписаться на красивую, сверстанную с любовью Вечерку в почте или в телеграм-канале @meduzaevening и узнавать новостную повестку дня за пару минут.

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

При подготовке первой, вместо классического инструмента поиска связей ЕГРЮЛ использовалась база данных RIPE. Вы знали, что она хранит историю правок 10 лет, но пользоваться ею можно только через линуксовый whois?

Для сегодняшей статьи про стихи Бастрыкина мы лопатили version log википедиии и пробивали IP адреса.

Синергия 🙊

Про совпадения.

Прямо сейчас Серебреников в наручниках в зале суда в Москве. Медуза ведет онлайн.

За 5 минут до начала трансляции что-то происходит со связностью между Lattelecom и Amazon (пару минут всё отлично, пару минут пакеты не ходят совсем). Редакция замечает это, в первую очередь, по недоступности Slackа.

Мы переключаем uplink на резервный LTE-роутер от LMT (латышский аналог МТС). Всё хорошо, пока редакторы не пытаются зайти на HTTP-сайты (смотрю нехорошим взглядом на tass.ru и interfax.ru). Происходит мистический 302 редирект на 192.168.8.2, который не грузится. Времени на поиск причины нет, решаем заплаткой с Chrome Data Saver (де-факто, VPN).

Оказалось, что LTE-роутер хочет обновить прошивку, делает DPI HTTP-сессий (но не HTTPS) и заменяет ответ сервера на 302 редирект. Из-за того, что таких запросов много — его веб-сервер не выдержал и ничего не отдавал. Одна из редакторов оказалась достаточно терпеливой, чтобы дождаться загрузку админки, я кликнул там «не сообщать об этом больше» и проблема решилась окончательно.

Прямо сейчас редакция работает через LTE-точку и это довольно магически. Насколько же это крутая технология, что офис из более чем 20 человек может спокойно пользоваться uplink обычного бытового LTE-модема.

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

Раньше сайт Медузы грузил шрифты так, что текст прыгал на доли секунд при загрузке страницы. Это было нежелательным побочным эффектом оптимизации сайта для мобильных читателей, которые попали на Медузу впервые. «Прыжки» подбешивали внимательную аудиторию в десктопе.

Мы переработали схему. Теперь, при первом открытии сайта показываются системные шрифты, а при всех следующих заходах — наши. Без каких-либо дерганий.

Оптимизация веба для скорости — бесконечно большая и интересная тема. Мы пока выбираем 80% процентов профита, достигаемые первыми 20% труда.

Помните, телеграм объявлял конкурс на лучший Instant View Templates для тысячи сайтов? Они всё никак не предоставят результаты и не запушат эти шаблоны в продакшен.

Пока что, единственный способ показать свои страницы в Instant View — запостить их по хитрой ссылке t.me/iv?url=...&rhash=.... Именно так мы и хотим сделать для запуска красивой «Вечерней Медузы » в телеграме. На конкурс прислали почти 150 шаблонов, казалось бы — бери и пользуйся хоть сейчас. Проблема в том, что rhash шаблона знает только его создатель.

Уважаемые авторы, подавшие свои шаблоны на конкурс — скиньте мне свой исходный код, пожалуйста. Приславший лучший шаблон до завтрашнего вечера (18:00 по Москве) получит неизменную бутылку рижского бальзама и мега-набор стикеров (физических, не телеграмных).

Проверить свой шаблон можно на тестовом материале: https://meduza.io/brief/2017/07/17/testovaya-vechernyaya-meduza-so-vsemi-vozmozhnymi-vyrazitelnymi-sredstvami

Утренняя кулстори. Мой рижский провайдер берет внешний интернет у Lattelecom. Это местный аналог Ростелекома, крупнейший в Латвии, остатки советского наследия.

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

После нашей просьбы Латтелеком перестроили маршруты для указанных адресов, обойдя злобных буратин, но сколько таких адресов я не заметил?

Это очень похоже на блокировку YouTube в 2008 году, когда Пакистан объявил, что ютуб нынче хостится в Исламабаде и большая часть сетевого оборудования им поверила.

Сложновато с цифровым суверенитетом в системе, придуманной для максимальной отказоустойчивости (в случае советской ядерной атаки, в том числе).