<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Артёма Агасиева</title>
<link>https://agasiev.com/</link>
<description>Telegram: @aagasiev</description>
<author>Артём Агасиев</author>
<language>ru</language>
<generator>E2 (v3576; Aegea)</generator>

<itunes:owner>
<itunes:name>Артём Агасиев</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Telegram: @aagasiev</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Кэшбэк 10% за торговлю через API</title>
<guid isPermaLink="false">127</guid>
<link>https://agasiev.com/all/keshbek-10-za-torgovlyu-cherez-api/</link>
<pubDate>Wed, 23 Jul 2025 16:06:15 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/keshbek-10-za-torgovlyu-cherez-api/</comments>
<description>
&lt;p&gt;Тинькоф &lt;a href="https://cdn.tbank.ru/static/documents/promo-cashback-for-users-tinkoff-invest-api-service-2.pdf"&gt;раздает кэшбэк 10%&lt;/a&gt; за торговлю через его API.&lt;/p&gt;
&lt;p&gt;Не знаю, подключается ли автоматически, поэтому можно просто совершить хотя бы одну сделку и написать в техподдержку.&lt;/p&gt;
&lt;p&gt;В целом, приятная скидка, если не хочется менять брокера.&lt;/p&gt;
</description>
</item>

<item>
<title>Платный маржин-колл</title>
<guid isPermaLink="false">126</guid>
<link>https://agasiev.com/all/platny-marzhin-koll/</link>
<pubDate>Wed, 23 Jul 2025 13:31:31 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/platny-marzhin-koll/</comments>
<description>
&lt;p&gt;Впервые в жизни вижу платный маржин-колл, хах.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/Screenshot-2025-07-23-at-13.28.57.png" width="1498" height="406" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Хотя, коллеги криптаны говорят, что у них это популярное явление.&lt;/p&gt;
&lt;p&gt;Алор брокер, мое почтение.&lt;/p&gt;
</description>
</item>

<item>
<title>Импортозамещение в ВТБ</title>
<guid isPermaLink="false">125</guid>
<link>https://agasiev.com/all/importozameschenie-v-vtb/</link>
<pubDate>Wed, 23 Jul 2025 13:24:07 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/importozameschenie-v-vtb/</comments>
<description>
&lt;p&gt;Штош,&lt;/p&gt;
&lt;p&gt;В ВТБ брокере из-за импортозамещения (базу поменяли?) сейчас невозможно заказать брокерский отчет за 2025 год целиком.&lt;/p&gt;
&lt;p&gt;Только с 1 мая по текущий день, а с января по апрель — вручную по месяцам. Ну или просить персонального менеджера себе собрать такой отчет.&lt;/p&gt;
&lt;p&gt;Это, мягко скажем, очень странное продуктовое решение. Ну сменили вы базу, окей, с кем не бывает, ну сделайте просто два запроса к двум разым базам (миграцию еще не придумали, допустим или это технически невероятно сложно), клиента же это волновать не должно совершенно.&lt;/p&gt;
&lt;p&gt;Странно это все.&lt;/p&gt;
</description>
</item>

<item>
<title>amoCRM &amp;amp; ИИ</title>
<guid isPermaLink="false">123</guid>
<link>https://agasiev.com/all/amocrm-ai/</link>
<pubDate>Fri, 14 Mar 2025 14:17:20 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/amocrm-ai/</comments>
<description>
&lt;p&gt;Смотрю &lt;a href="https://www.youtube.com/watch?v=diuoMiZj5UA"&gt;интервью&lt;/a&gt; с Михаилом Токовининым (amoCRM), он немного рассуждает про ИИ, рассказывает, что они внедряют его у себя: суммаризации, ответы, все дела.&lt;/p&gt;
&lt;p&gt;Интервьюер: Много людей пользуется этим функционалом?&lt;br /&gt;
Токовинин: Вообще не пользуются.&lt;/p&gt;
</description>
</item>

