запуск завтра
27.6K subscribers
326 photos
34 videos
3 files
1.2K links
Будни технического директора @samatg (ex-CTO Meduza, Bookmate, RAWG, Pure)

«Закрытие Parse и куда с него переехать», очередной лонгрид «как программируют в NASA» и прочие ссылки с hackernews. Ну и истории, конечно.

Чатик @ctodailychat

Рекламу не продаю
Download Telegram
Фрагмент Троицы Андрея Рублева
Каникулы скоро закончатся. Вот два приема, которые сделают видео-созвоны и вообще работу за компьютером чуть приятнее.

1. Избавьтесь от промежуточной веб-страницы при переходе по зум-ссылкам. Я для этого использую утилиту choosy. В ней можно настроить, в каком браузере будут открываться те или иные ссылки. Я добавил правило, что ссылки начинающиеся на https://zoom.us/j/ сразу открываются в зуме. Теперь ссылки на зум-созвоны из телеграма или календаря будут сразу запускать зум, без лишних кликов. То же самое можно настроить для фигмы, ноушен и других популярных веб-сервисов. Стоит 10 долларов. Есть бесплатная альтернатива, которая настраивается через js-функцию, а вот альтернатива для windows.

2. Настройте автозамену для ссылки вашего личного кабинета в зуме. В маках и айфонах эта функция называется «замена текста» и работает совершенно магически: набираете заданное вами волшебное слово, нажимаете пробел и оно заменяется на выбранный вами текст или число. У меня ещё настроены «сокращения» для номеров телефона и паспорта — это здорово экономит время и нервы. Андроид клавиатура от гугла такое тоже умеет, а виндоусу потребуется программа, например beeftext.
Супер история о том, как Амазон чуть не умер и переехал с серверов Sun на Linux. Это — история зарождения Amazon Web Services — облака, на котором сегодня работает добрая половина интернета.

Рассказывает один из непосредственных участников.

Самые впечатляющие моменты:

❧ в 2000 лопнул пузырь доткомов — технические компании обесценились в сотни раз, на фондовом рынке кончились деньги и Amazon начал жечь собственные средства — 1 миллиард долларов в год; самой крупной статьей расходов были серверы — их делал Sun, они стоили дорого;

❧ можно было перекупить серверы Sun у компаний, обанкротившихся на пузыре доткомов, но техдир Амазона пошел ва-банк — решил переехать с Sun на обычное железо Hewlett Packard на Линуксе; ядру лунукса тогда было всего 6 лет;

❧ на время переезда они остановили ВСЮ продуктовую разработку! ВСЕ занимались только переездом. В бэклоге лежали сотни функций для увеличения продаж, но все ждали, пока закончится переезд;

❧ заморозка развития сервиса привела к падению продаж → пришлось повышать цены на товары → продажи упали ещё сильнее, запустилась «спираль смерти»;

❧ у Амазона оставалось буквально несколько кварталов до смерти, когда деньги на счету кончатся, но они успели и запустили всё нормально, стоимость масштабирования инфраструктуры упала на 80%;

❧ продажи — сезонный бизнес и Безос придумал, почему бы не сдавать простаивающие серверы в низкий сезон другим компаниям? На презентации он привел аналогию с электрической сетью — в 1900 годы каждый завод строил свою собственную электростанцию, почему бы не сделать «электрическую сеть» для IT? Плюс это круто сочеталось с его идеей разделить команды внутри компании, чтобы команды могли развиваться самостоятельно — каждая команда стала независимым API.

Ну а дальше вы знаете. Сегодня Амазон — это не только интернет-магазин, но и одна из крупнейших IT компаний планеты.

https://twitter.com/DanRose999/status/1347677573900242944
Завёл канал про психотерапию: буду делиться чему научился, опытом и историями; цитировать классиков и бессовестно пересказывать остальных. Короткие посты раз в день. Подписывайтесь @psythings 👯‍♂️
Кстати, встроенные отложенные сообщения в телеграме стал круче, чем то, что есть в @controllerbot.

И ими можно пользоваться не только для каналов!

Просто напишите сообщение как обычно и зажмите кнопку «отправить» — появится попап с предложением отправить сообщение позже. А ещё можно посмотреть и отредактировать все отложенные сообщения нажав на «часики» в поле редактирования. 🚀
Это — важный пост про права в интернете. И повод достойный: президента США забанили Твиттер и Фейсбук.

