<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Tproger Changelog</title>
    <description>Ежемесячный открытый отчёт о том, что мы делаем для вас</description>
    <link>https://tproger.ru/tag/tproger-changelog</link>
    <atom:link href="https://tproger.ru/tag/tproger-changelog/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 04 Oct 2026 05:23:47 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Tproger Changelog</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Не можете найти классную идею для статьи? Используйте наш навигатор тем</title>
      <link>https://tproger.ru/articles/kakuju-temu-vybrat-navigator-tem-dlja-avtorov</link>
      <comments>https://tproger.ru/articles/kakuju-temu-vybrat-navigator-tem-dlja-avtorov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakuju-temu-vybrat-navigator-tem-dlja-avtorov</guid>
      <description><![CDATA[<p>В навигаторе нет готовых идей, зато есть вопросы для выбора направления и примеры постов других авторов, а текст отправляется через редактор.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakuju-temu-vybrat-navigator-tem-dlja-avtorov">Не можете найти классную идею для статьи? Используйте наш навигатор тем</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 21 May 2021 11:50:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы вдруг пропустили: на Tproger теперь <a href="https://tproger.ru/articles/reshili-neprostuju-zadachu-ili-sozdajote-interesnyj-proekt-rasskazhite-ob-jetom-na-tproger/">можно рассказывать о своих проектах, делиться опытом, обсуждать проблемы</a> — в общем, делать всё, что приносит пользу вам и IT-сообществу. Для этого есть редактор, через который легко отправить свою статью на модерацию.</p><p>Но даже самый удобный редактор не решает другую важную проблему — как придумать хорошую идею для поста?</p><p>Чтобы сделать жизнь авторов чуть проще, мы собрали навигатор тем. В нём нет готовых идей. Зато есть вопросы, которые помогают выбрать направление. Просто отвечайте на них и смотрите на примеры постов от других авторов. А когда придумаете тему, переходите в редактор и начинайте писать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: чем закончился #багфиксарь</title>
      <link>https://tproger.ru/articles/tproger-changelog-chem-zakonchilsja-bagfiksar</link>
      <comments>https://tproger.ru/articles/tproger-changelog-chem-zakonchilsja-bagfiksar?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Игорь Нашхоев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-chem-zakonchilsja-bagfiksar</guid>
      <description><![CDATA[<p>Календарь на 2021 год с программистскими названиями месяцев, оформление сообществ в соцсетях и другие изменения проекта за январь.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-chem-zakonchilsja-bagfiksar">Tproger Changelog: чем закончился #багфиксарь</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 09 Feb 2021 14:18:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>Приветствуем вас в рубрике <a href="https://tproger.ru/tag/tproger-changelog/">Tproger Changelog</a>, где мы рассказываем о том, что нового сделали для вас в проекте.</p><p>Что такое #багфиксарь? Наше название января. Мы выпустили календарь на 2021, где каждый месяц получил программистское название. Не забудьте скачать электронную версию, она уже ждёт вас в <a href="https://tproger.ru/personal/">личном кабинете</a>. Кстати, с календарём и связана первая новость.</p><h3>Календарь</h3><p>Теперь мы каждый месяц оформляем сообщества в соцсетях в соответствии с названием месяца. #багфиксарь уже закончился, на очереди — #авраль! Кроме размещения обложек планируем проводить активности и конкурсы. <a href="https://media.tproger.ru/uploads/2021/02/Vk_header-autoconverted-1.jpeg"></a></p><h3>Итоги конкурса в боте</h3><p>Для тех, кто пропустил: у нас была новогодняя игра-квест в ботах. О том, что это за игра, как в неё играть и как её делали, подробно рассказал наш разработчик ботов Никита в <a href="https://tproger.ru/articles/razbiraemsja-v-prohozhdenii-kvesta-sapjor-ot-tproger/">отдельной статье</a>. А за прохождение квеста мы <a href="https://vk.com/wall-30666517_1714238">разыграли призы</a>.</p><h3>Каналы</h3><p>Ещё наши новые каналы в телеге активно растут. <a href="https://t.me/zen_of_python">Канал по пайтону</a> уже пробил 10 000 подписчиков, <a href="https://t.me/prog_point">по основам программирования</a> — 9 000, а <a href="https://t.me/mobi_dev">по мобильной разработке</a> — 5 000.</p><h3>Мемы и развлечения</h3><p>В этом месяце починили работу мемов. Теперь они отправляются стабильнее и автоматически дополняются по ходу появления новых постов в нашем VK-паблике /dev/null и Телеграм-канале IT Юмор — раньше такого не было. А ещё появилась рассылка лучшего мема дня.</p><p>Также было решено вернуть старые фичи, такие как фильмы и отмазки, вместе с тестами, играми, мемами и задачками их перенесли в новый <a href="https://t.me/tproger_official_bot?start=entertainments">раздел развлечений</a> в боте.</p><p>В меню игр вернули «Баговый ним», теперь у нас 3 игры: это Быки и коровы, Баговый ним и (пока еще доступный для прохождения и уже упоминавшийся выше) квест Сапёр.</p><h3>Оптимизация сайта</h3><p>Интересный результат дала работа над оптимизацией сайта. Хоть Google и считает все наши страницы «быстрыми», но в выдаче занижает. Скорее всего, это из-за проблем с метрикой FCP.</p><p>First Contentful Paint (или FCP) — это метрика, показывающая время, когда пользователь видит отрисовку на странице чего-то полезного. Это может быть что угодно: текст, иконки, канва. Если FCP занимает много времени, то проблемы могут быть связаны как с соединением, так и с тяжестью контента. И похоже, что проблемы эти у нас на Safari в iOS.</p><h3>Из рубрики факапов</h3><p>А ещё у нас есть излюбленная рубрика <a href="https://tproger.ru/articles/tproger-changelog-06-20/">«Истории факапов»</a>. И уже не впервые проблемы вызывает резервное копирование. На этот раз бэкапы скушали всё место на диске машинки сокращателя.</p><p>Внимательные читатели могли заметить, что для красоты (и не только) внешние ссылки мы сокращаем через домен <b>tprg.ru</b>. И машинка с этим сокращателем (не надо так делать) работает на том же диске, на который сохраняются бэкапы. Разумеется, мы удаляли старые бэкапы, а на диске хранились только 100 последних. Когда сокращённых ссылок было мало, последние бэкапы занимали не так много места. Но чем больше ссылок, тем больше вес последнего бэкапа.</p><p>И вот, когда места не осталось, машинка сокращателя не смогла работать дальше. Вот почему не стоит хранить скрипт и бэкапы в одном месте.</p><h3>Дизайн ивентов</h3><p>Обновили дизайн мероприятий (раздел <a href="https://tproger.ru/events/">События и курсы</a>). Теперь внешний вид страницы ивента такой же, как у страниц с <a href="https://tproger.ru/jobs/?">вакансиями</a>.</p><figure><img src="https://media.tproger.ru/uploads/2021/02/Screenshot-2021-02-04-at-15.52.01-2.png" alt="" /></figure><p>Также рады представить вам новый поиск с популярными темами для удобства:</p><figure><img src="https://media.tproger.ru/uploads/2021/02/Snimok-jekrana-2021-02-09-v-16.49.38.png" alt="" /></figure><h3>Дайджест IT-событий за #авраль</h3><p>Попробовали новый формат: <a href="https://tproger.ru/digest/dajdzhest-iventov-sfery-it-za-fevral-2021/">ивентайджест</a>. Как можно догадаться, это компиляция слов «ивент» и «дайджест» (спасибо, Кэп). Идея в том, чтобы собрать в одну подборку ивенты из раздела <a href="https://tproger.ru/events/">«События и курсы»</a>, на которые на наш взгляд, стоит обратить отдельное внимание. И написать про них статью на сайт, а не делать как обычно подборки в соцсетях.</p><h3>Мастер вакансий</h3><p>Мы наконец-то, а именно: спустя полтора года разговоров и периодической разработки, выложили наш <a href="https://tproger.ru/jobs/add/">мастер вакансий</a> в публичный доступ.</p><figure><img src="https://media.tproger.ru/uploads/2021/02/Screenshot-2021-02-09-at-17.13.41.png" alt="" /></figure><p>Раньше форма заполнения данных для размещения вакансии лежала на отдельном лендинге и представляла собой форму с Tilda, а теперь идёт переход сразу на наш сайт, и мы можем его контролировать. Любой желающий разместить вакансию может попасть на него по двум первым кнопкам <a href="https://tproger.ru/ad/jobs/#offer">«Разместить»</a>.</p><p>Следующим шагом хотим сделать автоматическую публикацию вакансий без модерации.</p><p>Поделитесь в комментариях, чего вы ожидаете от нашего раздела вакансий?</p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: что изменилось за 2020 год?</title>
      <link>https://tproger.ru/articles/tproger-changelog-chto-izmenilos-za-2020-god</link>
      <comments>https://tproger.ru/articles/tproger-changelog-chto-izmenilos-za-2020-god?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-chto-izmenilos-za-2020-god</guid>
      <description><![CDATA[<p>Tproger подводит итоги 2020 года: новая миссия и работа по OKR, рост команды до 30 человек, собственный трекер событий, обновления сайта и спецпроекты.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-chto-izmenilos-za-2020-god">Tproger Changelog: что изменилось за 2020 год?</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 31 Dec 2020 14:09:43 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этом году свинка с обложки стала неофициальным маскотом Tproger. Она живёт в офисе и морально поддерживает всю команду. Именно её вы могли видеть на обложках некоторых наших вакансий.</p><p>Что ещё у нас произошло за этот год?</p><h2>Поставили цель и идём к ней</h2><p>В этом году мы утвердили миссию нашего проекта: cоздать удобную медиа-среду, которая является стандартом для решения любой айтишной задачи. Звучит возможно, немного формально, но каждое слово в ней значимо.</p><p>Но на этом дело не кончилось: зная цель, мы продумали шаги, которые приведут нас к ней. Помогла нам в этом система OKR — Objectives and Key Results. Мы стали работать как более зрелая и осознанная команда — напрямую этого не видно, но это влияет вообще на всё, что мы делаем. А если хотите почитать подробности — пишите об этом в комментах.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/okr-preza-2.png" alt="" /><figcaption>Зарисовка из презы про целеполагание: так наш OKR-коуч видит совместную работу по этой системе</figcaption></figure><h2>Расширили команду</h2><p>Мы поставили цели и поняли, что их невозможно выполнить той небольшой командой, которая была в начале года. Вы могли видеть наши вакансии: мы активно расширялись. Сейчас нас около 30 человек.</p><p>Результаты налицо: редакция возродила новостное направление, количество материалов на сайте выросло в несколько раз и появилось 3 новых канала в Telegram: <a href="https://t.me/prog_point">Точка входа в программирование</a>, <a href="https://t.me/mobi_dev">Мобильная разработка</a> и <a href="https://t.me/zen_of_python">Zen of Python</a>. Разработка ускорилась, мы смогли улучшить сайт и сделать качественные спецпроекты — об этом ниже.</p><h2>Начали делиться новостями проекта</h2><p>Мы считаем, что важно делиться своими успехами и неудачами — и внутри команды, и с сообществом. Поэтому в этом году мы запустили внутренние новости проекта, которые выходят каждую неделю, и <a href="https://tproger.ru/tag/tproger-changelog/">Tproger Changelog</a>, который выходит раз в месяц. Для нас важно быть более открытыми и честными — и мы планируем работать над этим в 2021 году.</p><p>Ещё мы начали активнее общаться с читателями, чтобы лучше понимать реакции на свой продукт и наконец построить сообщество.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Snimok-jekrana-2020-12-31-v-14.09.58.png" alt="" /></figure><h2>Создали свой трекер событий</h2><p>Чтобы принимать решения, нужно их чем-то обосновывать, а для этого нужны данные. Данные стараются собирать все, но вот делиться ими мало кто хочет, и даже Google Аналитика и Яндекс.Метрика, которые у нас подключены, не всегда дают адекватное понимание происходящего.</p><p>В этом году мы с нуля разработали и внедрили трекер событий и <a href="https://tproger.ru/articles/tproger-tracker-yandex-cloud/">рассказали об этом опыте</a>.</p><p>Кроме того, мы допилили сервис, в котором для каждой опубликованной на нашем сайте статьи автоматически собирается статистика по связанным постам в соцсетях и каналах. Эта штука для внутреннего пользования, но если вам интересно, как она реализована, — пишите в комментах, постараемся рассказать.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/image-6.png" alt="" /><figcaption>Немного внутренностей трекера: анализ метрики CLS, слева график по минутам, справа по часам, снизу видна часть топа паттернов URL</figcaption></figure><h2>Работали над сайтом снаружи и внутри</h2><p>Чтобы сайтом было приятно пользоваться и его любили поисковики, нужны определённые технические показатели. Мы писали об этом в статьях <a href="https://tproger.ru/articles/seo-for-developer/">«SEO для программиста»</a> и <a href="https://tproger.ru/explain/cls-problem-solving/">«Почему у вас проблемы от высокого CLS и как их исправить»</a>.</p><p>Мы плотно работали над техническими показателями сайта, благодаря чему Google считает наш сайт быстрым. Конечно, проблемы встречаются до сих пор — поэтому, если вы обнаружили баг, сообщите, пожалуйста. Это можно сделать в <a href="https://tproger.ru/personal/">Личном кабинете</a> -&gt; Сообщить об ошибке.</p><p>В этом году сайт стал более интерактивным. Появились закладки и лайки, свои комментарии (раньше был тяжеловесный виджет VK), возможность написать пост в визивиг-редакторе и прислать его на модерацию. Переходим от медиа с односторонним вещанием к социальной платформе.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Snimok-jekrana-2020-12-25-v-12.37.36.png" alt="" /><figcaption>Скрин из Web Archive: таким был наш сайт в середине 2019 года. Белым, плиточным и с засечками</figcaption></figure><p>Мы протестировали две механики — систему геймификации и платные подписки. Про запуск подписок писали в <a href="https://tproger.ru/articles/tproger-changelog-06-20/">июньском ченжлоге</a> (спойлер: они не сработали).</p><p>Кроме того, у нас появился UX-дизайнер, благодаря которому мы потихоньку делаем сайт красивее и удобнее.</p><p>А ещё мы выпилили jQuery — потому что с ним было медленно и неудобно.</p><h2>Сделали крутые спецпроекты</h2><p>Тема на стыке контента, разработки и маркетинга: у нас наконец дошли руки до интерактивного контента, которые вносит разнообразие в привычные материалы. За этот год мы сделали:</p><ul><li><a href="https://tproger.ru/quiz/python-quest-kaspersky/">тест-квест</a>,</li><li><a href="https://tproger.ru/quiz/show-your-frontend-level/">тест в виде капчи</a>,</li><li><a href="https://tproger.ru/articles/tekstovaja-transljacija-konferencii-yatalks-2020/">текстовую трансляцию</a>,</li><li>игру в боте.</li></ul><p>Здесь должен быть мем «это немного, но это честная работа». Действительно, кажется, что для целого года спецпроектов маловато. Но нам нужно было решить много вопросов с организацией, зонами ответственности, сбором статистики и тестированием. Как итог: нам понравилось и мы хотим делать больше интересных форматов и материалов в 2021.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Snimok-jekrana-2020-12-31-v-14.55.34.png" alt="" /><figcaption>Одно из заданий в виде прохождения капчи из партнёрского теста с «Лабораторией Касперского»</figcaption></figure><h2>Прокачали бота</h2><p>У нас есть бот — <a href="https://vk.me/tproger">ВКонтакте</a> и в <a href="https://t.me/tproger_official_bot">Телеграме</a>. В этом году там появились тематические рассылки — можно подписаться на интересные темы из списка и получать уведомления о новых статьях. При этом можно настроить время, когда бот будет присылать уведомления — хоть раз в неделю, хоть каждый день.</p><p>Но на этом мы не остановились — в боте появилось две игры с мультиплеером. В одной из них прямо сейчас идёт конкурс с крутыми призами — вы ещё успеваете поучаствовать.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Snimok-jekrana-2020-12-31-v-15.01.19.png" alt="" /><figcaption>Скрин начала квеста «Сапёр» — в нём вам нужно решать головоломки</figcaption></figure><h2>С Новым годом!</h2>]]></content:encoded>
    </item>
    <item>
      <title>Хэллоуинский спецвыпуск Tproger Changelog: какие факапы мы словили за этот месяц</title>
      <link>https://tproger.ru/articles/tproger-changelog-10-20</link>
      <comments>https://tproger.ru/articles/tproger-changelog-10-20?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Ланский]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-10-20</guid>
      <description><![CDATA[<p>Алексей вспоминает падение сайта в ночь на 2 октября, а Антон — взлом сервера reports и необходимость оптимизации ClickHouse. Итоги проблемного месяца.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-10-20">Хэллоуинский спецвыпуск Tproger Changelog: какие факапы мы словили за этот месяц</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 30 Oct 2020 14:49:50 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этом выпуске ченжлога собрали для вас проблемы и факапы, с которыми столкнулись за последнее время.</p><p>Алексей рассказывает, из-за чего в начале месяца упал наш сайт и как пришлось его воскрешать, а Антон делится взломом нашего сервера reports и необходимостью оптимизации ClickHouse.</p><p>В ночь с четверга на пятницу, 2 октября, у нас падал сайт. Примерно с трёх ночи до десяти утра многие страницы не открывались вообще.</p><p>Причина оказалась простой: мы с Никитой тестировали новые рассылки в боте. Для этого нужно подключаться к продакшен базе и получать свежие посты. Бот не закрывал MySQL-соединение, и мы быстро достигли лимита в 255 открытых дескрипторов (ограничение managed MySQL от DO). Я закрыл подключение для бота, и минут через 15 база данных разрешила к себе подключаться.</p><figure><img src="https://media.tproger.ru/uploads/2020/10/Untitled.png" alt="" /></figure><p>Выводы — настраивайте больше алертов на неочевидные метрики. Количество подключений не приводит к перегрузке по памяти или ЦП, и мы не смогли отловить состояние текущим мониторингом достаточно заранее для принятия превентивных действий.</p><p>Вот такая вот история восстания сайта из своей могилы.</p><figure><img src="https://media.tproger.ru/uploads/2020/10/tp-rise-autoconverted.jpeg" alt="" /></figure><p>По рабочей необходимости мне потребовалось открыть порт для доступа к Docker API на одной из наших виртуальных машинок, развернутых в Digital Ocean. Открыл порт, воспользовался по назначению, а затем заметил, что ресурсы машины закончились. Нечто забило всю память, а потребление CPU выросло до 100%:</p><figure><img src="https://media.tproger.ru/uploads/2020/10/Untitled-1.png" alt="" /></figure><p>Я не очень опытный пользователь Docker, поэтому сначала решил, что это реально я создал такую нагрузку, и потому запросил дополнительный бюджет на эту машинку, чтобы поднять её ресурсы.</p><p>А ещё на сервере иногда запускался подозрительный контейнер с ubuntu. Я тоже подумал на себя и просто удалял его. А он опять появлялся. Ну а я опять удалял. А потом я пошёл спать.</p><p>На следующий день от Digital Ocean пришло письмо: мол, ребят, у вас на сервере запущено что-то, что сканирует порты других хостов. Если это не вы, сделайте что-нибудь.</p><figure><img src="https://media.tproger.ru/uploads/2020/10/Untitled-2.png" alt="" /></figure><p>И тут у меня сошлась картинка: открыл порт, на машинке появился незваный гость. А дело всё в том, что на машинках Digital Ocean по умолчанию нет никакого фаерволла: как только открываешь любой порт, он становится доступен всем в интернете. Это спорное решение, но упрощает задачу новичкам и злоумышленникам. Вот мне в открытый порт Docker и заслали какую-то ubuntu.</p><p>Я быстренько закрыл порты, удалил вредоносный контейнер в последний раз и всё стало хорошо.</p><p>Вот так мы не дали злоумышленнику погубить один из наших серверов.</p><figure><img src="https://media.tproger.ru/uploads/2020/10/Funny_wallpapers__040811_-autoconverted-1.jpeg" alt="" /></figure><p>Правда ненадолго: на следующий день вредоносная активность возобновилась, причем подозрительные процессы через ps aux не обнаруживались. Сервис пришлось перенести на другой сервер, а машинку загасить. Подскажите: как бы вы искали вредоносный процесс на своей виртуалке? Ресурсы были забиты под 100%, но в списке запущенных процессов ни один не вызвал подозрений. Сторонних контейнеров в Docker тоже запущено не было.</p><p>А вот еще история. Пишет мне наш шеф-редактор: зашла, мол, в DataLens (<a href="https://tproger.ru/articles/tproger-tracker-yandex-cloud/">почитайте про наш трекер событий</a>), собрала пару графиков, и всё сломалось. Смотрю, а ClickHouse, из которого графики читают данные, прилёг под нагрузкой. Кто виноват? Конечно же юзер! Поругался, урезал доступ к данным. Короче, молодец: если продуктом никто не пользуется — значит его никто не сломает.</p><p>Но как-то не по себе: от чего бы ClickHouse падать из-за такого простого запроса? Оказалось, почти вся оперативная память занята. Ну я и решил, всё верно: трекер работает уже несколько месяцев, мы накопили данных — значит, подросли. Значит, пора ресурсы увеличить. Согласовал небольшое увеличение бюджета. Уже знакомый способ решения проблемы, не правда ли? ?</p><p>И как-то обидно мне так стало за ClickHouse: что ж он всю оперативку занимает, даже когда запросы не выполняет? Причём потребление памяти постоянно росло:</p><figure><img src="https://media.tproger.ru/uploads/2020/10/2020-10-14__09.39.17.png" alt="" /></figure><p>Были у меня под подозрением словари, которые реплицируют данные с продакшн базы Tproger. В них хранятся соответствия идентификаторов постов и их заголовков, рубрик, тегов и т.п. Такое решение было реализовано из-за невозможности создать базу данных с движком MySQL в managed версии ClickHouse.</p><p>И хранятся словари как раз в памяти. Причём статистика в системной таблице system.dictionaries по ним показывает, мол, занимают в памяти мегабайт 10 от силы (а по графикам занято уже больше 7 гигов). Короче, не поверил, поменял схему обращения к проду Tproger, и вот как изменилось потребление памяти:</p><figure><img src="https://media.tproger.ru/uploads/2020/10/2020-10-14__09.43.19.png" alt="" /></figure><p>Оказалось, что словари действительно занимали почти всю свободную память. Теперь же данные с прода мы в ClickHouse не храним, а читаем налету. А получилось сделать так благодаря тому, что я случайно наткнулся на <a href="https://clickhouse.tech/docs/ru/sql-reference/table-functions/mysql/">нужный раздел</a> в документации ClickHouse ?</p><p>С точки зрения производительности и влияния на пользователя, негативного эффекта нет: наша продовая БД работает довольно шустро, а чтения со стороны ClickHouse из неё довольно редкие, ведь пользователей у DataLens пока немного.</p><p>В результате удалось вернуть ClickHouse в самую дешёвую конфигурацию и продолжить им комфортно пользоваться.</p><p>А как вы строите BI решения для небольших данных?</p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: добрые комментарии, красивые картинки и путь избавления от jQuery</title>
      <link>https://tproger.ru/articles/tproger-changelog-09-20</link>
      <comments>https://tproger.ru/articles/tproger-changelog-09-20?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Саша Ушатинская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-09-20</guid>
      <description><![CDATA[<p>Алексей рассказывает о падении сайта и увеличении шрифтов, Игорь — об изменениях в работе с изображениями, Аня — о сложностях работы в медиа.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-09-20">Tproger Changelog: добрые комментарии, красивые картинки и путь избавления от jQuery</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 Oct 2020 08:55:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этом ченжлоге Алексей рассказывает про падение сайта при тестировании новой функциональности и про увеличение шрифтов, Игорь делится приятным изменением в работе с изображениями, а Аня рассуждает про сложности работы в медиа и благодарит вас за положительные комментарии.</p><p>В ночь с четверга на пятницу, 2 октября, у нас падал сайт. Примерно с трёх ночи до десяти утра многие страницы не открывались вообще.</p><p>Причина оказалась простой: мы тестировали новые рассылки в боте. Для этого нужно подключаться к продакшен базе и получать свежие посты. Бот не закрывал MySQL-соединение и мы быстро достигли лимита в 255 открытых дескрипторов (ограничение managed MySQL от DO). Я закрыл подключение для бота и минут через 15 база данных разрешила к себе подключаться.</p><figure><img src="https://media.tproger.ru/uploads/2020/10/Untitled-19.png" alt="" /></figure><p>Выводы — настраивайте больше алертов на неочевидные метрики. Количество подключений не приводит к перегрузке по памяти или ЦП, и мы не смогли отловить состояние текущим мониторингом для принятия превентивных действий. Ну и пишите качественный код, не забывайте закрывать открытые соединения с чем бы то ни было.</p><p>Из хорошего: мы увеличили базовый шрифт на сайте с 16 до 17 пикселей, читать статьи стало приятнее. Это потянуло за собой увеличение и других шрифтов, а также корректировки по отступам и в целом вёрстке. Изменение лучше заметно на мобильных:</p><figure><img src="https://media.tproger.ru/uploads/2020/10/Untitled-17.png" alt="" /></figure><p>Ещё мы наконец победили проблемы с CLS и даже написали про это отдельную статью, которая может помочь и вам:</p><p>Я сделал для нашего сайта несколько приятных обновлений. Одно из них вы можете увидеть, если кликните по любому изображению прямо в этой статье.</p><p>В ходе нашей борьбы с jQuery пришла очередь избавиться от библиотеки просмотра изображений Lightbox, но увеличение картинки при клике мы терять не хотели. И среди нескольких кандидатов на замену мы выбрали библиотеку <a href="https://photoswipe.com/">Photoswipe</a>.</p><p>Что получили в итоге:</p><ol><li>Самобытную библиотеку просмотра изображений, с возможностью настройки под наши требования.</li><li>Увеличение картинок происходит с красивой анимацией и поддержкой адаптивности.</li><li>В скорости загрузки особых изменений нет, но это минус одна зависимость от jQuery, а значит на дальней дистанции мы ожидаем получить прирост скорости.</li><li>В скором времени на основе этой библиотеки появятся галереи.</li></ol><p>Работать в медиа не всегда просто. Часто тебе нужно искать баланс между тем, что ты сам хочешь транслировать, что хотят читать люди, на что у тебя есть ресурсы. Усложняет дело то, что редко получается получить прямой фидбек. Ты можешь посмотреть на техническую информацию: сколько просмотров, как долго люди остаются на странице, как много людей уходит, не дочитав материал. Ты смотришь на эти цифры и пытаешься понять: нравится или не нравится, что именно нравится, что стоит повторить, а чего избегать.</p><p>Иногда мы всё-таки получаем живой фидбек — через комментарии. Но чаще всего он бывает негативным, потому что люди склонны скорее писать об ошибках, чем хвалить, потому что если всё ок — чего писать-то? Тем удивительнее для меня было то, что когда мы запустили свои комментарии на сайте и начали появляться первые комментарии, многие из них были положительными! Люди благодарили за материалы, писали, что им понравилось, что материал пригодился. В это было так сложно поверить, что я даже заподозрила в этом атаку каких-то дружелюбных ботов ?</p><p>В этих итогах месяца я бы хотела сказать спасибо всем, кто писал нам комментарии, всем, кто читает наши статьи и участвует в жизни нашего сайта. Спасибо всем, кто высказывает своё мнение: и отрицательное — потому что оно показывает, в чём мы можем стать лучше, — и положительное, потому что оно даёт нам силы становиться лучше.</p><p>Доброго нам всем месяца и новых успехов.</p><p><a href="https://media.tproger.ru/uploads/2020/10/chenzhlog_nju.jpg"></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: своя система комментариев, новые вакансии и удаление любви</title>
      <link>https://tproger.ru/articles/tproger-changelog-08-20</link>
      <comments>https://tproger.ru/articles/tproger-changelog-08-20?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Саша Ушатинская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-08-20</guid>
      <description><![CDATA[<p>Виджет ВКонтакте заменили собственной системой комментариев, а после релиза обнаружили баг отображения и начали переносить фронтенд на Svelte.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-08-20">Tproger Changelog: своя система комментариев, новые вакансии и удаление любви</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[ВКонтакте]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 11 Sep 2020 07:32:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет, хорошие новости: мы заменили виджет ВКонтакте на свою систему комментариев, теперь можно удобно комментить из любой страны. Для общения нужно авторизоваться в <a href="https://tproger.ru/personal/">личном кабинете</a>.</p><figure><img src="https://media.tproger.ru/uploads/2020/09/Snimok-jekrana-2020-09-11-v-9.52.00.png" alt="" /></figure><p>Из комментариев к статье <a href="https://tproger.ru/articles/highload-mongo-node-lxd/#comments">«Почему не hadoop: создаём свое решение на node + mongo + lxd»</a></p><p>Немного о том, как внедряли систему.</p><ul><li>Форкнули основной <a href="https://gitlab.com/commento/commento">GitLab репозиторий Commento</a>, научились его запускать и убрали оттуда лишний код.</li><li>Переписали frontend часть под нас. Основная проблема в том, что там нет React/Angular/Svelte/Vue, а есть только старый JS — без ECMAScript, без тестов, в замыканиях — и всё это собирается Gulp.</li><li>Настроили <a href="https://bitbucket.org/product/features/pipelines">BitBucket Pipelines</a> и <a href="https://www.digitalocean.com/docs/spaces/">Digital Ocean Spaces</a> для запуска тестов/публикации/хранения Docker-контейнера. На production вертится только контейнер.</li><li>Для авторизации переписали Single-Sign On, который теперь работает напрямую через Svelte + Node.js.</li><li>Для задачи отображения счётчика комментариев дописали proxy через Node.js.</li></ul><p>Только после релиза обнаружили серьёзный баг с отрисовкой: вы могли заметить, что некоторые комментарии пропадают, хотя отправка прошла успешно. Кстати, не волнуйтесь, они все хранятся в базе, так что технически они не потерялись — просто их не видно ?  Исправление отрисовки заставило переносить модули frontend части на Svelte + Typescript и покрывать unit-тестами.</p><p>Чтобы помочь нам быстрее отловить критичные баги, присылайте баг-репорты через вкладку «Сообщение об ошибке» в личном кабинете.</p><p>Из приятного: совокупный сдвиг контента (метрика CLS из <a href="https://web.dev/vitals/">Web Vitals</a>) на десктопе после релиза комментов упал практически до нуля. Медленная загрузка виджетов VK сильно смещала макет и портила нам всю статистику. Целевые показатели по этой метрике — меньше 0,1.</p><p>В этом месяце мы переработали идею подачи информации в наших вакансиях (кто бы мог подумать, что на эту идею натолкнёт работа над докладом для HR-ивента). Опросили больше полутора тысяч айтишников, собрали пирамиду Маслоу российского разработчика и скорректировали форму для составления вакансии <a href="https://tproger.ru/ad/jobs/?utm_referrer=tproger-changelog">на нашем лендинге</a>. Благодаря этим действиям вакансии теперь будут подаваться по-другому, с акцентом на интересах соискателей.</p><p>А форма составления для работодателя утратила часть строк для заполнения и взамен получила пункты для выбора. В планах — пересобрать наши вакансии так, чтобы ребята из IT-сферы точно знали, что у нас они найдут то, что хотят.</p><figure><img src="https://media.tproger.ru/uploads/2020/09/Dizai-n-bez-nazvanija-60-1.png" alt="" /></figure><p>Отрывки из новой формы, которую заполняет работодатель при размещении вакансии</p><p>Поговорим о факапах.</p><p>В этом месяце мы выпустили <a href="https://tproger.ru/articles/ways-to-say-i-love/">статью «Как признаться в любви айтишнику?»</a>. Я как обычно чекала комменты под анонсами статей и наткнулась на негодующие комментарии VK. То, что я видела как шуточную статью, остальным людям показалось реальным туториалом, а потому вызвало недоумение и негатив.</p><p>У статьи было сразу несколько проблем:</p><ul><li>Стереотипы. Много стереотипов — они внезапно (ладно, не очень внезапно) не нравятся людям.</li><li>Не та ЦА. Большая часть нашей аудитории — мужского пола, и им статья «Как признаться в любви айтишнику?» была несколько не в тему.</li><li>Нечёткое позиционирование. Шутка была недостаточно явной, а для серьёзной статьи она была слишком стереотипной.</li><li>Несоответствие темы статьи и издания. Мы — издание об IT, а не об отношениях.</li></ul><p>Как мы решили вопрос: скрыли статью с главной, оставили доступ только по ссылке и заменили текст статьи на краткое описание ситуации. Сделали мы это, потому что статья начала расходиться и по интернету и нам не хотелось просто молча её удалять, ничего не объясняя.</p><p>Что я хочу сказать по итогу этой ситуации: ошибаться — нормально. Все это делают. И очень важно — что в работе, что в жизни — научиться делать выводы, исправлять ошибки и идти дальше, а не впадать в ступор от чувства вины и собственной ничтожности. Я стараюсь помнить об этом сама и транслировать это в редакцию: если вы ошиблись, лучше думать «что я могу сделать, чтобы минимизировать последствия?», а не «как я мог так сглупить?».</p>]]></content:encoded>
    </item>
    <item>
      <title>Припозднившийся Tproger Changelog за июль 2020</title>
      <link>https://tproger.ru/articles/tproger-changelog-07-2020</link>
      <comments>https://tproger.ru/articles/tproger-changelog-07-2020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-07-2020</guid>
      <description><![CDATA[<p>Редакция закрыла вакансию двумя сотрудниками и рассказала, как её мем о запуске Spotify попал в подборку Meduza под чужим авторством.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-07-2020">Припозднившийся Tproger Changelog за июль 2020</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Мемы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 15 Aug 2020 17:25:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>Уже прошла половина августа, но пропускать ченжлог не хотим.</p><p>В выпуске «за июль» рассказываем:</p><ul><li>как наняли сотрудников редакции с помощью мемов;</li><li>много про разработку с примерами;</li><li>про аналитическую систему (бесполезная статистика в комплекте).</li></ul><p>Итак, поехали!</p><p>В этом месяце мы искали нового пишущего редактора в команду и сделали для этого вот такие крутые анонсы:</p><figure><img src="https://media.tproger.ru/uploads/2020/08/anonsi.jpg" alt="" /></figure><p>Вакансию закрыли, два новых сотрудника уже работают с нами.</p><p>9 июля в нашем новостном канале мы <a href="https://t.me/your_tech/5679">публиковали</a> новость о том, что 15 числа планируется запуск Spotify в России. И Паша (не я, у нас их несколько в команде) сделал для этого замечательный мем.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/Untitled.png" alt="" /></figure><p>15 числа, когда Spotify успешно запустился в России, наш мем был честно спизпозаимствован твиттером Not Spotify Russia. Естественно, о запуске написала и Meduza, собрав по такому поводу подборку мемов, в которую попал и наш мем, но под авторством Not Spotify Russia.</p><p>Какие выводы можно сделать из такой истории? Наверное, что наши мемы уже достаточно хороши, чтобы попадать в подборки крутых изданий, но мы прилагаем недостаточно усилий для того, чтобы крутые издания замечали именно нас.</p><h3>Производительность и работа с ошибками</h3><p>В начале июля большая часть наших страниц на десктопе перестала считаться быстрыми в поиске Google. Проблема была в обновлённом сайдбаре. Я заменил старый код на современный, что дало нам ускорение работы сайта в целом и более читаемый текст в сайдбаре при прокрутке страницы. Однако браузер посчитал, что наш сайдбар постоянно меняет своё положение на экране так, как пользователь не ожидает. У всех страниц в 5–10 раз вырос показатель <a href="https://web.dev/cls/">Cumulative Layout Shift</a> и мы приблизительно за неделю вылетели из «зелёной зоны» определения быстрых страниц гуглом.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/Untitled-1.png" alt="" /></figure><p>Отчёт Core <a href="https://web.dev/vitals/">Web Vitals</a> в Google Search Console</p><p>Пришлось вернуть старый код, который в целом работает хуже, но не вызывает таких недоразумений при подсчёте важных метрик производительности. Буду искать другие решения для реализации sticky-сайдбара (обидно, что простое css-свойство position: sticky не решает нашу проблему, потому что у нас сайдбар не влезает на один экран). Может быть, вы подскажете хорошие решения?</p><p>В <a href="https://tproger.ru/articles/tproger-changelog-06-20/">прошлом выпуске</a> я рассказывал о внедрении Sentry и упомянул, что мы получаем больше 500 сообщений об ошибках в минуту. Мы поработали над багами и ворнингами:</p><figure><img src="https://media.tproger.ru/uploads/2020/08/Untitled-2.png" alt="" /></figure><p>Количество событий с сообщениями об ошибках согласно <a href="https://sentry.io/">Sentry</a>, на графике общее число событий т.е. повторение одной и той же ошибки у двух юзеров учитывается дважды. Шкалы нет, сравните просто процентное снижение</p><p>А ещё мы добавили отслеживание превышения основных показателей скорости загрузки страницы, что позволяет отслеживать конкретные инциденты по производительности. За основные метрики взяли всё те же <a href="https://web.dev/vitals/">Core Web Vitals</a>: LCP, FID, CLS.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/Untitled-3.png" alt="" /></figure><p>Дашборд в нашей системе аналитики для выявления проблемных страниц по производительности</p><figure><img src="https://media.tproger.ru/uploads/2020/08/Untitled-4.png" alt="" /></figure><p>Пример события превышения порога по сдвигу контента в Sentry с дополнительными данными для повторения и расследования причин</p><h3>Улучшения по работе с SQL</h3><p>Ещё в этом месяце мы поработали с нашей БД для предупреждения возможных проблем в будущем и увеличения прозрачности. Избавились от нескольких плохо написанных плагинов WordPress (иногда для замены нужно написать всего пару строк кода), исправили ошибки в своих плагинах.</p><p>Вот, ловите пример. У нас в коде есть вот такая строчка:</p><p>Итоговый SQL-запрос выглядит, например, так:</p><p>Если проанализировать его через explain, то видно, что он не использует индекс и всегда проходит по всем полям. А всё потому что поле datetime — строка. А в запросе — число.</p><p>Если поменять на такой запрос:</p><p>То запрос вместо анализа 13262 строк сразу возвращает одну строчку и не проверяет остальные. Потому что есть индекс и он может сразу сказать где искать значение. В целом исходный HTTP-запрос получил ускорение примерно в 1000 раз благодаря улучшению SQL-кода на бэкенде.</p><h3>Ужасный баг на iOS</h3><p>Не без помощи одного своего хорошего друга я исправил скролинг на iOS-девайсах. Этот баг изрядно потрепал мне нервы: иногда сайт прокручивался пальцем по экрану телефона, а иногда — нет. Потом через 3 секунды снова всё работало. И опять нет. И это ещё зависело от направления прокрутки! Ох, прям физически было больно.</p><p>Оказалось, что панелька со списком тегов, которую можно вызвать тыкнув на «Все темы» в главном меню, прячется за счёт z-index: -9999. Она как бы всегда была с нами, просто её не было видно. iOS иногда применял прокрутку к этой панельке, а иногда к контенту сайта, который сверху. Почему это так избирательно работало я так и не узнал, но скрыл через display: none этот div пока он не нужен. Теперь всё работает.</p><h3>Мы купили Slack</h3><p>Не всю компанию, конечно, а только платный тариф для команды. На тарифном плане Standard нам доступен неограниченный архив сообщений, по 10 ГБ места на каждого юзера для хранения файлов, безлимитные интеграции и ещё <a href="https://tprogerteam.slack.com/benefits/standard">куча всего</a>.</p><p>Мы давно пользуемся этим инструментом и постоянно ограничивали себя из-за недоступности старых сообщений. Теперь можно смело возвращаться в Slack из Telegram-каналов и изолировать рабочие вопросы в отдельном пространстве.</p><p>А вы в команде используете платную версию Slack? Какой-то другой инструмент? Поделитесь в комментариях, нам интересен ваш опыт.</p><p>Я написал <a href="https://tproger.ru/articles/tproger-tracker-yandex-cloud/">статью про переезд в Яндекс.Облако</a>. А коллеги выпустили <a href="https://vk.com/wall-30666517_1683270">классный анонс</a>, благодаря которому наши подписчики узнали, что мы используем в Tproger:</p><figure><img src="https://media.tproger.ru/uploads/2020/08/Untitled-5.png" alt="" /></figure><p>После успешного переезда мы отключили старое решение — Rockstat. Он был с нами около года. Его полностью заменил новый трекер. Press F.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/2020-08-03__22.41.16.png" alt="" /></figure><p>Интересная (нет) статистика: в день в нашем новом трекере копится 330 тысяч событий. Абсолютные числа воспринимаются плохо, но сравнить сейчас особо не с чем. Хотя вот, например: у человека в среднем 150–200 тысяч волос. В два раза меньше, чем мы событий в день трекаем.</p><p>Короче говоря, в среднем четыре события в секунду. Ворона делает пять взмахов крыльями в секунду. Увидите летящую ворону — вспомните, что почти на каждый взмах ее крыла мы трекаем одно событие. Узнали? Согласны? Задумайтесь.</p><p>Суммарно за полтора месяца работы трекера мы накопили 9 гигабайт данных. Это как 31 минута видео в Full HD. Шестая часть хронометража «Мстители: Финал».</p><p>Не-не, обычно я серьезными вещами занимаюсь. И вам советую ?</p><p>Например, я сделал полезный инструмент, который сравнивает показатели в счетчике просмотров на нашем сайте и в аналитическом трекере. Если расхождения ≥15%, в Sentry отправляется исключение:</p><figure><img src="https://media.tproger.ru/uploads/2020/08/2020-08-03__22.35.22.png" alt="" /></figure><p>Просмотры — это базовая метрика. Число, которое отображается рядом с «глазиком» под заголовком статьи (в том числе этой), должно отражать реальную картину по запросам на загрузку страниц. Инструмент на базе Sentry позволит нам оперативно отреагировать, если счетчик просмотров сломается.</p><h3>Новая пятничная рубрика</h3><h3>Три избранные статьи за июль</h3>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: как работать, если сам себе всё ломаешь?</title>
      <link>https://tproger.ru/articles/tproger-changelog-06-20</link>
      <comments>https://tproger.ru/articles/tproger-changelog-06-20?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Саша Ушатинская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-06-20</guid>
      <description><![CDATA[<p>Тёмная сторона работы редакции: какие факапы случаются в процессе и как при этом находить хоть немного времени на собственное развитие.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-06-20">Tproger Changelog: как работать, если сам себе всё ломаешь?</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 06 Jul 2020 07:35:15 GMT</pubDate>
      <content:encoded><![CDATA[<p>Приглашаем вас на тёмную сторону нашего издания. В этом выпуске мы решили поделиться тем, как факапим в процессе работы и пытаемся найти при этом хоть немного времени на развитие ?</p><p>Будет интересно послушать и ваши истории в комментах: как прошёл месяц? Какие ошибки вы осознали и как с ними справлялись? Расскажите, не стесняйтесь, тут все свои.</p><p>Наш список факапов можно начать с того, что сам этот выпуск должен был выйти раньше. Я стараюсь собирать и выпускать статьи Tproger Changelog сразу, как закончился очередной месяц, чтобы подвести итоги и побежать дальше. В этот раз подумала, что как обычно быстро сверстаю материал, а в итоге работы оказалось на несколько часов, я неустанно прокрастинировала, и эти часы размазались по нескольким дням. Решением проблемы выбрала отказаться от полноценного отдыха в воскресенье и посвятить время статье. Дурацкое решение, если применять его на постоянной основе, но разово вроде бы сработало, и вот перед вами новый ченжлог.</p><p><a href="https://tproger.ru/tag/tproger-changelog/">Все выпуски ченжлога тут, на странице тега</a></p><h3>Мы запустили платные подписки</h3><figure><img src="https://media.tproger.ru/uploads/2020/07/Untitled-11.png" alt="" /></figure><p>…и они не заработали. Один подписчик заплатил нам в первый же день после запуска и сразу же написал, что реклама всё равно остаётся на сайте, даже если поставить все галки. Мы нашли ошибку не сразу, даже успели вернуть деньги от безнадёжности. Потом нашли ещё баги после анонсирования фичи. При этом сама система классная — реклама вырезается так, как будто её и не было никогда на сайте.</p><p>За пару недель продвижения подписок и сбора фидбека оказалось, что никто не понимает, зачем платить деньги «за то, что можно получить бесплатно» (имеется в виду AdBlock). У нас в принципе не очень принято платить за продукты интеллектуальной деятельности. Я не виню пользователей — они искренне не понимают, как устроен бизнес и какой ущерб они наносят индустрии тем, что блокируют рекламу или устанавливают пиратскую версию Windows.</p><p>Осталось воспринять это как точку роста и доработать продукт так, чтобы и для нас, и для подписчиков польза была одинаково понятна.</p><h3>Наши серверы для разработки</h3><p>…были доступны в интернете через адреса cdn, хотя доступ должен был быть закрыт через Cloudflare Access. Дело в том, что cdn у нас — это просто зеркало сайта, все запросы доходят до сервера, но кэшируются на больший срок и обрабатываются особым образом, если это картинки. Т.е. можно было вбить в браузер адрес devcdn.tproger.ru и зайти на сайт, как будто это dev.tproger.ru. А это потенциально много возможностей для атак — на серверах разработки никто не думает о безопасности. Этот баг нам прислал наш знакомый исследователь, который ранее сообщал о множестве проблем на tproger.ru.</p><h3>Деплой на прод</h3><p>…происходил на каждый коммит, даже если он не отправлен в мастер. Bitbucket поменяли интерфейс, а мы не поменяли скрипт. В итоге сервер был постоянно занят пересборкой, даже если это не было нужно. При этом хук держал соединение, пока сборка не завершится, и мы теряли php-fpm воркеры, которые должны заниматься обработкой запросов от пользователей. Сейчас всё хорошо, предупреждений от мониторинга стало меньше.</p><h3>Просмотры постов</h3><p>…не записывались в базу. По какой-то причине функция для сброса накопившихся в кэше просмотров в БД не вызывалась. Это и не приводило к какой-то явной ошибке, чтобы её заметить, и просмотры терялись. При этом кэш какое-то время накапливал изменения, и мы видели, как у статей растут просмотры. Потом кэш протухал, и счётчик сбрасывался в ноль. Ошибку исправили, теперь запись в БД по расписанию работает.</p><h3>Новая AMP-тема для статей</h3><p>…загружалась дольше, чем не-AMP версия и дольше, чем предыдущая версия AMP-темы. Мы исправили ошибки, теперь AMP-страницы работают быстро и Google не будет нас наказывать и лишать трафика из поиска.</p><h3>Сброс кэша</h3><p>…не происходил автоматически после деплоя на продакшен. И не все разработчики понимали, какой кэш надо сбросить, чтобы изменения применились. Решили проблему инструкцией для команды и кодом для автоматического сброса. Теперь сервер не уходит в глубокую задумчивость при каждом обновлении кода.</p><h3>Индексы в БД</h3><p>…не были проставлены во всех таблицах. Дело в том, что когда создаётся таблица в MySQL, можно указать, по каким полям в дальнейшем будет много запросов. По ним строится дерево поиска (или хэш-таблица, зависит от конкретных случаев) и запросы выполняются намного быстрее. Например в таблице с рейтингом пользователей <a href="https://tproger.ru/gamify/">Tproger Gamify</a> индексом было объявлено только поле id, а запросы были по полю user (что логично, обычно надо получать рейтинг конкретного пользователя). После добавления индексов база немного разгрузилась и стала работать быстрее. Теперь надо добавить их в коде и учитывать эту особенность в дальнейшей разработке.</p><h3>Система сбора и анализа ошибок</h3><p>…её просто не было. Установили и настроили <a href="https://sentry.io/">Sentry</a>, офигенный инструмент, который 100% стоит своих денег. Теперь сообщения об ошибках собираются, группируются и отслеживаются в красивом веб-интерфейсе. Сейчас мы получаем больше 500 сообщений об ошибках в минуту и, надеюсь, снизим их количество в ближайшие 2 недели, пока не закончился пробный период (а они берут деньги именно за количество событий). В Sentry есть много фич, достойных отдельной статьи, предлагаю заинтересованным изучить самостоятельно. Отмечу одну: с привязкой к репозиторию разработчик может получать уведомления об ошибках в коде, которые он совершил. Не просто общий список, а назначение на ответственных и проверка после фикса (вдруг не сработало). А ещё туда же можно собирать репорты пользователей о багах со всем их окружением (браузер, ОС, сообщения в консоли разработчика и т.п.). Раньше мы получали их в канал #bug-reports в Slack, но теперь для этой задачи присмотримся к Sentry.</p><h3>Как только мы перешли на наш собственный трекер событий</h3><p>…его база данных сломалась. Если по-простому, то базе не хватило «места» на жёстком диске (число открытых файловых дескрипторов превысило лимит).</p><p>Это было прогнозируемо, потому что для простоты я писал данные в базу (ClickHouse) не совсем правильно — по одному запросу INSERT на строку. Это является антипаттерном для ClickHouse, который на каждую вставку данных открывает новый файл. Данные перед вставкой следует буферизовать. Но я не рассчитывал, что с проблемой мы столкнемся так скоро.</p><p>Я решил увеличить место на диске. Простая операция в облачной инфраструктуре, но… после неё база поломалась совсем. Вот прям кластер умер. И никакого контроля с моей стороны за состоянием нет.</p><p>В холодном поту пишу в поддержку. Расчётное время ответа: 24 часа. База лежит, мы теряем данные. Поддержка не отвечает. Ок, покупаем расширенный пакет поддержки. С той стороны быстро ответили, что передали информацию разработчикам. Ждём ответа.</p><p>База мертва уже пару часов, поднять её своими силами нет возможности. Рискуем вообще всё потерять. Наконец поддержка ответила: базу починили. Я спрашиваю: в чём причина поломки? Поддержка: «она утонула» «сбой автоматики». Всё.</p><p>Ну что ж, хотя бы скайнет пока что мир не захватит.</p><p>Вывод: используйте инструменты правильно. Даже на маленьких мощностях.</p><p>Пока база лежала, я успел добавить в архитектуру трекера новый компонент — очередь сообщений, которая стоит между бэкендом и базой данных. Очередь решила проблему масштабируемости: теперь данные вставляются небольшими пакетами, а не построчно. Это рекомендуемый паттерн для ClickHouse в том числе из-за более экономного использования файловых дескрипторов.</p><p>Вообще по плану новый компонент должен был появиться спустя пару месяцев, когда бы у меня дошли руки. Но в критической ситуации надо действовать быстро. Это новый опыт лично для меня: обычно я покрываю свой код тестами, а только потом деплою. В этот раз понял, что лучше задеплою грязный, но рабочий код, а потом уже сделаю всё правильно. Кстати, на покрытие тестами нового кода впоследствии у меня ушло два дня.</p><h3>Наша облачная инфраструктура заработала</h3><p>…но я зачистил всю папку с исходниками и потерял те важные файлы, которые не хранятся в репозитории.</p><p>Прям вот rm -rf запустил. Ctrl-Z для такой ситуации нет, я даже <a href="https://stackoverflow.com/questions/21296485/how-to-undo-rm-rf">погуглил</a>.</p><p>А потерял я файлы Terraform с состоянием нашей облачной инфраструктуры. Long story short: восстанавливать все связи между ресурсами Terraform и инстансами облачных сервисов пришлось буквально вручную. Причём восстановить можно не всё. Что-то пришлось пересоздавать и заново настраивать связи между компонентами.</p><p>Вывод: делайте бэкапы.</p><h3>Мы выпустили новость про разблокировку Телеграм всего через 5 минут после РБК</h3><p>…но я облажалась с заголовком — все гуглили «Роскомнадзор разблокировал Telegram», а я написала «Роскомнадзор снял ограничения с Telegram». В итоге в новостные сниппеты поисковиков мы не попали, а повторная проверка поисковым ботом после изменения заголовка случилась только на следующий день.</p><p>Всё равно порадовалась, потому что мы впервые немедленно среагировали на инфоповод, собирали инфу напрямую с сайтов-источников (РКН и Госреестра), которые при этом ещё и лежали. И впервые сделали статью, которая дополнялась в режиме реального времени:</p><figure><img src="https://media.tproger.ru/uploads/2020/07/Untitled-12.png" alt="" /></figure><p>Что получилось в итоге, можете посмотреть здесь:</p><p>В общем, маленький шаг для количества просмотров, огромный шаг для редакции.</p><h3>Мы немного порвали оч</h3><p>…ень ограниченное хранилище ВКонтакте. Пару недель назад получили сообщение, что у нас в одном из пабликов накопилось слишком много фотографий и их надо отдать на удаление:</p><figure><img src="https://media.tproger.ru/uploads/2020/07/Untitled-9.png" alt="" /></figure><p>Начал общаться с поддержкой VK и оказалось, что их порвал наш бот, в который мы не совсем корректно загружаем картинки. Есть у нас такая фича в <a href="https://vk.me/tproger">боте</a>, когда нужно просто тыкать на кнопку и бот тебе показывает новый мем:</p><figure><img src="https://media.tproger.ru/uploads/2020/07/Untitled-10.png" alt="" /></figure><p>Выяснили, что так как мы тащим фотки для бота в <a href="https://vk.com/tproger">Типичном программисте</a> из <a href="https://vk.com/tnull">/dev/null</a>, то VK не может их переиспользовать и каждый раз загружает новый экземпляр фотографии в диалог с подписчиком. Решили, что в будущем изменим эту процедуру, а пока VK просто удалит из диалогов с нашими подписчиками картинки, загруженные полгода назад и ранее.</p><h2>Давайте всё же и некоторые успехи зафиксируем</h2><p>В июне мы запустили продвинутую версию игры «Быки и коровы» в том же боте, про который рассказывает Паша.</p><p>Загадывается 4-значное число (цифры в нём не повторяются, а число может начинаться с 0), ваша цель — отгадать это число. После каждой попытки бот сообщает вам, сколько цифр угадано с совпадением их позиции в исходном числе (быки) и сколько угадано без совпадения с позицией (коровы). Можно поиграть с ботом или посоревноваться с друзьями, как вам больше нравится.</p><p>Присоединяйтесь к движу <a href="https://vk.me/tproger">ВКонтакте</a> или в <a href="https://t.me/tproger_official_bot?start=game">Телеграм</a> — поучаствовало уже больше 6 000 игроков.</p><figure><img src="https://media.tproger.ru/uploads/2020/07/photo_2020-07-05_15-37-36.jpg" alt="" /></figure><p>Выше я говорил о том, что поломалась база данных нового трекера. Но это лишь небольшая неприятность на фоне серьёзного улучшения, которое мы реализовали в июне. <a href="https://tproger.ru/tag/tproger-changelog/">В прошлых выпусках</a> я рассказывал, что мы меняем аналитическое решение для трекинга событий с опенсорсного Rockstat на свою разработку, развернутую в Яндекс.Облаке. И вот наконец последнее событие из трекавшихся в старом инструменте переехало в наш новый трекер! Это события по баннерам, они переехали с историей, которая есть у нас аж с августа 2019 года. Вот на графике момент, когда к нам в трекер начали попадать свежие события:</p><figure><img src="https://media.tproger.ru/uploads/2020/07/2020-07-01__01.09.43.png" alt="" /></figure><p>Игорь — наш веб-разработчик.</p><p>А это значит, что век Rockstat в составе нашего инструментария подошёл к концу: теперь все его задачи решает наш новый собственноручно разработанный и хорошо управляемый инструмент. Благодаря этому мы будем лучше понимать, как наши читатели пользуются сайтом и другими сервисами. Это поможет нам приоритизировать создание новых фичей и доработку старых.</p><p>Скажу пару слов об одной из новых фичей: мы поняли, что хотим автоматизировать размещение баннеров. Это нужно, чтобы не тратить кучу времени на согласования картинок и текстов и таким образом освободить себе и партнёрам драгоценные ресурсы, которые можно и нужно вкладывать во что-то более полезное. Так появился <a href="https://tproger.ru/banners/#/">«мастер баннеров»</a>: теперь чтобы запустить рекламу своего продукта под статьями у нас на сайте, нужно пройти всего пару шагов в специальном инструменте.</p><figure><img src="https://media.tproger.ru/uploads/2020/07/Snimok-jekrana-2020-07-05-v-18.17.04.png" alt="" /></figure><p>Внутри команды мы уже давно говорили о том, что на сайте хотелось бы выкладывать не просто переводы или новости, а выполнять более журналистскую работу: отражать мнения, брать комментарии экспертов, рассказывать о тенденциях и так далее. Как шаг в нужную сторону я вижу заметку про изменения в Go, которые создатели языка запустили в контексте остросоциального вопроса.</p><p>Мы нашли тред на Реддите, отобрали комменты пользователей, которые касаются ситуации. Долго ковырялись с тем, как красиво их вставить: скриншоты были стрёмные, потому что сливались с фоном, а эмбеды — кривые и ненадёжные. К счастью, на помощь пришла разработка, и нам запилили красивые тени, которые теперь можно добавить к любой картинке на сайте.</p><p>В материале вы можете найти опрос. При этом мы не хотели провоцировать неконструктивный хейт на предмет расизма и «охреневших американцев», нам казалось важным перевести дискуссию в несколько другую плоскость. Вот скрин опроса:</p><figure><img src="https://media.tproger.ru/uploads/2020/07/Snimok-jekrana-2020-07-05-v-19.23.35.png" alt="" /></figure><p>Продолжая тему важных материалов: один из наших разработчиков поделился опытом и написал статью по расширениям для VS Code. Надеюсь, относительно скоро у нас на нашем же сайте появится свой блог со статьями от членов команды.</p><p>Ещё в июне мы выпустили тест, где надо угадать ОС по скриншоту. Я сосредоточилась на том, чтобы больше людей пообщались друг с другом, а потому старалась вызвать активное комментирование. В подводке рассказала, сколько сама набрала баллов при первом прохождении теста, попросила читателей писать «БИНГО», если они работали с каждой из перечисленных систем, а также в некоторых результатах добавила шуточный вопрос про то, что лучше: Windows или Linux.</p><p>В итоге на 23 700 просмотров пришлось 40 комментов. Для сравнения, <a href="https://tproger.ru/quiz/math-test/">в математическом тесте</a> на 46 000 просмотров приходится 12 комментов. Тут стоило бы упомянуть, что есть куча дополнительных факторов, которые могли повлиять: другая тема, другая дата, другое соотношение источников трафика и так далее — но результат всё равно есть. И наверное был бы ещё круче, если бы у нас была своя платформа комментов, которая уже на подходе: мы знаем, что некоторые юзеры не могут подключиться к обсуждению, потому что не пользуются ВКонтакте, а у кого-то эта соцсеть вообще не работает из-за локации.</p><p>Грустно, что в основном в комментариях просто одиночные ответы, не связанные друг с другом. Хочется видеть больше коммуникаций между пользователями и самой активно общаться в тредах — ведь на нас подписано столько классных людей, которые могут ещё больше развиваться в общении друг с другом.</p><p>Кстати, если у вас есть пожелания по поводу рубрик и тем на сайте, задумки новых фичей и любые другие идеи по поводу улучшения нашего издания — присылайте на почту <a>product@tproger.ru</a>, обсудим.</p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: сделали для вас за май 2020</title>
      <link>https://tproger.ru/articles/tproger-changelog-05-2020</link>
      <comments>https://tproger.ru/articles/tproger-changelog-05-2020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Саша Ушатинская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-05-2020</guid>
      <description><![CDATA[<p>В издании добавили скролл во вставках кода, исправили раскрытие служебных файлов и оптимизировали страницы под новую концепцию Web Vitals.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-05-2020">Tproger Changelog: сделали для вас за май 2020</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Jun 2020 18:00:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет, заходите, располагайтесь. Это уже третий отчёт о наших процессах, и в этот раз об изменениях в издании вам расскажет сразу несколько ребят.</p><p>За последний месяц мы не выкатили ничего крупного и заметного вам с первого взгляда. Большинство фичей находятся в разработке, где-то между напряжёнными спринтами и больно падающими на голову багами. Но желание делиться уже не остановить, поэтому в этом выпуске расскажем про парочку проведённых исследований и про проблемы, с которыми сталкиваемся по пути.</p><p>Внутри есть опросы — поделитесь мнением, пожалуйста.</p><p>Все выпуски теперь можно найти <a href="https://tproger.ru/tag/tproger-changelog/">по тегу Tproger Changelog</a>.</p><p>Начнём с маленьких радостей: во вставках кода теперь красивый скрол (только в Webkit-браузерах, но это практически все популярные). Стили честно скопированы со StackOverflow.</p><p>Нам прислали ещё один отчёт об уязвимости — на этот раз раскрытие файлов, которые не должны были быть публичными. Списки пакетов и зависимостей нашего проекта. Это не очень критично, но облегчает жизнь злоумышленникам: так проще найти дыры в стороннем коде, который мы используем. Я всё исправил, заплатил ещё одну порцию вознаграждения.</p><p>На прошлой неделе Google обновил инструмент <a href="https://developers.google.com/speed/pagespeed/insights/">PageSpeed Insights</a> и <a href="https://search.google.com/search-console/core-web-vitals">отчёт о скорости загрузки страниц в Search Console</a>. Вместо времени первой отрисовки контента и задержки ввода стала использоваться <a href="https://web.dev/vitals/">Web Vitals</a> — новая концепция поискового гиганта в оценке производительности веба. Я занимался подготовкой к этим изменениям и заранее оптимизировал явные ошибки. Итог — почти все страницы нашего сайта Google теперь считает быстрыми, как на мобильных, так и на десктопе.</p><figure><img src="https://media.tproger.ru/uploads/2020/06/webvitals.png" alt="" /></figure><p>На мобильных почти в два раза больше URL, потому что там есть AMP-версия сайта.</p><p>Некоторые URL ещё требуют доработок, но теперь явно видно, какие именно и что с ними не так. Больше всего проблем с видеопостами — вставки плеера через iframe загружаются долго и сдвигают контент. Но я уже знаю, как это исправить.</p><p>Google <a href="https://webmasters.googleblog.com/2020/05/evaluating-page-experience.html">говорит</a>, что нововведения начнут влиять на поисковую выдачу только в следующем году. Но мне кажется, они лукавят, ибо мы стали получать больше трафика примерно в те же даты, когда зелёный график (на картинке выше) пополз вверх.</p><figure><img src="https://media.tproger.ru/uploads/2020/06/Untitled-4.png" alt="" /></figure><p>Трафик из поиска по данным Яндекс.Метрики, абсолютные значения скрыты, важен процентный прирост.</p><p>В <a href="https://tproger.ru/articles/tproger-changelog-04-2020/">прошлом выпуске Changelog</a> была новость про блок «Также рекомендуем», который вы видите после прочтения материала. Сейчас мы работаем над повышением качества рекомендаций в этом блоке, их эффективность видно на графике.</p><figure><img src="https://media.tproger.ru/uploads/2020/06/newplot2.png" alt="" /></figure><p>Значения на диаграмме — это CTR (click through rate). Он показывает отношение числа кликов по рекомендации к числу просмотров блока рекомендаций. Мы разбили день на 4 части, по оси OX приведены шестичасовые интервалы.</p><p>Раньше рекомендации для всех пользователей были общие и строились на основе статистики просмотров наших статей (на графике — fallback). Затем мы персонализировали рекомендации с помощью сервиса <a href="https://aws.amazon.com/ru/personalize/">Amazon Personalize</a>: каждый пользователь стал получать индивидуальный список рекомендаций (awspersonalize-user-only). Однако для каждого пользователя список был одним и тем же под всеми статьями. Теперь же рекомендации строятся с учетом текущего просматриваемого материала (awspersonalize-user-item).</p><p>Увы, но наши текущие нововведения не снискали популярности у читателей: CTR рекомендаций падал с каждым новым внедрением. Чтобы исправить ситуацию, мы планируем поэкспериментировать с разными рецептами Amazon Personalize, а также начать обучать модель рекомендаций в режиме реального времени.</p><p>Еще расскажу про нашу аналитическую инфраструктуру — особенно интересно будет тем, кто выбирает между готовым решением и своей системой.</p><p>Как и многие создатели контента, мы пользуемся <a href="https://metrika.yandex.ru/">Яндекс.Метрикой</a> и <a href="https://analytics.google.com/analytics/web/">Google Analytics</a>. Но также развернули и поддерживаем свой трекер событий на базе опенсорсной платформы <a href="https://rock.st/ru/">Rockstat</a> с <a href="https://clickhouse.tech/docs/ru/">ClickHouse</a> в качестве базы данных. Для визуализации данных используем <a href="https://redash.io/">Redash</a>, график по блоку рекомендаций сделан как раз в нем. Это удобный и простой инструмент, который умеет работать с ClickHouse, но с одним минусом: для его использования надо знать SQL, а это подходит не всем сотрудникам.</p><p>Я провел небольшое исследование потребностей редакции и оказалось, что Яндекс.Метрика хорошо решает определенные контентные задачи: например, недавно мы вдохнули жизнь в <a href="https://yandex.ru/support/metrica/publishers/reports/topic.html?lang=ru">отчет по тематикам</a>:</p><figure><img src="https://media.tproger.ru/uploads/2020/06/Snimok-jekrana-2020-06-02-v-14.40.41.png" alt="" /></figure><p>График отчета по тематикам в Яндекс.Метрике.</p><p>Поддерживая же свою базу данных, мы можем решать больше задач: отслеживать технические параметры загрузки сайта в разбивке по поведению кеша, смотреть агрегированную статистику с фильтрацией по дате публикации. Подобных возможностей в аналитических платформах общего назначения, то есть не сугубо ориентированных на контент, нет.</p><p>Короче говоря: собирая события самостоятельно, мы можем наделять их семантикой, специфичной для наших задач. Например, в Метрике клик будет просто кликом, а в Rockstat — кликом пользователя на закешированной странице по баннеру, относящемуся к рекламной кампании с лимитом в 10 тысяч кликов. Гораздо больше информации, не правда ли?</p><p>Более того, в свою базу мы можем собирать события не только с сайта, но и, например, из наших ботов ВКонтакте и Telegram. И все эти данные будут в одном месте.</p><p>Но боль от необходимости поддерживать собственную инфраструктуру при всей полезности не уменьшается. Да и я не девопёс, поэтому в ближайшее время мы планируем переезжать на бессерверную облачную инфраструктуру и использовать managed базу данных.</p><p>В прошлом месяце мы открыли каналы своих проектов в новом мессенджере от Яндекса с оригинальным названием Яндекс.Мессенджер.</p><p>Его особенность в том, что он очень здорово интегрирован в экосистему Яндекса: читать сообщения можно в приложении, браузере или на главной странице.</p><p>А чтобы помочь авторам каналов быстрее развиваться и привлекать интересующуюся аудиторию, Яндекс запустил систему рекомендаций. Мы в неё, кстати, успешно попали, и теперь в своих сервисах Яндекс показывает наши каналы и всем рекомендует на них подписаться. Благодаря этому у нас уже есть посты, которые увидели тысячи читателей. А если среди них нет вас, то и вы гляньте, что там в этом Мессенджере происходит. У нас там сейчас открыто 3 канала:</p><p>— про разработку в целом: «<a href="https://yandex.ru/chat/#/join/f2c79f78-a8fb-4615-9f4a-2cdbf1362d25">Типичный программист»</a>;<br />— про новости технологий, который влияют на нас: <a href="https://yandex.ru/chat/#/join/d8ddca68-d939-4683-aa54-dff9f4d8a6eb">«Представляешь,»</a>;<br />— и программерский юмор: <a href="https://yandex.ru/chat/#/join/44bc313f-6e94-4bee-bc4a-996eb922ec44">«IT Юмор»</a>.</p><p><a href="https://media.tproger.ru/uploads/2020/06/screely-1591034867702-min.png"></a></p><p>В конце добавлю от себя пару новостей из раздела «прочие шалости».</p><p>На сайте теперь вылезает уведомление про использование куки. <a href="https://tproger.ru/about/cookies/">В этой статье</a> можно прочитать, зачем мы используем эту технологию. Не хотелось добавлять ещё одно всплывающее-закрывающее-пол-экрана окно, но мы обязаны уведомлять вас о сборе данных именно таким образом.</p><p>В паблике «Типичный программист» ВКонтакте провели пятничную <a href="https://vk.com/video-30666517_456243824">трансляцию на тему инфобеза</a> и внезапно собрали больше 30 000 просмотров. Планируем попробовать ещё подобные трансляции — не пропустите.</p><h2>Editor’s choice: три избранных материала за окошком месяц май</h2><p>Статья с довольно очевидной информацией, но получают её обычно методом проб и ошибок. Поможет не наступить на грабли, особенно если только начинаете программировать.</p><p>Забавный тест, всегда интересно узнать, «кто ты», а тут ещё и известные личности.</p><p>Наглядная статья, и обратите внимание на опрос в конце — стали добавлять интерактив, потому что интересно мнение комьюнити и хочется, чтобы вы приходили на площадку не просто почитать статьи, но и обмениваться мнениями, спрашивать совета и делиться своими историями.</p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: сделали для вас за апрель 2020</title>
      <link>https://tproger.ru/articles/tproger-changelog-04-2020</link>
      <comments>https://tproger.ru/articles/tproger-changelog-04-2020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Саша Ушатинская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-04-2020</guid>
      <description><![CDATA[<p>В проекте улучшили мобильную вёрстку, читабельность и внешние ссылки, добавили персональные рекомендации и исправили уязвимости.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-04-2020">Tproger Changelog: сделали для вас за апрель 2020</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 May 2020 20:54:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>Продолжаем ежемесячную серию материалов с рассказом о последних изменениях проекта. Предыдущий выпуск:</p><p>Мы делали опросы в соцсетях, и многие из вас отметили, что интереснее всего было бы почитать новости нашей разработки. Поэтому в этот раз о ней побольше.</p><p>Продолжаем осознавать, что такое mobile-first вёрстка. Больше размеры шрифтов и больше воздуха в меню и футере на мобильных. Стало проще попадать пальцем в нужный пункт, особенно на маленьких экранах:</p><figure><img src="https://media.tproger.ru/uploads/2020/05/screely-1588360605453.png" alt="" /></figure><p>Улучшили читабельность надписей. Много серого цвета заменили на более чёрный или белый в зависимости от фона. Главное открытие — наш фирменный цвет с логотипа считается ошибкой дизайна для текста на белом фоне из-за отвратительной контрастности. Поэтому изменили дизайн ссылок в постах:</p><figure><img src="https://media.tproger.ru/uploads/2020/05/screely-1588366182473.png" alt="" /></figure><p>Сделали красивую вёрстку для внешних ссылок, когда нужен простой эмбед:</p><p>С помощью Amazon Personalize улучшили блок с рекомендациями материалов. Раньше список рекомендаций под каждой статьей для всех пользователей был общим и строился на основе статистики просмотров статей. Теперь рекомендации стали персонализированными, список строится индивидуально с учётом вашей личной активности на сайте:</p><figure><img src="https://media.tproger.ru/uploads/2020/05/screely-1588364262380.png" alt="" /></figure><p>Исправили уязвимости и перевели вознаграждение за репорты:</p><ul><li>раскрытие ip-адреса origin-сервера;</li><li>некорректные SPF-записи для почты;</li><li>раскрытие аккаунтов WordPress;</li><li>возможности для DDoS.</li></ul><h2>Немного редакционных новостей</h2><p>Запустили <a href="https://tproger.ru/tag/covid-19/">еженедельную рубрику «IT во время чумы»</a> с самыми интересными новостями пандемии, которые связаны с технологиями. Забавно получилось с тегом, который объединяет статьи рубрики — сайт решил, что надо использовать его в блоке рекомендуемых вакансий. Скриншот немного шакальный, но другого не осталось, баг уже исправили:</p><figure><img src="https://media.tproger.ru/uploads/2020/05/screely-1588365156383.png" alt="" /></figure><p>Сделали ребрендинг телеграм-канала «IT Новости», увеличили там количество выпускаемого контента почти в три раза, теперь там стало ещё интереснее и веселее. Мы решили сосредоточиться на IT событиях России, СНГ и мира, которые прямым образом влияют на каждого из нас. Подписывайтесь и читайте, если ещё не сделали этого: <a href="https://tele.gg/your_tech">@your_tech</a>.</p><figure><img src="https://media.tproger.ru/uploads/2020/05/screely-1588364711279.png" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Tproger Changelog: сделали для вас за март 2020</title>
      <link>https://tproger.ru/articles/tproger-changelog-03-2020</link>
      <comments>https://tproger.ru/articles/tproger-changelog-03-2020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Саша Ушатинская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-changelog-03-2020</guid>
      <description><![CDATA[<p>В проекте появился фильтр переноса и отмены ивентов, улучшилась печатная вёрстка, запустилось спонсорство рубрик и завершился Tproger Gamify.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-changelog-03-2020">Tproger Changelog: сделали для вас за март 2020</a>»</p>]]></description>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 01 Apr 2020 19:24:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выкатили <a href="https://tproger.ru/events/?cancel=true">фильтр в разделе Level Up</a>, который показывает перенос и отмену ивентов. Для перенесённых сразу показываем новые даты.</p><figure><img src="https://media.tproger.ru/uploads/2020/04/screely-1585766357303.png" alt="" /></figure><p>Почти везде наладили адекватную вёрстку для печати. Пример из статьи <a href="https://tproger.ru/translations/wall-of-technical-debt/">Стена технического долга: наглядная альтернатива багтрекеру</a>.</p><figure><img src="https://media.tproger.ru/uploads/2020/04/screely-1585765716914.png" alt="" /></figure><p>Запустили «спонсорство рубрик» с GeekBrains. Пытаемся найти формат банеров, который будет минимально раздражающим и максимально выгодным.</p><figure><img src="https://media.tproger.ru/uploads/2020/04/screely-1585766763290.png" alt="" /></figure><p>Подвели итоги конкурса <a href="https://tproger.ru/gamify/">Tproger Gamify</a>. Это был первый для нас опыт применения механик геймификации на сайте. Таким образом рассказали о том, какие у нас есть фишки на сайте: основная сейчас, конечно, это <a href="https://tproger.ru/personal/">личные кабинеты</a>. Разыграли ништяков, сейчас занимаемся отправкой.</p><figure><img src="https://media.tproger.ru/uploads/2020/04/screely-1585767701651.png" alt="" /></figure><p>Кстати, через личный кабинет можно отправить баг-репорт. Пожалуйста, не стесняйтесь, нам это нужно.</p><figure><img src="https://media.tproger.ru/uploads/2020/04/screely-1585767537711.png" alt="" /></figure><h2>Editor’s choice: обратите внимание на эти статьи</h2><h2>Что происходит у нас в команде</h2><p>Мы перешли на платный тариф <a href="https://www.notion.so/">Notion</a> и благодаря вам всего за <a href="https://vk.com/wall-30666517_1658512">один пост</a> ВКонтакте собрали денег на 1,5 месяца бесплатного пользования. Это классный нужный нам инструмент. Теперь создаём там базу знаний по проекту, ведём заметки и составляем конспекты выступлений.</p><p>Каких ещё выступлений? По четвергам у нас лекторий: раз в неделю кто-то из команды рассказывает про тему, которая ему интересна.</p><p>Сейчас почти полностью сидим на удалёнке, непривычно, но не критично. В этот четверг как раз попытаемся провести лекторий по видеосвязи. Удобно, что Google снял ограничения на корпоративный Hangouts, мы можем пользоваться через рабочие почты, пока полёт нормальный.</p><p>Ласт, бат нот зе лист: открылась <a href="https://tproger.ru/jobs/fullstack-editor-tproger/">вакансия пишущего редактора</a>. Пожалуйста, распространите по знакомым. Ну и вообще мы всегда ищем специалистов, которые хотят к нам присоединиться.</p><p>До новых встреч. Будьте здоровы ?</p>]]></content:encoded>
    </item>
    <item>
      <title>От «Типичного» до «Tproger»: как мы развиваем наш сайт</title>
      <link>https://tproger.ru/articles/tproger-website-evolution</link>
      <comments>https://tproger.ru/articles/tproger-website-evolution?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Тарас Сереванн]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tproger-website-evolution</guid>
      <description><![CDATA[<p>Сайт начинался с чистой установки WordPress и темы Bliss, которую значительно переделали; после публикации ссылки он не выдержал нагрузки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tproger-website-evolution">От «Типичного» до «Tproger»: как мы развиваем наш сайт</a>»</p>]]></description>
      <category><![CDATA[История успеха]]></category>
      <category><![CDATA[Tproger Changelog]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 03 Jul 2016 11:45:39 GMT</pubDate>
      <content:encoded><![CDATA[<p>Когда-то трава была зеленее, люди — добрее, Интернет — свободнее, а наш сайт выглядел вот так:</p><figure><img src="https://media.tproger.ru/uploads/2016/05/2015.png" alt="" /></figure><h3>Молодой WordPress</h3><p>Это была чистая установка движка WordPress с популярной темой Bliss, которая впоследствии была значительно переделана.</p><p>WordPress занимает второе место в рейтинге самых ужасных технологий по версии пользователей StackOverflow — и это совершенно не зря. Ядро, разработанное озверевшими индусами, и сторонние плагины, случайно созданные африканскими пятиклассниками в ходе попытки разжигания костра, из коробки не выдерживают и малейшей нагрузки.</p><p>В общем, наш сайт с треском упал через минуту после публикации ссылки на него в сообществе. И нам пришлось позвать человека-надо-было-ставить-линукс — Александра Фольца и теперь уже нашего сотрудника.</p><figure><img src="https://media.tproger.ru/uploads/2016/06/1446407959162488825.jpg" alt="" /></figure><p>Стал администратором инфраструктуры типичного я чисто случайно. На тот момент я уже работал в ТП редактором в течение нескольких месяцев. Как мне помнится, всё началось с просьбы нашего главного типичного настроить небольшой php-скрипт. Задание было весьма тривиальным, и я подумал: почему бы и нет? Получив кое-какой первоначальный доступ, я был удивлён весьма плохим состоянием инфраструктуры (как оказалось, этим просто было некому полноценно заниматься).</p><p>После нескольких небольших задач мне предложили постоянное место. Помнится, я потратил с месяц на доведение всех параметров инфраструктуры до актуального состояния (обновление, автоматизация некоторой рутинной работы). Сначала я контролировал всё вручную, но потом мы стали разрастаться — мне пришлось использовать Icinga (форк nagios) для контроля всех основных параметров. Возможно, кто-то скажет, что целая система мониторинга «для небольшого сайта» — это перебор, однако спешу вас уверить, мы больше, чем кажемся.</p><p>Пожалуй, отдельного упоминания заслуживает веселье в начале этого года, которое связано с DDoS-атаками на tproger.ru. Нам пришлось экстренно переходить за CloudFlare, что, в свою очередь, породило кучу жарких споров в своё время. Главное в таких делах — вовремя приходить к консенсусу. Также мы получали множество угроз от весьма сомнительных личностей. Один раз я даже ночевал на работе из-за проблем с сайтом.</p><p>Сейчас мы развиваемся более равномерно, чем раньше, а скоро планируем очередное расширение инфраструктуры для повышения стабильности работы нашего проекта.</p><p>Конечно, без 100 грамм и трех уровней кеширования на WordPress высоконагруженный проект не запустить, но эта CMS стала самой популярной не просто так: оценить такие вещи стоит не только с позиции программиста, в команде есть и много других людей. Да и бизнес обычно не терпит долгие ожидания.</p><p>«Если вы запустили первую версию продукта, и вас ничего в ней не раздражает, вы запустили её слишком поздно» — <a href="https://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D1%84%D1%84%D0%BC%D0%B0%D0%BD,_%D0%A0%D0%B8%D0%B4">Рид Хофман</a>, основатель LinkedIn.</p><p>C тех пор утекло немало воды. Текущую версию вы видите прямо сейчас. Можете убедиться в том, что изменилось почти всё: страницы стали более информативными, поиск стал удобней с переходом на Google CSE, с мобильных всё выглядит так же хорошо, как и с десктопа, появились Push-уведомления и многое другое.</p><p>Конечно, некоторые из компонентов удалось скачать бесплатно в официальном магазине WordPress, но далеко не все. На сегодняшний день 80% всех установленных на сайте плагинов писались самостоятельно — в публичном доступе аналогов, сравнимых по качеству с нашими, просто не существует.</p><h3>Интерактивные статьи</h3><p>Одним из таких плагинов является движок рубрики <a href="https://tproger.ru/experts/">«Эксперты»</a>:</p><p>Он позволяет любому читателю проголосовать за тот или иной ответ общепризнанного эксперта и, посмотрев на рейтинг, понять: чьему мнению стоит доверять, а чьему нет.</p><figure><img src="https://media.tproger.ru/uploads/2016/05/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-272-1.png" alt="" /></figure><p>Также важной частью нашего сайта стали <a href="https://tproger.ru/quiz/">викторины и тесты</a> — интерактивные веб-приложения, которые помогают человеку оценить уровень своих знаний и понять, чего он действительно хочет в своей карьере.</p><p>К слову, присоединиться к созданию тестов и викторин на добровольной основе может каждый желающий — присылайте материал на <a>admin@tproger.ru</a>.</p><h3>Дальнейшие планы</h3><p>Несмотря на большой пройденный путь, Tproger не планирует останавливаться и продолжит вас радовать свежим и интересным контентом. Одним из последних тасков было обновление страницы 404, но впереди нас ждут более глобальные изменения, вплоть до полного редизайна сайта, который мы уже тестируем.</p><p>Мы всегда открыты для ваших баг-репортов, идей и предложений: <a href="https://tproger.ru/about">контакты, по которым писать</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>