<item>
<title>Стек для реестра отечественного ПО</title>
<guid isPermaLink="false">121</guid>
<link>https://agasiev.com/all/stek-dlya-reestra-otechestvennogo-po/</link>
<pubDate>Wed, 30 Aug 2023 17:06:17 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/stek-dlya-reestra-otechestvennogo-po/</comments>
<description>
&lt;p&gt;Рекомендованный технологический стек для включения вашего софта в реестр отечественного ПО:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ru-ikt.ru/metodic"&gt;https://ru-ikt.ru/metodic&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>В Go завезли функции min и max</title>
<guid isPermaLink="false">119</guid>
<link>https://agasiev.com/all/v-go-zavezli-funkcii-min-i-max/</link>
<pubDate>Wed, 09 Aug 2023 19:41:23 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/v-go-zavezli-funkcii-min-i-max/</comments>
<description>
&lt;p&gt;Ура, в &lt;a href="https://go.dev/doc/go1.21"&gt;release notes&lt;/a&gt; к go 1.21:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The new functions min and max compute the smallest (or largest, for max) value of a fixed number of given arguments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Хвала богам, не прошло и 10 лет, как в Go завезли такие нужные функции — min и max.&lt;/p&gt;
</description>
</item>

<item>
<title>Определяем расширение файла в Python</title>
<guid isPermaLink="false">118</guid>
<link>https://agasiev.com/all/opredelyaem-rashireniye-fayla-v-python/</link>
<pubDate>Sat, 29 Jul 2023 03:57:17 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/opredelyaem-rashireniye-fayla-v-python/</comments>
<description>
&lt;p&gt;Потребовалось сейчас сделать быструю проверку того, что тип скачиваемого программой файла — картинка в формате webp, а если это не она, то не качать ее вовсе, ну или хотя бы не полностью.&lt;/p&gt;
&lt;p&gt;Самый быстрый способ — сделать HEAD запрос и проверить content-type, например, с помощью питоновской библиотеки mimetypes:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python3"&gt;
import requests
import mimetypes

r = requests.head("https://.../image.webp")
file_ext = mimetypes.guess_extension(r.headers.get("content-type"), strict=False)

if file_ext == "webp":
    pass
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Можно ли точно полагаться на ответ сервера? В целом, нет, ведь даже если этот заголовок с виду корректен, то в тело ответа сервер может запихнуть что угодно. Однако, можно отсеивать очевидно ненужные варианты типа text/plain или чего-то подобного.&lt;/p&gt;
&lt;p&gt;А еще бывает так, что нужный файл отдается с не тем типом контента. Например, в моем случае нужное хранилище AWS S3 грешило тем, что отдавало файл картинки с заголовком binary/octet-stream.&lt;/p&gt;
&lt;p&gt;А еще HEAD запрос может не поддерживаться веб-сервером.&lt;/p&gt;
&lt;p&gt;И что делать-то? Будем использовать обертку над libmagic, библиотеку &lt;a href="https://pypi.org/project/python-magic/"&gt;python-magic&lt;/a&gt;. Она позволит нам по небольшому чанку данных узнать mime тип получаемого контента.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python3"&gt;
import os
import magic
import requests
import mimetypes

local_filename = "/local/file/name.webp"

r = requests.get("https://.../image.webp", stream=True)
f = open(local_filename, "wb")

for chunk in r.iter_content(1024):
    mime = magic.from_buffer(chunk, mime=True)
    file_ext = mimetypes.guess_extension(mime, strict=False)

    if new_file_ext != "webp":
        f.close()
        os.remove(local_filename)
        break

    f.write(chunk)
else:
    f.close()
    # Тут уже что-то можем делать с полученным файлом.