🍆 События: Дональд Трамп на днях сказал толпе на митинге «идите на Капитолий», толпа пошла и вломилась в парламент, где депутаты как раз считали голоса президентских выборов, на которых Трамп проиграл (у них хитрая система, и это важный процессуальный шаг).

Дальше Трамп выпустил заявление, что «уважаемые погромщики, мы вас очень любим (you are very special, sic), но идите уже домой». И ещё добавил «выборы у нас украли. PS на инаугурации не буду».

Твиттер и Фейсбук психанули и забанили Трампа навечно, а у Трампа, на минуточку был один из самых популярных аккаунтов на платформе и за него проголосовала почти половина страны. Объяснение дали такое, что мол «не буду на инаугурации» — значит «можете устроить там небольшой теракт» и вообще, «нарушает правила платформы». Логика конечно так себе, правила платформы он нарушал 5 лет подряд и у всех есть важное мнение, кто в Америке не прав, но нас интересует другое.

👆 Важно другое:
Твиттер и Фейсбук в последние годы являются де-факто «публичным пространством» (они себя так и называли, town hall, буквально городская ратуша), но при этом управляются частными лицами. Фейсбуку, например, даже на акционеров пофигу, там такая акционерная структура, что все решения принимает Цукерберг.

Весь западный мир построен на концепции Due Process. Это значит, что есть законы, по которым существует общество и есть публичные механизмы, как эти законы исполняются. Проще говоря, правила игры известны заранее. Это — супер мощная идея и я не хочу жить в мире, который построен по другим принципам (хотя, по принципу любви наверное хочу, но это уже совсем другой разговор).

Подробнее про Due Process рекомендую почитать у основателя Cloudflare Мэтью Принца, он юрист по образованию и мало кто разбирается в интернете лучше него: раз, два, три.

В случае фейсбука, твиттера, apple, google и других популярных онлайн платформ — никакого Due Process нет и никогда не было. Есть некоторые неизвестные нам люди, которые принимают решения по неизвестным нам правилам, что нам можно на этих цифровых платформах делать, а что нет. 99% времени все довольны, но законы нужны как раз для тех случаев, когда стороны не могут договориться по-хорошему, это, надеюсь, очевидно всем. У всех платформ есть длинные «правила поведения», но это всё филькина грамота, решения кого забанить, а кого нет принимаются совсем не по этим бумажкам. (Кек, очень похоже на российскую правоохранительную систему в области политических дел.)

Что делать?

1️⃣ Одна сторона говорит: интернет-платформы — частные компании, не нравится что делает её владелец — иди на другой сайт, устанавливай другое приложение, покупай другие телефоны и пользуйся ими. Мы ведь не можем заставить технологические компании оказывать услуги всем подряд? Обычно так говорят люди, которым нравится кого прямо сейчас прессуют техногиганты. Прямо сейчас — это демократы в США.

2️⃣ Вторая сторона возражает: современный мир такой, что бан в крупных соцсетях и техноплатформах — это как если бы мы отключали своим конкурентам воду, канализацию и электричество! (В штатах это запрещено). Прямо сейчас эту позицию занимают сторонники Трампа.

Оба довода — очень сильные. Как их поженить — я не знаю. Я вижу, что сейчас почти никто из политиков не признает логику и ту часть правды, которую говорит противник. Это очень печально, потому что наша цивилизация построена на возможности взрослого диалога и компромиссов. Именно благодаря умению найти общее и договориться мы сделали антибиотики, (почти) победили голод (когда вы в последний раз работали для того, чтобы не умереть с голоду?), получили возможность списываться и созваниваться с близкими на других континентах. Будет жалко всё это потерять.
Cloudflare готовится перевернуть рынок хостинга веб-приложений. Длинный пост, но технологии на самом деле поразительные.

