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