&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Вроде, выглядит норм. Ну, еще обработку ошибок добавить бы не помешало, да.&lt;/p&gt;
&lt;p&gt;Но вот с точки зрения работы с сетью есть некоторые сомнения, что в случае вызова break, requests реально считает только 1 кб данных. Беглое гугление скорее усугубило мои сомнения. Надо иметь это в виду и как-нибудь на досуге реально протестировать.&lt;/p&gt;
&lt;p&gt;В общем, все.&lt;/p&gt;
&lt;p&gt;P.S. Если mimetypes не смогла определить расширение файла webp по типу контента image/webp, то его стоит добавить вручную в один из файлов mime.types вашей системы. Например, для Ubuntu это файл /etc/mime.types, в который надо добавить строку:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="shell"&gt;
image/webp    webp
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Другие файлики, откуда mimetypes может загружать себе данные, прописаны в самой библиотеке в массиве knownfiles:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python3"&gt;
knownfiles = [
    "/etc/mime.types",
    "/etc/httpd/mime.types",                    # Mac OS X
    "/etc/httpd/conf/mime.types",               # Apache
    "/etc/apache/mime.types",                   # Apache 1
    "/etc/apache2/mime.types",                  # Apache 2
    "/usr/local/etc/httpd/conf/mime.types",
    "/usr/local/lib/netscape/mime.types",
    "/usr/local/etc/httpd/conf/mime.types",     # Apache 1.2
    "/usr/local/etc/mime.types",                # Apache 1.3
]
&lt;/code&gt;
&lt;/pre&gt;
</description>
</item>

<item>
<title>Ошибки энкодера go-webp</title>
<guid isPermaLink="false">117</guid>
<link>https://agasiev.com/all/go-webp/</link>
<pubDate>Wed, 26 Jul 2023 04:10:56 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/go-webp/</comments>
<description>
&lt;p&gt;Оказывается, единственная работающая WebP энкодер библиотека &lt;a href="https://github.com/kolesa-team/go-webp"&gt;go-webp&lt;/a&gt; не умеет писать в bytes.Buffer через bufio.NewWriter() картинки маленького размера.&lt;/p&gt;
&lt;p&gt;То есть, у меня кропы пользовательских аватарок разрешением меньше 200х200 пикселей стабильно получались весом в ноль байт. Это разрешение может немного меняться, в зависимости от картинки.&lt;/p&gt;
&lt;p&gt;Однако, происходит это только в Lossy энкодере, Lossless работает нормально. Но кому он нужен, с его гигантскими файлами.&lt;/p&gt;
&lt;p&gt;Выход, внезапно, прост и банален: делать надо 1 в 1 как в официальном примере, то бишь, писать все сразу в файл. Тогда картинка получится нормального размера и все будет хорошо.&lt;/p&gt;
&lt;p&gt;Почему так происходит разбираться, если честно, лень. Если кто-то докопается до истины, отпишитесь пожалуйста.&lt;/p&gt;
</description>
</item>

<item>
<title>Gmail и точка</title>
<guid isPermaLink="false">116</guid>
<link>https://agasiev.com/all/gmail-i-tochka/</link>
<pubDate>Wed, 19 Jul 2023 15:21:17 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/gmail-i-tochka/</comments>
<description>
&lt;p&gt;Забавный факт, который мало кто учитывает при написании кода регистрации юзеров: точки в почтовом адресе Gmail &lt;a href="https://support.google.com/mail/answer/7436150"&gt;не имеют значения&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;То есть, с точки зрения гуглопочты, эти адреса равны между собой:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;johnsmith@gmail.com&lt;/li&gt;
&lt;li&gt;john.smith@gmail.com&lt;/li&gt;
&lt;li&gt;jo.hn.sm.ith@gmail.com&lt;/li&gt;
&lt;li&gt;j.o.h.n.s.m.i.t.h@gmail.com&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Этим хаком часто пользуются спамеры, которые могут зарегистрировать на одну почту кучу аккаунтов и атаковать с них ваш сервис.&lt;/p&gt;
&lt;p&gt;Так что, для внутреннего поиска/индексации все точки в gmail.com адресах лучше удалить. Главное, самому пользователю показывать почту в том виде, в котором он ее ввел, а то испугается и побежит в саппорт.&lt;/p&gt;
</description>
</item>

