<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>KillWolfVlad</title><generator>teletype.in</generator><description><![CDATA[Node.js Backend Developer в Byndyusoft]]></description><image><url>https://img4.teletype.in/files/f9/cc/f9cca790-55a4-4970-a1b1-2a319e653eb2.png</url><title>KillWolfVlad</title><link>https://blog.killwolfvlad.ru/</link></image><link>https://blog.killwolfvlad.ru/?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=killwolfvlad</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/killwolfvlad?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/killwolfvlad?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Mon, 06 Apr 2026 23:57:02 GMT</pubDate><lastBuildDate>Mon, 06 Apr 2026 23:57:02 GMT</lastBuildDate><item><guid isPermaLink="true">https://blog.killwolfvlad.ru/2P_sEJoXvYz</guid><link>https://blog.killwolfvlad.ru/2P_sEJoXvYz?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=killwolfvlad</link><comments>https://blog.killwolfvlad.ru/2P_sEJoXvYz?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=killwolfvlad#comments</comments><dc:creator>killwolfvlad</dc:creator><title>Накручиваем голоса за предложения по улучшению GitKraken</title><pubDate>Tue, 24 Oct 2023 07:02:32 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/ee/b6/eeb639ae-759c-44c7-b67f-8d51236eb48c.png"></media:content><category>Код 🧑‍💻</category><description><![CDATA[<img src="https://img2.teletype.in/files/d8/aa/d8aa5f95-2182-4c69-8c09-20f826183b37.png"></img>Один наш заказчик переехал с привычного, всеми обожаемого GitHub в бездуховный GitHub Enterprise на своих серверах. А это значит что:]]></description><content:encoded><![CDATA[
  <figure id="TeYg" class="m_custom" data-caption-align="center">
    <img src="https://img2.teletype.in/files/d8/aa/d8aa5f95-2182-4c69-8c09-20f826183b37.png" width="823" />
    <figcaption><a href="https://feedback.gitkraken.com" target="_blank">https://feedback.gitkraken.com</a> — Наша сегодняшняя цель для накрутки голосов</figcaption>
  </figure>
  <p id="0wLv">Один наш заказчик переехал с привычного, всеми обожаемого GitHub в бездуховный GitHub Enterprise на своих серверах. А это значит что:</p>
  <ul id="KtPN">
    <li id="LQCV">Хана моей статистике (но это еще как-то можно пережить)</li>
  </ul>
  <figure id="W8yP" class="m_custom" data-caption-align="center">
    <img src="https://img2.teletype.in/files/54/d2/54d293ac-e621-4f3a-8ad5-ecc9d7ef9268.png" width="428.4563106796116" />
    <figcaption>Как программисты переживают из-за своей статистики на GitHub</figcaption>
  </figure>
  <ul id="vjCA">
    <li id="JAWo">И из-за какого-то бага GitKraken не показывает иконку организации у remote веток (а вот с этим я мириться не хочу)</li>
  </ul>
  <figure id="lyR1" class="m_custom" data-caption-align="center">
    <img src="https://img2.teletype.in/files/dd/88/dd8892ff-8715-41b5-851a-0b2286d36b42.png" width="501" />
    <figcaption>Вот это пустое пусто между компьютером и «master» на самом деле — отсутсвующая иконка организации, из-за чего работать очень не удобно</figcaption>
  </figure>
  <p id="8DYv">Уже есть <a href="https://feedback.gitkraken.com/suggestions/313734/visual-cues-for-branches-and-remotes" target="_blank">предложение</a> на исправление этого бага (и еще <a href="https://feedback.gitkraken.com/suggestions/256835/enable-to-change-icon-of-remote-repository" target="_blank">одно</a>), нужно только за него проголосовать. Я проголосовал. Но одного голоса мало чтобы что-то изменить. Поэтому я решил сделать бота который будет голосовать за меня. Много голосовать. Чтобы разработчики обратили внимание на эту проблему и поправили баг.</p>
  <p id="ilgm">Как устроено голосование? Когда вы заходите на сайт вам насыпают целую охапку кук. По кукам вас идентифицируют и не дают голосовать повторно. Куки можно очистить и таким образом проголосовать где-то 3 раза, потом количество голосов перестает расти. Они ограничивают по IP адресу, но на следующий день можно повторить (или сменить IP адрес).</p>
  <figure id="WBOX" class="m_custom" data-caption-align="center">
    <img src="https://img1.teletype.in/files/00/4c/004cfb7c-566f-4d82-8347-c9f9ac185045.png" width="332" />
    <figcaption>После стольких лет разработки корпоративных SPA уже забыл как работать с куками 😅</figcaption>
  </figure>
  <p id="c7dq">При нажатии на кнопку голосования идет отправка ничем не примечательного POST запроса, кроме разве что того, что вместе с куками надо передать CSRF-токен и текущую дату. CSRF-токен находится внутри html странички и его можно спокойно выдрать регуляркой.</p>
  <figure id="zrUS" class="m_custom" data-caption-align="center">
    <img src="https://img1.teletype.in/files/49/f6/49f66890-6e7d-412c-b73c-0896439e5f78.png" width="386" />
    <figcaption>Как бот смотрит на CSRF-токен</figcaption>
  </figure>
  <p id="c5hj">Быстренько это все кодируем, заливаем на GitHub, настраиваем cron-джобу в GitHub Actions и радуемся постепенно растущим голосам. Пока настроил запуск джобы раз в час, в ограничение по IP не должно упереться, т.к. у GitHub Actions используются широкий пул IP адресов. Ну и я не смог удержаться чтобы не голосовать и за другие предложения 😉.</p>
  <p id="qb1j">Исходники с деталями реализации: <a href="https://github.com/KillWolfVlad/gk-upvote" target="_blank">https://github.com/KillWolfVlad/gk-upvote</a>.</p>
  <hr />
  <p id="k1dA"><strong>UPD</strong> от 13.12.2023: Когда количество голосов перевалило за 1.4K, разработчики это заметили и подзакрутили гайки: теперь при попытке постучаться на сайт через GitHub Actions CloudFlare отдает 403. Также они «скрутили» обратно все накрученные голоса.</p>
  <p id="fXY6">Но главное — цель достигнута. Баг с отображением иконки у remote веток они починили. Так что этот проект можно со спокойной душой закрывать и идти дальше — покорять новые вершины 🏔️.</p>
  <hr />
  <p id="clfx">Хотите нанять команду профессионалов или хотите работать в команде профессионалов? Тогда приходите к нам в <a href="https://byndyusoft.com" target="_blank">https://byndyusoft.com</a>. Будем рады сотрудничеству 🤝</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://blog.killwolfvlad.ru/6GnJBb0Lgub</guid><link>https://blog.killwolfvlad.ru/6GnJBb0Lgub?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=killwolfvlad</link><comments>https://blog.killwolfvlad.ru/6GnJBb0Lgub?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=killwolfvlad#comments</comments><dc:creator>killwolfvlad</dc:creator><title>Манифест Программиста</title><pubDate>Fri, 16 Jun 2023 13:43:32 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/bb/4f/bb4ff7fb-8f16-4630-81c8-697dac3975fb.png"></media:content><category>Код 🧑‍💻</category><description><![CDATA[<img src="https://img2.teletype.in/files/d2/5c/d25c38e8-4036-4486-93ab-c6ddce345b4b.jpeg"></img>]]></description><content:encoded><![CDATA[
  <figure id="tKX1" class="m_retina" data-caption-align="center">
    <img src="https://img2.teletype.in/files/d2/5c/d25c38e8-4036-4486-93ab-c6ddce345b4b.jpeg" width="384" />
    <figcaption>Kandinsky 2.1</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ul id="ulTg">
      <li id="OHtO">Пиши код 🧑‍💻</li>
      <li id="7q4T">Автоматизируй свою жизнь ⚙️</li>
      <li id="0Got">Делай системы автономными 🤖</li>
    </ul>
  </section>

]]></content:encoded></item></channel></rss>