Обложка канала

запуск завтра. Страница 22

15701 @ctodaily

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

  • запуск завтра

    ​​Новый раунд борьбы с комиссиями апсторов 🍿 В этот раз на ринге всеобщий любимец и пророк церкви ruby, basecamp и удаленной работы Давид Хейнемейер Ханссон, полотенце бойцу подает Павел Дуров, во втором углу тяжеловес Apple.

    Хороший источник и детали, как всегда, у macrumors. По сути обвинения DHH не отличаются от прошлогоднего сезона Spotify vs Apple. Подробные посты: предъява Spotify, ответ Apple.

    Контекст (до ❧):

    Apple и Google берут 30% комиссию от всех покупок через апсторы. Не только 30% от стоимости покупки приложений при установке, но и 30% от всех подписок и покупок внутри приложений. Это многомиллиардный рынок и есть желающие маржу Apple и Google подрезать.

    Apple, в отличие от Google, запрещает оплачивать «цифровые товары» как-либо по-другому, чем через свою платежную систему. Это значит, что билет на самолет внутри приложения оплатить банковской картой в обход Apple можно, а подписку на музыку или новый скин для игры — только через Apple, с 30% комиссией. Внутри приложений нельзя даже давать ссылки на форму оплату на сайте. Ещё Apple требует, чтобы в сервисах можно было зарегистрироваться и оплатить их через мобильные приложения, за исключением сервисов вроде Spotify и Netflix — они попадают под исключение «reader apps».

    Сложно? Да! Я сам потратил многие часы на выяснение отношений с ревьюверами Apple. О них ниже.

    Как Apple контролирует выполнение этих правил? На айфоны невозможно установить приложение в обход апстора. Получается, что пока Apple не благословит приложение — распространить его не получится. Процесс благословения называется App Review, раньше он занимал недели, теперь в среднем — день. Живой человек-сотрудник Apple открывает ваше приложение и проверяет его на соответствие правилам. Некоторые ревьюверы ведут себя как злые советские вахтеры, некоторые — как спящие охранники на проходной современного НИИ. Каждое обновление приложения проходит review заново, с новым ревьювером.



    В данном случае обиженным оказался создатель Basecamp. Он сделал новый почтовый сервис. Apple сначала пропустил приложение, но при очередном обновлении ревьювер потребовал добавить возможность оплатить сервис через инфраструктуру Apple. DHH написал возмущенный пост в твиттере: «не буду я давать эплу 30% своих денег, я лучше удавлюсь, они — современная мафия».

    Неужто он раньше не знал об этих правилах? Если промотать чуть ниже в треде, DHH очень аккуратно тегает политика, который собирает слушания в конгрессе США на тему монополии техногигантов и политика, который ведет аналогичное расследование в ЕС.

    Я уверен, что Apple не сделает ни шагу назад. Интересно, как поступит DHH? Откажутся от релиза приложения на iOS? Но ведь у них всех макбуки и айфоны. 🍿

    P.S. Почтовое приложение от создателей basecamp — это 🔥, очень жду инвайта, чтобы попробовать. Вот их лендинг и обзор на the verge.
  • запуск завтра

    ​​Запускаем второй сезон нашего подкаста! Будем говорить с разработчиками самых популярных приложений, которыми мы пользуемся каждый день. Свежие выпуски каждый четверг на всех платформах страны.

    Наш первый гость — генеральный директор sports.ru Марк Тен. Марк пришел в спорстс младшим продактом и за 6 лет вырос до CEO. Как у него это получилось? Sports.ru — одно из немногих медиа с хорошей внутренней разработкой. Как они справляются с техническим долгом, откуда у них деньги на столько программистов и что такое хороший продакт? Обо всем этом слушайте в первом эпизоде.

    Спасибо огромное команде подкаста: редакторам Юле Яковлевой и Андрею Борзенко, продюсеру Павлу Боровкову, звукорежиссерам Андрею Гранкину и Павлу Цурикову. Спасибо Алексею Зеленкому за джингл, а Лике Кремер и Кате Кронгауз за замечательную студию Либо/Либо.

    Слушайте нас везде: Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия. А теперь ещё и на ютубе!
  • запуск завтра

    Спасибо всем, кто спрашивал, когда мы возобновим подкаст. Вот короткая врезка, где я без всякого стыда рассказываю, почему мы были на таких длинных каникулах и делюсь довольно банальным, но важным для меня открытием. Она не попала в финальную версию подкаста, этакий telegram exclusive.
  • Реклама

  • запуск завтра

    ​​Давно не писал, две недели решительно не хотел ничего делать. Хочется свалить всё на пневмонию (не коронавирусную), на самом деле просто устал. Продолбал несколько лидов-клиентов. Раньше бы стыдился, но это тема для отдельного поста.

    Между тем, происходит куча всего интересного. В мире пандемия (вот классная визуализация и хорошее видео про неё), а у нас в iGooods рекорд за рекордом. Если раньше в пике было по 70 запросов в секунду, то теперь — больше 400. Каждое выступление Путина — +20% посещаемости.

    Чтобы выдерживать такие нагрузки, нужно оптимизировать код и увеличивать объем железа. Серверы масштабируются горизонтально и вертикально. Горизонтально — это когда ставишь рядом со старым сервером ещё один, такой же новый, и они делят нагрузку. Это идеальная схема, так мы сейчас регулярно добавляем серверы приложений. К сожалению, базу данных мы горизонтально масштабировать не умеем — для того, чтобы поставить в параллель два сервера БД, нужна специальная магия, запрогать которую мы не успели.

    После последнего выступления Путина мы поняли, что скоро уткнемся в гигабитную сетевую карту на сервере БД (раньше я такого не видел и да, нам нужно переписать эти долбаные запросы). Спасибо огромное селектелу — пошли навстречу и мгновенно собрали кастомный сервер с 10гигабитным интерфейсом. Вот теперь сижу жду, когда ребята потушат на пару минут сайт и переключат базу данных на новую машину. Это — вертикальное масштабирование.

    Спокойной ночи! 🌛
  • запуск завтра

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

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

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

    Для этого мы пользуемся сервисом datadog. Он дорогой, но стоит своих денег. Главная его сила — не в графиках, а в том, что кроме численных показателей он практически автоматически собирает внутреннее состояние приложения (APM, запросы к базе и вот это всё) и логи (бортовой журнал приложения). Благодаря этому, можно выделить время на графике и увидеть всю отладочную информацию из приложений только за указанный период. Или наоборот, заметить странные логи и одним нажатием посмотреть, как вели себя графики в это время. Это звучит как небольшая и очевидная функция, но во первых, это редкость, а во вторых — очень помогает. Меньше думаешь о том, как найти информацию и больше — о том, что она значит.

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

    ​​Мы в iGooods лежали почти полдня. Стыдно! Зря я угорал вчера над утконосом, что они упали. Поделюсь честно, от чего мы лежали. Это подробный постмортем аварии с техническими подробностями, мама, извини.



    Из-за коронавируса к нам начали приходить в 2-3 раза больше клиентов, чем обычно. Плюс у нас на днях запускается два новых партнерства — с Joom и с магазинами Лента. Серверы работали на 40-60 процентах емкости и мы решили «добавить железа». В 6 вечера мы налили пару новых машин в кластер приложений, в час ночи по Москве — перетащили базу на новую, ультра мощную тачку. Обе операции — необычные для iGooods, множество вещей делалось руками. Ошибка №0 — мы сделали 2 крупных изменения близко друг с другом

    В 7 утра по Москве, сервер базы данных начал плавиться от нагрузки в процессор. Это компьютер с 70 ядрами, но базе нужно было минимум 300. Запросов было вроде бы не сильно больше, чем обычно, но занимали они всё больше времени. Люди просыпались у себя дома и начинали делать заказы — сервера умирали, сайт не открывался, приложения выдавали ошибки. Самое опасное — курьеры и сборщики заказов выходили на работу и не могли работать.

    Мы, конечно, думали, что сможем быстро починить проблему. Через час стало понятно, что нужно хотя бы временное решение. Мы выключили все пользовательские интерфейсы iGooods, оставив рабочей только админку и внутренние приложения курьеров и пикеров (сборщиков заказов). Ошибка №1 — в случае аварии не нужно пытаться «сделать хорошо», нужно определить критичные сервисы и восстановить их первым делом.

    Мы решили, что проблема в новой базе данных. Мало ли, конфигурация, железо, да хоть драйверы. Попытались вернуться на старый сервер. Мы не сохранили WAL логи между переездами, так что вместо 3 минут эта операция заняла 40 минут — пришлось перегнать всю базу данных между серверами. Мы планировали откат для приложений, но не для переноса базы — он нам казался довольно безопасной операцией. Ошибка №2 — мы решили, что «уж тут-то не взорвется», на самом деле вместе с любым изменением нужно продумывать пути отката.

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

    В конце концов, Женя случайно заметили ошибку, что наше rails приложение не может записать в redis-кеш. BINGO! Вот тут всё наконец-то встало на свои места. В нашем приложении есть много страниц, которые собираются очень долго. Все они кешируются rails'ами в redis. И вот этот редис кеш у нас отвалился на запись на части серверов приложений из-за кривых настроек окружения (душераздирающие подробности приложены картинкой). Кеш протухал постепенно и с каждой потерянной записью все больше тяжелых запросов грузили Postgres. Ошибки №3, 4 и 5: настройка тачек производится руками, не кодом; логи переполнены, так что сложно заметить новую ошибку; не все важные сервисы (redis, rails cache) включены в мониторинг.

    Как вы можете видеть, всё довольно банально. Будь у нас настроена нормальная рабочая среда — не было бы такой аварии.

    Итак, чего нам не хватило и что мы приведем в порядок:
    - инфраструктура в коде (полный ansible вместо хождения руками на серверы);
    - хороший, чистый мониторинг всех ключевых метрик приложения, APM — за день до аварии мы включили Datadog, но ещё не было нормальных дэшбордов и исторических данных;
    - сообщения об ошибках (у нас bugsnag) засраны нерелевантными сообщеними — их нужно почистить.

    Мы с Федей обозначили проблемы в первые же дни, но не успели решить их — были вещи поважнее. Знал бы прикуп — жил бы в Сочи.

    Если у вас похожая ситуация — рекомендую навести порядок заранее, не ждать форс-мажора.

    Ну и делать много сложных правок вместе — чревато. Стоило разнести перенос базы и деплой новых машин на день — тогда бы мы не потратили так много времени на ложный след тормозной базы.

    Fin.
  • запуск завтра

    ​​Практически идеальный симулятор эпидемии от блоггера.

    В статье Washington Post не хватает возможности регулировать параметры модели и открытых исходных кодов.

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

    Вся статья и исходные коды доступны по свободной лицензии CC0. Интересно, кто первым переведёт эту работу на русский — медиа или энтузиасты? Если вы — русское медиа и вам нужна помощь с тем, чтобы встроить эти симуляции у себя — пишите в личку.

    Кайф².
  • запуск завтра

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

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

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

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

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

    Два классных ютуба про инфекцию:

    Для желающих математики. 3Blue1Blue объясняет экспоненциальный рост; именно он описывает нашу эпидемию. Этот автор умеет объяснить сложную математику исходя из самых основ, понятных каждому. Да, по пути придется напрячь мозги, но все супер наглядно и никаких «шаг 2 — нарисуй сову». Почему разница между коэффициентами заражения в 1.05 и 1.15 означает разницу в миллионы жизней и что на самом деле означает «всего 3 случая заражения»? Вот бы в школе и универе иметь таких учителей.

    Для всех. Джо Роган (американский, чуть постаревший и посерьезневший аналог Дудя) обстоятельно поговорил с крутым экспертом в теме эпидемий. Michael Osterholm давно предупреждал именно о том типе эпидемии, которая развивается сейчас и даже написал про это книжку (да, там есть про supply chains и про перегрузку системы здравоохранения). Он умеет объяснить сложные вещи простым языком, не теряя при этом сути. Главное, что для себя вынес я: «этот коронавирус — зима, не ураган; не ждите, что всё закончится за пару недель». Короткое, не такое душевное интервью с ним для какой-то телепередачи.
  • запуск завтра

    ​​The Washington Post опубликовал офигенный интерактивный материал о распространении инфекции. Наглядно видно, почему ограничивать передвижение между городами и странами — не особо эффективно, а сидеть по домам — круто. Симуляции случайные, и каждый раз, когда вы откроете страницу — результаты будут чуть-чуть разные, но идея остается верной. Особенно круто, что прогать такое не особо сложно — главное было придумать идею.

    Автор Harry Stevens имеет должность «Graphics reporter» в WaPo и на странице с его материалами много интересного интерактива. Он обладатель серебряной медали премии Information is beautiful за 2017 год и если вы любите инфографику — рекомендую заглянуть на страницу Showcase, там можно зависнуть надолго.

    Я обожаю наблюдать, как WaPo и NYT соревнуются в плане визуализаций и интерактива и в этом случае WaPo ведет счет. Кстати, их сайт легко гуглить на предмет людей, которые отвечают за такие штуки (graphics reporter и interactive) и если закопаться чуть поглубже в их вакансии, то видно, что инженеры у них работают для построения инфраструктуры, а конкретные истории делают журналисты, которые умеют прогать. Кайф.
  • запуск завтра

    Набрался смелости и согласился на AMA в Тиньков-Журнале. Пока вопросы в основном «как стать программистом и зарабатывать кучу денег», что неудивительно, учитывая заголовок. Задавайте свои вопросы — отвечу.



    Для тех, кто не знаком с феноменом AMA:

    Главный интернет-форум и один из самых популярных сайтов на свете — reddit.

    Один из самых популярных разделов реддита — r/IAmA. 20 миллионов подписчиков, 20 тысяч сообщений за прошлую неделю. Люди делают посты вида «меня зовут Самат Галимов, я техдир, спросите меня о чем угодно» и отвечают на вопросы в комментариях.

    Примеры: Билл Гейтс, в числе прочего, говорит о своём богатстве, Илон Маск делится, как его любимый учитель математики мотивировал класс. На вопросы отвечали 92-летний немецкий еврей служивший в вермахте, человек, отсидевший 20 лет за убийство, которого не совершал и тысячи других людей.



    Ну и раз я заговорил о реддите: в последние месяцы они активно пытаются заставить мобильных веб посетителей установить своё приложение. Началось все с назойливых и обманчивых баннеров на пол-экрана. Как вам большая кнопка «продолжить в приложении» (ведет в аппстор, конечно) и микроскопическая ссылка «открыть сайт» на мобильном сайте? Недавно тупо перестали показывать часть контента на мобилах вне приложений. Это яркий пример того, как делать не нужно. Есть даже специальный термин для такого поведения: user hostile behavior. Хорошо поднимает метрики прямо сейчас (выскребают по дну), ужасно долгосрочно.
  • запуск завтра

    ​​В телеграме для iOS можно автоматически промотать список чатов к непрочитанным чатам! Просто зажмите и держите нажатой иконку чатов в нижнем tab bar.

    В iOS Safari есть куча таких скрытых функций: долгий тап на кнопку «вкладок» вызывает меню, где можно закрыть все вкладки разом, а долгий тап на «закладки» - предложение заложить эту вкладку или все открытые вкладки. Долгий тап на кнопку «+» открытия вкладки позволяет восстановить недавно закрытые вкладки.

    Хорошо ли иметь скрытые интерфейсные решения или нет — тема бесконечного UX-холивара. Одно я знаю точно - текущее решение эпл записать все эти секретики в бесплатную электронную книгу в iBooks - стремное. Вот бы опцию «покажи мне секретики», которая бы включала «интерактивный туториал» по всем классным шорткатам. Мечты!
  • запуск завтра

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

    Последний, 15-й эпизод в этом сезоне. Уходим на месяц каникул и вернемся со вторым сезоном, ещё интереснее первого. Спасибо замечательной команде — Андрею Борзенко, Юле Яковлевой, Павлу Цурикову, Павлу Боровкову и Полине Агарковой. Вы лучшие!

    Спасибо вам большое, что слушаете! Пишите в личку, что вы думаете о подкасте — даже (особенно) если вы не довольны и хотите что-то поменять.
  • запуск завтра

    Доброе утро! Эпизод, в котором запуск — завтра. Леша Ивановский (бывший арт-директор культового медиа W-O-S) рассказывает про свой новый проект W1D1, который помогает людям быть более творческими. А ещё делится советами, как перестать тупить в телефон.

    Душевный разговор с дизайнером, который объясняет техническому директору, как сделать так, чтобы анимации в React Native не тормозили. Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия.
  • Реклама

  • запуск завтра

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

    Мы с Федей уже почти месяц вместе составляем системный ответ на этот вопрос. Для командной работы мы завели личную базу знаний (что-то вроде своей википедии) в Notion. Мы храним там общие задачи, план и знания, которые собрали в ходе работы. Если заменить информацию о конкретном клиенте подробным описанием, зачем мы делаем тот или иной шаг — может получиться книга «как руководить разработкой в продуктовой компании».

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

    Глава I, про бизнес и процессы.

    1. Чего бизнес хочет от разработки? Важно не остановиться на конкретной хотелке «напрогайте нам X», а докопаться до бизнес-гипотезы, которую хотят проверить.

    2. Как построена работа над продуктом: кто преобразует гипотезу в задачу, как ставится задача разработке, доносится ли гипотеза до программиста, интересуется ли они ею? В здоровой продуктовой команде техническая экспертиза подключается на самом раннем этапе.

    3. Что происходит после запуска фичи? Анализируется ли результат? Понимают ли программисты, как они повлияли на бизнес?

    4. Как происходит планирование и приемка работы? Смотрим на четкость и ритмичность. Четкость: плохо — «мы тут что-то не особо хорошо описанное напланировали, о том успеем или нет — не задумывались», хорошо — «в понедельник у пользователей в продакшене появится X», нужны конкретные обещания и контроль их выполнения. Ритмичность: продуктовая работа — это почти всегда постепенное улучшение и очень редко — один героический забег. Чтобы система работала годами, ей нужна цикличность, с запланированными фазами «напряжение-расслабление».

    Глава II, люди.

    5. Команда: в каком состоянии ребята, нравится ли им работа, нравятся ли коллеги, конкурентная ли компенсация? План развития ребят, 360 reviews, 1-1.

    6. Уникальность знания. Что будет, если сотрудник уволится или заболеет (bus factor)? Документация, стоимость погружения новых людей в проект.

    7. HR: достаточно ли мы рассказываем миру о том, хорошо лиу нас работать? Ведение профессионального блога, выступление на профильных конференциях.

    Глава III, технологии.

    7. Operations: отказоустойчивость, масштабируемость, мониторинг, incident management, бэкапы, учения. Автоматизация процессов в разработке: среды разработки, деплой, откат, etc..

    8. Архитектура и код: модульность, связанность, тесты. Тесты: насколько велика вероятность сломать проект? Радость разработчика: насколько комфортно ребятам работать?

    9. Информационная безопасность: DDoS, дырки в коде, операционная безопасность, социальная инженерия. Проводим ли ли пентесты, есть ли баунти-программа, как реагируем на сообщения об уязвимостях?



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

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

    P.S. У нас есть отличная вакансия для рубиста в Питере.
  • запуск завтра

    ​​Я узнал про компанию AnyLogic случайно: мой приятель Ярослав Астафьев пошел туда работать. Я спросил, как дела, он написал, что отлично и прислал ссылку на имитационную модель больницы, где можно, как в Sims, менять помещения, количество докторов, регулировать поток пациентов и другие процессы, которые там происходят. Только это не игра, все моделируется по-настоящему 🤯

    Я пошел дальше по сайту и обнаружил среди клиентов компании, о которой раньше никогда не слышал, Facebook, Google, НАТО, NASA и еще десятки самых крупных мировых компаний и организаций. Они все используют продукт AnyLogic, потому что с его помощью, кажется, можно смоделировать вообще какой угодно процесс. То есть если вам нужно представить, как работает склад, торговый центр, вокзал или аэропорт, как улучшить движение самолетов в воздухе или предсказать развитие коронавируса или вирусного ролика, вы это можете сделать, построив из готовых блоков модель и настроив необходимые параметры.

    Я позвал Ярика и его коллегу Пашу Лебедева, а потом еще поговорил с человеком, который их разработки применяет на практике, Алексеем Пашкевичем из Института развития транспортных систем. Он, например, проектировал вокзалы перед чемпионатом мира по футболу 2018 года.

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

    Слушайте везде: Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия.
  • запуск завтра

    Каким бы техдиром ты ни был, рано или поздно попросят настроить принтер, поменять картридж и сделать нормальный wifi.

    С принтером и картриджем вы разберетесь сами, а при выборе техники я рекомендую зайти на wirecutter и следовать их совету. Редакция разбирается во всех нюансах и пишет понятную инструкцию, что и почему лучше купить. На сайте есть рекомендации про всё на свете, начиная от недорогого андроид телефона и заканчивая лучшей душевой лейкой. Некоторые категории товаров специфичны для США, но рекомендации про электронику или рюкзаки отлично подходят всем. Не нужно больше играть с ползунками в яндекс.маркете или брать наобум. Почти по всем категориям у них есть «лучший выбор» и «бюджетный вариант». ⭐️

    Про вайфай: офисе-квартире следуйте совету wirecutter, а в помещении побольше присмотритесь к UniFi.