<item>
<title>Список доменов временных почтовых адресов</title>
<guid isPermaLink="false">113</guid>
<link>https://agasiev.com/all/spisok-domenov-vremennyh-pochtovyh-adresov/</link>
<pubDate>Mon, 05 Jun 2023 02:15:05 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/spisok-domenov-vremennyh-pochtovyh-adresov/</comments>
<description>
&lt;p&gt;Отличный список доменов временных почтовых адресов от &lt;a href="https://twitter.com/levelsio"&gt;Питера Левелса&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://photoai.com/tempEmailList.txt"&gt;https://photoai.com/tempEmailList.txt&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Можно прям все разом в бан, не ошибетесь, ничего нормального я с них никогда не видел.&lt;/p&gt;
</description>
</item>

<item>
<title>Перевыпуск квалифицированной электронной подписи на сайте налоговой</title>
<guid isPermaLink="false">111</guid>
<link>https://agasiev.com/all/perevypusk-kvalificirovannoy-elektronnoy-podpisi/</link>
<pubDate>Fri, 02 Jun 2023 01:12:14 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/perevypusk-kvalificirovannoy-elektronnoy-podpisi/</comments>
<description>
&lt;p&gt;Пришла пора обновить КЭП и тут, очень удачно, налоговая напомнила, что не обязательно топать ножками к ним в офис, достаточно просто перевыпустить подпись на их сайте. Но есть нюанс: для этого авторизовываться на сайте надо только с КЭП, а вход по логину/паролю или с авторизацией через Госуслуги ничего не даст. Так что, если подпись уже просрочена, придется по старинке топать ножками в это прекрасное заведение.&lt;/p&gt;
&lt;p&gt;Ну ладно, поехали. На старте, испытал приличное количество проблем и боли с заходом на сайт ФНС с ЭЦП, пока не запустил Яндекс браузер в режиме —no-sandbox (да, оказывается инструкции полезно читать):&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/Applications/Yandex.app/Contents/MacOS/Yandex --no-sandbox&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Работать в этом режиме постоянно я бы совершенно точно не стал, ибо крайне небезопасно и может повлечь исполнение вредоносного JS кода на компьютере. Но разочек можно, главное не увлекаться.&lt;/p&gt;
&lt;p&gt;Далее все просто, по шагам делаем запросы на выпуск подписи, на отзыв старой подписи и ее запись на токен и перезапускаем браузер. Ошибиться там практически невозможно.&lt;/p&gt;
&lt;p&gt;Если в процессе возникнут зависания с бесконечным ожиданием загрузки, недозагрузившиеся экраны и прочие странные ошибки, то у меня они устранялись выходом и входом заново по КЭП или простой перезагрузкой страницы.&lt;/p&gt;
</description>
</item>

<item>
<title>Stanford 2023 AI Index Report</title>
<guid isPermaLink="false">110</guid>
<link>https://agasiev.com/all/stanford-2023-ai-index-report/</link>
<pubDate>Tue, 04 Apr 2023 00:55:59 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/stanford-2023-ai-index-report/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/Stanford-HAI_AI-Index-Report_2023-(386-pgs).pdf-2023-04-04-00-54-33.png" width="1371" height="532" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://aiindex.stanford.edu/report/"&gt;Stanford 2023 AI Index Report&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Copilot vs DALL-E</title>
<guid isPermaLink="false">109</guid>
<link>https://agasiev.com/all/copilot-vs-dall-e/</link>
<pubDate>Tue, 28 Mar 2023 01:29:35 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/copilot-vs-dall-e/</comments>
<description>
&lt;p&gt;В чем принципиальное отличие Copilot от DALL-E, Midjourney и Stable Diffusion? Диффузионные модели &lt;i&gt;могут&lt;/i&gt; создавать законченное произведение, а Copilot умеет давать только контекстные подсказки, хоть и очень обширные и полезные. То есть, Copilot ускоряет, а DALL-E заменяет.&lt;/p&gt;
&lt;p&gt;Но вот, если он таки научится по нечетко сформулированному ТЗ (удачи, кек) создавать законченное ПО, то это будет оказывать влияние на программистов сильнее, чем сетки генерирующие искусство на художников. В искусстве все же ценится автор, его видение и персоналия, а на то как и кем написан код всем наплевать, пока он работает и не выполняет жизненно важные функции.&lt;/p&gt;
&lt;p&gt;В этот момент четко осознаешь, что ты точно такой же утилитарный инструмент в руках заказчика/начальника, как Copilot в твоих. В общем, забавно будет посмотреть куда это все разовьется :)&lt;/p&gt;
</description>
</item>