Исторически, Cloudflare — крупный и агрессивный игрок на рынке CDN, то есть они умеют с минимальной задержкой и максимальной скоростью отдавать статический контент: картинки или страницы, которые одинаковые для всех пользователей. Они забирают их с ваших серверов, копируют (кешируют) на сотни своих серверов и отдают пользователю. Прикол в том, что у Cloudflare есть свои серверы в 200 главных точках обмена трафиком, 99% пользователей интернета живут ближе, чем в сотне километров от сервера Cloudflare. Это называется edge-network, пограничная сеть, в смысле та, которая граничит с пользователями. Небольшое расстояние и оптимизированные серверы означают, что статический контент будет грузиться мгновенно.

Проблема в том, что большинство страниц — динамические. Например, гугл-документ или мою ленту фейсбука кешировать на edge смысла нет — никому кроме меня она не нужна, да и мне интересна только самая последняя версия документа, и я его только что отредактировал. Исторически это означает, что нам нужно вести все эти вычисления новых страниц где-то на центральном сервере. У крупных компаний вроде гугла или фейсбука обычно есть несколько крупных серверных ферм на каждом континенте, поближе к пользователям, так что пользователи из России кучкуются на европейских серверах, а американцы — на штатовских. Это всё требует довольно сложную инфраструктуру, маленьким компаниям недоступную. Облака Амазона и другие конкуренты пытаются решить эту проблему, но без поллитра во всех их рычажках не разберешься.

Кажется, у Cloudflare получилось придумать элегантное, красивое решение для динамических страниц, которое работает прямо на edge-серверах! Встречайте Cloudflare Workers и Durable Objects.

Cloudflare Workers — облачные функции, в Амазоне они называются лямбды (lambda@edge). То есть вы пишете программу, которая обрабатывает запросы пользователей, загружаете её в облако и она запускается по необходимости на серверах облака, прозрачно, незаметно для вас и для пользователя. Придет один пользователь — запустится одна копия, придет тысяча — запустится тысяча копий. Обычно есть время на так называемый cold start, то есть после некоторого ожидания облачная функция тушится и нужно время, чтобы она проснулась и начала отвечать на запросы. Тут этой задержки нет. Обычно вам нужно выбрать регион работы функции (помните про близость к пользователю?), тут выбирать не нужно, код запустится из самого ближнего к пользователю edge (!) сервера. Обычно эта штука стоит недешево, здесь она примерно в 3-10 раз дешевле, чем у конкурентов. Весь этот банкет за счет того, что наш код работает не контейнерах, а v8-изолятах, то есть частично — на движке гугл-хрома! (тут рассказано, как их выбрали). Но это всё закуска, кайф — дальше.

У облачных функций есть слабое место — координация пользователей. Например, мы хотим сделать копию сервиса Гугл-документов или сервис чатов — то есть несколько людей подключаются к одной программе, могут в неё писать и читать общие данные. Решений два — либо запускаем программу по-старинке, один экземпляр на сервере и храним данные в памяти (быстро!), либо запускаем в функциях, но тогда нужна будет очень быстрая общая база данных и то скорость будет ниже, потому что функциям нужно будет ходить в центральную базу данных.

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

Отдельно подчеркну достойную документацию и хороший инструментарий разработчика.

Перечисленное выше — базовые технологии, на которых можно строить впечатляющие бизнес-решения.
Вот, например, сам Cloudflare предлагает ускорить Wordpress-сайты в 3,5 раза. Просто подключаешь плагин и сайт начинает грузиться в разы быстрее, а это, между прочим, самый популярный движок для сайтов в мире и такое ускорение напрямую влияет на бизнес.

Или вот чуваки приняли 5 миллионов евро пожертвований за 2 часа, написав смешной объем кода и не упали! Вот инженер из Vox Media запустил React прямо на edge-серверах!

В интересное время живем, товарищи!

N.B. Федя добавляет, что красота красотой, но начинать лучше с классических фреймворков и 5-долларового сервера в DigitalOcean, а как только пойдет трафик и станет понятно, что код приносит деньги — вот тогда уже думать об облаках. Аминь.
Похвастаюсь классным клиентом.

Сервис upmarket размещает товары производителей на интернет-рынках вроде озона и вайлдберрис. Ребята делают полный цикл, от написания карточек товаров и работы с отзывами до логистики.

Звучит довольно просто, но оборот у парней больше полумиллиарда рублей в год.

