{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Ихрь постит в уютный бложик",
    "_rss_description": "Фрирайтинг, заметки, шитпостинг и все подряд",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/ifedyukin.ru\/blog\/",
    "feed_url": "https:\/\/ifedyukin.ru\/blog\/rss\/",
    "icon": "https:\/\/ifedyukin.ru\/blog\/pictures\/userpic\/userpic@2x.jpg?1737233225",
    "authors": [
        {
            "name": "Игорь Федюкин",
            "url": "https:\/\/ifedyukin.ru\/blog\/",
            "avatar": "https:\/\/ifedyukin.ru\/blog\/pictures\/userpic\/userpic@2x.jpg?1737233225"
        }
    ],
    "items": [
        {
            "id": "79",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/how-to-sync-obsidian-between-ios-devices\/",
            "title": "How to sync Obsidian between iOS devices",
            "content_html": "<p>I’ve written a lot of notes since 2010, I really like methodologies like second mind and Zettelkasten, and as a consequence I really like Obsidian.<\/p>\n<p>And many times I’ve seen people find solutions to synchronize different iOS\/iPad OS devices without iCloud and Obsidian Sync. People use Apple Shortcuts and third-party tools like Working Copy to sync Obsidian via git, or use terminal emulators like iSH to mount the vault directory and sync it manually.<\/p>\n<p>But Obsidian on mobile devices (yes, iOS too) supports community plugins.<br \/>\nAnd instead of reinventing the wheel, you can... just install the plugin you need.<\/p>\n<p>Just go to Settings — Community Plugins — Browse. And install:<\/p>\n<ul>\n<li>«Obsidian Git» for synchronization with git;<\/li>\n<li>«Remote Save» to synchronize with S3\/WebDav.<\/li>\n<\/ul>\n<p>Yes, it works on iOS devices, it works natively and automatically on startup, you just need to enable it in the settings. And also you can add shortcut to Obsidian menu to call action you need.<br \/>\nEnjoy!<\/p>\n",
            "date_published": "2023-10-15T19:39:31+03:00",
            "date_modified": "2025-01-19T00:09:34+03:00",
            "tags": [
                "community",
                "education",
                "life"
            ],
            "_date_published_rfc2822": "Sun, 15 Oct 2023 19:39:31 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "79",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "78",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/fix-apple-pencil-2-ipad-connection\/",
            "title": "Fix Apple Pencil 2 iPad connection",
            "content_html": "<p>Sometimes when you connect Apple Pencil 2 to iPad, the battery level is not displayed, only «Apple Pencil» notification appears and the screen does not recognize the pen.<\/p>\n<p>To fix it:<\/p>\n<ul>\n<li>remove the pen from the bluetooth device list;<\/li>\n<li>reconnect the pen to the magnetic connector;<\/li>\n<li>restart iPad with pencil on magnetic connector.<\/li>\n<\/ul>\n<p>In some cases it works after 2-3 times.<\/p>\n<p>Be careful. It can indicate about damaged Apple Pencil battery or the pen itself.<\/p>\n",
            "date_published": "2023-10-14T19:50:06+03:00",
            "date_modified": "2023-10-15T15:39:57+03:00",
            "tags": [
                "life"
            ],
            "_date_published_rfc2822": "Sat, 14 Oct 2023 19:50:06 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "78",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "77",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/how-to-inline-tailwindcss-styles-to-ssr-nextjs\/",
            "title": "How to inline TailwindCSS styles to SSR NextJS",
            "content_html": "<p>By default, NextJS may not include Tailwind styles in the SSR build, and with disabled JavaScript, your site may look ugly like pure HTML.<\/p>\n<p>To fix this, you need to install the <i>critters<\/i> package.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">npm install critters<\/code><\/pre><p>And enable <i>optimizeCss<\/i> rule in <i>next.config.js<\/i>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">experimental: {\r\n    optimizeCss: true,\r\n},<\/code><\/pre><p>Source: <a href=\"https:\/\/github.com\/vercel\/next.js\/discussions\/12868\">next.js#12868<\/a>.<\/p>\n",
            "date_published": "2023-10-04T11:54:42+03:00",
            "date_modified": "2023-10-04T11:56:53+03:00",
            "tags": [
                "development",
                "javascript",
                "react"
            ],
            "_date_published_rfc2822": "Wed, 04 Oct 2023 11:54:42 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "77",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "74",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/change-ssh-port-on-ubuntu-22-using-ansible\/",
            "title": "Change SSH port on Ubuntu 22 using Ansible",
            "content_html": "<p>After updating Ubuntu 22.10 SSHd uses socket-based activation.<br \/>\nAs a result, the sshd configuration port does not affect the listening port.<br \/>\nTo change the port, we need to perform the following tasks:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">- name: Create config folder\r\n  file:\r\n    path: \/etc\/systemd\/system\/ssh.socket.d\r\n    state: directory\r\n    recurse: true\r\n\r\n- name: Create config file\r\n  copy:\r\n    dest: \/etc\/systemd\/system\/ssh.socket.d\/listen.conf\r\n    content: |\r\n      [Socket]\r\n      ListenStream={{ custom_ssh_port }}\r\n\r\n- name: Reload systemd manager\r\n  systemd:\r\n    daemon_reload: yes\r\n\r\n- name: restart ssh\r\n  service:\r\n    name: &quot;ssh&quot;\r\n    state: restarted\r\n\r\n- name: Update connection port\r\n  set_fact:\r\n    ansible_ssh_port: &quot;{{ custom_ssh_port }}&quot;<\/code><\/pre>",
            "date_published": "2023-03-29T18:46:00+03:00",
            "date_modified": "2023-03-29T18:45:52+03:00",
            "tags": [
                "development",
                "devops"
            ],
            "_date_published_rfc2822": "Wed, 29 Mar 2023 18:46:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "74",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "73",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/how-to-fix-unknown-fragments-types-in-graphql-codegen\/",
            "title": "How to fix unknown fragments types in graphql-codegen?",
            "content_html": "<p>I spent half of the day setting up graphql-codegen to generate the correct types for fragment queries.<\/p>\n<p>At first, my code looked like this:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ file1\r\nexport const DIALOG_FIELDS = gql(`\r\n  fragment DialogFields on Dialog {\r\n    id\r\n    name\r\n  }\r\n`);\r\n\r\n\/\/ file2\r\nexport const GET_DIALOG = gql(`\r\n  ${DIALOG_FIELDS}\r\n  query GetDialog($dialogId: ID!) {\r\n    dialog(id: $dialogId) {\r\n      ...DialogFields\r\n    }\r\n  }\r\n`);<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">const config: CodegenConfig = {\r\n  schema: CONFIG.apiHost,\r\n  documents: ['src\/**\/*.{tsx,ts,js,jsx}', '!src\/gql\/__generated__\/*.ts'],\r\n  generates: {\r\n    '.\/src\/gql\/__generated__\/': {\r\n      preset: 'client',\r\n      plugins: [],\r\n      overwrite: true,\r\n      presetConfig: {\r\n        gqlTagName: 'gql'\r\n      }\r\n    }\r\n  },\r\n};<\/code><\/pre><p>So, with the <a href=\"https:\/\/www.apollographql.com\/docs\/react\/development-testing\/static-typing\/\">basic config<\/a> I did get an unknown type for both the query and the fragment:<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"938\" data-ratio=\"2.1813953488372\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen.png\" width=\"938\" height=\"430\" alt=\"\" \/>\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen-1.png\" width=\"958\" height=\"542\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>I found a simple solution for this — we need to remove the string interpolation for the fragment literal from the query, because graphql-codegen <a href=\"https:\/\/stackoverflow.com\/a\/74094939\">automatically includes<\/a> fragments.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">export const GET_DIALOG = gql(`\r\n  query GetDialog($dialogId: ID!) {\r\n    dialog(id: $dialogId) {\r\n      ...DialogFields\r\n    }\r\n  }\r\n`);<\/code><\/pre><p>As a result, I did get an not unknown type, but the type with no data from the fragment for the query fragment.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen-3.png\" width=\"1266\" height=\"370\" alt=\"\" \/>\n<\/div>\n<p>I lost the most time at this stage, eventually finding a solution in the <a href=\"https:\/\/github.com\/dotansimha\/graphql-code-generator\/discussions\/8859#discussioncomment-4891291\">small GitHub thread<\/a>. We need to disable fragment <a href=\"https:\/\/the-guild.dev\/graphql\/codegen\/plugins\/presets\/gql-tag-operations-preset#fragment-masking\">masking feature<\/a>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">const config: CodegenConfig = {\r\n  schema: CONFIG.apiHost,\r\n  documents: ['src\/**\/*.{tsx,ts,js,jsx}', '!src\/gql\/__generated__\/*.ts'],\r\n  generates: {\r\n    '.\/src\/gql\/__generated__\/': {\r\n      preset: 'client',\r\n      plugins: [],\r\n      overwrite: true,\r\n      presetConfig: {\r\n        gqlTagName: 'gql',\r\n        fragmentMasking: false\r\n      }\r\n    }\r\n  },\r\n};<\/code><\/pre><p>Finally the type contains all the information and it is complete!<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/image-3.png\" width=\"780\" height=\"318\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2023-02-15T23:05:44+03:00",
            "date_modified": "2023-02-19T15:08:56+03:00",
            "tags": [
                "development",
                "javascript"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen.png",
            "_date_published_rfc2822": "Wed, 15 Feb 2023 23:05:44 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "73",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/jquery\/jquery.js",
                    "system\/library\/fotorama\/fotorama.css",
                    "system\/library\/fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen-1.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/how-to-fix-unknown-fragments-types-in-graphql-codegen-3.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/image-3.png"
                ]
            }
        },
        {
            "id": "72",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/how-to-fix-broken-outline-vpn-after-installing-charles-on-mac-os\/",
            "title": "How to fix broken Outline VPN after installing Charles on Mac OS",
            "content_html": "<p>Sometimes, after installing Charles or any other web proxy on your Mac OS, Outline VPN or any other 3rd party client on your Mac OS can break your VPN connection. To fix it you need to:<\/p>\n<ol start=\"1\">\n<li>Remove the web proxy configuration from the «Details» tab of your Wi-Fi network configuration.<\/li>\n<li>Remove the web-proxy configuration from the VPN connection configuration.<\/li>\n<li>If you don’t have VPN connection settings and are using a 3rd party client (e. g. Outline VPN), you will need to remove the VPN connection from the VPN tab in System Preferences (not in your client) and reconnect using the 3rd party client.<\/li>\n<li>In this case the connection will be recreated in System Preferences without proxy settings.<\/li>\n<\/ol>\n<p>Alternatively, you can manually remove the proxy server configuration from<\/p>\n<pre>\/Library\/Preferences\/com.apple.networkextension.plist<\/pre>\n<p>using any plist editor (e. g. BBEdit) and restart your OS.<\/p>\n",
            "date_published": "2023-02-03T15:02:19+03:00",
            "date_modified": "2023-02-03T15:02:06+03:00",
            "tags": [
                "mac"
            ],
            "_date_published_rfc2822": "Fri, 03 Feb 2023 15:02:19 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "72",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "71",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/pro-debag-v-staryh-safari\/",
            "title": "Про дебаг в старых Safari",
            "content_html": "<p>Знаете, что самое веселое в фронтенд-разработке после похорон IE?<br \/>\nДебажить приложения под Safari старых версий — это просто нереально...<\/p>\n<p>Как я делал с IE? Качал виртуалку с сайта MS с нужной версией IE и спокойно дебажил.<\/p>\n<p>Как я делаю с Safari? Ищу образ виртуалки, их же официально никто не распространяет, а ушлые ребята распространяют образы только через Patreon, WTF?<\/p>\n<p>На ноут я не могу поставить виртуалку со старой Mac OS, потому что у меня ARM процессор. На ПК я не могу поставить потому, что у меня там процессор AMD, а почему-то на новых AMD виртуалки как-то криво инструкции транслируют.<\/p>\n<p>В итоге приходится искать макбуки на Intel, на них ставить виртуалку со старой ОС и там дебажить — во житуха!<\/p>\n<div class=\"hr\"><\/div><p>Изначально писал в телеге — <a href=\"https:\/\/t.me\/fuckanarium\/214\">тык<\/a><\/p>\n",
            "date_published": "2023-02-01T18:01:23+03:00",
            "date_modified": "2023-02-01T18:01:07+03:00",
            "tags": [
                "development",
                "javascript"
            ],
            "_date_published_rfc2822": "Wed, 01 Feb 2023 18:01:23 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "71",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "70",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/pro-apple-i-podderzhku-staryh-fich\/",
            "title": "Про Apple и поддержку старых фич",
            "content_html": "<p>Айти — уникальная штука по количеству ошибок с обратной совместимостью, причем даже в глобальных продуктах с кучей пользователей.<\/p>\n<p>У меня в работе (да и не только в работе) очень много всего автоматизировано: переключения между проектами, автозаполнения форм, переводчики по месту, хитрые поиски и линки, генерилки паролей и временных почт, подключалки к серверам, всякие скрипты уровня «сходи туда, скачай то, заскриншоть, отправь в телеграм» и т. д.<\/p>\n<p>Так вот после обновления Mac OS (напомню, лучшая ОС в мире) у меня отвалилась половина скриптов потому, что Apple удалила из стандартной сборки системы python 2 (которому сто лет в обед) и php (зачем он там был, я уже и не вспомню). Пришлось что-то переписать, что-то обновить, о чем-то забыть...<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/2022-11-14-21.09.23.jpg\" width=\"960\" height=\"1280\" alt=\"\" \/>\n<\/div>\n<p>Вот Apple может взять и релизнуть сильно ломающие изменения, а некоторые мои знакомые в своих проектах не могут удалить одно мелкое поле, которым пользуются ну 2% пользователей. Более того, я завсегдатай срачей в тематических чатах про поддержку старых браузеров.<\/p>\n<p>Кажется, всякое старье все-таки можно (и нужно) выпиливать, пользователи не тупые и умеют гуглить, пусть разбираются. Всем бы у Apple поучиться!<\/p>\n<div class=\"hr\"><\/div><p>Больше постов в <a href=\"https:\/\/t.me\/fuckanarium\">телеграме<\/a>, там шитпостинг ложится лучше<\/p>\n",
            "date_published": "2022-11-14T21:11:46+03:00",
            "date_modified": "2022-11-14T21:11:31+03:00",
            "tags": [
                "development"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/2022-11-14-21.09.23.jpg",
            "_date_published_rfc2822": "Mon, 14 Nov 2022 21:11:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "70",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/2022-11-14-21.09.23.jpg"
                ]
            }
        },
        {
            "id": "69",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/kak-ya-alisu-nauchil-otkryvat-domofon\/",
            "title": "Как я Алису научил открывать домофон",
            "content_html": "<p>У меня установлен умный домофон, вызовы на который можно принимать с телефона, смотреть через приложения записи камер и открывать через него же дверь.<\/p>\n<p>Это очень удобно, но телефон я не всегда ношу с собой по дому, да и когда готовлю, например, и требуется открыть дверь, то становится довольно неудобно — руки заняты.<\/p>\n<p>Когда я задумался, как бы решить эту проблему, то в голову пришла мысль, что таймеры во время готовки я выставляю через Алису, было бы круто так же открыть и домофон (и входную дверь тоже, но это другая история).<br \/>\n«Алиса, открой домофон», — бах, дверь открыто — красота! Нужно делать.<\/p>\n<div class=\"hr\"><\/div><p>Во-первых, я изначально заложил 95% на успех, так как домофон у меня через приложение может открываться с телефона.<br \/>\nВо-вторых, мне банально интересно было потыкаться в навыки Алисы и даже 5% неуспеха меня не смущали.<br \/>\nВ-третьих, мне никак не хотелось идти вечером пятницы пить пиво.<\/p>\n<p>Опираясь на первый пункт, я подумал, что можно было бы зареверсить эндпоинты всякими HttpToolkit’ами, но прежде решил погуглить и не зря. Нашел репозиторий на гитхабе с интеграцией домофона в какую-то аппку для умных домов, в одном из файликов было описано взаимодействие с апи провайдера.<\/p>\n<p>Я, недолго думаю, постманом получил нужные токены, протыкал ручки — вроде работает. Быстренько накидал простой сервис на ноде, который на запрос по определенному эндопоинту с сикретом (куда же без сесурити) дергает эндпоинт провайдера, в случае неудачи пытается обновить токен и дернуть его еще раз.<\/p>\n<p>Затем пошел на <a href=\"https:\/\/dialogs.yandex.ru\/\">Диалоги<\/a>, где сделал приватный диалог для Алисы, который перенаправил в ту же ручку. Внутри сервиса дописал пару проверок, чтобы во входящих интентах было «домофон», затем дергался эндпоинт провайдера, а в ответ Алисе уходило «Открываю».<\/p>\n<p>Проверил — работает! Только расстроило, что в диалогах инпут длинный. То есть Алиса слушает это как «Алиса, скажи домофону, чтобы открылся» или около того — явно в команде должно звучать кодовое слово навыка.<\/p>\n<p>Обошел это через создание шортката в сценариях для всех своих станций и... эврика! Теперь Алиса открывает домофон по фразе «Открой домофон». Пятница прошла довольно-таки неплохо!<\/p>\n<div class=\"hr\"><\/div><p>Изначально тут вообще должен был быть здоровый гайд с примерами кода и кучей скриншотов, но в итоге код получился очень типовой, рокетсайнса никакого, так что убрал все лишнее и поделился чисто тем, что есть.<\/p>\n<p>Видео с демкой залил в телегу — <a href=\"https:\/\/t.me\/fuckanarium\/102\">тык<\/a>.<\/p>\n",
            "date_published": "2022-09-02T23:45:46+03:00",
            "date_modified": "2022-09-03T00:00:46+03:00",
            "tags": [
                "development"
            ],
            "_date_published_rfc2822": "Fri, 02 Sep 2022 23:45:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "69",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "67",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/how-to-run-ts-node-with-es-modules-and-commonjs\/",
            "title": "How to run TS-node with ES modules and CommonJS?",
            "content_html": "<p>If you’ve got ERR_REQUIRE_ESM, ERR_UNKNOWN_FILE_EXTENSION for TS files, ERR_MODULE_NOT_FOUND for TS files with ES modules and other errors related to «CJS to ESM migration problem» in your NodeJS project you can fix it by following these steps.<\/p>\n<ol start=\"1\">\n<li>Update package.json to define modules system<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">&quot;type&quot;: &quot;module&quot;,<\/code><\/pre><ol start=\"2\">\n<li>Update tsconfig.json to support ESM in TS-node<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">{\r\n  &quot;compilerOptions&quot;: {\r\n    &quot;target&quot;: &quot;esnext&quot;,\r\n    &quot;emitDecoratorMetadata&quot;: true,\r\n    &quot;module&quot;: &quot;esnext&quot;,\r\n    &quot;moduleResolution&quot;: &quot;node&quot;,\r\n    &quot;types&quot;: [&quot;node&quot;],\r\n    &quot;resolveJsonModule&quot;: true,\r\n    &quot;esModuleInterop&quot;: true,\r\n    &quot;forceConsistentCasingInFileNames&quot;: true\r\n  }\r\n}<\/code><\/pre><ol start=\"3\">\n<li>Run your entry point script using node and ts-node as node loader<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">node --experimental-specifier-resolution=node --loader ts-node\/esm src\/index.ts<\/code><\/pre><ol start=\"4\">\n<li>Enjoy!<\/li>\n<\/ol>\n",
            "date_published": "2022-08-29T20:26:01+03:00",
            "date_modified": "2022-08-29T20:25:59+03:00",
            "tags": [
                "development"
            ],
            "_date_published_rfc2822": "Mon, 29 Aug 2022 20:26:01 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "67",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "66",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/best-openair-ryazan2022\/",
            "title": "Лучший оупен-эйр 2022 в Рязани",
            "content_html": "<p><s>Минувшие выходные<\/s> Выходные несколько недель назад (потому что мне было лень написать пост)  были самыми длинными за последний, кажется, год. И не потому, что я много отдыхал, а потому, что слишком много эмоций и событий наполняло их.<\/p>\n<p class=\"note-main\">Почти два месяца мы (и здесь я очень рад, что принимал участие в подготовке) готовили опен-эир с электронной музыкой, клевыми диджеями, баром, интересными инсталляциями и декором. И у нас получилось. Очень круто, куча положительного фидбэка, респектов и вопросов «вы там <i>ебанутые<\/i>?» (в <i>положительном<\/i> ключе, конечно). Повторюсь, что безумно рад, что удалось приложить руку к этому всему.<\/p>\n<p class=\"note-aside\">Сначала хотел прямо такой жестко информативный лонгрид сделать, но потом подумалось, что через текст свои эмоции я недостаточно качественно могу передать, так что немного шитпоста и просто фоточек закину.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-32.jpg\" width=\"960\" height=\"1280\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Вечер за день до мероприятия — на выходе в поля<\/div>\n<\/div>\n<p>Началось все с выбора площадки — поляны под Рязанью в чаще леса, которую ребята расчищали долго и кропотливо, сразу же намечая где и что будет: 2 чилл-зоны, бар + кухня, сцена, туалет (куда ж без него). Даже расположение мусорок было продумано! План рисовали как лучших шпионских боевиках — на скриншотах спутниковых снимков.<\/p>\n<p class=\"note-main\">Чтобы дойти до поляны, нужно было топать некоторое время по полю, вокруг было очень красиво и... много комаров, но куда ж без этого. Для того, чтобы люди не терялись, был подготовлен фото-гайд с ориентирами, координатами и картой.<\/p>\n<p class=\"note-aside\">Я по этим полям столько кругов за эти дни намотал, столько крови там сцедил комарам, что кажется, что я теперь часть этих полей.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/ifedyukin.ru\/blog\/video\/IMG_1293.MOV#t=0.001\" width=\"720\" height=\"1280\" controls alt=\"\" \/>\n\n<\/div>\n<p>Одна из огромных инсталляций — цветок, свечение которого было видно почти из каждого края плейса<\/p>\n<p>Декораторы и художники создали кучу красивостей: рисунки на деревьях, скульптуры, «фрески» и еще много всяких штук, название которых я не знаю, но без этого не было бы ни атмосферы, ни вайба, который плейс раздавал во время тусовки. Причем работать они начали задолго до выезда на место.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-16.jpg\" width=\"960\" height=\"1280\" alt=\"\" \/>\n<\/div>\n<p>Я много наблюдал за их работой и немного помогал — непередаваемые эмоции, когда за день бесформенный кусок пенопласта превращается в крыло, цветок, рыбу — что угодно.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-26.jpg\" width=\"960\" height=\"595\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Чиллзона внутри бара, виден процесс подготовки и скульптура, маскот Рязани, можно сказать<\/div>\n<\/div>\n<p>Инженеры также задолго до начала начали работу: делали чертежи сцены, стойки, закупали материалы, проводили подготовительный напил, покраску и сварку всего и вся, что можно было сделать до приезда на место. Большая часть задумок изначально моделилась в 3D.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-19.jpg\" width=\"960\" height=\"1280\" alt=\"\" \/>\n<\/div>\n<p>Весь тон тусовке задавала сцена высотой в несколько метров, буквально являлась центром всего. Конструкция получилась довольно устойчивой, мы на верхушке втроем спокойно находились — не спрашивайте зачем.<\/p>\n<p>Окончательный выезд на место состоялся за 2 дня до мероприятия, и некоторые из организаторов там жили все это время. За день до начала приехали волонтеры и работа закипела еще сильнее, да и не прекращалась она до самого конца мероприятия.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/ifedyukin.ru\/blog\/video\/IMG_1269.MOV#t=0.001\" width=\"960\" height=\"1280\" controls alt=\"\" \/>\n\n<\/div>\n<p>Валежник и порубленные старые деревья максимально использовались для оформления и поддержи лесного вайба. Ближе к началу мероприятия пригнали целый фургон со светом, звуком и другим оборудованием и начали все устанавливать и отлаживать. Параллельно с этим ребята строили бар и разворачивали барное оборудование.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/ifedyukin.ru\/blog\/video\/IMG_1272.MOV#t=0.001\" width=\"720\" height=\"1280\" controls alt=\"\" \/>\n\n<\/div>\n<p>Люди приходили как-то очень резко и кучно, в какой-то момент я зашел в бар и увидел толпу, вышел — около него тоже увидел толпу, дошел до чиллзоны — там люди со своими раскладными стульчиками сидят и курят кальян. Красота!<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-18.jpg\" width=\"960\" height=\"1280\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Бар и довольные люди<\/div>\n<\/div>\n<p>Музыка разогналась где-то к двенадцати-часу, лайнап несколько сдвинулся, я почти не спал два предыдущих дня. И если бы два года назад я бы назвал это разминкой, то в этот раз я не выдержал и немного подремал в чиллухе на коленях у девушки.<\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/ifedyukin.ru\/blog\/video\/IMG_1306.MOV#t=0.001\" width=\"720\" height=\"1280\" controls alt=\"\" \/>\n\n<\/div>\n<p>Несколько часов лайнапа заняла прямо <i>ебучка<\/i>, которая, видимо, является чем-то вроде «ну это ваш стиль», народ вытоптал все поле, диджеи выжгли всю энергию!<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/best-openair-ryazan2022.png\" width=\"826\" height=\"1091\" alt=\"\" \/>\n<\/div>\n<p>Утром под разгон народа я играл свой хаус-сет, к слову, хаус никогда до этого не играл и не то чтобы любил, но мнение поменялось.<\/p>\n<p>Сет я сыграл не полностью, к сожалению, но посводил транс предыдущего диджея и поотвечал на вопросы, чего у меня на хаус музыка не особо похожа.<\/p>\n<p>Есть записанный первый черновой трай моего сета. Когда-нибудь я его пересведу и выложу куда-то, но пока сыроватую версию можно и сюда.<\/p>\n<div class=\"e2-text-audio\">\n<div class=\"e2-text-super-wrapper e2-jouele-wrapper\"><a class=\"jouele\" data-space-control=\"true\" data-length=\"3783\" href=\"https:\/\/ifedyukin.ru\/blog\/audio\/Open-house.mp3\">Open-house.mp3<\/a><\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-34.jpg\" width=\"960\" height=\"1280\" alt=\"\" \/>\n<\/div>\n<p>Куча потраченных сил и энергии кучи людей, куча положительных эмоций и историй, парочка новых локальных «мемов» — как минимум поэтому лето уже удалось.<\/p>\n",
            "date_published": "2022-07-12T13:41:53+03:00",
            "date_modified": "2023-04-06T12:27:50+03:00",
            "tags": [
                "community",
                "life"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-32.jpg",
            "_date_published_rfc2822": "Tue, 12 Jul 2022 13:41:53 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "66",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/jquery\/jquery.js",
                    "system\/library\/media-seek\/media-seek.js",
                    "system\/library\/jouele\/jouele.css",
                    "system\/library\/jouele\/jouele.js"
                ],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-32.jpg",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-16.jpg",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-26.jpg",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-19.jpg",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-18.jpg",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/best-openair-ryazan2022.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/photo_2022-06-28_20-13-34.jpg"
                ]
            }
        },
        {
            "id": "64",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/niti-site\/",
            "title": "Запустили сайт NИTИ",
            "content_html": "<p>Мы с ребятами делаем <mark>в Рязани<\/mark> очень крутой движ — NИTИ, я относительно недавно, но все же. Это тусовки с электронной (и не только) музыкой, крутая площадка, диджейские подкасты, музыка и еще много всего крутого.<\/p>\n<p class=\"note-main\">Пару дней назад у объединения была, так сказать, годовщина. В честь этого события мы анонсировали масштабный оупен-эйр и... барабанная дробь... <a href=\"https:\/\/niti.team\">сайт<\/a>!<\/p>\n<p class=\"note-aside\">Оупен-эйр — это мы в лесу будем делать <a href=\"https:\/\/niti.team\/events\/uniti\">тусовку<\/a> с баром, чилл-зоной, арт-объектами, лайн-апом на десяток часов и кучей замечательных людей.<\/p>\n<p class=\"note-main\">У нас была просто замечательная команда из трех человек, которой мы запустили сайт с нуля, у нас только концепт какой-то был и пара референсов, меньше, чем за месяц.<\/p>\n<p class=\"note-aside\">Наша команда была прямо фулл-ремоут, с полностью асинхронной коммуникацией и всего двумя созвонами за все время: в самом начале и в самом конце, чтобы контент поправить.<\/p>\n<p>Работали по настоящему аджайлу, можно сказать, только спринты были по паре дней, утрирую, но как-то так.<\/p>\n<p>Очень клевые дизайнерские идеи, очень интересные хаки в верстке, чтобы эти идеи ожили, мобильная версия с заделом под приложение — всем рекомендуем ее на телефонах сохранять на рабочий стол, чтобы оно в стэндалон режиме открывалось.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1440\" data-ratio=\"1.9834710743802\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/niti.png\" width=\"1440\" height=\"726\" alt=\"\" \/>\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/image-2.png\" width=\"1004\" height=\"1580\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>Технологически весь сайт построен на NextJS, чтобы быстро работало и вообще на острие технологий.<br \/>\nК слову, на релизе этот самый Next съел всю оперативу на сервере и вместо картинок юзеры получали 502 ошибку, но теперь все статически экспортируется — рантайм не нужен!<\/p>\n<p>На графике посещений очень ярко выражен момент, когда мы сайт в инстаграме и телеграме анонсировали, красота! А вот та просадочка в начале — это как раз 502 ошибки, хорошо, что поймали быстро.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/niti-site.png\" width=\"2264\" height=\"774\" alt=\"\" \/>\n<\/div>\n<p>Осталось заделать наикрутейший интернет-магазин, но пока это в бэклоге. Сейчас в топ-приоритетах — собрать сет на грядущий движ в <s>штанах<\/s> лесу!<\/p>\n",
            "date_published": "2022-06-07T14:52:33+03:00",
            "date_modified": "2023-04-06T12:28:45+03:00",
            "tags": [
                "community",
                "development",
                "entrepreneurship",
                "music"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/niti.png",
            "_date_published_rfc2822": "Tue, 07 Jun 2022 14:52:33 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "64",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/jquery\/jquery.js",
                    "system\/library\/fotorama\/fotorama.css",
                    "system\/library\/fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/niti.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/image-2.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/niti-site.png"
                ]
            }
        },
        {
            "id": "62",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/kak-hostit-mysql-na-malenkih-vps\/",
            "title": "Как хостить MySQL на маленьких VPS",
            "content_html": "<p>Недавно я начал хостить бложик (apache + mysql + nginx + пара сервисов на nodejs) на самом дешевом дроплете от Digital Ocean (надо ж кредитные токены DO куда-то потратить).<\/p>\n<p>Внезапно столкнулся с проблемой, что контейнер MySQL периодически умирает от OOM киллера, MySQL с небольшим количеством данных съедала ну очень много памяти в простое.<\/p>\n<p>Платить больше я не хотел, а воспоминания, что когда-то MySQL крутилась у меня на прямо маленьких VPS никак не давала покоя.<\/p>\n<p>Оказалось, что есть такая штука, как <tt><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/performance-schema.html#:~:text=The%20MySQL%20Performance%20Schema%20is,of%20the%20server%20at%20runtime.\">Performance Schema<\/a><\/tt>.<\/p>\n<blockquote>\n<p>The MySQL Performance Schema is a feature for monitoring MySQL Server execution at a low level.<br \/>\nThe Performance Schema provides a way to inspect internal execution of the server at runtime.<\/p>\n<\/blockquote>\n<p>Дальше я не особо читал, конечно, погуглил чуть, решил поэкспериментировать.<br \/>\nДобавляем в конфиг в секцию <tt>[mysqld]<\/tt>  строчку, чтобы отключить эту фичу (я просто примонтировал новый конфиг), перезагрузил сервис и бах — случилась магия и теперь MySQL кушает гораздо меньше ресурсов. А мониторить мне пока не к чему.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/Screenshot-2022-03-22-at-17.08.52.png\" width=\"1966\" height=\"616\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2022-03-22T17:20:29+03:00",
            "date_modified": "2022-03-22T17:17:38+03:00",
            "tags": [
                "development",
                "devops"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/Screenshot-2022-03-22-at-17.08.52.png",
            "_date_published_rfc2822": "Tue, 22 Mar 2022 17:20:29 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "62",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/Screenshot-2022-03-22-at-17.08.52.png"
                ]
            }
        },
        {
            "id": "61",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/kak-ya-v-do-pereezzhal\/",
            "title": "Как блог в DO переезжал",
            "content_html": "<p>Недавно Mastercard и Visa работать перестали для международных покупок, значится. Понял я, что пришло время переезжать на Digital Ocean, так как у меня там был некоторый предоплаченный период.<\/p>\n<p>С одной стороны я сразу пожалел, что не написал 7 лет назад какой-то плейбук, чтобы все развернуть. С другой — у меня почти все заводилось через `docker-compose up`.<\/p>\n<p>Как раз подчистил ненужные сервисы, забэкапил все, перетащил через `scp` всякую рантайм-шляпу типа логов, терять же не хочется, запустил — все отлично работает, остался рад, ушел спать.<\/p>\n<p>Ночью мне написали, что часть постов не грузится, я решил посмотреть, что произошло и... я не понял, что произошло, ведь я фронтендер! Да и до сих пор не понимаю. На графиках прикольно видно мои потуги что-то починить и как все ломалось.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/image-1.png\" width=\"1976\" height=\"1250\" alt=\"\" \/>\n<\/div>\n<p>В какой-то момент у меня начала падать база, что-то в ней побилось. Побилось, кажется, из-за того, что у одного из PHP-скриптов Эгеи не было прав, а потом уже и сам контейнер в базой не мог писать на диск, так как там прав тоже не хватало — на предыдущей VPS у меня чудесно uid’ы юзеров совпали, и все хорошо было.<\/p>\n<p>В итоге потратил некоторое время на то, чтоб права поправить, обновил MySQL наконец-то, раз 5 переустановил Эгею из бэкапов — косячил в скрипте, некоторые UTF-8 символы криво переносились.<\/p>\n<p>Но, как итог — все работает, причем даже постабильнее чем было и ресурсов меньше ест. Не знаю только, завелась ли почта.<\/p>\n<p>Какие выводы? Выводов нет. Надо только нормально все автоматизировать или хотя бы записывать, а не вспоминать что там было 3 года назад, и за правами сразу следить.<\/p>\n",
            "date_published": "2022-03-17T15:46:50+03:00",
            "date_modified": "2022-03-21T18:15:37+03:00",
            "tags": [
                "blog",
                "development"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/image-1.png",
            "_date_published_rfc2822": "Thu, 17 Mar 2022 15:46:50 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "61",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/image-1.png"
                ]
            }
        },
        {
            "id": "60",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/budni-ip-otchetnost-v-rosstat-i-ecp\/",
            "title": "Будни ИП — отчетность в Росстат и ЭЦП",
            "content_html": "<p>Если вы попали на эту страницу из поиска с мыслью «я ничего не понимаю, слишком сложно» или «все работает неправильно», то спешу вас успокоить — все проще и быстрее, чем кажется.<\/p>\n<h2>Как сейчас оформить ЭЦП для ИП<\/h2>\n<ol start=\"1\">\n<li>Покупаем токен для ЭЦП — в любом городе есть конторы, которые их продают, только уточните, что для налоговой и через какой софт ими пользоваться;<\/li>\n<li>Покупаем лицензию софта — в моем случае КриптоПРО;<\/li>\n<li>Через Госуслуги записываемся в налоговую на выдачу ЭЦП;<\/li>\n<li>Приходим, отдаем токен, расписываемся, получаем ЭЦП, уходим;<\/li>\n<li>На компьютер ставим софт для работы с подписью, корневой сертификат налоговой и импортируем свою ЭЦП.<\/li>\n<\/ol>\n<h2>Как сдать отчет в Росстат<\/h2>\n<ol start=\"1\">\n<li>Если вам пришло письмо на почту, значит вы есть в системе сбора отчетности;<\/li>\n<li>Если не получается войти, восстановить пароль;<\/li>\n<li>Входить по паре ОКПО и пароль.<\/li>\n<\/ol>\n<p>Вообще, конечно, не факт, что вы есть в системе, но письмо же не просто так пришло, в ином случае придется идти в локальный Росстат.<\/p>\n<div class=\"hr\"><\/div><p class=\"note-main\">В какой-то момент на одной из почт во входящих я видел письмо о необходимости передачи отчетности в Росстат. Сказано — значит надо делать, решил я, и полный уверенности пошел на Госуслуги, чтобы передать отчетность.<\/p>\n<p class=\"note-aside\">Внезапно нашел заметочки и обрывки твитов об уникальном приключении, которое мне предстояло месяц назад и которое, скорее всего, предстоит другим ИП.<\/p>\n<p>Оказалось, через Госуслуги отчетность передать нельзя, хотя год назад я вроде бы через них и передавал. Пошел в веб-кабинет Росстата, но зайти туда не смог.<\/p>\n<p>Почему не смог зайти? Потому что непонятно, какой пароль. А зарегистрироваться нельзя — ведь я зарегистрирован, кажется, регистрация с Госуслуг подтянулась, но пароль не подошел.<\/p>\n<p>При восстановлении пароля на почту ничего не пришло, на форуме куча тем, относящихся к ситуации. Ответ простой — надо обратиться в местный Росстат. В других же темах люди пишут, что местный Росстат посылает к поддержке веб-кабинета. Круг замыкается. Всякие темы типа «FAQ как пользоваться кабинетом» тоже полнились жалобами людей, у которых ничего не работало.<\/p>\n<p>Мне же поддержка сказала, что в карточке моего ИП нет почты, но профиль почему-то был, почта оказалась зарегистрирована и ссылка на восстановление пароля туда все-таки дошла. Через пару часов.<\/p>\n<p>Обрадовавшись, я кликнул по ссылке, но она оказалась просрочена.<\/p>\n<p>«ШТОШ!» — подумал я и, вспомнив, как я сам косячил с асинхронной отправкой писем, сделал еще несколько реквестов на восстановление пароля в надежде, что хоть одна из ссылок еще будет живой. Так и оказалось, через час я смог перейти к экрану установки нового пароля.<\/p>\n<p>Другое дело, что он не установился. Просто ошибку отдало. Следующая попытка оказалось удачной, пароль успешно поменялся, но войти по почте я опять не смог. Недолго думая, я вбил не почту, а номер ИП в Росстате и пароль и успешно вошел.<\/p>\n<p class=\"note\">Не забываем, что прибыль надо из валюты переводить в рубли по <a href=\"https:\/\/www.cbr.ru\/currency_base\/daily\/?UniDbQuery.Posted=True&UniDbQuery.To=23.10.2021\">курсу ЦБ<\/a><\/p>\n<p>Быстренько накидал отчетик и нажал «отправить», в этот момент я узнал, что нужна ЭЦП.<\/p>\n<p>Пошел гуглить, как ее сделать. Все лендосы и куча сервисов, что я видел, на деле оказались неактуальными. Я заплатил одному из сервисов деньги за то, что они сказали мне «сходите в налоговую, а еще вот ваш ключ КриптоПРО». Спасибо, конечно, но я и прочитать это мог я (но не прочитал).<\/p>\n<p>Хотя бы мне скинули адреса центров, где я мог токен купить. Забавно, что они все оказались закрыты, но да ладно, токен я по итогу купил у небольшой местной конторки.<\/p>\n<p class=\"note-main\">Как оказалось, с ЭЦП для ИП с начала 2022 года все проще: покупаем токен, записываемся в налоговую на выдачу ЭЦП.<\/p>\n<p class=\"note-aside\">В моей налоговой даже был вендинговый автомат с токенами, жаль, узнал я об этом по факту.<\/p>\n<p>Приходим с токеном к назначенному времени, на нее запишут ЭЦП. Дома качаем КриптоПРО, ставим корневой сертификат с <a href=\"https:\/\/www.nalog.gov.ru\/rn77\/related_activities\/ucfns\/ccenter_res\/\">сайта налоговой<\/a>, вставляем токен, импортируем подпись — вы великолепны. Можно подписывать отчеты.<\/p>\n<p>К слову, КриптоПРО очень сильно поменялось в положительную сторону с точки зрения использования на маке за последние 5 лет (да, последний раз я юзал его в 2017). Тогда я день сидел в терминале, а сейчас все завелось в виде «далее-далее-готово».<\/p>\n<div class=\"hr\"><\/div><p>Таким образом, я всего за 3 дня прошел стадии от «все не работает, какой-то бред» до «все работает вполне ок, надо только разобраться».<\/p>\n",
            "date_published": "2022-03-16T16:01:23+03:00",
            "date_modified": "2023-04-06T12:35:22+03:00",
            "tags": [
                "entrepreneurship",
                "life"
            ],
            "_date_published_rfc2822": "Wed, 16 Mar 2022 16:01:23 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "60",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "59",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/professionalno-didzheyu\/",
            "title": "Начал профессионально диджеить",
            "content_html": "<p>Знаете, есть вот это мнение, что ты начинаешь профессионально чем-то заниматься тогда, когда тебе за это занятие начинают платить.<\/p>\n<p>Таким образом я на прошедшей праздничной неделе стал профессионально заниматься диджеингом, так как отыграл сет в баре, и мне за это заплатили.<\/p>\n<p>«Кто ты без своего айти? — Алкоголик, тысячеонер, диджей!»<\/p>\n",
            "date_published": "2022-01-09T15:09:03+03:00",
            "date_modified": "2022-06-30T11:12:46+03:00",
            "tags": [
                "life",
                "music"
            ],
            "_date_published_rfc2822": "Sun, 09 Jan 2022 15:09:03 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "59",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "58",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/hrust-snega\/",
            "title": "Хруст снега",
            "content_html": "<p>На днях задумался, что мне очень нравится хруст снега. Звук, ощущения — что-то в этом есть!<\/p>\n<p>Почему я не задумался раньше? Потому что обычно зимой я двигался быстренько от одного помещения к другому, чтобы не мерзнуть. Либо всегда бежал решать какие-то проблемы, делать какие-то дела, куда-то спешил.<\/p>\n<p>Сколько раз себе твердил «Игорь, научись останавливаться, ловить момент, наслаждаться им», но как-то забывал про это, надо будет попробовать сделать это привычкой, а не «обязанностью» и  не чем-то, что я делаю «через силу».<\/p>\n",
            "date_published": "2021-12-26T18:49:21+03:00",
            "date_modified": "2021-12-26T18:49:19+03:00",
            "tags": [
                "life"
            ],
            "_date_published_rfc2822": "Sun, 26 Dec 2021 18:49:21 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "58",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "57",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/nachal-prohodit-kurs-dlya-bloggerov\/",
            "title": "Начал проходить курс для блоггеров",
            "content_html": "<p>Что это вы видите у себя в ленте фейсбука (или где-то еще)? Правильно, очередной мой пост про то, как я начинаю что-то писать\/вести бложег\/щитпостить\/etc, и в этот раз я ТОЧНО возьмусь за голову и не заброшу это дело.<\/p>\n<p>Сколько таких постов было — не счесть, особенно учитывая количество площадок, где я их писал, но в этот раз все будет по-другому, во всяком случае, мне хочется в это верить, ведь в этот раз у меня есть клевые менторы и компания единомышленников, так как я вписался на бета-версию курса от Ани и Ильи, они большие молодцы, уже на этапе кастдева зарядили мотивацией, и я вообще весь такой крутой и радостный, что смог влететь в бету.<\/p>\n<p>Зачем это все? Вот этим вопросом я (и не только я) задавался и на кастдеве, и на воркшопах. Причин можно найти бесконечно много, но я для себя выделил несколько: потому что мне это нравится (ух, как я люблю щитпостить, *потираю руки*) и потому что не то чтобы вы не узнаете, че у меня нового происходит, я сам об этом забываю.<\/p>\n<p>А происходит много чего. Буквально за последние несколько месяцев я и по конференциям покатался, и менежить больше начал, и диджеить, и музыку пытаться писать, и принимать участие в организации тусовок, и на клевых закрытых тусах был — всего и не счесть.<\/p>\n<p>В общем, ставьте лайки, подписывайтесь (с)<br \/>\n“Let’s start a new journey!”, так сказать<\/p>\n",
            "date_published": "2021-12-20T17:06:26+03:00",
            "date_modified": "2022-03-23T16:24:46+03:00",
            "tags": [
                "blog"
            ],
            "_date_published_rfc2822": "Mon, 20 Dec 2021 17:06:26 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "57",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "56",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/vtoroy-vypusk-webpurple-podkasta\/",
            "title": "Второй выпуск подкаста смонтирован",
            "content_html": "<p>Я как-то прошляпил в какой-то момент публикацию этого черновика, а сейчас до него дошел. Не пропадать же добру, правильно?<\/p>\n<p>Андрей Смолко — главный знаток спеки JS в Рязани рассказывает про то, как от проектирования кораблей он перешел к разработке веб-сервисов, учился в Европе и много чего интересного про синтетические данные.<\/p>\n<p>Подкаст в аудио-формате и на других площадках — <a href=\"https:\/\/anchor.fm\/webpurple\/episodes\/S01E02----------JS-e116ij7\">анкор<\/a>.<\/p>\n<p>Фидбэк, предложения, пожелания, залететь в следующий выпуск — <a href=\"https:\/\/forms.gle\/5x192yAGfgK1SAdw8\">форма<\/a>.<\/p>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/7KccAfKyq5E?enablejsapi=1\" allow=\"autoplay\" frameborder=\"0\" allowfullscreen><\/iframe>\n<p>\n0:00 — Приветствие<br \/>\n1:33 — Экскурс в историю<br \/>\n3:12 — Как поехать учиться в Европу<br \/>\n9:47 — Про магистерскую диссертацию, исследования и первые программы<br \/>\n14:37 — Как вернулся в Россию, в Рязань<br \/>\n17:00 — Про модели кораблей, электронную навигацию и работу в Санкт-Петербурге<br \/>\n21:10 — Первый продакшен код<br \/>\n22:55 — Как Андрей стал программистом и переехал в Рязань<br \/>\n28:30 — Как начал читать спеку JS<br \/>\n37:44 — Кто вдохновляет<br \/>\n42:55 — Бэкенд или фронтенд<br \/>\n46:09 — Компетенции и собеседования<br \/>\n55:12 — Про проект и синтетические данные<br \/>\n1:08:12 — Завершение<br \/>\n<\/p>\n<\/div>\n",
            "date_published": "2021-05-19T11:07:00+03:00",
            "date_modified": "2021-11-03T11:08:29+03:00",
            "tags": [
                "community",
                "development",
                "podcast"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/remote\/youtube-7KccAfKyq5E-cover.jpg",
            "_date_published_rfc2822": "Wed, 19 May 2021 11:07:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "56",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/jquery\/jquery.js",
                    "system\/library\/media-seek\/media-seek.js"
                ],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/remote\/youtube-7KccAfKyq5E-cover.jpg"
                ]
            }
        },
        {
            "id": "55",
            "url": "https:\/\/ifedyukin.ru\/blog\/all\/kak-babel-zamedlil-prilozhenie-v-2-raza\/",
            "title": "Как babel-плагин замедлил приложение в 2 раза",
            "content_html": "<p><b>TL;DR:<\/b> в <mark>@babel\/plugin-transform-classses<\/mark> есть <a href=\"https:\/\/github.com\/babel\/babel\/issues\/11356\">баг<\/a>, который вызывает падение перформанса.<\/p>\n<p>Вчера всплыла неожиданная проблема, которая изначально звучала как «часть приложения работает медленнее после оптимизаций сборки проекта». Перформанс панель показывала неутешительные результаты, причем, посмотрев на коллстек, найти даже минимальную зацепку я не смог.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/image.png\" width=\"1130\" height=\"293\" alt=\"\" \/>\n<\/div>\n<p>Экспериментально удалось выяснить, что проблема возникает чисто из-за каких-то зависимостей.<\/p>\n<p>С ними в проекте недавно была проведена работа по дедубликации лок-файла и дерева зависимостей, вместе с чем обновились некоторые библиотеки. Минус 7000 строк лока, разбор проблемы обещал быть веселым.<\/p>\n<p class=\"note-main\">Проблему искал сначала мой коллега, затем я. Не знаю, сколько времени на это было потрачено, но причиной оказался один плагинчик — <mark>@babel\/plugin-transform-classses<\/mark>. Откатил версию, зафиксировал ее, и все заработало.<\/p>\n<p class=\"note-aside\">Из-за отсутствия зацепок исследование проводилось методом исключения, благо, модули babel были близко к началу очереди.<\/p>\n<p class=\"note-main\">Как оказалось, с 1 апреля 2020 года в репозитории есть репорт этой проблемы — <a href=\"https:\/\/github.com\/babel\/babel\/issues\/11356\">babel#11356<\/a>.<\/p>\n<p class=\"note-aside\">Сейчас разбираться, че там внутри плагина поменялось мне лень, конечно, но когда-нибудь обязательно покопаю, когда-нибудь.<\/p>\n<p>В нашем случае замедление было в среднем в 2+ раза. Некоторым повезло меньше, после обновления Angular можно <a href=\"https:\/\/github.com\/angular\/angular\/issues\/41038\">поймать<\/a> и более ощутимые просадки.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ifedyukin.ru\/blog\/pictures\/kak-babel-zamedlil-prilozhenie-v-2-raza.png\" width=\"1199\" height=\"460\" alt=\"Картинка из обсуждения в репозитории Angular'а\" \/>\n<\/div>\n<p>В очередной раз поймал себя на мысли, что в 2021 году babel уже не нужен. Пора начать выпиливать его из проектов!<\/p>\n<p>Сейчас придумал теорию заговора, что babel так с адептами ООП борется просто.<br \/>\nКак там было? Если хочешь, чтобы перестали использовать deprecated метод, добавь в него sleep.<\/p>\n",
            "date_published": "2021-03-04T19:11:13+03:00",
            "date_modified": "2023-04-06T12:32:49+03:00",
            "tags": [
                "development",
                "javascript",
                "react"
            ],
            "image": "https:\/\/ifedyukin.ru\/blog\/pictures\/image.png",
            "_date_published_rfc2822": "Thu, 04 Mar 2021 19:11:13 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "55",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/image.png",
                    "https:\/\/ifedyukin.ru\/blog\/pictures\/kak-babel-zamedlil-prilozhenie-v-2-raza.png"
                ]
            }
        }
    ],
    "_e2_version": 4098,
    "_e2_ua_string": "Aegea 11.1 (v4098)"
}