<item>
<title>Common Crawl в GPT-3</title>
<guid isPermaLink="false">107</guid>
<link>https://agasiev.com/all/common-crawl-v-gpt-3/</link>
<pubDate>Sun, 26 Mar 2023 02:23:32 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/common-crawl-v-gpt-3/</comments>
<description>
&lt;p&gt;&lt;a href="https://agasiev.com/all/sem-altman-na-podkaste-u-leksa-fridmana/"&gt;К слову, про обучающий датасет&lt;/a&gt; для GPT-3:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/2005.14165.pdf-2023-03-25-14-51-03.png" width="1282" height="428" alt="" /&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://commoncrawl.org/"&gt;Common Crawl&lt;/a&gt; — открытый индекс интернета, занимает самый большой объем в обучающих данных. Сейчас как раз пишу статью про него.&lt;/li&gt;
&lt;li&gt;WebText — датасет собранный OpenAI, лучшего качества чем CC.&lt;/li&gt;
&lt;li&gt;Books1 и Books2 — набор текстов книг. Слету не нашел на них ссылок.&lt;/li&gt;
&lt;li&gt;Wikipedia — только англоязычная часть.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Сэм Альтман на подкасте у Лекса Фридмана</title>
<guid isPermaLink="false">106</guid>
<link>https://agasiev.com/all/sem-altman-na-podkaste-u-leksa-fridmana/</link>
<pubDate>Sun, 26 Mar 2023 01:33:41 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/sem-altman-na-podkaste-u-leksa-fridmana/</comments>
<description>
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/L_Guz73e6fw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Неплохое, немного философское интервью с Сэмом Альтманом, CEO OpenAI.&lt;/p&gt;
&lt;p&gt;Меня интересовали технические подробности внутренней кухни компании, но их было мало. Про GPT-4, которая, как оказалось, была готова еще летом 2022, ничего нового, чего не было в релизе или в техническом отчете не добавили. Размер модели неизвестен, датасет неизвестен. Просто сказали, что брались как открытые (возможно, &lt;a href="https://agasiev.com/all/common-crawl-v-gpt-3/"&gt;Common Crawl как в GPT-3&lt;/a&gt;), так и проприетарные датасеты и полностью переработали пайплайн обучения.&lt;/p&gt;
&lt;p&gt;Однако, как мне кажется, одно из самых важных достижений было в том, что они научились предсказывать кривую обучения большой модели по предтренировке малой, что должно экономить кучу сил и времени на этапе подготовки к обучению большой модели. Получается что-то уровня фантастики, когда мы берем годовалого ребенка и можем предсказать, кем он будет к совершеннолетию.&lt;/p&gt;
&lt;h2&gt;Сильный ИИ&lt;/h2&gt;
&lt;p&gt;В разговоре про AGI, Сэм прямо подтвердил сомнения Яна Лекуна в том, что большие языковые модели это предшественники сильного искусственного интеллекта. Но, в отличие от Яна, который считает, что мы сошли с пути, Сэм думает, что это просто часть дороги в будущее.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/1111.png" width="700" height="202" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://twitter.com/ylecun/status/1621805604900585472"&gt;@ylecun в Twitter&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Нас всех заменят&lt;/h2&gt;
&lt;p&gt;Ну и куда же без мема, про замену программистов при помощи ИИ, ага. В общем, после того, как глава самой передовой компании в сфере замены людей на машин заявил, что ему капец как сложно найти людей в команду, понимаешь, что таки да, еще покодим немного.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/2222.png" width="400" height="575" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Век живи, блин</title>
<guid isPermaLink="false">102</guid>
<link>https://agasiev.com/all/semicolon-as-uri-param-separator/</link>
<pubDate>Fri, 24 Mar 2023 17:09:17 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/semicolon-as-uri-param-separator/</comments>
<description>
&lt;p&gt;В API методе, который я делал для сервиса, в HTTP GET запросе заказчик хотел, чтобы одно из полей могло принимать список значений (id’шники юзеров) разделенных точкой с запятой. Вот примерно так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/api/processUsers?user_ids=1;2;3;4;5&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Реализовал нужную функцию в Go, запускаю тест и получаю предупреждение:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;http: URL query contains semicolon, which is no longer a supported separator; parts of the query may be stripped when parsed; see &lt;a href="golang.org/issue/25192"&gt;golang.org/issue/25192&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Оказалось, что W3C в рекомендациях от 1999 года, &lt;a href="http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2"&gt;допускало&lt;/a&gt; использование точки с запятой, в качестве разделителя параметров URL, в дополнение к амперсанду.&lt;/p&gt;
&lt;p&gt;Это было сделано для сохранения совместимости с SGML (предшественником HTML), в котором амперсанд всегда был началом мнемоники или кода символа (например &amp; amp; или &amp; #39;), откуда возникал конфликт с его использованием в URI. Поэтому, амперсанд в URI приходилось эскейпить, из-за чего уже возникали проблемы парсинга параметров на стороне сервера, а так же у браузера, в том, как их посылать. Поэтому и предложили бахнуть точку с запятой как разделитель, чтобы не иметь проблем с эскейпом.&lt;/p&gt;
&lt;p&gt;А в 2014 году, &lt;a href="https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#url-encoded-form-data"&gt;W3C отменил эту рекомендацию&lt;/a&gt; и теперь допустимым символом является только амперсанд:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;Let strings be the result of strictly splitting the string payload on U+0026 AMPERSAND characters (&amp;).&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Надо будет запомнить этот момент и проверять его в тест-кейсах во время обращения в веб-серверу.&lt;/p&gt;
</description>
</item>

<item>
<title>А нужно ли вообще рассматривать все жалобы в соцсетях?</title>
<guid isPermaLink="false">10</guid>
<link>https://agasiev.com/all/a-nuzhno-li-voobsche-rassmatrivat-vse-zhaloby/</link>
<pubDate>Fri, 24 Mar 2023 02:17:35 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/a-nuzhno-li-voobsche-rassmatrivat-vse-zhaloby/</comments>
<description>
&lt;p&gt;Наступает неприятный момент, когда модерация социальной сети начинает задыхаться от наплыва жалоб пользователей на контент.&lt;/p&gt;
&lt;p&gt;Возникает логичный вопрос: &lt;i&gt;Как уменьшить нагрузку на модераторов?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Да, можно придумать умных AI помощников, классификации жалоб на группы и т. д. Но может, для начала, нужно спросить себя: &lt;i&gt;А важны ли все жалобы от всех пользователей?&lt;/i&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/unnamed-(2).jpeg" width="512" height="512" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Многие жалуются просто из-за плохого настроения или просто потому, что не согласны с мнением оппонента в сетевой диванно-позиционной войне. По сути, это может быть нормальный контент, который просто не нравится &lt;i&gt;конкретному&lt;/i&gt; человеку.&lt;/p&gt;
&lt;p&gt;Какой выход? Для определенных типов жалоб нужно создавать видимость того, что пользователь был услышан: временно скрывать контент от жалобщика, т. е. в рамках одной сессии поставить&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;display:none&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;html блоку или вообще удалить его, а саму жалобу отправить в &lt;i&gt; /dev/null&lt;/i&gt;. Если вариантов жалоб несколько, то можно скрыть этот функционал в «Жалобы — Прочее» или прямо так и назвать «Жалобы — Я не согласен с юзером». Работает, проверено.&lt;/p&gt;
&lt;p&gt;В самом крайнем случае, ставить счетчик на количество жалоб на пользователя и его контент и по превышению некоторого порога отправлять на модерацию.&lt;/p&gt;
&lt;p&gt;Исключение — время прохождения модерации при публикации в AppStore или Google Play, в этот момент нужно включать модерацию любого контента на максимум, особенно 18+. Ведь хрен знает, на что может пожаловаться модератор маркета, а релиз, обычно, очень не хочется задерживать из-за возни с какой-то мелочью.&lt;/p&gt;
</description>
</item>

<item>
<title>Copilot в России</title>
<guid isPermaLink="false">97</guid>
<link>https://agasiev.com/all/copilot-v-rossii/</link>
<pubDate>Tue, 21 Mar 2023 12:52:30 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/copilot-v-rossii/</comments>
<description>
&lt;p&gt;Собственно, ничего сложного в том, чтобы запустить Copilot в России нет. Нужно иметь западную карточку Visa/Mastercard и указать платежный адрес вне России. И все это лучше делать под VPN.&lt;/p&gt;
&lt;p&gt;Пару месяцев назад после установки и настройки сам Copilot работал в РФ без проблем, но лафа закончилась:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://agasiev.com/pictures/README.md--spamham-2023-03-21-12-48-35.png" width="920" height="494" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Если увидели такое сообщение, то надо включить VPN и перезагрузить VS Code, а то до перезагрузки копилот уже не заработает.&lt;/p&gt;
</description>
</item>

<item>
<title>GPT в таск трекерах</title>
<guid isPermaLink="false">96</guid>
<link>https://agasiev.com/all/gpt-v-task-trekerah/</link>
<pubDate>Mon, 20 Mar 2023 01:40:05 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/gpt-v-task-trekerah/</comments>
<description>
&lt;p&gt;Интересно, кто уже наконец-то первый внедрит codex-like модели в таск трекеры, чтобы можно было назначить нейросеть исполнителем простенького таска или багфикса?&lt;/p&gt;
&lt;p&gt;Нейроночка фиксит код и делает пулл реквест в ветку. Получается такой нейроджун. Пока что джун...&lt;/p&gt;
</description>
</item>

<item>
<title>GPT-4 Developer Livestream</title>
<guid isPermaLink="false">95</guid>
<link>https://agasiev.com/all/gpt-4-developer-livestream/</link>
<pubDate>Thu, 16 Mar 2023 19:12:57 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/gpt-4-developer-livestream/</comments>
<description>
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/outcGtbnMuQ" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Впечатляет способность модели к описанию содержимого картинок, в том числе и встроенный очень качественный OCR. Попробовать бы ее применить к замаскированному тексту и тексту на других языках. А на моменте с белкой держащей камеру, стало понятно, что GPT-4 еще и умеет в понимание того, что на картинке не так.&lt;/p&gt;
&lt;p&gt;Датасет для обучения собран до 2021 года включительно и выдача переодически содержит устаревшую информацию, например, код из устаревших версий библиотек. Однако, модель вполне себе может получить фиксы либ на вход и перегенерить исходник, учитывая новые особенности, как в примере с фиксом кода Discord бота, где контент сообщения стал обязательным полем в новом API. Но контекст пока не безлимитный, к сожалению, так что все не запихаешь.&lt;/p&gt;
&lt;p&gt;И судя по всему, по сравнению с GPT-3.5 пофиксили способность GPT-4 к математическим расчетам. Эх, где же ты был, OpenAI когда ты был так нужен в мои времена антидемидовича на китайском...&lt;/p&gt;
&lt;p&gt;Прикладная разработка переходит на уровень менеджера по продукту/системного аналитика и качество формулировки ТЗ будет решать. И на вопрос, какой лучше язык программирования изучать, ответом станет — английский.&lt;/p&gt;
</description>
</item>


</channel>
</rss>