Нас позвали по двум причинам: 1) придумать, как автоматизировать те вещи, которые сложно поручить машине из-за слабого API торговых площадок и как сделать из «самодельных скриптов» надежную и масштабируемую систему; 2) вторая причина даже интереснее — мы соберем команду разработки, которая будет развивать IT в бизнесе после нашего ухода.

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

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

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

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

Обращайтесь @samatg, мы берем ещё клиентов.
Хороший канал про аналитику, ту, которая с числами и базами данных, от чувака в теме. И название подходящее — @leftjoin. Особенно хорошо, что много репостов — можно полистать вверх и обнаружить все важные каналы про аналитику.
Очередная страшно красивая нейросеть от OpenAI.

Вы пишете текст, она генерирует картинку. Вот, например, «стулья в форме авокадо».

По ссылке куча других примеров.

Страшно.

https://openai.com/blog/dall-e/
Новый эпизод подкаста: про разработку в Убере. Андрей Неверов был техдиром стартапа грузоперевозок Trucker Path, а теперь работает инженерным менеджером в Убере в Дании.

Андрей руководит командами, ответственными за CI/CD: системы автоматизации установки серверного софта. Его инструментами пользуются больше двух тысяч программистов, а количество конечных пользователей идёт на сотни миллионов. Пока вы читаете этот текст и слушаете эпизод, в мире будут в пути 400 тысяч водителей такси и курьеров, управляемые убером. Вот такой масштаб ответственности.

Поговорили об устройстве команд и межкомандном взаимодействии, как тушат пожары (incident management) и как продвигаются по карьерной лестнице.

Слушайте и подписывайтесь: Apple, Google, ютуб, Castbox, Spotify, Яндекс, Overcast и веб-версия.
Фото с прекрасной IT-конференции Ulcamp, на которой мы познакомились с Андреем в 2017 году.

Горячо рекомендую формат, закончится коронавирус и обязательно ещё поеду.
Часто в результатах гугл-поиска первую строчку занимает пинтерест. Это такой сервис, где удобно собирать идеи нарядов (не только, но это, кажется, лучшее применение).

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

Вот, например, бывший глава маркетингового отдела Uber Кевин Фриш рассказывает, как случайно обнаружил, что из 150 миллионов долларов рекламного бюджета (performance marketing) 100 миллионов уводили мошенники. Источник в твиттере и подкаст.

Началось всё с того, что социальные активисты задолбали основателя убера Трависа Каланика твитами «вот вы говорите, что против Breitbart, а всё размещаете у них рекламу». Каланик: wtf, чувак, ты ведь говорил что всё под контролем! Фриш начинает разбираться и находит посредников, которые не отключили рекламу по просьбе и ставит их на паузу. Речь о 15 миллионах долларов рекламы, 10% всего рекламного бюджета. Готовится к обвалу показателей установок, но не происходит вообще ничего.

Начинает копать: запрашивает логи и видит в них супер странные вещи, вроде того, что человек кликает по рекламе и через 2 секунды (!) логинится в убер — так не бывает. Оказывается, это мошенники, которые обманывают рекламные сети с помощью зараженных вирусами Android телефонов и других техник. На такие «установки» приходилось 2/3 бюджета «performance marketing» – 100 миллионов долларов.

Продолжает копать и из оставшихся 50 срезает ещё 20 не особо эффективных, в результате получается, что можно было достичь того же результата за пятую часть цены. Такая вот история. А мы программы оптимизируем.
Очередная статья вида «делайте простые, скучные, рабочие штуки», а не «сложные, интересные и умные».

Интересный пример с моторами рыбацких лодок SABB: они работают на любом топливе и в них нечему ломаться (YouTube), потому что раньше для рыбаков надежность лодочного мотора была вопросом жизни и смерти.
Как не уронить свой сервис под нагрузкой, на примере Signal.

