<?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</title>
    <description/>
    <link>https://tproger.ru/tag/tproger-contest</link>
    <atom:link href="https://tproger.ru/tag/tproger-contest/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Fri, 23 Oct 2026 00:33:18 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Конкурс Tproger</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Продуктовая Премия Tproger 2025</title>
      <link>https://tproger.ru/interactive/produktovaya-premiya-tproger-2025</link>
      <comments>https://tproger.ru/interactive/produktovaya-premiya-tproger-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ihor.m 💼]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/interactive/produktovaya-premiya-tproger-2025</guid>
      <description><![CDATA[<p>Ежегодная Премия от Tproger, посвящённая лучшим решениям в сфере IT. Наши читатели голосуют за продукты, технологические проекты и инновационные разработки, которые за прошедший год оказали заметное влияние на индустрию по мнению разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/interactive/produktovaya-premiya-tproger-2025">Продуктовая Премия Tproger 2025</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Игры]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 13 Mar 2026 09:28:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>Продуктовая Премия Tproger 2025</p>]]></content:encoded>
    </item>
    <item>
      <title>Tproger запустил премию для ИТ-команд — победителей выберут читатели</title>
      <link>https://tproger.ru/news/tproger-zapustil-premiyu-dlya-it-komand---pobeditelej-vyberut-chitateli</link>
      <comments>https://tproger.ru/news/tproger-zapustil-premiyu-dlya-it-komand---pobeditelej-vyberut-chitateli?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/tproger-zapustil-premiyu-dlya-it-komand---pobeditelej-vyberut-chitateli</guid>
      <description><![CDATA[<p>Tproger запустил Продуктовую премию для ИТ-команд. Участвовать могут компании и стартапы, а победителей в пяти номинациях выберут читатели сайта</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/tproger-zapustil-premiyu-dlya-it-komand---pobeditelej-vyberut-chitateli">Tproger запустил премию для ИТ-команд — победителей выберут читатели</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 26 Dec 2025 09:21:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Tproger <a href="https://tproger.ru/events/53">объявил</a> о запуске <b>Продуктовой премии для ИТ-команд</b>.</p><p>Это <b>новый формат</b>, в котором фокус смещен больше на реальную продуктовую работу, чем на громкие имена и так известных команд.</p><p>Идея премии — показать, как именно создаются ИТ-продукты внутри компаний. Не только то, что видит пользователь, но и то, что обычно остается за кадром: процессы, подходы и инженерные решения.</p><h2>Кто и с чем может участвовать</h2><p>Подать заявку могут компании и команды, которые хотят рассказать о своих разработках и кейсах. Участвовать можно сразу в одной или нескольких номинациях — <b>ограничений нет.</b></p><p>Всего предусмотрено пять категорий:</p><ul><li>лучший продукт;</li><li>лучший облачный продукт;</li><li>лучший ИТ-ивент;</li><li>лучший дизайн;</li><li>лучший стартап.</li></ul><p>Это позволяет заявиться как зрелым продуктам, так и молодым проектам. Тем, которые только начали набирать аудиторию или тестировать гипотезы.</p><h2>Как будут выбирать победителей</h2><p>Главная особенность премии — <b>формат голосования</b>. Победителей определят не закрытое жюри и не редакция, а читатели Tproger. Голосование пройдет онлайн и будет открытым.</p><p>Такой подход делает премию максимально прозрачной и ориентированной на профессиональное сообщество. По сути, это способ получить обратную связь от опытных разработчиков и ИТ-специалистов, которые ежедневно читают и обсуждают продукты на Tproger.</p><h2>Сроки и этапы</h2><p>Подать заявку на участие можно <b>до 25 января 2026 года</b> — с этим лучше не затягивать. <b>Со 2 по 28 февраля 2026 года</b> пройдет анонс участников и само голосование. В этот период проекты будут представлены аудитории, а читатели смогут выбрать лучшие, по их мнению, решения.</p><p>Итоги подведут в начале марта — <b>с 2 по 6 число</b>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучший пет-проект 2023: итоги</title>
      <link>https://tproger.ru/articles/luchwij-pet-proekt-2023--itogi</link>
      <comments>https://tproger.ru/articles/luchwij-pet-proekt-2023--itogi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwij-pet-proekt-2023--itogi</guid>
      <description><![CDATA[<p>Подвели итоги конкурса пет-проектов от Tproger и показали мерч, который мы отправим победителям. Рассказали, почему не подвели итоги раньше.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwij-pet-proekt-2023--itogi">Лучший пет-проект 2023: итоги</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 14 Mar 2024 16:07:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Ранее Tproger проводил конкурс пет-проектов среди читателей, и теперь мы готовы объявить победителей.</p><p>Вот, какие проекты заняли с первого по пятое места:</p><ol><li><a href="https://tproger.ru/articles/tri-po-cene-odoj-konkurs-pet-proektov">Три библиотеки для React по цене одной</a></li><li><a href="https://tproger.ru/articles/lokalnyj-deploj-proektov-v-paru-klikov-konkurs-pet-proektov">Локальный деплой проектов в пару кликов</a><br /></li><li><a href="https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov">Очередной фреймворк на PHP</a><br /></li><li><a href="https://tproger.ru/articles/senior-junior-kursy-ot-programmistov-dlya-programmistov">Senior Junior. Курсы от программистов для программистов</a><br /></li><li><a href="https://tproger.ru/articles/beta-versiya-vychesleniya-summy-postrojki-doma-s-ukazaniem-porametrov-konkurs-pet-proektov">Бета-версия вычислителя суммы постройки дома с указанием параметров</a><br /></li></ol><p>Авторы этих пет-проектов получат худи с маскотом Tproger и стикеры от редакции.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2024-03-12/f674e0c2-ede6-4a5b-adf7-09c1cd3ca0ab.png" alt="" /></figure><p>Вот, какие проекты заняли с шестого по десятое места:</p><ol><li><a href="https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov">Менеджер паролей, который не хранит пароли</a></li><li><a href="https://tproger.ru/articles/kak-ya-sdelal-kartochnyj-battler-bez-konstruktora-kolod-konkurs-pet-proektov-246195">Как я сделал карточный баттлер без конструктора колод</a><br /></li><li><a href="https://tproger.ru/articles/retranslyator-sms-soobshhenij-dlya-relokantov-konkurs-pet-proektov">Ретранслятор СМС-сообщений для релокантов</a><br /></li><li><a href="https://tproger.ru/articles/hunt-job-ili-kak-otvlechsya-poka-ishhew-rabotu">Hunt job. Как отвлечься, пока ищешь работу</a><br /></li><li><a href="https://tproger.ru/articles/kak-ya-sozdal-zmeyuku-na-zmeyuke">Как я создал змейку на Python</a><br /></li></ol><p>Авторы этих пет-проектов получат футболки с маскотом Tproger и стикеры.</p><p>Напоминаем, что проекты были отобраны для голосования по количеству просмотров, реакций и комментариев к статьям, а лучший пет-проект выбирали читатели.</p><p>Результаты голосования можно посмотреть <a href="https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie">здесь</a>.</p><p>Этот конкурс — случай, когда всё пошло не так с самого начала. Проблемы с мерчом сопровождали нас весь путь от согласования дизайна до печати. Чтобы укрепить свою неудачу, мы ещё и забыли публично поздравить победителей и опубликовать эту статью, которая должна была выйти ещё в декабре.</p><p>Сейчас мы согласовали дизайн и успешно отдали мерч в печать. После этого будем готовы отправить призы победителям — если, конечно, завод не сгорит (это шутка, мы верим, что теперь всё должно быть супер).</p><p>Простите нам эту задержку. Мы сделаем всё, чтобы призы нашли своих заслуженных владельцев.</p><p>Победители, следите за почтами, к которым привязаны ваши профили — мы сообщим об отправке призов.</p><p>Спасибо!</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучший пет-проект 2023: голосование</title>
      <link>https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie</link>
      <comments>https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie</guid>
      <description><![CDATA[<p>Запустили голосование за лучший пет-проект, представленный на конкурс Tproger. В голосовании участвуют 10 проектов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie">Лучший пет-проект 2023: голосование</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 06 Nov 2023 12:54:15 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Tproger запустил новый конкурс на лучший пет-проект среди наших читателей.</p><p>10 октября стартовал <a href="https://tproger.ru/articles/luchwij-pet-proekt-2023-zapuskaem-konkurs">первый этап конкурса</a>, в ходе которого авторы проектов присылали статьи с их описанием.</p><p>Сегодня, 6 ноября, стартует второй этап, в ходе которого вы сможете проголосовать за проект, который нравится вам больше всего.</p><p>Все участники, которые прошли первый этап, получат призы.</p><ul><li>С 1 по 5 место: худи с логотипом Tproger и стикеры от редакции.</li><li>С 6 по 10 место: футболки с логотипом Tproger и стикеры.</li></ul><p>Какие пет-проекты участвуют в голосовании:</p><ol><li><a href="https://tproger.ru/articles/senior-junior-kursy-ot-programmistov-dlya-programmistov">Senior Junior. Курсы от программистов для программистов</a></li><li><a href="https://tproger.ru/articles/kak-ya-sozdal-zmeyuku-na-zmeyuke">Как я создал змейку на Python</a></li><li><a href="https://tproger.ru/articles/beta-versiya-vychesleniya-summy-postrojki-doma-s-ukazaniem-porametrov-konkurs-pet-proektov">Бета-версия вычислителя суммы постройки дома с указанием параметров</a></li><li><a href="https://tproger.ru/articles/lokalnyj-deploj-proektov-v-paru-klikov-konkurs-pet-proektov">Локальный деплой проектов в пару кликов</a></li><li><a href="https://tproger.ru/articles/kak-ya-sdelal-kartochnyj-battler-bez-konstruktora-kolod-konkurs-pet-proektov-246195">Как я сделал карточный баттлер без конструктора колод</a></li><li><a href="https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov">Менеджер паролей, который не хранит пароли</a></li><li><a href="https://tproger.ru/articles/hunt-job-ili-kak-otvlechsya-poka-ishhew-rabotu">Hunt job. Как отвлечься, пока ищешь работу</a></li><li><a href="https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov">Очередной фреймворк на PHP DeltaFramework</a></li><li><a href="https://tproger.ru/articles/tri-po-cene-odoj-konkurs-pet-proektov">Три библиотеки для React по цене одной</a></li><li><a href="https://tproger.ru/articles/retranslyator-sms-soobshhenij-dlya-relokantov-konkurs-pet-proektov">Ретранслятор СМС-сообщений для релокантов</a></li></ol><p>Подпишитесь на тэг <a href="https://tproger.ru/tag/pet-projects-2023">Лучший пет-проект 2023</a>, чтобы не пропустить результаты конкурса и следить за обновлениями в личной ленте.</p><p>Желаем удачи!</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучший пет-проект 2023: голосование начнётся 6 ноября</title>
      <link>https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie-nachnyotsya-6-noyabrya</link>
      <comments>https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie-nachnyotsya-6-noyabrya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie-nachnyotsya-6-noyabrya</guid>
      <description><![CDATA[<p>Перенесли голосование за лучший пет-проект на 6 ноября, на неделю вперёд, чтобы все успели ознакомиться с работами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwij-pet-proekt-2023-golosovanie-nachnyotsya-6-noyabrya">Лучший пет-проект 2023: голосование начнётся 6 ноября</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Oct 2023 12:19:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Сейчас на нашем сайте проходит <a href="https://tproger.ru/articles/luchwij-pet-proekt-2023-zapuskaem-konkurs">конкурс на лучший пет-проект читателей</a>. Сегодня, 30 октября, завершился первый этап конкурса, и приём статей о пет-проектах для участия в конкурсе остановлен.</p><p>Также с 30 октября должен был начаться второй этап конкурса — голосование читателей за лучший пет-проект, статьи для которого отбираются по количеству просмотров, лайков и комментариев под статьями участников на сайте.</p><p>Мы решили перенести старт голосования на 6 ноября: работ оказалось очень много, а некоторые из них прислали прямо к завершению первого этапа.</p><h2>Почему голосование стартует позже</h2><p>Кажется нечестным, что опубликованные прямо перед голосованием статьи не смогут пройти во второй этап потому, что не набрали достаточное количество просмотров, даже если у них есть все шансы выиграть.</p><p>За эту неделю читатели смогут ознакомиться со всеми работами на конкурсе.</p><h2>Список пет-проектов, которые участвуют в конкурсе</h2><ol><li><a href="https://tproger.ru/articles/kak-ya-sozdal-zmeyuku-na-zmeyuke">Как я создал змейку на Python</a></li><li><a href="https://tproger.ru/articles/kak-ya-zapustil-agregator-festivalnogo-kino-konkurs-pet-proektov">Как я запустил агрегатор фестивального кино</a></li><li><a href="https://tproger.ru/articles/bginfo-lomaet-tvoi-oboi-napiwi-svoj-i-sdelaj-ego-luchwe-konkurs-pet-proektov">Bginfo ломает обои? Напиши свой и сделай его лучше</a></li><li><a href="https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov">Очередной фреймворк на PHP</a></li><li><a href="https://tproger.ru/articles/lokalnyj-deploj-proektov-v-paru-klikov-konkurs-pet-proektov">Локальный деплой проектов в пару кликов</a></li><li><a href="https://tproger.ru/articles/tri-po-cene-odoj-konkurs-pet-proektov">Три библиотеки для React по цене одной</a></li><li><a href="https://tproger.ru/articles/hunt-job-ili-kak-otvlechsya-poka-ishhew-rabotu">Hunt job. Как отвлечься, пока ищешь работу</a></li><li><a href="https://tproger.ru/articles/kvest-bot-konkurs-pet-proektov">Квест-бот для Telegram</a></li><li><a href="https://tproger.ru/articles/retranslyator-sms-soobshhenij-dlya-relokantov-konkurs-pet-proektov">Ретранслятор СМС-сообщений для релокантов</a></li><li><a href="https://tproger.ru/articles/kak-ya-sdelal-kartochnyj-battler-bez-konstruktora-kolod-konkurs-pet-proektov-246195">Как я сделал карточный баттлер без конструктора колод</a></li><li><a href="https://tproger.ru/articles/konstruktor-plejlista-dlya-ip-tv-konkurs-pet-proektov">Конструктор плейлиста для IP-TV</a></li><li><a href="https://tproger.ru/articles/oblachnaya-operacionnaya-sistema-konkurs-pet-proektov">Облачная операционная система</a></li><li><a href="https://tproger.ru/articles/meowsql-gui-klient-dlya-mysql-pod-linux-i-ne-tolko-konkurs-pet-proektov">MeowSQL: GUI-клиент для MySQL под Linux и не только</a></li><li><a href="https://tproger.ru/articles/mlup-machine-learning-as-api">MLup: как создавать веб-приложение с машинными обучением за один взмах волшебной палочки</a></li><li><a href="https://tproger.ru/articles/kak-ya-sozdayu-analiticheskij-instrument-dlya-gruppovyh-chatov-telegram-konkurs-pet-proektov">Как я создаю аналитический инструмент для групповых чатов Telegram</a></li><li><a href="https://tproger.ru/articles/kak-ya-piwu-kompilyator-c-podobnogo-yazyka-s-nulya-i-zachem-konkurs-pet-proektov">Как я пишу компилятор C-подобного языка с нуля и зачем</a></li><li><a href="https://tproger.ru/articles/telegram-bot-api-na-kotlin-kak-ono-bylo">Telegram Bot API на Kotlin</a></li><li><a href="https://tproger.ru/articles/senior-junior-kursy-ot-programmistov-dlya-programmistov">Senior Junior. Курсы от программистов для программистов</a></li><li><a href="https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov">Менеджер паролей, который не хранит пароли</a></li><li><a href="https://tproger.ru/articles/brauzernaya-mmorpg-konkurs-pet-proektov">Браузерная MMORPG</a></li><li><a href="https://tproger.ru/articles/kak-ya-globalnye-chaty-v-2023-godu-predstavlyal-konkurs-pet-proektov">Как я глобальные чаты в 2023 году представлял</a></li><li><a href="https://tproger.ru/articles/gradcit-ai-fotoredaktor-konkurs-pet-proektov">GradCit: AI фоторедактор</a></li><li><a href="https://tproger.ru/articles/beta-versiya-vychesleniya-summy-postrojki-doma-s-ukazaniem-porametrov-konkurs-pet-proektov">Бета-версия вычислителя суммы постройки дома с указанием параметров</a></li><li><a href="https://tproger.ru/articles/kak-razrabatyvalos-mobilnoe-prilozhenie-novyj-treker-podpisok-nocta-konkurs-pet-proektov">Как разрабатывался трекер подписок Nocta</a></li><li><a href="https://tproger.ru/articles/testament-powagovaya-takticheskaya-rpg-v-unikalnom-settinge-pro-mifologiyu-v-sci-fi-konkurs-pet-proektov">TESTAMENT: пошаговая RPG про мифологию в sci-fi</a></li></ol><h2>Заключение</h2><p>Подпишитесь на тэг <a href="https://tproger.ru/tag/pet-projects-2023">Лучший пет-проект 2023</a>, чтобы не пропустить голосование и следить за обновлениями в личной ленте.</p><p>Желаем удачи!</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучший пет-проект 2023: запускаем конкурс</title>
      <link>https://tproger.ru/articles/luchwij-pet-proekt-2023-zapuskaem-konkurs</link>
      <comments>https://tproger.ru/articles/luchwij-pet-proekt-2023-zapuskaem-konkurs?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwij-pet-proekt-2023-zapuskaem-konkurs</guid>
      <description><![CDATA[<p>Tproger запускает новый конкурс на лучший пет-проект среди наших читателей. Напишите статью и получите славу, обожание и мерч от редакции.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwij-pet-proekt-2023-zapuskaem-konkurs">Лучший пет-проект 2023: запускаем конкурс</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Oct 2023 08:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Мы запускаем новый конкурс на лучший пет-проект среди наших читателей.</p><p>Вот, что нужно сделать, чтобы принять участие. Зайдите в <a href="https://tproger.ru/editor">редактор</a>, напишите статью о вашем пет-проекте и отправьте её на модерацию.</p><p>Взамен вы получите славу, обожание публики и мерч от редакции Tproger.</p><h2>Требования к материалу</h2><p>Статья должна включать пару слов об авторе, название и описание проекта и ссылку на GitHub.</p><p>В заголовке укажите, что ваша статья написана для участия в конкурсе, чтобы мы не упустили ее. Пример:</p><p>Будет плюсом, если вы расскажете о процессе работы: как вам пришла идея проекта, с какими трудностями вы столкнулись, как вы их решили и какую пользу извлекли из опыта по завершении работы.</p><p>Совсем классно, если вы приведете примеры кода, объясните, как тот работает, и расскажете об использованных библиотеках и инструментах.</p><h2>Этапы конкурса</h2><p>Конкурс будет проходить в два этапа.</p><h3>Первый этап</h3><p>Со 10 по 30 октября вы пишете статьи о своих пет-проектах и публикуете их на сайте.</p><p>Через три недели, 30 октября, редакция Tproger выберет проекты, которые больше всего понравились читателям. Критерии оценки — количество просмотров, лайков и комментариев под статьями участников на сайте.</p><h3>Второй этап</h3><p>30 октября стартует голосование на сайте, в ходе которого пользователи смогут выбрать лучший пет-проект.</p><h2>Призы для участников</h2><p>Все участники, которые пройдут первый этап, получат призы.</p><ul><li>С 1 по 5 место: худи с логотипом Tproger и стикеры от редакции.</li><li>С 6 по 10 место: футболки с логотипом Tproger и стикеры.</li></ul><h2>Заключение</h2><p>Не бойтесь рассказать о себе и своих достижениях, пишите легко и непринуждённо, и тогда ваши труды будут вознаграждены. 🙂</p><p>Подпишитесь на тэг <a href="https://tproger.ru/tag/pet-projects-2023">Лучший пет-проект 2023</a>, чтобы не пропустить статьи от участников конкурса и следить за обновлениями в личной ленте.</p><p>Желаем удачи!</p>]]></content:encoded>
    </item>
    <item>
      <title>Прокачайте сервер — игра от Tproger, Intel и Selectel</title>
      <link>https://tproger.ru/interactive/prokachajte-server-igra-ot-selectel-x-intel</link>
      <comments>https://tproger.ru/interactive/prokachajte-server-igra-ot-selectel-x-intel?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/interactive/prokachajte-server-igra-ot-selectel-x-intel</guid>
      <description><![CDATA[<p>Головоломка от Tproger, Intel и Selectel — пройдите игру и получите шанс выиграть плюшевого Тирекса или промокод на продукты Selectel.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/interactive/prokachajte-server-igra-ot-selectel-x-intel">Прокачайте сервер — игра от Tproger, Intel и Selectel</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Игры]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 09 Dec 2021 15:04:23 GMT</pubDate>
      <content:encoded><![CDATA[<figure><img src="https://tproger.ru/special/pipe/img/other/logo_black.svg" alt="" /></figure><p>Положение о конкурсе</p>]]></content:encoded>
    </item>
    <item>
      <title>Итоги конкурса к #фичавгусту: лучшие истории и специальные награды</title>
      <link>https://tproger.ru/articles/itogi-konkursa-k-fichavgustu-luchshie-istorii-i-specialnye-nagrady</link>
      <comments>https://tproger.ru/articles/itogi-konkursa-k-fichavgustu-luchshie-istorii-i-specialnye-nagrady?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/itogi-konkursa-k-fichavgustu-luchshie-istorii-i-specialnye-nagrady</guid>
      <description><![CDATA[<p>Конкурс #фичавгусту выбрал три лучшие истории о функциях по оценкам пользователей и редакции; победителей отметили специальными наградами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/itogi-konkursa-k-fichavgustu-luchshie-istorii-i-specialnye-nagrady">Итоги конкурса к #фичавгусту: лучшие истории и специальные награды</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 09 Sep 2021 07:51:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>В августе мы вместе с образовательной платформой OTUS запустили конкурс — собирали истории пользователей про самую интересную/смешную/странную/тупую фичу, которую им доводилось реализовывать. Получили два десятка откликов, <a href="https://tproger.ru/articles/samye-interesnye-strannye-i-glupye-fichi-kotorye-delali-nashi-chitateli/">опубликовали их в одном материале</a>, чтобы вам было удобно читать и голосовать.</p><p>Затем в дело вступила редакция, которая тоже отдавала свои голоса за истории участников конкурса. Получилась настоящая заруба (таблица со всеми оценками <a href="https://docs.google.com/spreadsheets/d/15g8F5-sx_4qbPgFZ0VVw8uEgomQ7-uidhuuVRck5sWE/edit#gid=0">доступна для просмотра</a>).</p><p>Наконец мы переходим к главному — объявлению лучших историй.</p><h2>Первое место — история про кастомный шрифт под единственный символ</h2><p>Автор этой истории получит любой видеокурс OTUS из <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">этого списка</a> в подарок + скидку 50 % на <a href="https://otus.ru/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">любой курс OTUS</a>, а также мерч Tproger:</p><p>«Однажды по воле дизайнеров мне пришлось писать кастомный шрифт под один-единственный символ, чтобы ставить его в поле ввода пароля вместо стандартной точки. Решением этой задачи я занимался в течение нескольких недель. Но не постоянно, а потому что я делал разного рода костыльные решения, отрицая необходимость писать кастомный шрифт. Но в итоге всё равно пришлось это делать».</p><p>Подробности:</p><h2>Второе место — история о том, как заказчик «изобрёл» регулярные выражения</h2><p>Автор этой истории получит любой видеокурс OTUS из <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">этого списка</a> в подарок и мерч Tproger:</p><p>«Я бэкенд-веб-разработчик. Как-то раз в форме поиска объектов заказчик захотел поддержку символов. (Любой символ) и * (любые символы). Вроде обычная просьба, но это усыпило мою бдительность, потому что дальше заказчик захотел добавить новые спецсимволы, типа [1,2] (либо 1, либо 2) с поддержкой старых. В этот момент я уже начал чуять неладное. Но было уже поздно.</p><p>В итоге заказчик отправил мне документ, в котором он „изобрёл“ регулярные выражения. Правда, чуть более самописный, корявенький и урезанный вариант. С огромным восторгом и предвкушением оваций он ждал моей реакции и признания его гением. Кто-то другой на моём месте ему бы рассказал, что такое уже есть, но не отказываться же от доработки, за которую тебе ещё неплохо заплатят ?».</p><h2>Третье место — история про прозрачный фон на сайте</h2><p>Автор этой истории тоже получит любой видеокурс OTUS из <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">этого списка</a> в подарок и мерч Tproger:</p><p>«Недавно заказчик сайта-визитки сказал, что его не устраивает белый фон. Достаточно долго я ему предлагал разные варианты, но потом он взял и попросил прозрачный фон. Чтобы показывало то, на что смотрит устройство.</p><p>Реализация на первый взгляд была невозможна. После изучения я сообщил заказчику, что это возможно сделать только для смартфонов. Он не поверил и начал спорить. Я объяснял, что у компов нет камеры, а пользователи смартфонов должны будут давать разрешение. Но в итоге он сказал, что я плохой программист, и отказался от работы со мной».</p><h2>Специальные награды от редакции</h2><p>Мы решили наградить ещё двух участников конкурса. Они получат мерч Tproger.</p><p>Автор истории про подставу от ФНС, которая в голосовании редакции заняла третье место:</p><p>«Работая над одним приложением, я решил внедрить возможность сканировать кассовые чеки. К счастью, на тот момент у ФНС России была такая возможность через GET запросы. Поковырявшись в одной статье, которая описывала работу API от ФНС, я смог реализовать сканирование чеков на Kotlin. Собственно, всё было готово, оставалось только сделать обработку полученного JSON, и я отложил это дело, занявшись другими задачами.</p><p>Но когда через две недели я вернулся к этому API, обнаружил, что оно больше не работает. ФНС без объявления войны поменяли не только ссылку для запроса, но и всю работу API. Проблема в том, что и для первой версии документации нет, а для второй тем более. Как сказал один человек на 4PDA: „Ну вот, опять придётся декомпилировать приложение ФНС, чтобы разобраться в API“.</p><p>Оказалось, что теперь нужен был какой-то код, который периодически меняется, что-то вроде капчи от таких, как я. Не понимаю, зачем это делать. Ведь информацию о чеке можно было получить только с самим чеком и то, пока ему не исполнилось пару месяцев. Вот так и пришлось отказаться от этого функционала. Жаль, что ФНС не делает документации для своих API и вообще пытается их закрыть от других разработчиков».</p><p>А также автор истории про сквозную LDAP аутентификацию, которая не получилась — за то, что <a href="https://tproger.ru/articles/skvoznaja-ldap-autentifikacija-kotoraja-ne-poluchilas/">написал подробный материал</a> о своих трудах.</p><p>Кроме того, все участники конкурса получат от OTUS промокод на скидку 10%. Он будет действовать до конца 2021 года.</p>]]></content:encoded>
    </item>
    <item>
      <title>Самые интересные, странные и глупые фичи, которые делали наши читатели</title>
      <link>https://tproger.ru/articles/samye-interesnye-strannye-i-glupye-fichi-kotorye-delali-nashi-chitateli</link>
      <comments>https://tproger.ru/articles/samye-interesnye-strannye-i-glupye-fichi-kotorye-delali-nashi-chitateli?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/samye-interesnye-strannye-i-glupye-fichi-kotorye-delali-nashi-chitateli</guid>
      <description><![CDATA[<p>Почти два десятка историй читателей посвящены необычным, странным и неудачным IT-фичам; лучшую историю выбирают по оценкам аудитории.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/samye-interesnye-strannye-i-glupye-fichi-kotorye-delali-nashi-chitateli">Самые интересные, странные и глупые фичи, которые делали наши читатели</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Юмор]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 01 Sep 2021 11:51:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>Закончился #фичавгуст — так в нашем календаре называется последний месяц лета. Чтобы отметить его, мы вместе с образовательной платформой OTUS <a href="https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok/">придумали конкурс</a> и собрали истории пользователей про самую интересную/смешную/странную/тупую фичу, которую им доводилось реализовывать.</p><p>Теперь настало время выбирать лучшие истории! Мы собрали их в один материал, чтобы было удобно голосовать.</p><p>Истории незначительно отредактированы без искажения смысла.</p><h2>История 1: рандомное появление ошибки со страшными текстами и кодами</h2><p>В небольшой системе учёта, написанной буквально на коленке, у пользователя раз в месяц в случайный момент времени появлялась ошибка (точнее, messageBox со страшными для пользователя текстами и кодами). Через 10-15 минут ошибка переставала появляться. За эти 10-15 минут как раз приходил админ, а «ошибки» уже нет. Лицо пользователя в этот момент — «Это! Просто! Нечто!»</p><p>P.S. Система некритична и на работоспособность подразделения особо не влияет:)</p><h2>История 2: кастомный шрифт под единственный символ</h2><p>Однажды по воле дизайнеров мне пришлось писать кастомный шрифт под один-единственный символ, чтобы ставить его в поле ввода пароля вместо стандартной точки. Решением этой задачи я занимался в течение нескольких недель. Но не постоянно, а потому что я делал разного рода костыльные решения, отрицая необходимость писать кастомный шрифт. Но в итоге всё равно пришлось это делать.</p><p>Подробности этой истории:</p><h2>История 3: «Волосы Трампа»</h2><p>«Волосы Трампа» — признак для линейной регрессии с задачей оценить уровень юмора газетного заголовка. При добавлений признака «trump» и «hair» как признака уровня юмора точность модели возросла. Это была имплементация в рамках соревнования Sem-Eval 2020 Task 7: Assessing Humor in Edited News Headlines.</p><h2>История 4: прозрачный фон на сайте</h2><p>Недавно заказчик сайта-визитки сказал, что его не устраивает белый фон. Достаточно долго я ему предлагал разные варианты, но потом он взял и попросил прозрачный фон. Чтобы показывало то, на что смотрит устройство.</p><p>Реализация на первый взгляд была невозможна. После изучения я сообщил заказчику, что это возможно сделать только для смартфонов. Он не поверил и начал спорить. Я объяснял, что у компов нет камеры, а пользователи смартфонов должны будут давать разрешение. Но в итоге он сказал, что я плохой программист, и отказался от работы со мной.</p><h2>История 5: школьный проект с сообщением, которое никто не должен был видеть</h2><p>Делал школьный мини-проект на Flask и HTML+CSS, домашнее задание. В вёрстке сделал кнопку, которая показывала сообщение «С днём геев!». Это была то ли шутка, то ли часть для тестирования, но я её оставил. Во время проверки учитель нажал на эту кнопку и увидел сообщение.</p><h2>История 6: команда для просмотра текущего времени в чат-боте</h2><p>Реализовал команду «!время» для чат-бота, которая возвращает текущее время. Юмор в том, что на сообщениях в чате и так видно время отправки.</p><h2>История 7: Discord-бот для отслеживания тредов на 2ch</h2><p>Discord-бот, который уведомляет о наличии фап-тредов на 2ch. Далее был добавлен фильтр для webm-тредов.</p><h2>История 8: обязательное указание компании для пользователей</h2><p>Сделали поле «Название компании» обязательным для пользователей, которые выбирают персональный план. Тут же получили отзыв от разъярённого пользователя: «Hey idiots! I don’t have a company! That is why I am signing up for the Single user only plan! Dipshits!» ¯ \ _ (ツ) _ / ¯</p><h2>История 9: самодельная настольная игра</h2><p>Как-то в детстве, в далеком 1999 году, когда не было настольных игр (у нас), мы с другом сделали настолку сами. Я был ИИ, а он игроком. Все фичи, которые я вставлял, попадали под категории: интересная, смешная, странная, тупая. Но помню я единственную: мэр города подавился хлебом и умер.</p><h2>История 10: генератор стендапов для Slack из Notion</h2><p>Бот забирает задачи с доски в Notion по API, без необходимости что-то копировать и вставлять. Работает на macOS в том числе, в любом браузере. Поддерживает два гендера для формулировок. Вы просто переходите по ссылке и ваш стендап уже готов.</p><figure><img src="https://media.tproger.ru/uploads/2021/09/image-2.png" alt="" /><figcaption>Доска с задачами в Notion</figcaption></figure><p>Несколько условий, чтобы магия работала:</p><ul><li>Свойство задачи со статусом должно называться Status.</li><li>Колонки с планами должны называться For today, In progress, «Сегодня» или «В работе».</li><li>Колонка с тем, что сделано, должна называться Completed или «Готово».</li><li>Доску нужно расшарить на бота.</li></ul><figure><img src="https://media.tproger.ru/uploads/2021/09/image-1-1.png" alt="" /><figcaption>Так выглядит стендап в Slack. Сначала завершенные дела, затем планы на день</figcaption></figure><h2>История 11: баг-фича с заказом пиццы</h2><p>Когда я только сел за код, писал программу для заказа пиццы в консоли. Я ошибся с if-ами и зачем-то написал цикл. Таким образом, пользователь мог заказывать много пицц разом. Мне понравилась эта идея и я доработал её. Это мой единственный случай с багом-фичей.</p><h2>История 12: преподаватель, который не проверяет возможности сервисов</h2><p>В качестве семестрового проекта я работал над очередным клоном Minecraft на Unity. И всё было неплохо, пока очередным заданием не стала реализация режима генерации мира на основе карты. То есть нужно было использовать данные реального мира, чтобы определить высоту поверхности, биом и подобное.</p><p>И всё было бы ничего, если бы сервис, который мне сказали использовать для получения карты, предоставлял эти данные. Только вот он этого не делал. Преподаватель пренебрёг доводами разума, поэтому мне пришлось использовать API совершенно другого сервиса, чтобы получить необходимые данные.</p><h2>История 13: функция для удаления дублей стран</h2><p>Однажды я работал с TDLib, и когда запрашивал список стран, она всегда возвращала каждой по две. И я написал функцию, которая возвращает список, но только с каждым вторым элементом. Самая тупая фича.</p><h2>История 14: сквозная LDAP аутентификация, которая не получилась</h2><p>Задачей была реализация сквозной аутентификации LDAP с сервером Active Directory, чтобы пользователи не вводили пароль при входе в приложение, единожды привязав свою учётку Windows.</p><p>Первый прототип получился за 1-2 недели. Он состоял из небольшого количества JS-кода и двух простейших AJAX-запросов на фронте, а также одного простенького servlet’a на бэке. Использовал я SPNEGO/Kerberos, найдя какую-то захудалую JAR’ку в интернете. При входе пользователя в систему его перекидывало на login-форму, там то фоном и шёл один из AJAX-запросов, который проверял, кто пришёл и привязана ли его учётка Active Directory к учётной записи в приложении.</p><p>У большинства пользователей фича не просто не работала, но и крашила все приложения. В основном это было связано с очень старыми версиями IE и Windows на компьютерах сотрудников. Ведь тестировал-то всё это дело ИТ-отдел, а у нас у всех свежая винда, обновления, браузеры.</p><p>Каждый день мы собирались на совещания с видеосвязью, и пользователи стримили нам свою боль. Через месяц таких мучений был написан подробный гайд о том, как настроить свой IE или Chrome для успешной работы, какие галочки снять, какие поставить, какие настройки поменять в ОС. Занимал он примерно две страницы в Word-документе.</p><p>В итоге со временем какие-то баги ушли, с какими-то люди научились жить и ловко работать в нескольких окнах браузера, копируя ссылки, вырезая какие-то параметры из строки и т.д. Но порой мы всё так же собирались, смотрели на чей-то квадратный экран и то как там ничего не работает. Со временем был написан тогл, который отключал все попытки фронта к LDAP-аутентификации. Он был включен по умолчанию, но пользователь мог его выключить. Однако IE и в таких случаях как-то удавалось ломаться.</p><p>Подробности этой истории:</p><h2>История 15: изобретение регулярных выражений</h2><p>Я бэкенд-веб-разработчик. Как-то раз в форме поиска объектов заказчик захотел поддержку символов. (Любой символ) и * (любые символы). Вроде обычная просьба, но это усыпило мою бдительность, потому что дальше заказчик захотел добавить новые спецсимволы, типа [1,2] (либо 1, либо 2) с поддержкой старых. В этот момент я уже начал чуять неладное. Но было уже поздно.</p><p>В итоге заказчик отправил мне документ, в котором он «изобрёл» регулярные выражения. Правда, чуть более самописный, корявенький и урезанный вариант. С огромным восторгом и предвкушением оваций он ждал моей реакции и признания его гением. Кто-то другой на моём месте ему бы рассказал, что такое уже есть, но не отказываться же от доработки, за которую тебе ещё неплохо заплатят ?</p><h2>История 16: подстава от ФНС</h2><p>Работая над одним приложением, я решил внедрить возможность сканировать кассовые чеки. К счастью, на тот момент у ФНС России была такая возможность через GET запросы. Поковырявшись в одной статье, которая описывала работу API от ФНС, я смог реализовать сканирование чеков на Kotlin. Собственно, всё было готово, оставалось только сделать обработку полученного JSON, и я отложил это дело, занявшись другими задачами.</p><p>Но когда через две недели я вернулся к этому API, обнаружил, что оно больше не работает. ФНС без объявления войны поменяли не только ссылку для запроса, но и всю работу API. Проблема в том, что и для первой версии документации нет, а для второй тем более. Как сказал один человек на 4PDA: «Ну вот, опять придётся декомпилировать приложение ФНС, чтобы разобраться в API».</p><p>Оказалось, что теперь нужен был какой-то код, который периодически меняется, что-то вроде капчи от таких, как я. Не понимаю, зачем это делать. Ведь информацию о чеке можно было получить только с самим чеком и то, пока ему не исполнилось пару месяцев. Вот так и пришлось отказаться от этого функционала. Жаль, что ФНС не делает документации для своих API и вообще пытается их закрыть от других разработчиков.</p><h2>История 17: «бан» за спам</h2><p>Фича произошла в момент раннего создания игрового бота в Telegram, на которого пока забил. При флуде пару раз одними или разными командами обработчик подлагивал и только после таймаута отлагивал и мог обрабатывать команды данного пользователя.</p><p>Была настроена асинхронность, поэтому, когда поток доходил до таймаута, он закрывался и мог снова отвечать этому юзеру. И потом при тесте мои друзья спрашивали у меня, на сколько мой бот банит за спам:)</p><h2>История 18: 2 дня на оптимизацию скорости печати этикеток</h2><p>Нужно было реализовать печать этикеток с мобильного приложения на портативных термопринтерах. Мой тимлид реализовал этот функционал, но заказчика не устроила скорость печати (6 секунд с учётом подключения). Следующие за этим два дня моей жизни ушли на оптимизацию…</p><h2>История 19: неуловимые тени на карточках</h2><p>Как-то дали таску сделать в одном Android-приложении тени на карточках. Неделю колупали код и стили, всё должно было работать, но теней нет, либо есть, но уродские. Спустя неделю замечаем, что в манифесте проекта указано: аппаратное ускорение = false. По гиту эту строчку я поставил 2 года назад, непонятно зачем. Меняем на true и всё работает ?‍♂️</p><h2>Проголосуйте за истории, которые вам понравились. Мы будем учитывать ваши голоса, а также составим свой рейтинг.</h2><p>​Напомним про призы:</p><ul><li>Первое место — любой видеокурс из <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">этого списка</a> в подарок + скидка 50 % на <a href="https://otus.ru/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">любой курс OTUS</a>, а также мерч Tproger: футболка, наклейки.</li><li>Второе и третье места — любой видеокурс из <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">этого списка</a> в подарок и мерч Tproger: футболка, наклейки.</li></ul><p>Кроме того, все участники конкурса получат от OTUS промокод на скидку 10%. Он будет действовать до конца 2021 года.</p><p>Выбирайте все понравившиеся истории:</p>]]></content:encoded>
    </item>
    <item>
      <title>Сквозная LDAP аутентификация, которая не получилась</title>
      <link>https://tproger.ru/articles/skvoznaja-ldap-autentifikacija-kotoraja-ne-poluchilas</link>
      <comments>https://tproger.ru/articles/skvoznaja-ldap-autentifikacija-kotoraja-ne-poluchilas?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/skvoznaja-ldap-autentifikacija-kotoraja-ne-poluchilas</guid>
      <description><![CDATA[<p>История о том, как запланированные 10 дней вылились в 1-2 месяца насыщенной разработки и ещё в полгода-год болезненной поддержки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/skvoznaja-ldap-autentifikacija-kotoraja-ne-poluchilas">Сквозная LDAP аутентификация, которая не получилась</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Пост пользователя]]></category>
      <category><![CDATA[Баги и ошибки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 27 Aug 2021 11:04:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Лет 7 назад меня взяли ведущим программистом Java в один из крупнейших телеком-операторов. Мне предстояло разрабатывать приложение для менеджеров/сотрудников компании, где они ведут свои дела: заводят заявки, записывают клиентов, управляют услугами и пакетами, что-то согласовывают и т.п. В общем такой самодельный CRM федерального масштаба.</p><p>Опыта тогда у меня было немного (1,5 года QA Automation). Но программистов опытнее в команде первое время не было. И вот на первом же планировании ко мне приходят с пачкой задач, чтобы я выставил им оценки.</p><p>Одной из таких задач была сквозная аутентификация LDAP с сервером Active Directory, чтобы пользователи не вводили пароль при входе в приложение, единожды привязав свою учётку Windows. Немного подумав, я указал, что потребуется всего лишь 5 дней. Тогда я не осознавал всей сложности оценки задач и тленности бытия, но заботливый project manager увеличил срок до 10-15 дней. Да, тогда ещё не было модных story points, мы водопадили как могли.</p><h2>Разработка тихого монстра</h2><p>Задача прилетела в работу через месяц. К этому времени я уже немного размялся на формошлёпстве и почитал про LDAP. Первый прототип получился за 1-2 недели.</p><p>Он состоял из небольшого количества JS-кода и двух простейших AJAX-запросов на фронте, а также одного простенького servlet’a на бэке. Использовал я SPNEGO/Kerberos, найдя какую-то захудалую JAR’ку в интернете.</p><p>При входе пользователя в систему его перекидывало на login-форму, там то фоном и шёл один из AJAX-запросов, который проверял, кто пришёл и привязана ли его учётка Active Directory к учётной записи в приложении.</p><p>Если не привязана, то это можно было сделать в разделе «Профиль», где и был второй AJAX-запрос на валидацию и привязку учётной записи. После этого при последующем входе на форме логина не надо было вводить пароль, пользователь в принципе уже не замечал эту форму, т.к. аутентификация быстро отрабатывала и происходил редирект на главный экран приложения.</p><p>Прототип заработал локально и на dev-стенде. Он даже уже заработал у всех трёх программистов в кабинете и у аналитика из соседнего кабинета. Поэтому мы решили, что дело идёт к релизу. Но вдруг выяснилось, что у PM’a ничего не работает, а он территориально находился в Перми в то время как мы находились в Екатеринбурге. Мы по классике схлестнулись в битве «Но на моём компе же работает!», тем более таких компьютеров было аж 4.</p><p>Так, протестировав нашу поделку на ещё нескольких людях из разных регионов, мы уже поняли, что у нас может быть не один домен AD, а несколько, под каждый регион свой, и домены могут быть двух-, трёх-, четырёхуровневыми. С этими познаниями и ощущениями боли мы ушли ещё на 2-4 недели доработок. В итоге мы худо-бедно прошли ПСИ, на котором были некоторые проблемы несовместимости с IE, и пошли с нашей классной фичей и некоторыми доработками в ПРОМ.</p><h2>Серые тучи несовместимости</h2><p>Теперь начинается то, ради чего я вообще и решил рассказать эту историю. В первый же день после релиза жизнь моя омрачилась и пропиталась серостью и болью. Всё вокруг потемнело, обедать я стал с чувством некоторой обеспокоенности.</p><p>У большинства пользователей фича не просто не работала, но и крашила все приложения. В основном это было связано с очень старыми версиями IE и Windows на компьютерах сотрудников. Ведь тестировал-то всё это дело ИТ-отдел, а у нас у всех свежая винда, обновления, браузеры.</p><p>Всё омрачалось тем, что основным разработчиком приложения был крупный подрядчик, который при любом удобном случае указывал, что мы совсем безалаберные орки, которые всё тут сломали, а они высшие эльфы.</p><p>Так вот, поговорим про баги и их фиксы или безысходность.</p><ul><li>Кого-то из пользователей просто бесконечно редиректило по кругу на странице login’a. Был написан фикс, который отслеживал такие частые редиректы и правил хедеры в запросе и дальнейшую логику поведения.</li><li>Кто-то не мог заводить заявки и работать с документами. Всё это происходило, т.к. IE начинал пихать ненужные хедеры аутентификации в запросы к статике и бэку (это было видно по логам nginx) и сам же от этого помирал. Были и другие проблемы совместимости.</li><li>Но были и те, у кого всё хорошо работало, но не работала сама сквозная аутентификация, а они её очень хотели, удобно же — залогинился в Windows и больше ничего вводить не надо, киллер фича!</li></ul><p>Каждый день мы собирались на совещания с видеосвязью, и пользователи стримили нам свою боль. Через месяц таких мучений был написан подробный гайд о том, как настроить свой IE или Chrome для успешной работы, какие галочки снять, какие поставить, какие настройки поменять в ОС. Занимал он примерно две страницы в Word-документе.</p><p>В итоге со временем какие-то баги ушли, с какими-то люди научились жить и ловко работать в нескольких окнах браузера, копируя ссылки, вырезая какие-то параметры из строки и т.д. Но порой мы всё так же собирались, смотрели на чей-то квадратный экран и то как там ничего не работает. Со временем был написан тогл, который отключал все попытки фронта к LDAP-аутентификации. Он был включен по умолчанию, но пользователь мог его выключить. Однако IE и в таких случаях как-то удавалось ломаться.</p><p>За всё время работы в компании я периодически мониторил метрики использования данной фичи. Вроде как успешно ей пользовалось не более 5-10% пользователей. Надеюсь, теперь у большинства пользователей эта аутентификация работает. Или хотя бы не мешает им жить. Ещё надеюсь, что я немного сгустил краски и на самом деле всё было не так плохо.</p><p>В итоге эти запланированные 10 дней вылились в 1-2 месяца насыщенной разработки и настройки и ещё в полгода-год болезненной поддержки.</p><p>***</p><p>Эту историю наш пользователь написал в рамках участия в конкурсе, посвящённому #фичавгусту, который мы <a href="https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok/">проводим вместе с OTUS</a>. Его участники рассказывают на страницах нашего сайта про самую интересную/смешную/странную/тупую фичу, которую вам доводилось реализовывать. Победителей мы выберем по рейтингу, который будет сформирован на основании оценок пользователей и редакции сайта.</p><p>Если вам понравилась эта история, проголосуйте за неё.</p><p>Под постом есть блок с реакциями. Если история вам понравилась, ставьте палец вверх. Только эти реакции будут учитываться при составлении рейтинга. Другие эмоции подсчитываться не будут.</p><p>А вот история другого участника — он <a href="https://tproger.ru/articles/kak-ja-napisal-kastomnyj-shrift-radi-odnogo-simvola-no-snachala-nedelju-stradal/">написал кастомный шрифт ради одного символа</a>. Но сначала неделю страдал.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как я написал кастомный шрифт ради одного символа. Но сначала неделю страдал</title>
      <link>https://tproger.ru/articles/kak-ja-napisal-kastomnyj-shrift-radi-odnogo-simvola-no-snachala-nedelju-stradal</link>
      <comments>https://tproger.ru/articles/kak-ja-napisal-kastomnyj-shrift-radi-odnogo-simvola-no-snachala-nedelju-stradal?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[daneelzam]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ja-napisal-kastomnyj-shrift-radi-odnogo-simvola-no-snachala-nedelju-stradal</guid>
      <description><![CDATA[<p>Поучительная история о том, почему нужно хорошо подумать, прежде чем писать код, и почему стоит просить о помощи как можно раньше.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ja-napisal-kastomnyj-shrift-radi-odnogo-simvola-no-snachala-nedelju-stradal">Как я написал кастомный шрифт ради одного символа. Но сначала неделю страдал</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Пост пользователя]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Aug 2021 10:33:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет, я Frontend Junior Developer в одной продуктовой компании, это моя первая работа в IT.</p><p>На момент событий шел примерно третий месяц в новой сфере. Мне отдали дизайн странички, где в полях, предназначенных для ввода пароля (input type=password) были использованы не обычные точки (так называемые bullet), а очень большие. Если обычная точка в пароле — это ·, то точка, которую необходимо было отрисовать, выглядела так: <b>•</b>.</p><p>Первая идея, которая пришла в мою неопытную голову: пойти спросить продакта, действительно ли нам необходимы именно такие точки в пароле? А еще рассказать ей, как непросто взаимодействовать с такими сущностями, как input. Это своеобразные и своенравные элементы, с ними проще не связываться. Однако мне объяснили, что такой дизайн уже был согласован с владельцами бизнеса, а их своенравность поспорит со своенравностью input-ов. Так что варианта не делать эти прекрасные буллеты у меня не осталось.</p><p>Дальше я, конечно, начал гуглить, как же мне поступить с этими точками. Буквально в первые 15 минут нашёл замечательную <a href="https://github.com/Mottie/input-password-bullet">статью</a>. В ней предлагалось создать кастомный шрифт с одним символом bullet, который необходимо подменять динамически, если у input type=password. Однако тогда это решение показалось мне излишним.</p><h2>Безуспешные поиски решения</h2><p>Я пошёл по пути наименьшего сопротивления и сделал «гениальный» в своей простоте шаг — увеличил шрифт внутри пароля до 40px. Это увеличивало стандартную точку до нужного по дизайну размера. Правда, как неопытный разработчик, я не увидел, что в этом решении были подводные камни. Они вылезли на стадии тестирования.</p><p>Оказалось, что когда браузер Safari видит на странице поле для пароля, он предлагает «Создать надёжный пароль» или «Вставить сохранённый пароль». Это выглядит как появляющееся окошко рядом с полем. Однако если у вашего поля огромный шрифт, то и у этих появляющихся окошек будет огромный шрифт. Такое поведение никто не захочет увидеть у себя на сайте: заходишь на страницу, нажимаешь на поле ввода пароля и получаешь гигантское выпадающее окно. Это нужно было фиксить.</p><p>Тогда я подумал: «Возьму и ограничу эту возможность браузера, чтобы Safari вовсе ничего не предлагал пользователю». Первый же запрос в гугле скажет вам, что если вы хотите ограничить автозаполнение поля, то нужно указать ему атрибут autocomplete=off, и будет вам счастье. Но не верьте этим статьям и подсказкам. Это решение нерабочее, так как браузеры в какой-то момент решили, что они не будут обращать внимание на этот атрибут. Главной причиной игнорирования этого атрибута стало то, что автозаполнение ограничивает владелец сайта, а недовольство пользователя направлено на браузер, который не показывает сохранённый пароль.</p><p>Я проиграл битву с автозаполнением пароля, но война продолжалась. Я начал думать, как решить проблему без увеличения шрифта. Моя новая идея заключалась в том, чтобы показывать пользователю обычное поле ввода (input type=text), но подменять там все знаки на необходимые мне, а пароль сохранять где-то рядом — в переменной. Это решение, конечно, сомнительно в отношении безопасности, но тогда я не думал об этом, передо мной была задача и казавшееся гениальным решение.</p><p>В этот раз главный вызов был в том, как сохранять пароль на лету в одну переменную, а пользователю показывать набор одинаковых символов. Для этого нужно было каждый символ, который ввёл пользователь, записывать в отдельную переменную, а в поле выводить большую точку. У меня это получилось при посимвольном вводе пароля, но когда я осознал, что никакой гарантии посимвольного ввода нет, и что пользователь может просто вставить пароль целиком, или удалить сразу несколько символов, я понял, что и эту битву мне не выиграть.</p><h2>Решение: сделать кастомный шрифт!</h2><p>Мои попытки решить задачу продолжались не один день. Я придумывал решение, реализовывал его, отдавал на тестирование, мне прилетали баги, я пытался их фиксить, снова отдавал на тестирование, получал обратно уже с другими багами. И так по кругу около недели.</p><p>В итоге я пошёл за советом к старшим разработчикам. Конечно, первая мысль, которая настигла каждого, всё же отбить у продакта желание менять поведение input-ов и оставить точки прежними. Дальше они проходили похожий путь размышлений что и я, но опытность в том и заключается, что они на ранней стадии понимали неудачность решения. В итоге мне сказали написать кастомный шрифт.</p><p>Сейчас у нас на сайте прекрасно работающие поля пароля с нужными по дизайну точками. Я же получил очень важный урок: прежде чем писать код, нужно хорошенько подумать, а не бросаться воплощать решение, которое первым приходит в голову. И ещё одно — нужно уметь просить помощи раньше, а не ждать почти неделю.</p><p>Ну а уж необходимость изменения стандартных точек в поле пароля, которая стоила как максимум недели работы неопытного разработчика, а как минимум написания кастомного шрифта для точек, вопрос открытый.</p><p>***</p><p>Эту историю наш пользователь написал в рамках участия в конкурсе, посвящённому #фичавгусту, который мы <a href="https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok/">проводим вместе с OTUS</a>. Чтобы принять в нём участие, нужно до 27 августа <a href="https://tproger.ru/editor/">рассказать</a> на страницах нашего сайта про самую интересную/смешную/странную/тупую фичу, которую вам доводилось реализовывать. Победителей мы выберем по рейтингу, который будет сформирован на основании оценок пользователей и редакции сайта.</p><p>Если вам понравилась эта история, проголосуйте за неё.</p><p>Под постом есть блок с реакциями. Если история вам понравилась, ставьте палец вверх. Только эти реакции будут учитываться при составлении рейтинга. Другие эмоции подсчитываться не будут.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сделали интересную фичу? Расскажите о ней и получите скидку или курс от OTUS в подарок</title>
      <link>https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok</link>
      <comments>https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok</guid>
      <description><![CDATA[<p>OTUS принимает истории об интересных, смешных и странных IT-фичах; участники могут получить скидку или курс за выбранные публикации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/sdelali-interesnuju-fichu-rasskazhite-o-nej-i-poluchite-skidku-ili-kurs-ot-otus-v-podarok">Сделали интересную фичу? Расскажите о ней и получите скидку или курс от OTUS в подарок</a>»</p>]]></description>
      <category><![CDATA[Конкурс Tproger]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 09 Aug 2021 15:24:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>В разгаре #фичавгуст — так называется последний месяц лета в нашем стильном календаре. В этой связи мы вместе с образовательной платформой OTUS придумали конкурс. Чтобы принять в нём участие, расскажите про самую интересную/смешную/странную/тупую фичу, которую вам доводилось реализовывать.</p><p>Добавили отслеживание чистки зубов в приложение фитнес-браслета, а им никто не пользовался? Сделали детектор спелости арбуза? Расскажите нам подробности! Можно даже показать код.</p><h2>Условия конкурса</h2><p>Чтобы принять участие в конкурсе, нужно подать заявку, а после её одобрения написать статью. Рассказать в ней про самую интересную/смешную/странную/тупую фичу, которую вам доводилось реализовывать. Победителей выберем по рейтингу, который будет сформирован на основании оценок пользователей и редакции сайта.</p><p>Положение о проведении конкурса</p><h2>Призы</h2><ul><li>Первое место — любой видеокурс <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">из этого списка</a> в подарок + скидка 50 % <a href="https://otus.ru/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">на любой курс OTUS</a>, а также мерч Tproger: футболка, наклейки.</li><li>Второе и третье места — любой видеокурс <a href="https://otus.ru/online/?utm_source=partners&amp;utm_medium=free&amp;utm_campaign=otus&amp;utm_term=tproger-aug21">из этого списка</a> в подарок и мерч Tproger: футболка, наклейки.</li></ul><p>Кроме того, все участники конкурса получат от OTUS промокод на скидку 10%. Он будет действовать до конца 2021 года.</p><h2>Подача заявки</h2><p>Чтобы подать заявку на участие в конкурсе, заполните форму. Заявки принимаются до 24 августа 2021 года.</p><p>Загрузка…</p>]]></content:encoded>
    </item>
  </channel>
</rss>