Люди массово переходят из вацапа в Signal. Серверы Signal не выдержали и совсем лежали почти 14 часов, а испытывали серьезные трудности больше суток. Не лучшее время, чтобы падать :( Официальный твиттер сигнала при этом хранил молчание, будто это не модный стартап, а какая-то древняя корпорация. Жаль. Надеюсь, позже они опубликуют подробный разбор, что случилось.

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

В одном проекте именно так мы и сделали. Всё было хорошо, пока серверу не стало плохо на пару минут. Если обычно на сервер приходили 100 запросов в минуту (полтора запроса в секунду), то за три минуты скопились 300 запросов и теперь, стоило серверу очухаться, как ему насыпали все 300 запросов в одну секунду. То есть для сервера это выглядело как рост нагрузки в 200 раз и он опять ложился под нагрузкой. Очень неприятная ситуация. Мы сами себя задидосили, своими же собственными мобильными приложениями. 🙈

Есть две компоненты решения этой проблемы:

🛑 Первая: сервер должен уметь ответить «довольно!», и клиенты должны перестать повторять запрос, если получили такой ответ. Интересно, что именно этой функции в Android-клиенте Signal не было и они добавили её во время аварии.

Вторая, более сложная и интересная, но тоже классическая: exponential backoff (экспоненциальная задержка). Идея очень простая: если сервер не ответил в первый раз — ждем 1 секунду и повторяем запрос. Во второй раз — ждем 2 секунды, в третий — 4, в четвертый — 8. То есть с каждой неуспешной попыткой, даем серверу больше времени прийти в себя. У Signal эта функция реализована, но во время аварии они добавили jitter — небольшую случайную задержку, чтобы клиенты не набегали на серверу толпой, через одинаковые интервалы времени после его падения, а нагрузка была более плавной. Обычно, в этом же коде реализуют ещё паттерн circuit breaker, когда после определённого числа ошибок «выбивает пробки» и запросы прекращаются совсем.

Используйте оба приема и будьте здоровы!

💭 Есть твит и телеграм-пост в популярном канале, в которых утверждается, что причина падения сигнала — в само-дидосе (мол, анекдот). Это маловероятно. Во первых, exponential Backoff в сигнал внедрили больше 2 лет назад и он здорово распределяет нагрузку; во вторых, изменения коснулись только Android клиента. Не верьте советским газетам, читайте первоисточники.
🎙 Образовательный проект «Кружок» ездит по маленьким российским городам и деревням и знакомит подростков с веб-разработкой, музыкой, астрономией и журналистикой. За 3 года «Кружок» был в Калининградской области, Дагестане, Республике Марий Эл и еще в 16 разных поездках.

Это эпизод о людях, которые делают «Кружок» и о тех, кто в нем участвует. Вы услышите голоса и звуки из Тарусы, дагестанского села Хрюг и марийской деревни Сардаял; ссылки ведут на сайты, которые сделали подростки. А ещё, я чуть не расплакался во время этого интервью.

Один из лучших наших эпизодов, блестящая работа нашего редактора Юли Яковлевой и звукорежиссера Нины Мамотиной, слушайте на всех платформах: Apple, Google, ютуб, Castbox, Spotify, Яндекс, Overcast и веб-версия.

А ещё кружок снимает офигенные короткие фильмы о своих поездках, их можно посмотреть на ютубе. Поддержать проект можно вот тут.
Программист с 45 летним стажем делится советами перед пенсией.

Я перевел их все на русский, а потом стер, потому что на русском это всё звучит совсем как нравоучение.

Отмечу только, что чисто технический совет у него всего один: ПИШИТЕ АВТОТЕСТЫ, А НЕ ТО ЗАЕБЕТЕСЬ. Федя тоже за них топит, хотя ему ещё и не 65.

Все остальные советы — не про технологии, а про команды и отношения. И крутятся вокруг «делай как проще, чтобы другим было понятнее» и «заботься о коллегах и команде, плохие команды хороший продукт не сделают». 👴
Чувствую, что молчание в эти дни сродни высказыванию, так что напишу очевидное.

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

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

Технически — да. Можно буквально водить пальцем по экрану смартфона и так называемая «читалка» будет зачитывать кнопку или текст, на котором стоит ваш палец. Такие программы встроены в современные операционные системы. Я лично знаком со слепым сисадмином, который успешно управляет linux-серверами.

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

Этот пост для того, чтобы побольше дизайнеров интерфейсов и программистов успели записаться на курс по доступности от Леры Курмак. С 6 февраля по 6 марта, 5 недель по выходным онлайн, 22тр. Лера шарит в теме и такая 🔥, что скучно точно не будет. Это — одна из супер редких реклам на этом канале, но она бесплатная и стоит того.