﻿[
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999-once-again\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                The Year In The Date Literal Exceeds 3999\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>28 Marth 2026</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">MS SQL</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">PostgreSQL</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I already wrote about the error mentioned in this post’s title <a href=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999\" target=\"_blank\">earlier</a>, but here's the refresher: the platform chokes on dates later than the year 3999 (things start blowing up at 3999-12-01, I guess). In theory, dates like that should never make it into the database in the first place. In practice... Well, thanks to bugs in application code — and in the platform itself — they sometimes do.</p>\n<p>The usual symptoms are pretty random and annoying: some reports stop working, some documents refuse to post, totals recalculation crashes, and so on. Basically, any code that touches records with those broken dates is now having a bad day.</p>\n<p>The fix I outlined in the post linked above does work, but it's relatively slow: you need to configure the tech log, collect the output, and then parse it. The problem is that the platform crashes the moment it touches the first bad date, and there may be lots of them scattered across different tables. So you often end up doing this in multiple passes: run a check, hit an error, fix it, run again, hit the next one, repeat.</p>\n<p><img alt=\"Thank You, Mario!\" src=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999-once-again/thanks.jpg\"/></p>\n<p>A few years ago, because I wanted a faster way to deal with this, I wrote a <a href=\"https://gist.github.com/vkostyanetsky/a58ff201d2a87a35e70c4c8f4112ad4c\" target=\"_blank\">PostgreSQL query</a> for it. The idea is simple:</p>\n<ol>\n<li>Find all date fields in the database.</li>\n<li>Build one giant query against those fields to look for dates beyond 1C's limit.</li>\n</ol>\n<p>So yes, this query generates another query. Very normal behavior. Run the generated query, and you get the full picture: a list of tables containing invalid dates. After that, it's just engineering work — inspect the tables and decide what to do. In our case, bad dates sometimes show up in totals and turnovers, so we can just delete those rows and recalculate totals using the standard tools.</p>\n<p>Why do this at the DBMS level? Because 1C itself can't really help here — as a reminder, the platform crashes as soon as it touches the bad records. That includes reads, not just writes. Also, in this case, going directly against the database is simply faster and more convenient.</p>\n<p>The other day I rewrote the same <a href=\"https://gist.github.com/vkostyanetsky/5990a16caacc4a9057b577c6a5694512\" target=\"_blank\">query for MS SQL</a>. It turned out longer — because, well, MS SQL likes to make you earn it — but the idea is exactly the same.</p>\n<p>If you want to use it, keep this in mind:</p>\n<ul>\n<li>The <code>_Fld626</code> field in the query text is the Fresh separator. In your database it may have a different name, or it may not exist at all.</li>\n<li>The query is written for a database that uses a 2000-year offset. If your database does not use that offset, you'll need to adjust the condition accordingly — see <code>DATEADD()</code>.</li>\n<li>I added the XML output trick (<code>FOR XML</code>) to stop SSMS from truncating the generated mega-query. That seemed faster than messing around with type casts. The side effect is that before running the generated query, you need to replace <code>&amp;gt;</code> with <code>&gt;</code>.</li>\n</ul>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "the year in the date literal exceeds 3999 28 marth 2026 · 1с work ms sql postgresql i already wrote about the error mentioned in this post’s title earlier , but here's the refresher: the platform chokes on dates later than the year 3999 (things start blowing up at 3999-12-01, i guess). in theory, dates like that should never make it into the database in the first place. in practice... well, thanks to bugs in application code — and in the platform itself — they sometimes do. the usual symptoms are pretty random and annoying: some reports stop working, some documents refuse to post, totals recalculation crashes, and so on. basically, any code that touches records with those broken dates is now having a bad day. the fix i outlined in the post linked above does work, but it's relatively slow: you need to configure the tech log, collect the output, and then parse it. the problem is that the platform crashes the moment it touches the first bad date, and there may be lots of them scattered across different tables. so you often end up doing this in multiple passes: run a check, hit an error, fix it, run again, hit the next one, repeat. a few years ago, because i wanted a faster way to deal with this, i wrote a postgresql query for it. the idea is simple: find all date fields in the database. build one giant query against those fields to look for dates beyond 1c's limit. so yes, this query generates another query. very normal behavior. run the generated query, and you get the full picture: a list of tables containing invalid dates. after that, it's just engineering work — inspect the tables and decide what to do. in our case, bad dates sometimes show up in totals and turnovers, so we can just delete those rows and recalculate totals using the standard tools. why do this at the dbms level? because 1c itself can't really help here — as a reminder, the platform crashes as soon as it touches the bad records. that includes reads, not just writes. also, in this case, going directly against the database is simply faster and more convenient. the other day i rewrote the same query for ms sql . it turned out longer — because, well, ms sql likes to make you earn it — but the idea is exactly the same. if you want to use it, keep this in mind: the _fld626 field in the query text is the fresh separator. in your database it may have a different name, or it may not exist at all. the query is written for a database that uses a 2000-year offset. if your database does not use that offset, you'll need to adjust the condition accordingly — see dateadd() . i added the xml output trick ( for xml ) to stop ssms from truncating the generated mega-query. that seemed faster than messing around with type casts. the side effect is that before running the generated query, you need to replace &gt; with > .",
    "tags": [
      "1c",
      "work",
      "mssql",
      "pgsql"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/with-side-effect\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                With Side Effect\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>15 Marth 2026</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>In the latest release of <a href=\"https://firstbit.ae\" target=\"_blank\">our ERP</a>, we optimized several heavy dynamic lists — orders, invoices, proforma invoices, and so on. Over time they had accumulated a pretty solid pile of technical debt, mostly in the form of mountains of helper tables bolted onto the main queries: contact info, technical attributes, balances, turnovers, you name it.</p>\n<p>At some point even in fairly small deployments the DB optimizer started producing complete nonsense instead of query plans, and the resource cost of letting that happen was getting less and less funny.</p>\n<p>So, we patched things up using several different approaches. One of them was loading extra row data inside the <code>OnGetDataAtServer()</code> handler (I actually <a href=\"https://kostyanetsky.me/notes/desire-paths\" target=\"_blank\">mentioned</a> this mechanism not that long ago). We built a nice little framework around it, rolled it out, tested it, and... Well, now we're all sitting here with those deeply unimpressed engineer faces.</p>\n<p>To be fair, performance really did get a lot better. Inside a compact handler, you can tune queries against heavy virtual tables almost perfectly. The problem is somewhere else: field values populated by this handler are not passed into the standard dynamic list mechanisms. Which means search, sorting, and grouping simply do not work for those fields.</p>\n<p>So you type a value that is clearly visible in the column — and the row is not found. Or not all matching rows are found. Or rows show up that visibly should not match at all. From the user's point of view, this looks absolutely terrible. A bug is a bug. Those fields don't look any different in the UI, so how exactly are you supposed to explain that this is \"just how the platform works™\"?</p>\n<p>And if you explicitly exclude such a field from the mechanisms that can't handle it, that's somehow even worse. For example, try to sort by it — and boom, giant error message. Explaining why sorting blows up on this \"Amount\" column while the one right next to it works just fine is... Not exactly a beginner-friendly support conversation.</p>\n<p>Honestly, how do you come up with such a great handler concept and then completely fumble the platform-level implementation?</p>\n<p>This randomly reminded me of Reddit. Some communities love threads like \"invent a superpower, but with a side effect\". Like, one person comments: \"I can run at the speed of the wind!\" and someone replies: \"yeah, but you can't stop\". That kind of thing. Sometimes it gets pretty funny.</p>\n<p><img alt=\"Superpower\" src=\"https://kostyanetsky.me/notes/with-side-effect/reddit.png\"/></p>\n<p>That's basically the kind of conversation we're having with the platform developers. You can massively speed up dynamic lists, but the UI will make your users furious. You can automatically send binary data to an S3 bucket, but lose it all with one careless click. You can teleport anywhere, but it takes exactly as long as walking. You can shapeshift, but only into an elderly pug. You have thick, silky, luxurious hair, but on your ass.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "with side effect 15 marth 2026 · work 1с in the latest release of our erp , we optimized several heavy dynamic lists — orders, invoices, proforma invoices, and so on. over time they had accumulated a pretty solid pile of technical debt, mostly in the form of mountains of helper tables bolted onto the main queries: contact info, technical attributes, balances, turnovers, you name it. at some point even in fairly small deployments the db optimizer started producing complete nonsense instead of query plans, and the resource cost of letting that happen was getting less and less funny. so, we patched things up using several different approaches. one of them was loading extra row data inside the ongetdataatserver() handler (i actually mentioned this mechanism not that long ago). we built a nice little framework around it, rolled it out, tested it, and... well, now we're all sitting here with those deeply unimpressed engineer faces. to be fair, performance really did get a lot better. inside a compact handler, you can tune queries against heavy virtual tables almost perfectly. the problem is somewhere else: field values populated by this handler are not passed into the standard dynamic list mechanisms. which means search, sorting, and grouping simply do not work for those fields. so you type a value that is clearly visible in the column — and the row is not found. or not all matching rows are found. or rows show up that visibly should not match at all. from the user's point of view, this looks absolutely terrible. a bug is a bug. those fields don't look any different in the ui, so how exactly are you supposed to explain that this is \"just how the platform works™\"? and if you explicitly exclude such a field from the mechanisms that can't handle it, that's somehow even worse. for example, try to sort by it — and boom, giant error message. explaining why sorting blows up on this \"amount\" column while the one right next to it works just fine is... not exactly a beginner-friendly support conversation. honestly, how do you come up with such a great handler concept and then completely fumble the platform-level implementation? this randomly reminded me of reddit. some communities love threads like \"invent a superpower, but with a side effect\". like, one person comments: \"i can run at the speed of the wind!\" and someone replies: \"yeah, but you can't stop\". that kind of thing. sometimes it gets pretty funny. that's basically the kind of conversation we're having with the platform developers. you can massively speed up dynamic lists, but the ui will make your users furious. you can automatically send binary data to an s3 bucket, but lose it all with one careless click. you can teleport anywhere, but it takes exactly as long as walking. you can shapeshift, but only into an elderly pug. you have thick, silky, luxurious hair, but on your ass.",
    "tags": [
      "work",
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/ikigai\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Ikigai\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>9 Marth 2026</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>In Japanese, there's a wonderful word: ikigai. It's kind of like your reason for living, but not in some huge existential sense — more in a grounded, everyday way. A source of inner energy, a source of joy. Basically, the thing that makes you want to get out of bed in the morning.</p>\n<p>A person can have several of those anchors, and they're different for everyone. Coffee, a cat, a craft you love, taking care of the people close to you, a garden, walks, video games...</p>\n<p>Anyway, that's what got me thinking. I stumbled across a channel called \"<a href=\"https://t.me/aleshkino_svoe\" target=\"_blank\">Alyoshkino Svoe</a>\". From what I understand, the guy behind it is a lawyer from St. Petersburg who breeds fancy chickens and regularly posts videos about specific breeds, incubation details, feeding, and so on.</p>\n<p>I'm not into birds at all, but I caught myself just sitting there for twenty minutes, completely mesmerized, listening without looking away. It almost works like therapy, honestly. And it struck me that this is actually a pretty solid kind of ikigai: something you'll love the way this guy loves his chickens.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "ikigai 9 marth 2026 · meanwhile in japanese, there's a wonderful word: ikigai. it's kind of like your reason for living, but not in some huge existential sense — more in a grounded, everyday way. a source of inner energy, a source of joy. basically, the thing that makes you want to get out of bed in the morning. a person can have several of those anchors, and they're different for everyone. coffee, a cat, a craft you love, taking care of the people close to you, a garden, walks, video games... anyway, that's what got me thinking. i stumbled across a channel called \" alyoshkino svoe \". from what i understand, the guy behind it is a lawyer from st. petersburg who breeds fancy chickens and regularly posts videos about specific breeds, incubation details, feeding, and so on. i'm not into birds at all, but i caught myself just sitting there for twenty minutes, completely mesmerized, listening without looking away. it almost works like therapy, honestly. and it struck me that this is actually a pretty solid kind of ikigai: something you'll love the way this guy loves his chickens.",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/autosummary\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Autosummary\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>8 February 2026</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">AI</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I started recording all my meetings back in 2020 — at least, that’s what my own <a href=\"https://kostyanetsky.me/notes/video-recording\" target=\"_blank\">notes</a> say. Video is always more accurate than memory, and clicking \"Start Recording\" in <a href=\"https://obsproject.com\" target=\"_blank\">OBS</a> is the cheapest way to not lose some random-but-important detail.</p>\n<p>The downsides are obvious, though: you can't quickly grasp the gist of a meeting from a video, searching through it is basically impossible, it eats disk space like it's bulking season, and it's painfully easy to accidentally capture something private. To partially compensate, I used to jot down key points in bullet form during the meeting, and later either throw them into a task tracker or write a mini-summary for myself: who I met with, what we discussed, what decisions we landed on. If I forgot something or missed details, I'd double-check the video.</p>\n<p>But this method isn't perfect either. Even a rough outline steals focus from the actual meeting. And some \"oh right, that detail matters\" moments only reveal themselves when it's already too late.</p>\n<p><img alt=\"Forgot\" src=\"https://kostyanetsky.me/notes/autosummary/forgot.jpeg\"/></p>\n<p>So I ended up with a better approach: extract the meeting audio from the video, turn it into text (with a neural net), then turn that transcript into a detailed meeting summary (with another neural net). Yes, it's neural nets all the way down.</p>\n<p>The easiest way to rip the audio is with <a href=\"https://www.ffmpeg.org\" target=\"_blank\">ffmpeg</a> (a command-line utility for working with audio/video). Here's an example (mono, 16 kHz sampling rate + loudness normalization):</p>\n<pre>\nffmpeg.exe -y -i \"D:\\video.mkv\" -vn -ac 1 -ar 16000 -af loudnorm -c:a pcm_s16le \"D:\\audio.wav\"\n</pre>\n<p>As for speech-to-text: I experimented with <a href=\"https://alphacephei.com/vosk/\" target=\"_blank\">Vosk</a> + <a href=\"https://github.com/benob/recasepunc\" target=\"_blank\">recasepunc</a>, but... Yeah, no. Let's just say I'd rather not relive that experience. Meanwhile <s>Boromir</s> <a href=\"https://openai.com/index/whisper\" target=\"_blank\">Whisper</a> (OpenAI's speech recognition model) installs in the background in about 10 minutes:</p>\n<pre>\npy -3.10 -m venv .venv\n.\\.venv\\Scripts\\Activate.ps1\npip install setuptools wheel\npip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118\npip install openai-whisper\n</pre>\n<p>Example run:</p>\n<pre>\nwhisper \"D:\\audio.wav\" --model medium --language Russian --output_format txt\n</pre>\n<p>The result is a plain text transcript you can shove into any chatbot and get a fairly coherent summary. Sure, you still need to proofread it — fix mistakes and hallucinations, rephrase a couple things — but it's still way better than trying to write notes live.</p>\n<p>And that’s basically the whole method. The only thing left is writing a simple script so you don’t have to run two commands manually every time. If you’re on Windows and you can't be bothered to vibe-code, you can grab <a href=\"https://gist.github.com/vkostyanetsky/4f4760097f1b417cc85d71d11662a642\" target=\"_blank\">my script</a> and tweak it.</p>\n<p>The script finds the first .mkv in its folder, runs it through ffmpeg + Whisper, and saves the result back into the same folder. If you use it: note that it runs via <a href=\"https://developer.nvidia.com/cuda\" target=\"_blank\">CUDA</a> (CPU works too, just much slower), and it stores downloaded Whisper models not in the default cache, but inside the current Python virtual environment folder.</p>\n<p>(if you really want, you can wire up an API call or point it at some local model via <a href=\"https://lmstudio.ai\" target=\"_blank\">LM Studio</a> — but for my personal setup I decided: nope, that's already too much engineering for a lazy win)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "autosummary 8 february 2026 · work ai i started recording all my meetings back in 2020 — at least, that’s what my own notes say. video is always more accurate than memory, and clicking \"start recording\" in obs is the cheapest way to not lose some random-but-important detail. the downsides are obvious, though: you can't quickly grasp the gist of a meeting from a video, searching through it is basically impossible, it eats disk space like it's bulking season, and it's painfully easy to accidentally capture something private. to partially compensate, i used to jot down key points in bullet form during the meeting, and later either throw them into a task tracker or write a mini-summary for myself: who i met with, what we discussed, what decisions we landed on. if i forgot something or missed details, i'd double-check the video. but this method isn't perfect either. even a rough outline steals focus from the actual meeting. and some \"oh right, that detail matters\" moments only reveal themselves when it's already too late. so i ended up with a better approach: extract the meeting audio from the video, turn it into text (with a neural net), then turn that transcript into a detailed meeting summary (with another neural net). yes, it's neural nets all the way down. the easiest way to rip the audio is with ffmpeg (a command-line utility for working with audio/video). here's an example (mono, 16 khz sampling rate + loudness normalization): ffmpeg.exe -y -i \"d:\\video.mkv\" -vn -ac 1 -ar 16000 -af loudnorm -c:a pcm_s16le \"d:\\audio.wav\" as for speech-to-text: i experimented with vosk + recasepunc , but... yeah, no. let's just say i'd rather not relive that experience. meanwhile boromir whisper (openai's speech recognition model) installs in the background in about 10 minutes: py -3.10 -m venv .venv .\\.venv\\scripts\\activate.ps1 pip install setuptools wheel pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install openai-whisper example run: whisper \"d:\\audio.wav\" --model medium --language russian --output_format txt the result is a plain text transcript you can shove into any chatbot and get a fairly coherent summary. sure, you still need to proofread it — fix mistakes and hallucinations, rephrase a couple things — but it's still way better than trying to write notes live. and that’s basically the whole method. the only thing left is writing a simple script so you don’t have to run two commands manually every time. if you’re on windows and you can't be bothered to vibe-code, you can grab my script and tweak it. the script finds the first .mkv in its folder, runs it through ffmpeg + whisper, and saves the result back into the same folder. if you use it: note that it runs via cuda (cpu works too, just much slower), and it stores downloaded whisper models not in the default cache, but inside the current python virtual environment folder. (if you really want, you can wire up an api call or point it at some local model via lm studio — but for my personal setup i decided: nope, that's already too much engineering for a lazy win)",
    "tags": [
      "work",
      "ai"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/new-ui\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                New Blog's UI\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>17 January 2026</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Blog</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Over the New Year holidays I randomly got obsessed and rewrote my blog's UI. I only wanted to add search for my notes — there are a lot of them now, and every so often I need to quickly fish something out of the pile (like \"here's that link\" to a coworker).</p>\n<p>The blog runs on <a href=\"https://pages.github.com\" target=\"_blank\">GitHub Pages</a>, so the options aren’t exactly infinite: either outsource search to Google, or build a static index and ship it to the user's browser so it can grep through it locally. I went with the second route: faster, more controllable, <s>and, yes, an excuse to write code</s>. The first time you search it has to download <a href=\"https://kostyanetsky.me/notes.json\" target=\"_blank\">the index file</a>, but... It's 200 KB. That's basically one medium-sized sigh in 2026 internet terms.</p>\n<p>And then, you know how it goes... Scope creep grabbed me by the hoodie. First I couldn't get <a href=\"https://tachyons.io\" target=\"_blank\">Tachyons</a> to play nice with the search input — got annoyed and migrated everything to <a href=\"https://tailwindcss.com\" target=\"_blank\">Tailwind</a> (I'd been meaning to try it anyway, just never had a \"good reason\", so I invented one). While I was writing the search code, I figured it'd be dumb not to add tags too, because why do the same work twice. Next thing I know I \"wake up\" and there's a whole tag cloud sitting above my notes. At that point it felt only logical to do the same for the projects page — except there it's not tags, it's tech stacks...</p>\n<p>So yeah, it turned into that \"Fear and Loathing in Las Vegas\" meme. The tendency was to push it as far as I can, kinda.</p>\n<p>Now the only thing left is to make myself actually write into the new project log. There's always a ton of work, and it's genuinely interesting — but if I don't write things down... Welp. Everything sinks into coffee.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "new blog's ui 17 january 2026 · blog work done over the new year holidays i randomly got obsessed and rewrote my blog's ui. i only wanted to add search for my notes — there are a lot of them now, and every so often i need to quickly fish something out of the pile (like \"here's that link\" to a coworker). the blog runs on github pages , so the options aren’t exactly infinite: either outsource search to google, or build a static index and ship it to the user's browser so it can grep through it locally. i went with the second route: faster, more controllable, and, yes, an excuse to write code . the first time you search it has to download the index file , but... it's 200 kb. that's basically one medium-sized sigh in 2026 internet terms. and then, you know how it goes... scope creep grabbed me by the hoodie. first i couldn't get tachyons to play nice with the search input — got annoyed and migrated everything to tailwind (i'd been meaning to try it anyway, just never had a \"good reason\", so i invented one). while i was writing the search code, i figured it'd be dumb not to add tags too, because why do the same work twice. next thing i know i \"wake up\" and there's a whole tag cloud sitting above my notes. at that point it felt only logical to do the same for the projects page — except there it's not tags, it's tech stacks... so yeah, it turned into that \"fear and loathing in las vegas\" meme. the tendency was to push it as far as i can, kinda. now the only thing left is to make myself actually write into the new project log. there's always a ton of work, and it's genuinely interesting — but if i don't write things down... welp. everything sinks into coffee.",
    "tags": [
      "blog",
      "work",
      "done"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/backup-ui\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Backup Management\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>6 December 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>At the end of the year we shipped a big update to our internal tool (I briefly <a href=\"https://kostyanetsky.me/notes/easter-eggs\" target=\"_blank\">wrote</a> about it before). The goal: give teammates sane, usable access to backups of customer apps. In a SaaS company, everyone needs backups all the time — dev, QA, incident investigations, you name it. Without proper tracking the whole thing turns into a petting zoo: three people, same moment, three requests for almost identical copies of the same database. Sure, it \"works\", but you end up chewing through 3x the resources for zero extra value.</p>\n<p>We did have a solution built on top of the Bitrix UI, but due to, uh... the unique \"evolutionary path\" of that product, it delivered more pain than gain. So we rethought the workflow and rewrote everything. Frontend is 1C; backend is PostgREST, PostgreSQL, PowerShell, and a bunch of other bits and bobs. The internal logic is fairly gnarly, but for the user it's a clean, friendly UI where you can request a backup in literally two clicks.</p>\n<p>You can pick one of three backup types:</p>\n<ul>\n<li>Cloud backup (a copy of the real app deployed in the cloud and accessible — including via the browser);</li>\n<li>File backup (a regular .dt file you can download and spin up locally);</li>\n<li>Configuration + extensions backup (.cf + .cfe).</li>\n</ul>\n<p>Also, the new solution detects when someone tries to request a backup for an app that's already being generated right now. And it rate-limits things too: you can't back up the same app more than once per hour.</p>\n<p>And yes — we're still sneaking jokes into the UI. Obviously.</p>\n<p><img alt=\"But Still!\" src=\"https://kostyanetsky.me/notes/backup-ui/but-still.png\"/></p>\n<p><img alt=\"Coffee First!\" src=\"https://kostyanetsky.me/notes/backup-ui/coffee-first.png\"/></p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "backup management 6 december 2025 · 1с work done at the end of the year we shipped a big update to our internal tool (i briefly wrote about it before). the goal: give teammates sane, usable access to backups of customer apps. in a saas company, everyone needs backups all the time — dev, qa, incident investigations, you name it. without proper tracking the whole thing turns into a petting zoo: three people, same moment, three requests for almost identical copies of the same database. sure, it \"works\", but you end up chewing through 3x the resources for zero extra value. we did have a solution built on top of the bitrix ui, but due to, uh... the unique \"evolutionary path\" of that product, it delivered more pain than gain. so we rethought the workflow and rewrote everything. frontend is 1c; backend is postgrest, postgresql, powershell, and a bunch of other bits and bobs. the internal logic is fairly gnarly, but for the user it's a clean, friendly ui where you can request a backup in literally two clicks. you can pick one of three backup types: cloud backup (a copy of the real app deployed in the cloud and accessible — including via the browser); file backup (a regular .dt file you can download and spin up locally); configuration + extensions backup (.cf + .cfe). also, the new solution detects when someone tries to request a backup for an app that's already being generated right now. and it rate-limits things too: you can't back up the same app more than once per hour. and yes — we're still sneaking jokes into the ui. obviously.",
    "tags": [
      "1c",
      "work",
      "done"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/desire-paths\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Desire Paths\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>29 November 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Optimization</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Alright, Jean Fresco's riddle. You've got a table — say, ~50k rows. How do you end up reading half a billion?</p>\n<p>Easy-peasy: Nested Loops + Clustered Index Seek:</p>\n<p><img alt=\"Half a billion\" src=\"https://kostyanetsky.me/notes/desire-paths/500_million.png\"/></p>\n<p>Clustered Index Seek is a bit of a marketing name here, of course. In reality, on every execution the operator walks the entire table (the whole clustered index) and checks every row against the predicates. And it does that 10 730 times for 51 391 rows. Result: 551 425 430 rows read, 13 343 returned.</p>\n<p><img alt=\"Ouch\" src=\"https://kostyanetsky.me/notes/desire-paths/ouch.gif\"/></p>\n<p>So yeah — a perfect textbook example of a horrible query plan in a vacuum. Put it in a museum. Nested Loops, if you've forgotten, works roughly like this:</p>\n<pre>\nFor Each Table1Row In Table1 Do\n    For Each Table2Row In Table2 Do\n        ...\n</pre>\n<p>That's fine for small tables, but the DB can also pick it for bigger ones — for example, if it runs out of time to build a proper plan.</p>\n<p>That's exactly what happened here. Zooming out to the platform level: we've got a dynamic list that queries a documents table, and the devs bolted on like a dozen virtual tables from accumulation registers.</p>\n<p>Some of those registers were huge on their own, and the virtual tables poured gasoline on the fire (each one turns into 2+ nested queries). The DB honestly tried to come up with an efficient strategy, but at some point it basically decided: \"a garbage plan is still better than no plan at all\".</p>\n<p>And the user? They tried to search a document by number — and the client app just straight-up froze.</p>\n<p>So, about virtual tables in dynamic lists. There's a nice English phrase: \"desire path\" — the trail people naturally carve because it's the easiest way. Slapping a virtual table onto the main one really is often the simplest, fastest, most familiar way to solve the task. But it's <strong>not efficient</strong>.</p>\n<p>There's an alternative, for example the <code>OnGetDataAtServer()</code> handler. It takes longer to implement, but it lets you properly tune the virtual table and avoid the scenario above. Scrolling the list will produce more queries, sure — but they'll be smaller, faster, and way more efficient than one single giant monster query.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "desire paths 29 november 2025 · 1с work optimization alright, jean fresco's riddle. you've got a table — say, ~50k rows. how do you end up reading half a billion? easy-peasy: nested loops + clustered index seek: clustered index seek is a bit of a marketing name here, of course. in reality, on every execution the operator walks the entire table (the whole clustered index) and checks every row against the predicates. and it does that 10 730 times for 51 391 rows. result: 551 425 430 rows read, 13 343 returned. so yeah — a perfect textbook example of a horrible query plan in a vacuum. put it in a museum. nested loops, if you've forgotten, works roughly like this: for each table1row in table1 do for each table2row in table2 do ... that's fine for small tables, but the db can also pick it for bigger ones — for example, if it runs out of time to build a proper plan. that's exactly what happened here. zooming out to the platform level: we've got a dynamic list that queries a documents table, and the devs bolted on like a dozen virtual tables from accumulation registers. some of those registers were huge on their own, and the virtual tables poured gasoline on the fire (each one turns into 2+ nested queries). the db honestly tried to come up with an efficient strategy, but at some point it basically decided: \"a garbage plan is still better than no plan at all\". and the user? they tried to search a document by number — and the client app just straight-up froze. so, about virtual tables in dynamic lists. there's a nice english phrase: \"desire path\" — the trail people naturally carve because it's the easiest way. slapping a virtual table onto the main one really is often the simplest, fastest, most familiar way to solve the task. but it's not efficient . there's an alternative, for example the ongetdataatserver() handler. it takes longer to implement, but it lets you properly tune the virtual table and avoid the scenario above. scrolling the list will produce more queries, sure — but they'll be smaller, faster, and way more efficient than one single giant monster query.",
    "tags": [
      "1c",
      "work",
      "optimization"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/obsidian-foodiary-bases\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Food Diary In Obsidian Bases\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>23 November 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Obsidian</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I've rebuilt last year’s <a href=\"https://kostyanetsky.me/notes/obsidian-foodiary\" target=\"_blank\">plugin</a> with <a href=\"https://help.obsidian.md/bases\" target=\"_blank\">Obsidian Bases</a> — it now tracks calories, protein, fat, and carbs in your food.</p>\n<p>The result is way more flexible and customizable than the plugin version: if you suddenly decide you want to count fiber as well or just shuffle some columns in the report, you don't have to rewrite, rebuild, or release anything. You just tweak it to your heart's content.</p>\n<p>And it doesn't look half bad either:</p>\n<p><img alt=\"UI\" src=\"https://kostyanetsky.me/notes/obsidian-foodiary-bases/base.png\"/></p>\n<p>All the necessary settings and scripts live in the <a href=\"https://github.com/vkostyanetsky/ObsidianFoodiaryBases\" target=\"_blank\">GitHub repo</a>.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "food diary in obsidian bases 23 november 2025 · done obsidian i've rebuilt last year’s plugin with obsidian bases — it now tracks calories, protein, fat, and carbs in your food. the result is way more flexible and customizable than the plugin version: if you suddenly decide you want to count fiber as well or just shuffle some columns in the report, you don't have to rewrite, rebuild, or release anything. you just tweak it to your heart's content. and it doesn't look half bad either: all the necessary settings and scripts live in the github repo .",
    "tags": [
      "done",
      "obsidian"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/well-there-are-some\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Well, There Are Some\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>17 November 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I'm out for a walk in the evening, and behind me there's some mom and her little kid — about five years old, I guess. I don't see them, I just hear them talking. The mom is explaining university to the kid: that you have to get in, study, there will be exams and all that.</p>\n<p>The boy is quiet for a bit, then says sadly:</p>\n<p>— I thought there was only school, but it turns out there are more difficulties too...</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "well, there are some 17 november 2025 · meanwhile i'm out for a walk in the evening, and behind me there's some mom and her little kid — about five years old, i guess. i don't see them, i just hear them talking. the mom is explaining university to the kid: that you have to get in, study, there will be exams and all that. the boy is quiet for a bit, then says sadly: — i thought there was only school, but it turns out there are more difficulties too...",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/harmless-harm\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Harmless Harm\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>16 November 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">PostgreSQL</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">MS SQL</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>The other day my colleague and I were debugging an issue, nothing fancy, just another \"why is this query behaving weird?\" moment.</p>\n<p>Simplified, the idea was: we read a table from the database and dump the result into a temp table. If a certain condition is met, we still want the temp table to be created, but it must be empty (regardless of whether the source table has rows or not).</p>\n<p>The query looked roughly like this:</p>\n<pre>\nSELECT\n    Table.Field1 AS Field1\nFROM\n    Table AS Table\nWHERE \n    &amp;Parameter\n</pre>\n<p>If we needed to copy rows from the source table into the temp table, we passed TRUE into the parameter; if we wanted the temp table to be empty, we passed FALSE.</p>\n<p>Looks simple at first glance, but this trick is a silent performance foot-gun if the table being read is large.</p>\n<p>The reason is how DB engines work with parameterized queries. Both MS SQL and PostgreSQL build the execution plan based on the query text, and in this example the parameter value does <strong>not</strong> affect the decision of whether the table should be read or not.</p>\n<p>As a result, when this query runs, both engines will pedantically scan the whole table (or its index), even if the parameter is FALSE. In that case each row is just discarded, so the logic is technically correct, but we're wasting resources on a pointless scan and polluting the buffer cache, slowing down the system overall and diligently contributing to global warming :)</p>\n<p>The fix is simple: inline TRUE/FALSE in the query body as a constant instead of using a parameter. Or use TOP so the query text is even simpler:</p>\n<pre>\nSELECT TOP 0\n    Table.Field1 AS Field1\nFROM\n    Table AS Table\n</pre>\n<p>At the SQL level this turns into something like \"SELECT TOP 0 ... FROM Table\" for MS SQL and \"SELECT ... FROM Table LIMIT 0\" for PostgreSQL. The final plan will still contain a read operator, but the executor won't actually request any rows, so there's no real data scan (yay).</p>\n<p>P.S. If you don't care about having proper column types in the temp table, you can even do this:</p>\n<pre>\nSELECT TOP 0\n    UNDEFINED AS Field1\n</pre>\n<p>The performance gain, however, is so tiny that it's probably not worth over-optimizing for this. There are better hills to die on.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "harmless harm 16 november 2025 · 1с postgresql ms sql the other day my colleague and i were debugging an issue, nothing fancy, just another \"why is this query behaving weird?\" moment. simplified, the idea was: we read a table from the database and dump the result into a temp table. if a certain condition is met, we still want the temp table to be created, but it must be empty (regardless of whether the source table has rows or not). the query looked roughly like this: select table.field1 as field1 from table as table where &parameter if we needed to copy rows from the source table into the temp table, we passed true into the parameter; if we wanted the temp table to be empty, we passed false. looks simple at first glance, but this trick is a silent performance foot-gun if the table being read is large. the reason is how db engines work with parameterized queries. both ms sql and postgresql build the execution plan based on the query text, and in this example the parameter value does not affect the decision of whether the table should be read or not. as a result, when this query runs, both engines will pedantically scan the whole table (or its index), even if the parameter is false. in that case each row is just discarded, so the logic is technically correct, but we're wasting resources on a pointless scan and polluting the buffer cache, slowing down the system overall and diligently contributing to global warming :) the fix is simple: inline true/false in the query body as a constant instead of using a parameter. or use top so the query text is even simpler: select top 0 table.field1 as field1 from table as table at the sql level this turns into something like \"select top 0 ... from table\" for ms sql and \"select ... from table limit 0\" for postgresql. the final plan will still contain a read operator, but the executor won't actually request any rows, so there's no real data scan (yay). p.s. if you don't care about having proper column types in the temp table, you can even do this: select top 0 undefined as field1 the performance gain, however, is so tiny that it's probably not worth over-optimizing for this. there are better hills to die on.",
    "tags": [
      "1c",
      "pgsql",
      "mssql"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/voodoo\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Voodoo\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>5 October 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Looks like we finally caught our first lab-reproducible case of platform cache corruption. Short synopsis:</p>\n<ul>\n<li>Spin up a fresh app from the v35 template of <a href=\"https://firstbit.ae\" target=\"_blank\">our ERP</a>.</li>\n<li>Run it and wait for initialization to finish.</li>\n<li>Swap the app configuration to the v36 release (specifically build 28537 from the dev repo) and run it again.</li>\n</ul>\n<p>After this super simple sequence, about half the team sees the platform suddenly lose one of the enums. And it's annoyingly selective: hit an enum value on the client — all good; do the same on the server — boom, exception.</p>\n<p>Same story with the manager module of one catalog: its methods exist and are exported, but after the update the platform pretends they don't and throw an exception when you call them.</p>\n<p><a href=\"https://x.com/EffinBirds/status/1970264357427704080\" target=\"_blank\"><img alt=\"Welcome To Dipshit Central\" src=\"https://kostyanetsky.me/notes/voodoo/welcome.jpg\"/></a></p>\n<p>As always, when the magic blooms — look at the cache. Clear it and symptoms vanish. There are indirect hints too:</p>\n<ul>\n<li>The enum did exist in v35, but it was renamed in v36.</li>\n<li>Those manager-module methods didn't exist in v35 (they were added in v36).</li>\n</ul>\n<p>So the v35 cache didn't contain either of these in their v36 identities, yet for some reason the platform insists on digging into that old cache.</p>\n<p>We still don't have a clean root cause. We traced it to a specific commit after which the bug started showing up, but the only weird thing there its <a href=\"https://kostyanetsky.me/notes/voodoo/the-commit.png\" target=\"_blank\">its name</a> (and honestly, there are nearby commits that look even <a href=\"https://kostyanetsky.me/notes/voodoo/the-other-commit.png\" target=\"_blank\">more suspicious</a> from this point of view). The rest were <a href=\"https://kostyanetsky.me/notes/voodoo/5ba6ac0956e0cc7bc6b520e5110420e6950478fe.diff\" target=\"_blank\">minor changes</a> that regenerate internal metadata IDs in the manifest. Yes, those IDs are tied to cache keys, but they get bumped on any metadata change and have never caused issues before.</p>\n<p>If you landed here from Google because you hit the same mess — make a no-op change to the problematic object so the platform refreshes the metadata IDs in the manifest. For example, add an empty method or even just a space in the module. That fixes the configuration so the recipe at the top stops corrupting the cache.</p>\n<p>Voodoo, sure — but hey, it works ¯\\_(ツ)_/¯</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "voodoo 5 october 2025 · work 1с looks like we finally caught our first lab-reproducible case of platform cache corruption. short synopsis: spin up a fresh app from the v35 template of our erp . run it and wait for initialization to finish. swap the app configuration to the v36 release (specifically build 28537 from the dev repo) and run it again. after this super simple sequence, about half the team sees the platform suddenly lose one of the enums. and it's annoyingly selective: hit an enum value on the client — all good; do the same on the server — boom, exception. same story with the manager module of one catalog: its methods exist and are exported, but after the update the platform pretends they don't and throw an exception when you call them. as always, when the magic blooms — look at the cache. clear it and symptoms vanish. there are indirect hints too: the enum did exist in v35, but it was renamed in v36. those manager-module methods didn't exist in v35 (they were added in v36). so the v35 cache didn't contain either of these in their v36 identities, yet for some reason the platform insists on digging into that old cache. we still don't have a clean root cause. we traced it to a specific commit after which the bug started showing up, but the only weird thing there its its name (and honestly, there are nearby commits that look even more suspicious from this point of view). the rest were minor changes that regenerate internal metadata ids in the manifest. yes, those ids are tied to cache keys, but they get bumped on any metadata change and have never caused issues before. if you landed here from google because you hit the same mess — make a no-op change to the problematic object so the platform refreshes the metadata ids in the manifest. for example, add an empty method or even just a space in the module. that fixes the configuration so the recipe at the top stops corrupting the cache. voodoo, sure — but hey, it works ¯\\_(ツ)_/¯",
    "tags": [
      "work",
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/data-history-missing-indexes\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Slow Removal of Fresh Areas\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>3 August 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>A colleague noticed that on one of our Fresh instances, deleting data areas had become painfully slow. Dug into the metrics:</p>\n<pre>\nDELETE FROM T1\nFROM _DataHistoryMetadata T1\nWHERE \n    T1._MetadataId = ?\n    AND T1._IsActual = 0x00 \n    AND NOT (\n        T1._MetadataVersionNumber IN (\n            SELECT T2._MetadataVersionNumber AS MetadataVersionNumber_\n            FROM _DataHistoryVersions T2\n            WHERE T2._HistoryDataId IN (\n                SELECT DataHistoryLatestVersions1.DataHistoryLatestVersions._HistoryDataId AS HistoryDataId_\n                FROM DataHistoryLatestVersions1.DataHistoryLatestVersions T3\n                WHERE DataHistoryLatestVersions1.DataHistoryLatestVersions._MetadataId = ?\n            )\n        )\n    )\n</pre>\n<p>Each of these queries was reading around 20GB. What's happening is mostly clear: the platform is trying to delete an area's data history, but the janky DB query causes a full scan over the whole history table across all areas instead of using an index. Someone on Dmitrovskaya got lazy again.</p>\n<p><a href=\"https://x.com/EffinBirds/status/1945545263407301033\" target=\"_blank\"><img alt=\"Why are you surpised?\" src=\"https://kostyanetsky.me/notes/data-history-missing-indexes/why.png\"/></a></p>\n<p>So we were losing between 30 seconds and a half an hour per operation. Wanted it faster. Fix:</p>\n<pre>\nCREATE NONCLUSTERED INDEX IX_DataHistoryLatestVersions1_MetadataId\n  ON dbo._DataHistoryLatestVersions1 (_MetadataId)\n  INCLUDE (_HistoryDataId)\n  WITH (DROP_EXISTING = OFF, ONLINE = OFF);\n\nCREATE NONCLUSTERED INDEX IX_DataHistoryVersions_MetadataVersionNumber\n  ON dbo._DataHistoryVersions (_MetadataVersionNumber)\n  WITH (DROP_EXISTING = OFF, ONLINE = OFF);\n</pre>\n<p>Deletion cost predictably dropped ~99%.</p>\n<p>If you're going to repeat this on your side:</p>\n<ol>\n<li>Technically this violates the license agreement, you've been warned and all that.</li>\n<li>There's a risk the platform will trip over the new indexes during future restructurings (especially on the \"new\" schema). Better to have a ready script to drop the index, and then (after restructuring) put it back.</li>\n</ol>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "slow removal of fresh areas 3 august 2025 · 1с work a colleague noticed that on one of our fresh instances, deleting data areas had become painfully slow. dug into the metrics: delete from t1 from _datahistorymetadata t1 where t1._metadataid = ? and t1._isactual = 0x00 and not ( t1._metadataversionnumber in ( select t2._metadataversionnumber as metadataversionnumber_ from _datahistoryversions t2 where t2._historydataid in ( select datahistorylatestversions1.datahistorylatestversions._historydataid as historydataid_ from datahistorylatestversions1.datahistorylatestversions t3 where datahistorylatestversions1.datahistorylatestversions._metadataid = ? ) ) ) each of these queries was reading around 20gb. what's happening is mostly clear: the platform is trying to delete an area's data history, but the janky db query causes a full scan over the whole history table across all areas instead of using an index. someone on dmitrovskaya got lazy again. so we were losing between 30 seconds and a half an hour per operation. wanted it faster. fix: create nonclustered index ix_datahistorylatestversions1_metadataid on dbo._datahistorylatestversions1 (_metadataid) include (_historydataid) with (drop_existing = off, online = off); create nonclustered index ix_datahistoryversions_metadataversionnumber on dbo._datahistoryversions (_metadataversionnumber) with (drop_existing = off, online = off); deletion cost predictably dropped ~99%. if you're going to repeat this on your side: technically this violates the license agreement, you've been warned and all that. there's a risk the platform will trip over the new indexes during future restructurings (especially on the \"new\" schema). better to have a ready script to drop the index, and then (after restructuring) put it back.",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/myth-buster\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Myth Buster\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>27 Jule 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I stumbled upon a hefty Infostart <a href=\"https://infostart.ru/1c/articles/2434171/\" target=\"_blank\">article</a> all about \"debunking myths\" around the platform.</p>\n<p>Honestly, about half of it reads like a joke. It's like:</p>\n<blockquote>\n<p>Hot off the press! Crime, intrigue, investigations! File‑based infobase is faster than client-server! DCS is slower than a plain request! Calling a server method on the server counts as a brand-new server call! <s>UFO over Red Square!</s></p>\n</blockquote>\n<p>Still, there are some genuinely interesting nuggets! For instance, I'd never heard the claim that cramming your code into one single line makes it run ten times faster. Too bad you'd get your ass handed to you by the team for trying that kind of desperate swag before you even get to celebrate the speed boost. And let's be real — most enterprise app slowdowns usually come from totally different places.</p>\n<p>Or take their speed comparison for dumping data into a table: one test for object presentations and another for their descriptions. The presentation dump was literally tens of times slower! On paper, that sounds weird — both are just strings already pulled from the database at measurement time. My guess is it's down to typing: presentation strings can be unlimited length, unlike descriptions. So you get extra memory allocations, helper structures popping up, and bam — that's where the slowdown creeps in.</p>\n<p>P.S. I've jotted down some of these points myself before. Off the top of my head — I remember <a href=\"https://kostyanetsky.me/notes/is-ref-empty\" target=\"_blank\">benchmarking</a> <code>ValueIsFilled()</code> and getting a nasty <a href=\"https://kostyanetsky.me/notes/method-with-surprise\" target=\"_blank\">surprise</a> from the built‑in <code>FindByNumber()</code>.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "myth buster 27 jule 2025 · 1с i stumbled upon a hefty infostart article all about \"debunking myths\" around the platform. honestly, about half of it reads like a joke. it's like: hot off the press! crime, intrigue, investigations! file‑based infobase is faster than client-server! dcs is slower than a plain request! calling a server method on the server counts as a brand-new server call! ufo over red square! still, there are some genuinely interesting nuggets! for instance, i'd never heard the claim that cramming your code into one single line makes it run ten times faster. too bad you'd get your ass handed to you by the team for trying that kind of desperate swag before you even get to celebrate the speed boost. and let's be real — most enterprise app slowdowns usually come from totally different places. or take their speed comparison for dumping data into a table: one test for object presentations and another for their descriptions. the presentation dump was literally tens of times slower! on paper, that sounds weird — both are just strings already pulled from the database at measurement time. my guess is it's down to typing: presentation strings can be unlimited length, unlike descriptions. so you get extra memory allocations, helper structures popping up, and bam — that's where the slowdown creeps in. p.s. i've jotted down some of these points myself before. off the top of my head — i remember benchmarking valueisfilled() and getting a nasty surprise from the built‑in findbynumber() .",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/delete-geometry\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Geometry Deletion\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>12 June 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">3D</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I figured out a cool trick for cutting off parts of an object when it intersects with something else. Like, in this gif, there’s a monkey head model in the center, and as a plane moves through it, the part that intersects just disappears.</p>\n<p><img alt=\"Demo\" src=\"https://kostyanetsky.me/notes/delete-geometry/demo.gif\"/></p>\n<p><a href=\"https://github.com/vkostyanetsky/3DPlayground/blob/main/Geometry%20Nodes/DeleteGeometry.blend\" target=\"_blank\">The idea</a> is pretty simple: you shrink the geometry of the \"cutter\" object down to a cube, get its min and max coordinates along each axis, and then for every point on the object you're trimming, you check whether it falls within that range. If it does — boom, it gets deleted.</p>\n<p>There are tons of ways you could use this. For example, I used it to automatically trim parts of decorative music staff lines on a wall so they wouldn't go across a doorway.</p>\n<p><img alt=\"Example\" src=\"https://kostyanetsky.me/notes/delete-geometry/case.jpg\"/></p>\n<p>Sure, you could do it by hand, without geometry nodes, but that would kill flexibility. If the wall size, door size, or the angle of the lines changes — you'd have to redo everything from scratch.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "geometry deletion 12 june 2025 · 3d i figured out a cool trick for cutting off parts of an object when it intersects with something else. like, in this gif, there’s a monkey head model in the center, and as a plane moves through it, the part that intersects just disappears. the idea is pretty simple: you shrink the geometry of the \"cutter\" object down to a cube, get its min and max coordinates along each axis, and then for every point on the object you're trimming, you check whether it falls within that range. if it does — boom, it gets deleted. there are tons of ways you could use this. for example, i used it to automatically trim parts of decorative music staff lines on a wall so they wouldn't go across a doorway. sure, you could do it by hand, without geometry nodes, but that would kill flexibility. if the wall size, door size, or the angle of the lines changes — you'd have to redo everything from scratch.",
    "tags": [
      "3d"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/no\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                No\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>11 June 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"No\" src=\"https://kostyanetsky.me/notes/no/no.jpg\"/></p>\n<p>This is the message the current platform throws up when you try to connect to an offline server cluster. I do appreciate minimalism in interfaces, of course, but this is definitely over the top.</p>\n<p>What's more, the platform is installed with only a single language pack (English) and even launched with a hard override to \"Ven VLen\", yet somehow the native birches still manage to sprout up. Maybe the C++ library that fires off the message (DataExchangeTcpClientImpl.cpp) is looking at the OS language (Russian) in my case — hard to say.</p>\n<p>Anyway, I can't shake the Bugs Bunny vibes every time I see that dialog box.</p>\n<p><img alt=\"No\" src=\"https://kostyanetsky.me/notes/no/bugs-bunny.png\"/></p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "no 11 june 2025 · 1с work this is the message the current platform throws up when you try to connect to an offline server cluster. i do appreciate minimalism in interfaces, of course, but this is definitely over the top. what's more, the platform is installed with only a single language pack (english) and even launched with a hard override to \"ven vlen\", yet somehow the native birches still manage to sprout up. maybe the c++ library that fires off the message (dataexchangetcpclientimpl.cpp) is looking at the os language (russian) in my case — hard to say. anyway, i can't shake the bugs bunny vibes every time i see that dialog box.",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/hottabych\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                The Genie Problem\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>12 April 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">3D</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <blockquote>\n<p>Returning to Volka's room, the old man turned round slyly, snapped the fingers of his left hand, and there appeared on the wall over the aquarium an exact copy of the telephone hanging in the hall.</p>\n<p>\"Now you can talk to your friends as much as you like without leaving your\nown room.\"</p>\n<p>\"Golly, thanks a lot!\" Volka said gratefully. He removed the receiver, pressed it to his ear and listened. There was no dial tone.</p>\n<p>\"Hello! Hello!\" he shouted. He shook the receiver and then blew into it. Still, there was no dial tone.</p>\n<p>\"The phone's broken,\" he explained to Hottabych. \"Let's unscrew the receiver and see what's wrong.\"</p>\n<p>However, despite all his efforts, he could not unscrew it.</p>\n<p>\"It's made of the finest black marble,\" Hottabych boasted.</p>\n<p>\"Then there's nothing inside?\" Volka asked disappointedly.</p>\n<p>\"Why, is there supposed to be something inside this, too? Just like in a watch?\"</p>\n<p>\"Now I know why it doesn't work. You've only made a model of a telephone, without anything that's supposed to go inside it. But the insides are the most important part.\"</p>\n<p><em>\"The Old Genie Hottabych\", Lazar Lagin</em></p>\n</blockquote>\n<p>When I’m doing 3D modeling, I often feel like that genie. He also tried to mimic the shape of things and jazz them up, but always ended up failing ‘cause he hadn’t got a clue about what was inside.</p>\n<p>I’m just the same. For the past month, I’ve been putting the finishing touches on a model of a school music room, and guess what? I’ve learned more about how pianos work than I have in my whole life before. I could even give a quick lecture on heating systems in Russian schools — talking about sectional, panel, cast iron, and aluminum radiators, which types pop up most, the spacing between them, why you shouldn’t hook up three in a row, and so on.</p>\n<p>I read about this effect: like when you're drawing, say, samurai armor — you end up inadvertently learning heaps about the properties of leather, the different kinds of metal, and the whole tech stack of the samurai era. I never thought I'd run into that from day one — but hey, I think it's a good thing. It fires up your neural connections, broadens your view of the world, sparks your creativity, and all that jazz.</p>\n<p>Plus, it’s way more fun working on a model when you actually know what’s going on under the hood.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "the genie problem 12 april 2025 · 3d returning to volka's room, the old man turned round slyly, snapped the fingers of his left hand, and there appeared on the wall over the aquarium an exact copy of the telephone hanging in the hall. \"now you can talk to your friends as much as you like without leaving your own room.\" \"golly, thanks a lot!\" volka said gratefully. he removed the receiver, pressed it to his ear and listened. there was no dial tone. \"hello! hello!\" he shouted. he shook the receiver and then blew into it. still, there was no dial tone. \"the phone's broken,\" he explained to hottabych. \"let's unscrew the receiver and see what's wrong.\" however, despite all his efforts, he could not unscrew it. \"it's made of the finest black marble,\" hottabych boasted. \"then there's nothing inside?\" volka asked disappointedly. \"why, is there supposed to be something inside this, too? just like in a watch?\" \"now i know why it doesn't work. you've only made a model of a telephone, without anything that's supposed to go inside it. but the insides are the most important part.\" \"the old genie hottabych\", lazar lagin when i’m doing 3d modeling, i often feel like that genie. he also tried to mimic the shape of things and jazz them up, but always ended up failing ‘cause he hadn’t got a clue about what was inside. i’m just the same. for the past month, i’ve been putting the finishing touches on a model of a school music room, and guess what? i’ve learned more about how pianos work than i have in my whole life before. i could even give a quick lecture on heating systems in russian schools — talking about sectional, panel, cast iron, and aluminum radiators, which types pop up most, the spacing between them, why you shouldn’t hook up three in a row, and so on. i read about this effect: like when you're drawing, say, samurai armor — you end up inadvertently learning heaps about the properties of leather, the different kinds of metal, and the whole tech stack of the samurai era. i never thought i'd run into that from day one — but hey, i think it's a good thing. it fires up your neural connections, broadens your view of the world, sparks your creativity, and all that jazz. plus, it’s way more fun working on a model when you actually know what’s going on under the hood.",
    "tags": [
      "3d"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/easter-eggs\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Easter Eggs\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>6 April 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Thank you, Mario!\" src=\"https://kostyanetsky.me/notes/easter-eggs/mario.jpg\"/></p>\n<p><img alt=\"Awaiting Signal\" src=\"https://kostyanetsky.me/notes/easter-eggs/mothership.jpg\"/></p>\n<p>A couple of Easter eggs hidden inside FirstBit ERP. They're tucked away for the developers: in the first case, users see just the form title and notification text, while in the second, they see the standard \"waiting for connection\" message.</p>\n<p>I like to add little things like this from time to time — it helps to keep things fun, even when the task isn’t the most exciting or I’m just feeling tired. If you haven’t checked out Bystronovsky’s \"<a href=\"https://collab.ldwg.ru/stressless-design\" target=\"_blank\">Design Without Stress</a>\", you really should — no way I could explain it better myself.</p>\n<p>By the way, here’s another Easter egg! Not from our ERP this time, but from a new tool we’re making for automated database updates. We're building it just for ourselves, so we can joke around with the user a bit :)</p>\n<p><img alt=\"Nice try, Marty!\" src=\"https://kostyanetsky.me/notes/easter-eggs/marty.jpg\"/></p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "easter eggs 6 april 2025 · work a couple of easter eggs hidden inside firstbit erp. they're tucked away for the developers: in the first case, users see just the form title and notification text, while in the second, they see the standard \"waiting for connection\" message. i like to add little things like this from time to time — it helps to keep things fun, even when the task isn’t the most exciting or i’m just feeling tired. if you haven’t checked out bystronovsky’s \" design without stress \", you really should — no way i could explain it better myself. by the way, here’s another easter egg! not from our erp this time, but from a new tool we’re making for automated database updates. we're building it just for ourselves, so we can joke around with the user a bit :)",
    "tags": [
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/across-meeting\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                ERP Development In English\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>19 January 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <iframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https://www.youtube.com/embed/mZwHTbu285A\" width=\"560\"></iframe>\n<p>Our lead developer recently shared some insights about our work — specifically, developing ERP systems on 1C for the UAE and, more recently, Saudi Arabia. The session was hosted by the online English school Across, so the audience was spot-on: Russian-speaking folks interested in building careers and exploring international markets.</p>\n<p>Overall, it turned out pretty cool, especially as a language practice. Just a reminder: learning foreign languages is still one of the best ways to give your brain a workout, and it’s also super accessible. There’s no shortage of resources, communities, and interest-based clubs out there — you just need the motivation :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "erp development in english 19 january 2025 · work english our lead developer recently shared some insights about our work — specifically, developing erp systems on 1c for the uae and, more recently, saudi arabia. the session was hosted by the online english school across, so the audience was spot-on: russian-speaking folks interested in building careers and exploring international markets. overall, it turned out pretty cool, especially as a language practice. just a reminder: learning foreign languages is still one of the best ways to give your brain a workout, and it’s also super accessible. there’s no shortage of resources, communities, and interest-based clubs out there — you just need the motivation :)",
    "tags": [
      "work",
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/safe-code\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Mysterious Code\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>18 January 2025</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Georgia</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Videogames</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Code\" src=\"https://kostyanetsky.me/notes/safe-code/code.jpg\"/></p>\n<p>Somewhere on the streets of Tbilisi. As a big fan of the Dishonored series, I just couldn’t walk past this. I’m sure there’s a safe nearby that this code unlocks!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "mysterious code 18 january 2025 · georgia videogames somewhere on the streets of tbilisi. as a big fan of the dishonored series, i just couldn’t walk past this. i’m sure there’s a safe nearby that this code unlocks!",
    "tags": [
      "georgia",
      "videogames"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/negativity\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Go Away, Negativity!\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>29 December 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Georgia</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Chichilaki\" src=\"https://kostyanetsky.me/notes/negativity/chichilaki.jpg\"/></p>\n<p>The white things in the background are called chichilaki. It’s a kind of Georgian New Year tree (in practice, it’s finely shaved hazelnut branches). It’s believed to absorb all the accumulated negativity, so after the holidays, it’s supposed to be burned (along with the negativity).</p>\n<p>Turns out, that last part is a bit of a challenge. The local police (and especially the fire department) view this good old tradition with suspicion — and understandably so (a chichilaki can be as tall as a person, making it quite the torch). So, we were advised to simply toss the \"negativity-charged\" chichilaki into the trash to avoid getting fresh troubles. Or donate it to the zoo — apparently, the animals play with them and even use them to clean their teeth.</p>\n<p>That last part made me smile. Getting rid of negativity with the help of cats — what a surprise. Big, toothy cats, sure, but still cats!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "go away, negativity! 29 december 2024 · georgia meanwhile the white things in the background are called chichilaki. it’s a kind of georgian new year tree (in practice, it’s finely shaved hazelnut branches). it’s believed to absorb all the accumulated negativity, so after the holidays, it’s supposed to be burned (along with the negativity). turns out, that last part is a bit of a challenge. the local police (and especially the fire department) view this good old tradition with suspicion — and understandably so (a chichilaki can be as tall as a person, making it quite the torch). so, we were advised to simply toss the \"negativity-charged\" chichilaki into the trash to avoid getting fresh troubles. or donate it to the zoo — apparently, the animals play with them and even use them to clean their teeth. that last part made me smile. getting rid of negativity with the help of cats — what a surprise. big, toothy cats, sure, but still cats!",
    "tags": [
      "georgia",
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/bit-of-surgery\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                A Little Bit Of Surgery\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>17 December 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>A few years ago, I stumbled upon a story about a programmer who had to debug software controlling a surgical robot — right in the middle of an operation. That blew my mind, to be frank.</p>\n<p>Today, my colleague and I were fixing a 1C cluster with databases running on 1cFresh. After migrating it to a neighboring server, the thing suddenly started acting up. Long story short: trying to print a document would send the client app into its death throes.  </p>\n<p>While we were knee-deep in troubleshooting, I had this thought: sure, it doesn’t look as terrifying as debugging software that someone’s life literally depends on. But if you think about all the clients sitting on edge because their business is grinding to a halt... Well, who knows where the stress levels are higher?  </p>\n<p>P.S. Nerdy details for the curious. During the migration, the permissions for the server cache folder didn’t transfer properly. This led to a funny (well, not so funny) effect: the logs would happily land there, but session data wouldn’t.  </p>\n<p>So, when someone opened a print form, the configuration tried saving it to the storage, and rphost, in turn, attempted to shove it into the session cache. Here’s where things went sideways: the worker' process (probably) got slapped on the wrist by the OS. Due to (apparently) some funky file system event handling in the platform, the exception wasn’t caught, so the poor thing had no better idea than to kill the session. Naturally, this caused the client process to crash.  </p>\n<p>We fixed the permissions, rebooted the cluster, and voilà! The problem was gone.  </p>\n<p><img alt=\"End of Report\" src=\"https://kostyanetsky.me/notes/bit-of-surgery/report.jpeg\"/></p>\n<p>All other hypotheses — cluster manager acting up, lack of hardware resources, configuration bugs, client-side issues, broken security profiles, network problems between the client and server — got tossed out during the diagnostics process.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "a little bit of surgery 17 december 2024 · 1с work a few years ago, i stumbled upon a story about a programmer who had to debug software controlling a surgical robot — right in the middle of an operation. that blew my mind, to be frank. today, my colleague and i were fixing a 1c cluster with databases running on 1cfresh. after migrating it to a neighboring server, the thing suddenly started acting up. long story short: trying to print a document would send the client app into its death throes. while we were knee-deep in troubleshooting, i had this thought: sure, it doesn’t look as terrifying as debugging software that someone’s life literally depends on. but if you think about all the clients sitting on edge because their business is grinding to a halt... well, who knows where the stress levels are higher? p.s. nerdy details for the curious. during the migration, the permissions for the server cache folder didn’t transfer properly. this led to a funny (well, not so funny) effect: the logs would happily land there, but session data wouldn’t. so, when someone opened a print form, the configuration tried saving it to the storage, and rphost, in turn, attempted to shove it into the session cache. here’s where things went sideways: the worker' process (probably) got slapped on the wrist by the os. due to (apparently) some funky file system event handling in the platform, the exception wasn’t caught, so the poor thing had no better idea than to kill the session. naturally, this caused the client process to crash. we fixed the permissions, rebooted the cluster, and voilà! the problem was gone. all other hypotheses — cluster manager acting up, lack of hardware resources, configuration bugs, client-side issues, broken security profiles, network problems between the client and server — got tossed out during the diagnostics process.",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/vaporia\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Vaguely Familiar Logo\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>14 December 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">AI</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Georgia</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><del>Meanwhile, OpenAI opened a branch in Tbilisi</del> Actually, they just sell vapes here, and the logo designer was probably inspired by clouds of steam. But every time I walk by, it still catches my eye :)</p>\n<p><img alt=\"Vaporia\" src=\"https://kostyanetsky.me/notes/vaporia/vaporia.jpg\"/></p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "vaguely familiar logo 14 december 2024 · ai georgia meanwhile, openai opened a branch in tbilisi actually, they just sell vapes here, and the logo designer was probably inspired by clouds of steam. but every time i walk by, it still catches my eye :)",
    "tags": [
      "ai",
      "georgia"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/creepy-graveyard\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Creepy Graveyard\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>26 November 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">3D</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Still learning 3D in my free time. Here's my first somewhat independent project after finishing a <a href=\"https://www.udemy.com/course/blender-environments-megacourse-create-3d-environments/\" target=\"_blank\">course</a> recently.</p>\n<p><a href=\"https://kostyanetsky.me/notes/creepy-graveyard/creepy-graveyard.png\" target=\"_blank\"><img alt=\"Creepy Graveyard\" src=\"https://kostyanetsky.me/notes/creepy-graveyard/creepy-graveyard.png\"/></a></p>\n<iframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https://www.youtube.com/embed/mraGFR_Tr5k\" width=\"560\"></iframe>\n<p>Of course, there are plenty of issues: the models, the colors, the composition... Honestly, pretty much everything. Good thing the scene is set at night with fog, so it's easy to hide the worst spots. I wouldn't be surprised if the course creators picked this setting on purpose to keep beginners from getting too discouraged :)</p>\n<p>That said, I'm happy with the result. At this stage, perfectionism feels more like an enemy than a friend. And hey, it’s definitely better than my last attempt! Back then, I was totally green in Blender and scared to deviate even slightly from the instructor: ten minutes of watching, ten minutes of copying.</p>\n<p>That approach works at the very beginning, but it doesn't help you learn how to solve problems. This time, I watched a few lessons back-to-back for about an hour or two, then tried to figure things out on my own. I only went back to the videos when I was completely stuck. Feels like I’m actually retaining a lot more this way.</p>\n<p>Long story short, the thing is done. On to the next one!</p>\n<p>UPD: One of the founders of FlippedNormals recorded a <a href=\"https://www.youtube.com/watch?v=izkRFqBzya0\" target=\"_blank\">video</a> with the same thoughts about training.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "creepy graveyard 26 november 2024 · 3d done still learning 3d in my free time. here's my first somewhat independent project after finishing a course recently. of course, there are plenty of issues: the models, the colors, the composition... honestly, pretty much everything. good thing the scene is set at night with fog, so it's easy to hide the worst spots. i wouldn't be surprised if the course creators picked this setting on purpose to keep beginners from getting too discouraged :) that said, i'm happy with the result. at this stage, perfectionism feels more like an enemy than a friend. and hey, it’s definitely better than my last attempt! back then, i was totally green in blender and scared to deviate even slightly from the instructor: ten minutes of watching, ten minutes of copying. that approach works at the very beginning, but it doesn't help you learn how to solve problems. this time, i watched a few lessons back-to-back for about an hour or two, then tried to figure things out on my own. i only went back to the videos when i was completely stuck. feels like i’m actually retaining a lot more this way. long story short, the thing is done. on to the next one! upd: one of the founders of flippednormals recorded a video with the same thoughts about training.",
    "tags": [
      "3d",
      "done"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/slack-summary\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Summary to Slack\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>10 November 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Powershell</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I found a <a href=\"https://gist.github.com/vkostyanetsky/b0807f2df2501bbeeb97c95a977f3e23\" target=\"_blank\">script</a> that I wrote a couple of years ago for our work GitLab. In short, we run our development repository through a barrage of tests on Vanessa daily, resulting in a nice report showing how many tests passed, which ones failed, the reasons for failures, and so on.</p>\n<p>The report needs to be analyzed regularly, at least at a glance. Of course, we haven’t seen fully \"green\" tests in a long time, and that’s expected: for example, in the case of interdependent development, commits can break the checked functionality, and the tests still need adjustments. However, keeping a pulse on it is still essential.</p>\n<p>To simplify this routine, I expanded the pipeline code a bit: after generating the report, GitLab first creates a brief summary (client type, database type, test statistics) and sends it to Slack.</p>\n<p><img alt=\"Report\" src=\"https://kostyanetsky.me/notes/slack-summary/report.jpg\"/></p>\n<p>As a bonus, it’s now easier to answer the philosophical question, \"who broke everything\". Most often, it’s the author of the first commit on which the Scenarios Failed metric in the screenshot above hit the ceiling :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "summary to slack 10 november 2024 · work done powershell i found a script that i wrote a couple of years ago for our work gitlab. in short, we run our development repository through a barrage of tests on vanessa daily, resulting in a nice report showing how many tests passed, which ones failed, the reasons for failures, and so on. the report needs to be analyzed regularly, at least at a glance. of course, we haven’t seen fully \"green\" tests in a long time, and that’s expected: for example, in the case of interdependent development, commits can break the checked functionality, and the tests still need adjustments. however, keeping a pulse on it is still essential. to simplify this routine, i expanded the pipeline code a bit: after generating the report, gitlab first creates a brief summary (client type, database type, test statistics) and sends it to slack. as a bonus, it’s now easier to answer the philosophical question, \"who broke everything\". most often, it’s the author of the first commit on which the scenarios failed metric in the screenshot above hit the ceiling :)",
    "tags": [
      "work",
      "done",
      "powershell"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/butterfly\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Log & Bug\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>12 October 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I love digging into the origins of words from time to time. For example, \"log\" comes from maritime terminology and literally means a log: a wooden float attached to a rope, which was thrown overboard from a ship. The rope had knots tied at regular intervals, and by counting how many knots unwound in a certain amount of time, sailors could determine the speed of the ship.</p>\n<p>These measurements were recorded in the ship's journal, which was also called a log. Over time, the term started being used for any kind of record or journal of events, and in IT, the word got a second life :)</p>\n<p>Or take \"bug\" — well, you’ve probably heard about this one. A moth, which messed with a computer’s operation over seventy years ago, was documented in the log as \"the first actual case of a bug being found\". The insect gained a kind of digital immortality: now any mistake, especially in a program, is called a bug.</p>\n<p>(It’s just a pity that it wasn’t a prettier insect — like a butterfly, for instance? That would’ve added a touch of romance to our work)</p>\n<p>(Though, if you think about it... maybe \"bug\" isn’t such a bad option after all. \"Butterfly\" is a bit too long. Someone would’ve shortened it to \"butt\" and right now, we’d be fixing butts instead of bugs)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "log & bug 12 october 2024 · english i love digging into the origins of words from time to time. for example, \"log\" comes from maritime terminology and literally means a log: a wooden float attached to a rope, which was thrown overboard from a ship. the rope had knots tied at regular intervals, and by counting how many knots unwound in a certain amount of time, sailors could determine the speed of the ship. these measurements were recorded in the ship's journal, which was also called a log. over time, the term started being used for any kind of record or journal of events, and in it, the word got a second life :) or take \"bug\" — well, you’ve probably heard about this one. a moth, which messed with a computer’s operation over seventy years ago, was documented in the log as \"the first actual case of a bug being found\". the insect gained a kind of digital immortality: now any mistake, especially in a program, is called a bug. (it’s just a pity that it wasn’t a prettier insect — like a butterfly, for instance? that would’ve added a touch of romance to our work) (though, if you think about it... maybe \"bug\" isn’t such a bad option after all. \"butterfly\" is a bit too long. someone would’ve shortened it to \"butt\" and right now, we’d be fixing butts instead of bugs)",
    "tags": [
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/love\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                ChatGPT Mimicry\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>29 September 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">AI</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Videogames</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Colleagues are actively <a href=\"https://t.me/denissexy/8767\" target=\"_blank\">experimenting</a> with o1-preview from OpenAI: the model turned out to be genuinely interesting. Unfortunately, tasks for it don’t come up too often — regular 4o handles most day-to-day stuff just fine. Bug-finding in code, analyzing medical tests in an unfamiliar language, or trying to recall the name of a childhood book with only a vague recollection of the plot — I can’t easily think of anything it wouldn’t handle.</p>\n<p>It’s always fascinating to see how the AI reasons, jokes, and generally tries to act human. I’d say it won’t pass the Turing test just yet, but every now and then, it comes eerily close.</p>\n<p><img alt=\"Carrot\" src=\"https://kostyanetsky.me/notes/love/carrot.jpg\"/> <img alt=\"Fists\" src=\"https://kostyanetsky.me/notes/love/fists.jpg\"/> <img alt=\"Jokes\" src=\"https://kostyanetsky.me/notes/love/joke.jpg\"/></p>\n<p>The answer below made me smile. Even leaving philosophy aside — looks like Skynet is off the table! :) Though, I’m afraid the future from the <a href=\"https://store.steampowered.com/app/282140/SOMA/\" target=\"_blank\">SOMA</a> ending is still possible.</p>\n<p><img alt=\"Love\" src=\"https://kostyanetsky.me/notes/love/love.jpg\"/></p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "chatgpt mimicry 29 september 2024 · ai videogames colleagues are actively experimenting with o1-preview from openai: the model turned out to be genuinely interesting. unfortunately, tasks for it don’t come up too often — regular 4o handles most day-to-day stuff just fine. bug-finding in code, analyzing medical tests in an unfamiliar language, or trying to recall the name of a childhood book with only a vague recollection of the plot — i can’t easily think of anything it wouldn’t handle. it’s always fascinating to see how the ai reasons, jokes, and generally tries to act human. i’d say it won’t pass the turing test just yet, but every now and then, it comes eerily close. the answer below made me smile. even leaving philosophy aside — looks like skynet is off the table! :) though, i’m afraid the future from the soma ending is still possible.",
    "tags": [
      "ai",
      "videogames"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/thumbs-up\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Cool Stuff!\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>21 September 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Georgia</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>A knock at the door. I open it, and there are two bright, twenty-something girls standing there. Flashing huge smiles at me, they start talking a mile a minute.</p>\n<p>The Georgian language is beautiful, but I haven’t gotten around to learning it yet. I sigh and suggest we switch to English or Russian.</p>\n<p>The girls frown a little. Then one of them digs into her bag, pulls out a flyer, points to it, gives me a thumbs up like, “cool stuff!” — and hands it to me. </p>\n<p>Then they laugh and run off.</p>\n<p>Take that, language barrier!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "cool stuff! 21 september 2024 · meanwhile georgia a knock at the door. i open it, and there are two bright, twenty-something girls standing there. flashing huge smiles at me, they start talking a mile a minute. the georgian language is beautiful, but i haven’t gotten around to learning it yet. i sigh and suggest we switch to english or russian. the girls frown a little. then one of them digs into her bag, pulls out a flyer, points to it, gives me a thumbs up like, “cool stuff!” — and hands it to me. then they laugh and run off. take that, language barrier!",
    "tags": [
      "meanwhile",
      "georgia"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/pdf\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                About PDF\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>6 September 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I get a complaint: a client can’t log into our customer portal. I check the database — the account is fine. So what’s the problem? I check the login and see a strange sight:</p>\n<p><img alt=\"PDF\" src=\"https://kostyanetsky.me/notes/pdf/pdf.png\"/></p>\n<p>Above is what the user entered, and below is what’s in the database. My first thought: how on earth did a document end up in the string? :D</p>\n<p>I’ll skip the further investigation. The key here is asking the right questions (otherwise, both Google and AI will be thinking about the popular file format, not the symbol). So, PDF in the context of Unicode means Pop Directional Formatting! It’s a symbol that controls text direction; it’s needed, for example, to properly render Arabic (which can contain both left-to-right and right-to-left text). The user obviously enters the login in RTL mode (or copies it from somewhere), and the portal does not understand this nuance.</p>\n<p>In short, a piece of cake. However, I’d like to point out that the PDF file format existed long before the PDF symbol. I get that these are different technical fields, and the developers probably didn’t see the overlapping terminology as a significant issue. But deep down, I’m sure someone was smirking, anticipating today’s confusion.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "about pdf 6 september 2024 · work i get a complaint: a client can’t log into our customer portal. i check the database — the account is fine. so what’s the problem? i check the login and see a strange sight: above is what the user entered, and below is what’s in the database. my first thought: how on earth did a document end up in the string? :d i’ll skip the further investigation. the key here is asking the right questions (otherwise, both google and ai will be thinking about the popular file format, not the symbol). so, pdf in the context of unicode means pop directional formatting! it’s a symbol that controls text direction; it’s needed, for example, to properly render arabic (which can contain both left-to-right and right-to-left text). the user obviously enters the login in rtl mode (or copies it from somewhere), and the portal does not understand this nuance. in short, a piece of cake. however, i’d like to point out that the pdf file format existed long before the pdf symbol. i get that these are different technical fields, and the developers probably didn’t see the overlapping terminology as a significant issue. but deep down, i’m sure someone was smirking, anticipating today’s confusion.",
    "tags": [
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/rapture\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Rapture\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>31 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">PostgreSQL</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">3D</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I remember how amazed I was when I worked with window functions in PostgreSQL for the first time. You can adjust the calculation window for each row individually! And even segment it in advance. And all this is done natively, within a regular query, no extra add-ons needed. The standard aggregation with grouping and subqueries that I was used to in 1C suddenly turned into a pumpkin, just like Cinderella's carriage at midnight.</p>\n<p>Recently, I’ve been learning Blender, and I suddenly felt the same excitement for the same reason. The fact that you can freely move objects around the 3D Viewport with the Move command was clear from the start, fine. However, when it hit me that each object is a set of polygons, and that each polygon can also be moved freely, leading to a natural reshaping of the object's geometry — that’s when it really got me.</p>\n<p>Technology is amazing. Learning is awesome. Moments like these make me want to keep doing it over and over again :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "rapture 31 august 2024 · 1с postgresql 3d i remember how amazed i was when i worked with window functions in postgresql for the first time. you can adjust the calculation window for each row individually! and even segment it in advance. and all this is done natively, within a regular query, no extra add-ons needed. the standard aggregation with grouping and subqueries that i was used to in 1c suddenly turned into a pumpkin, just like cinderella's carriage at midnight. recently, i’ve been learning blender, and i suddenly felt the same excitement for the same reason. the fact that you can freely move objects around the 3d viewport with the move command was clear from the start, fine. however, when it hit me that each object is a set of polygons, and that each polygon can also be moved freely, leading to a natural reshaping of the object's geometry — that’s when it really got me. technology is amazing. learning is awesome. moments like these make me want to keep doing it over and over again :)",
    "tags": [
      "1c",
      "pgsql",
      "3d"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/nowhere-to-run\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Nowhere To Run\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>31 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Sport</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Yesterday, I decided to take a break from work and go for a good run. I headed to the local park and did a few laps. Sitting there catching my breath, I grabbed my phone to switch the track, and there it was — a congratulations from my fitness tracker.</p>\n<p><img alt=\"Oh hi\" src=\"https://kostyanetsky.me/notes/nowhere-to-run/hi.jpg\"/></p>\n<p>So much for taking a break. The platform is watching you, %username%!</p>\n<p>P.S. But hey, now I’ve got a custom badge with the platform's logo. Gotta wear it with pride!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "nowhere to run 31 august 2024 · 1с sport yesterday, i decided to take a break from work and go for a good run. i headed to the local park and did a few laps. sitting there catching my breath, i grabbed my phone to switch the track, and there it was — a congratulations from my fitness tracker. so much for taking a break. the platform is watching you, %username%! p.s. but hey, now i’ve got a custom badge with the platform's logo. gotta wear it with pride!",
    "tags": [
      "1c",
      "sport"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/system-analysis-course\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                System Analysis\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>25 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Amidst all these pet projects and the August whirlwind, I forgot to mention that I completed a <a href=\"https://tough-dev.school/system-analysis\" target=\"_blank\">course</a> on system analysis, which I recently <a href=\"https://kostyanetsky.me/notes/ibrahim\" target=\"_blank\">wrote about</a>.</p>\n<p><img alt=\"Certificate\" src=\"https://kostyanetsky.me/notes/system-analysis-course/certificate.png\"/></p>\n<p>The course was structured so that throughout the sessions, we worked on the same system, identifying problems and gradually solving them. Before the first lesson, we were asked to design the initial version of the system so that we could compare it with the final version at the end of the course and assess our progress. Well, I’m happy with the comparison — I mean, it’s really hard to look at that first version without laughing (or crying) :)</p>\n<p>There wasn’t much time for reflection during the course, so I plan to continue working on the materials and turning the lessons into personal notes. It’s not that simple, given that our company deals heavily with solutions based on 1C:Enterprise, and much of my work involves various integrations of 1C instances with solutions outside the 1C stack.</p>\n<p>However, 1C instances can be considered as monoliths with a specific set of characteristics (depending on the tasks being solved within them), and in most other respects, communication with them doesn’t differ much from traditional solutions: the same events (like RabbitMQ), the same incoming/outgoing HTTP calls, the same instability metric, and so on.</p>\n<p>At this point, I’m definitely adopting (or have already adopted):</p>\n<ol>\n<li>Breaking down the technical specifications into numbered items (US-XXX) and storing them in one place with tags like \"updated at,\" \"canceled at,\" etc. This format seems quite effective.</li>\n<li>Maintaining an ADR (Architecture Decision Record). I’ve already implemented this, actually. However, it’s a bit concerning that some items occasionally get stored there that aren’t strictly architectural (e.g., logging principles for certain sections). Still, such things seem crucial for decision-making.</li>\n<li>Event Storming as a way to visualize business processes. I can’t say it’s a huge improvement over the patchwork we used before, but the result looks nice, and having a standard is better than having none.</li>\n<li>Application service diagrams with stickers indicating each service's characteristics. This is quite functional when you need to look at the project from a high level, and it’s not as dry as endless tables. That way, if the bus factor kicks in, the next person is more likely to notice these details.</li>\n<li>I want to work on BPMN and Activity Diagrams. I like the format, but so far, my attempts haven’t been satisfactory. I’ll keep trying.</li>\n<li>The concept of separating functionality to reduce dependencies unexpectedly resonated with me. It used to seem simpler to combine similar functionalities to reduce code volume, but now it seems this approach increases complexity and internal cohesion, potentially causing more harm than good.</li>\n</ol>\n<p>Overall, I’m very satisfied with the course. It seems like the best investment of effort over the past year. If you’re thinking of taking it but are unsure — go for it :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "system analysis 25 august 2024 · done meanwhile amidst all these pet projects and the august whirlwind, i forgot to mention that i completed a course on system analysis, which i recently wrote about . the course was structured so that throughout the sessions, we worked on the same system, identifying problems and gradually solving them. before the first lesson, we were asked to design the initial version of the system so that we could compare it with the final version at the end of the course and assess our progress. well, i’m happy with the comparison — i mean, it’s really hard to look at that first version without laughing (or crying) :) there wasn’t much time for reflection during the course, so i plan to continue working on the materials and turning the lessons into personal notes. it’s not that simple, given that our company deals heavily with solutions based on 1c:enterprise, and much of my work involves various integrations of 1c instances with solutions outside the 1c stack. however, 1c instances can be considered as monoliths with a specific set of characteristics (depending on the tasks being solved within them), and in most other respects, communication with them doesn’t differ much from traditional solutions: the same events (like rabbitmq), the same incoming/outgoing http calls, the same instability metric, and so on. at this point, i’m definitely adopting (or have already adopted): breaking down the technical specifications into numbered items (us-xxx) and storing them in one place with tags like \"updated at,\" \"canceled at,\" etc. this format seems quite effective. maintaining an adr (architecture decision record). i’ve already implemented this, actually. however, it’s a bit concerning that some items occasionally get stored there that aren’t strictly architectural (e.g., logging principles for certain sections). still, such things seem crucial for decision-making. event storming as a way to visualize business processes. i can’t say it’s a huge improvement over the patchwork we used before, but the result looks nice, and having a standard is better than having none. application service diagrams with stickers indicating each service's characteristics. this is quite functional when you need to look at the project from a high level, and it’s not as dry as endless tables. that way, if the bus factor kicks in, the next person is more likely to notice these details. i want to work on bpmn and activity diagrams. i like the format, but so far, my attempts haven’t been satisfactory. i’ll keep trying. the concept of separating functionality to reduce dependencies unexpectedly resonated with me. it used to seem simpler to combine similar functionalities to reduce code volume, but now it seems this approach increases complexity and internal cohesion, potentially causing more harm than good. overall, i’m very satisfied with the course. it seems like the best investment of effort over the past year. if you’re thinking of taking it but are unsure — go for it :)",
    "tags": [
      "done",
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/first-pancake\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                My First Approach to Gen Models\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>25 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">AI</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I needed to quickly generate some images for a pet project. I grabbed the first tool at hand — <a href=\"https://huggingface.co/hakurei/waifu-diffusion\" target=\"_blank\">WaifuDiffusion</a> (a clone of <a href=\"https://huggingface.co/stabilityai/stable-diffusion-3-medium\" target=\"_blank\">StableDiffusion</a>, but trained specifically on anime and manga).</p>\n<p>Prompt: </p>\n<blockquote>\n<p>A dimly lit, empty classroom with faintly visible music notes on the chalkboard. A young woman with long blue hair and blue eyes, is standing behind the teacher's desk, packing her things into a small handbag. She looks tired and worried.</p>\n</blockquote>\n<p>Result:</p>\n<p><img alt=\"Young woman\" src=\"https://kostyanetsky.me/notes/first-pancake/young-woman.jpg\"/></p>\n<p>It seems like a great opportunity to talk about how far neural networks have come! The model instantly got the idea and decided to introduce into the scene... Hmm... A wise bearded man? Or perhaps it was suggesting that I should learn to appreciate unexpected surprises more?</p>\n<p>I think WaifuDiffusion just wanted to brighten my mood. They say laughter extends life. In any case, I consider the first generation a success! But it definitely needs some calibration :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "my first approach to gen models 25 august 2024 · ai i needed to quickly generate some images for a pet project. i grabbed the first tool at hand — waifudiffusion (a clone of stablediffusion , but trained specifically on anime and manga). prompt: a dimly lit, empty classroom with faintly visible music notes on the chalkboard. a young woman with long blue hair and blue eyes, is standing behind the teacher's desk, packing her things into a small handbag. she looks tired and worried. result: it seems like a great opportunity to talk about how far neural networks have come! the model instantly got the idea and decided to introduce into the scene... hmm... a wise bearded man? or perhaps it was suggesting that i should learn to appreciate unexpected surprises more? i think waifudiffusion just wanted to brighten my mood. they say laughter extends life. in any case, i consider the first generation a success! but it definitely needs some calibration :)",
    "tags": [
      "ai"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/obsidian-day-switcher\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Day Switcher for Obsidian\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>17 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Obsidian</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Javascript</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>When you're actively working in daily notes in Obsidian, you often want to quickly peek into the note from yesterday or, conversely, for tomorrow. For example, when sorting today's tasks and wanting to postpone some of them for tomorrow.</p>\n<p>I'm too lazy to type the exact date every time, so I wrote a <a href=\"https://gist.github.com/vkostyanetsky/6c70f00b817157f9b6e62ee89bade853\" target=\"_blank\">script</a> for this. It takes the note's date from its title (expects it to be in <abbr title=\"2024-08-17, for example.\">ISO 8601</abbr> format) and generates a tooltip with links to yesterday's and tomorrow's notes. The day of the week is displayed in the header for additional convenience:</p>\n<p><img alt=\"Example\" src=\"https://kostyanetsky.me/notes/obsidian-day-switcher/callout.jpg\"/></p>\n<p>The script is written for the <a href=\"https://github.com/blacksmithgu/obsidian-dataview\" target=\"_blank\">Dataview</a> plugin since I'm already using it for other tasks. In general, it can easily be adapted for <a href=\"https://github.com/SilentVoid13/Templater\" target=\"_blank\">Templater</a>, <a href=\"https://github.com/saml-dev/obsidian-custom-js\" target=\"_blank\">CustomJS</a>, or even turned into a standalone plugin (again, I'm too lazy to bother with that).</p>\n<p>If you plan to use it:</p>\n<ol>\n<li>In the noteLink() function, specify the path to your daily notes folder (currently, the path contains a 'Days' folder for example; I mean the path is indicated in the Daily notes/Template file location setting);</li>\n<li>Include the script in your daily note template (Daily notes/Template file location setting).</li>\n</ol>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "day switcher for obsidian 17 august 2024 · obsidian javascript when you're actively working in daily notes in obsidian, you often want to quickly peek into the note from yesterday or, conversely, for tomorrow. for example, when sorting today's tasks and wanting to postpone some of them for tomorrow. i'm too lazy to type the exact date every time, so i wrote a script for this. it takes the note's date from its title (expects it to be in iso 8601 format) and generates a tooltip with links to yesterday's and tomorrow's notes. the day of the week is displayed in the header for additional convenience: the script is written for the dataview plugin since i'm already using it for other tasks. in general, it can easily be adapted for templater , customjs , or even turned into a standalone plugin (again, i'm too lazy to bother with that). if you plan to use it: in the notelink() function, specify the path to your daily notes folder (currently, the path contains a 'days' folder for example; i mean the path is indicated in the daily notes/template file location setting); include the script in your daily note template (daily notes/template file location setting).",
    "tags": [
      "obsidian",
      "javascript"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/clementine\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Clementine Will Remember That\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>9 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">AI</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Videogames</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>When ChatGPT remembers a detail from a conversation for the future, it displays a \"Memory updated\" badge above its response. Like, got it:</p>\n<p><img alt=\"Memory updated\" src=\"https://kostyanetsky.me/notes/clementine/memory-updated.jpg\"/></p>\n<p>Every time I see it, it makes me smile because it instantly reminds me of <a href=\"https://store.steampowered.com/app/207610/The_Walking_Dead/\" target=\"_blank\">The Walking Dead</a> and the meme “Clementine will remember that”. In that game, the characters surrounding the protagonist would remember his decisions, and it would influence their behavior. This included Clementine — a girl the main character saved at the beginning of the game.</p>\n<p><img alt=\"Clementine will remember that\" src=\"https://kostyanetsky.me/notes/clementine/remember.jpeg\"/></p>\n<p>In the game, this mechanic was honestly implemented in a rather mediocre way, but when it comes to ChatGPT — it works. The attention to detail is so strong that sometimes I have to remind myself that I’m talking to a language model, not an extraordinarily attentive and very knowledgeable person.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "clementine will remember that 9 august 2024 · ai videogames when chatgpt remembers a detail from a conversation for the future, it displays a \"memory updated\" badge above its response. like, got it: every time i see it, it makes me smile because it instantly reminds me of the walking dead and the meme “clementine will remember that”. in that game, the characters surrounding the protagonist would remember his decisions, and it would influence their behavior. this included clementine — a girl the main character saved at the beginning of the game. in the game, this mechanic was honestly implemented in a rather mediocre way, but when it comes to chatgpt — it works. the attention to detail is so strong that sometimes i have to remind myself that i’m talking to a language model, not an extraordinarily attentive and very knowledgeable person.",
    "tags": [
      "ai",
      "videogames"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/make-my-window-a-door\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Make Window a Door\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>4 August 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I was listening to <a href=\"https://open.spotify.com/track/33MnSYLvtOrbj5zwfioEiH?si=19fec91123394826\" target=\"_blank\">Be Somebody</a> by Thousand Foot Krutch yesterday and suddenly caught the phrase “you made my window a door”. I used to think that this idiom is rather funny: like, damn, the idea to replace a window with a door somehow sounds unsafe. You can fall from the tenth floor, you know?</p>\n<p>At the same time, the song is wonderful and not about that at all! I got curious and started digging around to find out what meaning native speakers put into it.</p>\n<p>It turned out that it is actually about two different positions: a passive observer and an active participant. That is, if there is a window in front of you, you only look through it at something or someone. But you can open the door and finally do something. Hence, “when I could only see the floor you made my window a door” means something like “when my hands dropped, you helped me up”.</p>\n<p>By the way, there is another similar idiom — “to be a better window than a door”. The abstraction here is the same: if a person is like a window, and not a door — they hardly ever let people close to them, making passive observers even out of people very close to them.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "make window a door 4 august 2024 · english i was listening to be somebody by thousand foot krutch yesterday and suddenly caught the phrase “you made my window a door”. i used to think that this idiom is rather funny: like, damn, the idea to replace a window with a door somehow sounds unsafe. you can fall from the tenth floor, you know? at the same time, the song is wonderful and not about that at all! i got curious and started digging around to find out what meaning native speakers put into it. it turned out that it is actually about two different positions: a passive observer and an active participant. that is, if there is a window in front of you, you only look through it at something or someone. but you can open the door and finally do something. hence, “when i could only see the floor you made my window a door” means something like “when my hands dropped, you helped me up”. by the way, there is another similar idiom — “to be a better window than a door”. the abstraction here is the same: if a person is like a window, and not a door — they hardly ever let people close to them, making passive observers even out of people very close to them.",
    "tags": [
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/yaga\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Yaga\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>29 Jule 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I accidentally remembered that six months ago, one of my colleagues threw a link to <a href=\"https://yaga.rt.ru\" target=\"_blank\">Yaga</a> into the work chat. It is a future (I guess) competitor of JIRA in Russia. Judging by the URL, the guys from Rostelecom are developing it. Here my curiosity was awakened — how is it there, did it take off?</p>\n<p>Alas, but looks like nope. At least, the landing page has the “leave a request and wait for a response beep” vibe. Only a simplified version is available for smaller teams that I can't touch as well: being not in Russia and clicking on the “Start using” button leads me to a ban. Welp, next time, maybe.</p>\n<p>The naming is clickbait, of course. But I’m not sure if it’s really a good choice. For example, “1C” may provoke forced jokes (One s! Odin's ass! Haha), but if you google this, you are more likely to find information about the platform or at least the vendor. Not a bunch of articles, fan fiction, fan art, or video games, as in the case of Yaga.</p>\n<p>Moreover, some wrong associations come to mind. What does Baba Yaga reminds you of? A hut on chicken legs? It looks like an initially <a href=\"https://kostyanetsky.me/notes/evolution\" target=\"_blank\">poorly designed</a> application that was somehow remade right on production. A mortar? A crutch? Damn, if you look at it from the point of view of programmers — these are not red flags, but real scarlet banners fluttering in the wind :)</p>\n<p>One more thing: I'm probably spoiled, but when I hear the word “Yaga”, the first thing that pops into my head is not a powerful witch from Slavic folklore, but <a href=\"https://en.wikipedia.org/wiki/Jaguar_(drink)\" target=\"_blank\">disgusting booze</a> from the 2000s.</p>\n<blockquote>\n<p>Now Baba with Yaga are no longer redneck, but a patriotic programmer!</p>\n<p>― colleague</p>\n</blockquote>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "yaga 29 jule 2024 · meanwhile 1с i accidentally remembered that six months ago, one of my colleagues threw a link to yaga into the work chat. it is a future (i guess) competitor of jira in russia. judging by the url, the guys from rostelecom are developing it. here my curiosity was awakened — how is it there, did it take off? alas, but looks like nope. at least, the landing page has the “leave a request and wait for a response beep” vibe. only a simplified version is available for smaller teams that i can't touch as well: being not in russia and clicking on the “start using” button leads me to a ban. welp, next time, maybe. the naming is clickbait, of course. but i’m not sure if it’s really a good choice. for example, “1c” may provoke forced jokes (one s! odin's ass! haha), but if you google this, you are more likely to find information about the platform or at least the vendor. not a bunch of articles, fan fiction, fan art, or video games, as in the case of yaga. moreover, some wrong associations come to mind. what does baba yaga reminds you of? a hut on chicken legs? it looks like an initially poorly designed application that was somehow remade right on production. a mortar? a crutch? damn, if you look at it from the point of view of programmers — these are not red flags, but real scarlet banners fluttering in the wind :) one more thing: i'm probably spoiled, but when i hear the word “yaga”, the first thing that pops into my head is not a powerful witch from slavic folklore, but disgusting booze from the 2000s. now baba with yaga are no longer redneck, but a patriotic programmer! ― colleague",
    "tags": [
      "meanwhile",
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/ibrahim\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Ibrahim\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>7 Jule 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Recently, I took a <a href=\"https://tough-dev.school/system-analysis\" target=\"_blank\">system analysis course</a>, which was taught by the guys from the “School of Strong Programmers”. I have two goals:</p>\n<ol>\n<li>First, I need to calibrate. I handle a dozen tech stacks that have different tool sets and concepts of beauty. This, of course, is a great development, but it distorts the perspective: I am drawn to solve the next problem, starting with minor technical things, simply because I am good at it. Meanwhile, if you look at the problem a little from above, think about it, and draw some diagrams, you will get a better or at least more meaningful solution. So I want to convince myself to do this more often.</li>\n<li>Secondly, I need to learn how to write clear documentation for developers. In practice, I rarely get around to it, and when I do, I don’t have time to keep it up-to-date. In short, time is short, and I would at least like to do the paperwork somehow so that the reader grasps the idea more quickly.</li>\n</ol>\n<p>The course itself is made in the shape of iterations: every week you are told about the same project that the main character of the story, Ibrahim, is trying to design (that’s him on the landing page in the link above). Every week, there are more and more problems with this project, and the solutions that dude comes up with become more and more intricate.</p>\n<p>In addition, students are regularly assigned homework for another project with similar issues. It needs to be analyzed and designed again and again, taking into account the new knowledge and limitations gained over the past week.</p>\n<p>So far, it's going great. The main concern is a lack of time. I read relatively slowly and try to take notes on the most captivating or simply difficult passages. Meanwhile, there is a lot of material in the course, and all of it is interesting, even if you count only the main part of the content.</p>\n<p>In addition, if you go to the additional links, you can even take away the saints. It takes six months, no less. I tried to read them at least diagonally, but it turned out to be a damn bad idea. I ended up seeing the main character of the course in a street advertisement :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "ibrahim 7 jule 2024 · meanwhile recently, i took a system analysis course , which was taught by the guys from the “school of strong programmers”. i have two goals: first, i need to calibrate. i handle a dozen tech stacks that have different tool sets and concepts of beauty. this, of course, is a great development, but it distorts the perspective: i am drawn to solve the next problem, starting with minor technical things, simply because i am good at it. meanwhile, if you look at the problem a little from above, think about it, and draw some diagrams, you will get a better or at least more meaningful solution. so i want to convince myself to do this more often. secondly, i need to learn how to write clear documentation for developers. in practice, i rarely get around to it, and when i do, i don’t have time to keep it up-to-date. in short, time is short, and i would at least like to do the paperwork somehow so that the reader grasps the idea more quickly. the course itself is made in the shape of iterations: every week you are told about the same project that the main character of the story, ibrahim, is trying to design (that’s him on the landing page in the link above). every week, there are more and more problems with this project, and the solutions that dude comes up with become more and more intricate. in addition, students are regularly assigned homework for another project with similar issues. it needs to be analyzed and designed again and again, taking into account the new knowledge and limitations gained over the past week. so far, it's going great. the main concern is a lack of time. i read relatively slowly and try to take notes on the most captivating or simply difficult passages. meanwhile, there is a lot of material in the course, and all of it is interesting, even if you count only the main part of the content. in addition, if you go to the additional links, you can even take away the saints. it takes six months, no less. i tried to read them at least diagonally, but it turned out to be a damn bad idea. i ended up seeing the main character of the course in a street advertisement :)",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/singapore-doll\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Singapore Doll\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>22 June 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Is it possible to love your country's currency more than the people of Saudi Arabia? It is a rhetorical question: the answer is no.</p>\n<p>I'm currently looking at the <a href=\"https://www.sama.gov.sa/en-US/FinExc/Pages/Currency.aspx\" target=\"_blank\">website</a> of their central bank. The country's currency is the Saudi riyal, and the Central Bank sets rates for other currencies in relation to it. Consequently, there is no point in asking the bank for the rate of the riyal itself. However, the website calmly suggests choosing it twice:</p>\n<p><img alt=\"The selection form\" src=\"https://kostyanetsky.me/notes/singapore-doll/cb.png\"/></p>\n<p>For your information, the first option breaks the website, and the second one pedantically displays “1” for any date.</p>\n<p>Another funny thing: colleagues seem to store currency names as 14-character strings. Otherwise, it is difficult to explain why, according to their data, Canada uses not the Canadian dollar but CANADIAN DOLLA, and Romania uses mysterious NEW ROMANIAN L instead of its leu. However, these two are rather lucky: Singapore, for example, conducts payments in SINGAPORE DOLL.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "singapore doll 22 june 2024 · work is it possible to love your country's currency more than the people of saudi arabia? it is a rhetorical question: the answer is no. i'm currently looking at the website of their central bank. the country's currency is the saudi riyal, and the central bank sets rates for other currencies in relation to it. consequently, there is no point in asking the bank for the rate of the riyal itself. however, the website calmly suggests choosing it twice: for your information, the first option breaks the website, and the second one pedantically displays “1” for any date. another funny thing: colleagues seem to store currency names as 14-character strings. otherwise, it is difficult to explain why, according to their data, canada uses not the canadian dollar but canadian dolla, and romania uses mysterious new romanian l instead of its leu. however, these two are rather lucky: singapore, for example, conducts payments in singapore doll.",
    "tags": [
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/data-history-duplication\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Non-Unique Metadata\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>8 June 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">PostgreSQL</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">MS SQL</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Once again, I came across a nasty bug when the platform broke the data history metadata table.</p>\n<p>Outwardly, it looks like this: you update the database configuration, and when you try to restructure, the error “The data history metadata table contains duplicate records. Delete the duplicate records” pops up. The platform does not offer any clear way to find such records.</p>\n<p><img alt=\"The data history metadata table contains duplicate records. Delete the duplicate records\" src=\"https://kostyanetsky.me/notes/data-history-duplication/error.png\"/></p>\n<p>The problem can be solved at the database level. The table referenced by the error is _DataHistoryMetadata. It contains metadata versions of each object for which data history is being maintained. This allows the platform to understand what attributes the object had at any point in time if the data history is maintained for the object.</p>\n<p>How does it work? Well, when the list of an object’s attributes changes (for example, an attribute was added to the catalog), the platform writes its metadata: specifically, it adds a new entry to _DataHistoryMetadata and stores in it the current list of object attributes, as well as the version number of this list (for example, when history is enabled for an object, the first version of metadata is saved, when adding some attribute, the second version is saved, and so on).</p>\n<p>The platform also puts a mark in the created record that this particular version of the object is the most actual, and then removes this mark from the version that was marked as actual before.</p>\n<p>So, the problem is that the platform sometimes forgets to take the last step, and two versions appear in the table at once, marked as current. The Designer understands this but cannot do anything.</p>\n<p>The solution follows from the algorithm above: you need to find conflicting versions and revoke the mark of actuality from the one that is older. It is better to use queries: data history is often enabled for a bunch of objects, and the list of their attributes is constantly changing — in general, there will be so many versions in the table that the devil will break his leg.</p>\n<p>If you also encountered this problem and are therefore reading this text, you can use the <a href=\"https://gist.github.com/vkostyanetsky/6496c67e2b2fd3d064c4cafd16da0b79\" target=\"_blank\">queries</a> that I wrote:</p>\n<ol>\n<li>get-issues.sql checks that there is an issue: it looks for metadata versions that are also marked as actual.</li>\n<li>fix-issues.sql removes the actuality mark from those versions that are actually outdated.</li>\n</ol>\n<p>Both queries are written for Microsoft SQL Server. If you use PostgreSQL, then <a href=\"https://gist.github.com/vkostyanetsky/75665ce04247e900743604eb386d1889\" target=\"_blank\">here they are</a> for this DBMS.</p>\n<p>The queries will require a slight adaptation to a specific database: they use the _fld626 field, which is the data separator. In your _DataHistoryMetadata table, this field may be called differently, so you need to update its name to the current one. It will be difficult to make a mistake — the table has only one field with the _fld prefix.</p>\n<p>P.S. Please bear in mind that the license agreement prohibits access to the database, bypassing the platform’s tools, so you can only go for such experiments if there are no other options left.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "non-unique metadata 8 june 2024 · 1с postgresql ms sql once again, i came across a nasty bug when the platform broke the data history metadata table. outwardly, it looks like this: you update the database configuration, and when you try to restructure, the error “the data history metadata table contains duplicate records. delete the duplicate records” pops up. the platform does not offer any clear way to find such records. the problem can be solved at the database level. the table referenced by the error is _datahistorymetadata. it contains metadata versions of each object for which data history is being maintained. this allows the platform to understand what attributes the object had at any point in time if the data history is maintained for the object. how does it work? well, when the list of an object’s attributes changes (for example, an attribute was added to the catalog), the platform writes its metadata: specifically, it adds a new entry to _datahistorymetadata and stores in it the current list of object attributes, as well as the version number of this list (for example, when history is enabled for an object, the first version of metadata is saved, when adding some attribute, the second version is saved, and so on). the platform also puts a mark in the created record that this particular version of the object is the most actual, and then removes this mark from the version that was marked as actual before. so, the problem is that the platform sometimes forgets to take the last step, and two versions appear in the table at once, marked as current. the designer understands this but cannot do anything. the solution follows from the algorithm above: you need to find conflicting versions and revoke the mark of actuality from the one that is older. it is better to use queries: data history is often enabled for a bunch of objects, and the list of their attributes is constantly changing — in general, there will be so many versions in the table that the devil will break his leg. if you also encountered this problem and are therefore reading this text, you can use the queries that i wrote: get-issues.sql checks that there is an issue: it looks for metadata versions that are also marked as actual. fix-issues.sql removes the actuality mark from those versions that are actually outdated. both queries are written for microsoft sql server. if you use postgresql, then here they are for this dbms. the queries will require a slight adaptation to a specific database: they use the _fld626 field, which is the data separator. in your _datahistorymetadata table, this field may be called differently, so you need to update its name to the current one. it will be difficult to make a mistake — the table has only one field with the _fld prefix. p.s. please bear in mind that the license agreement prohibits access to the database, bypassing the platform’s tools, so you can only go for such experiments if there are no other options left.",
    "tags": [
      "1c",
      "pgsql",
      "mssql"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/uuid-main-issue\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                The Main Issue of UUID\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>2 June 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">PostgreSQL</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I came across a <a href=\"https://www.cybertec-postgresql.com/en/unexpected-downsides-of-uuid-keys-in-postgresql/\" target=\"_blank\">good text</a> about the main problem that UUID brings with itself. It is also relevant for 1C: all platform reference objects (catalog items, documents, and so on) have their own UUID. They are stored in a database, actively used in searches, and, of course, extensively indexed (with all the ensuing consequences).</p>\n<p>1C tries to suppress the issue by creating consistent UUIDs. It may not be perfect, but overall, this thing works, and the indexes turn out to be more or less compact. In general, the community has been talking about this for a long time: for example, the old <a href=\"https://forum.mista.ru/topic.php?id=801986\" target=\"_blank\">thread on Mista</a> (though the conversation here quickly turned into a chicken coop, and out of six dozen comments, at most one and a half are on point).</p>\n<p>P.S. The remark about the probability of creating two identical UUIDs in one database made me laugh:</p>\n<blockquote>\n<p>As an aside, for those worried about collisions: you should take up the lottery, since winning the jackpot twice in a row is a much more likely outcome than your system ever generating two identical random 128 bit numbers.</p>\n</blockquote>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "the main issue of uuid 2 june 2024 · 1с postgresql i came across a good text about the main problem that uuid brings with itself. it is also relevant for 1c: all platform reference objects (catalog items, documents, and so on) have their own uuid. they are stored in a database, actively used in searches, and, of course, extensively indexed (with all the ensuing consequences). 1c tries to suppress the issue by creating consistent uuids. it may not be perfect, but overall, this thing works, and the indexes turn out to be more or less compact. in general, the community has been talking about this for a long time: for example, the old thread on mista (though the conversation here quickly turned into a chicken coop, and out of six dozen comments, at most one and a half are on point). p.s. the remark about the probability of creating two identical uuids in one database made me laugh: as an aside, for those worried about collisions: you should take up the lottery, since winning the jackpot twice in a row is a much more likely outcome than your system ever generating two identical random 128 bit numbers.",
    "tags": [
      "1c",
      "pgsql"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/last-resort\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Screenshot With Sound\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>20 May 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Recently, we came up with the idea of dividing the internal ERP into several independent parts and organizing data exchange between them. We discussed the outlines of the task, the exchange model, transport, and roughly agreed on deadlines — in general, we did what we usually do.</p>\n<p>I created a task for the stuff. We give them names in English, so I wrote in the first wording that came to mind.</p>\n<p><img alt=\"Cut My Life Into Pieces\" src=\"https://kostyanetsky.me/notes/last-resort/last-resort.png\"/></p>\n<p>The title came out with sound. Okay, this one is funny, but what should I call it then? Well, let it be Distributed Internal ERP. Abbreviated... DIE?</p>\n<p>I let the first one be. Long live Papa Roach :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "screenshot with sound 20 may 2024 · work meanwhile recently, we came up with the idea of dividing the internal erp into several independent parts and organizing data exchange between them. we discussed the outlines of the task, the exchange model, transport, and roughly agreed on deadlines — in general, we did what we usually do. i created a task for the stuff. we give them names in english, so i wrote in the first wording that came to mind. the title came out with sound. okay, this one is funny, but what should i call it then? well, let it be distributed internal erp. abbreviated... die? i let the first one be. long live papa roach :)",
    "tags": [
      "work",
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/obsidian-timesheet\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Timesheet for Obsidian\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>12 May 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Typescript</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Obsidian</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I made another <a href=\"https://obsidian.md\" target=\"_blank\">Obsidian</a> plugin, this time for <a href=\"https://help.obsidian.md/Plugins/Daily+notes\" target=\"_blank\">daily notes</a>. Draws a nice report: what tasks I worked on, what I did, and how much time I spent. I tried to describe how it works in the <a href=\"https://github.com/vkostyanetsky/ObsidianTimesheet\" target=\"_blank\">repository</a>; will be glad if it is useful to someone else!</p>\n<p>Funny thing: for the examples in the README, I used issue numbers FBI-1, FBI-2, and so on. This isn't a reference to the X-Files or Twin Peaks — it's just the first thing that came to mind. The fact is that our internal project for the development of FirstBit ERP is called First Bit Internal, abbreviated as FBI. The main pool of tasks we work on lives in it.</p>\n<p>We’re already used to it, but our colleagues outside the company always find our screenshots from JIRA or SonarQube amusing. Did you imagine that you were Agent Cooper? Well, I almost don’t even need to :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "timesheet for obsidian 12 may 2024 · done typescript obsidian work i made another obsidian plugin, this time for daily notes . draws a nice report: what tasks i worked on, what i did, and how much time i spent. i tried to describe how it works in the repository ; will be glad if it is useful to someone else! funny thing: for the examples in the readme, i used issue numbers fbi-1, fbi-2, and so on. this isn't a reference to the x-files or twin peaks — it's just the first thing that came to mind. the fact is that our internal project for the development of firstbit erp is called first bit internal, abbreviated as fbi. the main pool of tasks we work on lives in it. we’re already used to it, but our colleagues outside the company always find our screenshots from jira or sonarqube amusing. did you imagine that you were agent cooper? well, i almost don’t even need to :)",
    "tags": [
      "done",
      "typescript",
      "obsidian",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/payment-terms\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                One Query More, One Query Less\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>5 May 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Optimization</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>One query more, one query less — it doesn’t matter, people often say. Like, the main thing is that the query must be cheap: it doesn’t read too much, uses index, and so on.</p>\n<p>This point of view makes sense, but mindlessly machine-gunning queries is a dangerous idea. Even if everything looks good at the moment, the system may change slightly in the future. And then a seemingly harmless patch will burn your production server to the ground right on Friday.</p>\n<p>Let me tell you about one example from recent practice. There is an ERP that contains a table with payment stages for customer orders. One of these stages is prepayment; until it is received, you cannot create an order for the supplier.</p>\n<p>Technically, the purchase order simply stores the customer's order ID; if the field is filled (that is, if the purchase order is created by the customer's order), ERP needs to read the payment stages of the customer's order and understand whether the purchase can be made.</p>\n<p>It sounds elementary, but monitoring shows that the operation is slow as hell and eats up memory as if it were the last time. </p>\n<p>Welp, let's go find out. We saw something like this:</p>\n<p><img alt=\"825701 records\" src=\"https://kostyanetsky.me/notes/payment-terms/payment-terms.png\"/></p>\n<p>What do we have here? Instead of taking two or three stages of payment for an order, ERP reads almost a million! How this could be possible?</p>\n<p>It turned out that the problem was with those purchase orders that were not related to customer orders at all. The developer considered that the logic for them could not be changed: the customer’s order ID is empty and the query will not find payment stages for this ID. This means that the same result will be obtained as if there were no query at all. And an extra query — well... One query more, one query less... Not a big deal.</p>\n<p>The deal turned out to be big. The table of payment stages contained data not only for customer orders, but also for other types of documents. Their customer order ID field was empty. As a result, ERP, when trying to find payment stages using an empty customer order ID, unexpectedly found them.</p>\n<p>The query read about a gigabyte of data and wrote it to a temporary table. A gigabyte was read, then a gigabyte was written... History hit the disk, the DBMS buffer cache, and other components of the system (even the network, which had to drive this gigabyte back and forth without any benefit).</p>\n<p>Do you know what I think? If the result of a query is known, there is probably no need to do it after all.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "one query more, one query less 5 may 2024 · 1с optimization one query more, one query less — it doesn’t matter, people often say. like, the main thing is that the query must be cheap: it doesn’t read too much, uses index, and so on. this point of view makes sense, but mindlessly machine-gunning queries is a dangerous idea. even if everything looks good at the moment, the system may change slightly in the future. and then a seemingly harmless patch will burn your production server to the ground right on friday. let me tell you about one example from recent practice. there is an erp that contains a table with payment stages for customer orders. one of these stages is prepayment; until it is received, you cannot create an order for the supplier. technically, the purchase order simply stores the customer's order id; if the field is filled (that is, if the purchase order is created by the customer's order), erp needs to read the payment stages of the customer's order and understand whether the purchase can be made. it sounds elementary, but monitoring shows that the operation is slow as hell and eats up memory as if it were the last time. welp, let's go find out. we saw something like this: what do we have here? instead of taking two or three stages of payment for an order, erp reads almost a million! how this could be possible? it turned out that the problem was with those purchase orders that were not related to customer orders at all. the developer considered that the logic for them could not be changed: the customer’s order id is empty and the query will not find payment stages for this id. this means that the same result will be obtained as if there were no query at all. and an extra query — well... one query more, one query less... not a big deal. the deal turned out to be big. the table of payment stages contained data not only for customer orders, but also for other types of documents. their customer order id field was empty. as a result, erp, when trying to find payment stages using an empty customer order id, unexpectedly found them. the query read about a gigabyte of data and wrote it to a temporary table. a gigabyte was read, then a gigabyte was written... history hit the disk, the dbms buffer cache, and other components of the system (even the network, which had to drive this gigabyte back and forth without any benefit). do you know what i think? if the result of a query is known, there is probably no need to do it after all.",
    "tags": [
      "1c",
      "optimization"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/obsidian-foodiary\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Foodiary for Obsidian\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>14 April 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Typescript</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Obsidian</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Following my <a href=\"https://kostyanetsky.me/notes/obsidian-fastimer\" target=\"_blank\">first</a> plugin for Obsidian, I released <a href=\"https://github.com/vkostyanetsky/ObsidianFoodiary\" target=\"_blank\">the second one</a> a couple of weeks ago. Counts calories, proteins, fats, and carbohydrates in food. It helps not to overeat out of nowhere — it’s rather difficult to judge by eye how much you’ve eaten today and whether you can afford that donut.</p>\n<p>In short, a useful thing if you:</p>\n<ol>\n<li>Fatty (like me)</li>\n<li>Want to stop being fatty (like me)</li>\n<li>You take notes in Obsidian (like me) 🙂</li>\n</ol>\n<p>In fact, there is a lot of software for this task. I tried some of them but was dissatisfied: it either has terrible design, is bugged, or is constantly trying to sell me a monthly subscription. In short, it's more annoying than helpful. I wanted something native, built into the usual routine; so, if routine settles in Obsidian, then the solution seems to suggest itself.</p>\n<p>You can install the plugin directly from the program — the developers have already approved it. Otherwise, everything is simple: you write in a daily note what you ate and how much it weighed, and you receive a simple table sorted by calories with numbers by proteins, fats, and carbohydrates.</p>\n<p>There are examples in the repository at the link above.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "foodiary for obsidian 14 april 2024 · done typescript obsidian following my first plugin for obsidian, i released the second one a couple of weeks ago. counts calories, proteins, fats, and carbohydrates in food. it helps not to overeat out of nowhere — it’s rather difficult to judge by eye how much you’ve eaten today and whether you can afford that donut. in short, a useful thing if you: fatty (like me) want to stop being fatty (like me) you take notes in obsidian (like me) 🙂 in fact, there is a lot of software for this task. i tried some of them but was dissatisfied: it either has terrible design, is bugged, or is constantly trying to sell me a monthly subscription. in short, it's more annoying than helpful. i wanted something native, built into the usual routine; so, if routine settles in obsidian, then the solution seems to suggest itself. you can install the plugin directly from the program — the developers have already approved it. otherwise, everything is simple: you write in a daily note what you ate and how much it weighed, and you receive a simple table sorted by calories with numbers by proteins, fats, and carbohydrates. there are examples in the repository at the link above.",
    "tags": [
      "done",
      "typescript",
      "obsidian"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/callouts-for-fastimer\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Fastimer's Look\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>9 Marth 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Obsidian</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Typescript</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I just implemented <a href=\"https://kostyanetsky.me/notes/obsidian-fastimer\" target=\"_blank\">Fastimer</a>'s rendering through callouts: this is an Obsidian mechanic that allows you to turn an ordinary quote into a designed block of text that attracts the reader's attention. You've probably seen blocks like “advice” and “pay attention” — these are callouts.</p>\n<p>You can read more in <a href=\"https://help.obsidian.md/Editing+and+formatting/Callouts\" target=\"_blank\">Obsidian Help</a>. </p>\n<p>As a result, the timer now takes on a different color depending on the state: blue for an active fast, green for completed, and red for a failed one.</p>\n<p>In addition, I made the text more compact and worked on styling:</p>\n<p><img alt=\"Example\" src=\"https://kostyanetsky.me/notes/callouts-for-fastimer/example.png\"/></p>\n<p>It turned out to be way nicer than the block of preformatted text as it was before.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "fastimer's look 9 marth 2024 · obsidian typescript i just implemented fastimer 's rendering through callouts: this is an obsidian mechanic that allows you to turn an ordinary quote into a designed block of text that attracts the reader's attention. you've probably seen blocks like “advice” and “pay attention” — these are callouts. you can read more in obsidian help . as a result, the timer now takes on a different color depending on the state: blue for an active fast, green for completed, and red for a failed one. in addition, i made the text more compact and worked on styling: it turned out to be way nicer than the block of preformatted text as it was before.",
    "tags": [
      "obsidian",
      "typescript"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/small-pleasures\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Small Pleasures\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>6 Marth 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Georgia</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I was wasting time at the supermarket checkout: it’s evening, there aren’t many customers anymore, but the elderly cashier is clearly tired and isn’t in too much of a hurry. Standing in front a tall, gray-haired man with a luxurious beard whiles away the time studying the rack of chocolates next to the cash register.</p>\n<p>Finally, he takes a Snickers, twirls it in his hands thoughtfully. Then he pushes two more towards himself and, broadly, with visible pleasure, smiles into his mustache :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "small pleasures 6 marth 2024 · meanwhile georgia i was wasting time at the supermarket checkout: it’s evening, there aren’t many customers anymore, but the elderly cashier is clearly tired and isn’t in too much of a hurry. standing in front a tall, gray-haired man with a luxurious beard whiles away the time studying the rack of chocolates next to the cash register. finally, he takes a snickers, twirls it in his hands thoughtfully. then he pushes two more towards himself and, broadly, with visible pleasure, smiles into his mustache :)",
    "tags": [
      "meanwhile",
      "georgia"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/not-only-everything\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Not Only Everything\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>25 February 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>This commentary in the documentation for the WriteJSON() method of XDTOSerializer is enviably deep, I would say:</p>\n<p><img alt=\"Not only everyhing\" src=\"https://kostyanetsky.me/notes/not-only-everything/write-json.jpg\"/></p>\n<p>Well, yes. The method dumps data into JSON, not XML. So it’s hard to argue that not all value types can be packed into XML using it (to be precise, none). Such a pity that there is an obvious copy-paste from the help for WriteXML() further in the text! I almost decided that it was an Easter egg from the developers :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "not only everything 25 february 2024 · 1с this commentary in the documentation for the writejson() method of xdtoserializer is enviably deep, i would say: well, yes. the method dumps data into json, not xml. so it’s hard to argue that not all value types can be packed into xml using it (to be precise, none). such a pity that there is an obvious copy-paste from the help for writexml() further in the text! i almost decided that it was an easter egg from the developers :)",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/obsidian-fastimer\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Fastimer for Obsidian\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>13 February 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Typescript</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Obsidian</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>The <a href=\"https://obsidian.md/\" target=\"_blank\">Obsidian</a> developers recently approved one of my TypeScript pet plugins — <a href=\"https://github.com/vkostyanetsky/ObsidianFastimer\" target=\"_blank\">Fastimer</a>. It is an intermittent fasting tracker that adds a new code block to your vault: you enter the start date of the fasting interval and get the date of its finish, the time until this moment, and a list of the zones to be passed.</p>\n<p>The block shows an up-to-date picture every time Obsidian renders it, which means you can monitor your progress in real time. When a fasting window ends, you can enter the end date, and the code block will show the result: whether you managed to achieve the goal, how much time you fasted beyond the plan, and so on.</p>\n<p>I'm thinking of improving the visual part a bit (currently, everything is displayed as plain text without any design). In addition, I want to add functions for calculating statistics so that you can draw cute graphs like <a href=\"https://charts.phib.ro/Meta/Charts/Charts+Documentation\" target=\"_blank\">Charts </a> and show achievements. I already made the same in implementing the same <a href=\"https://github.com/vkostyanetsky/Fastimer\" target=\"_blank\">application</a> in Python, but I’m unlikely to return to it — it’s easier to solve the task in the Obsidian vault than to roll out an additional utility.</p>\n<p>In short, check out the plugin! :) You can find it by name (Fastimer) in the Obsidian library, or install it manually from the repository.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "fastimer for obsidian 13 february 2024 · done typescript obsidian the obsidian developers recently approved one of my typescript pet plugins — fastimer . it is an intermittent fasting tracker that adds a new code block to your vault: you enter the start date of the fasting interval and get the date of its finish, the time until this moment, and a list of the zones to be passed. the block shows an up-to-date picture every time obsidian renders it, which means you can monitor your progress in real time. when a fasting window ends, you can enter the end date, and the code block will show the result: whether you managed to achieve the goal, how much time you fasted beyond the plan, and so on. i'm thinking of improving the visual part a bit (currently, everything is displayed as plain text without any design). in addition, i want to add functions for calculating statistics so that you can draw cute graphs like charts and show achievements. i already made the same in implementing the same application in python, but i’m unlikely to return to it — it’s easier to solve the task in the obsidian vault than to roll out an additional utility. in short, check out the plugin! :) you can find it by name (fastimer) in the obsidian library, or install it manually from the repository.",
    "tags": [
      "done",
      "typescript",
      "obsidian"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/do-not\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Do? Do Not?\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>14 January 2024</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Among our projects, we have one where two systems are communicating with each other: ERP and CRM. Data exchange is done well: a push'n'pull server has been set up, subscriptions to events have been registered, a REST API has been implemented, and so on. There are many other fascinating technical details, but I'm not talking about that now.</p>\n<p>The exchange has various logic chains inside. For instance, if a new company appears in CRM, it sends the data to ERP. The other day, a problem appeared: a company was not sent from the CRM, no matter how many times you tried to write it. So we went to investigate, suspecting the worst: CRM is written in PHP (nothing personal; it’s just not our technical stack), and there’s a lot of different legacy stuff there. It's easier to shoot yourself in the foot than to blow your nose.</p>\n<p>However, it didn't take much digging. We opened the company’s page in CRM and saw that he had the “Do Not Export To ERP” checkbox, which, in fact, blocked the sending. A manager made an obvious mistake.</p>\n<p>Should we uncheck the box and close the ticket?</p>\n<p><img alt=\"Well yes, but actually no\" src=\"https://kostyanetsky.me/notes/do-not/actually.jpg\"/></p>\n<p>This will solve the problem with that particular company, but not the reason it appeared. It is actually in the interface, specifically in the name of the option: “do not” is used, which is advisable to avoid due to the fact that it is more difficult for users to read the wording correctly. By the way, this also applies to a simple “do”.</p>\n<p>It is often difficult for programmers to understand why this is so: we are used to instantly calculating Boolean expressions in our heads, and variations like “not (not true)” are commonplace for us. But people with a different background can get confused. Just a little, but sometimes this is enough for them to perceive “do not export” as “do export” in the heat of the day, click the option, and move on.</p>\n<p>To sum up, the solution is to rename the checkbox. “Disable Export” or “Stop Export” are both fine, for example. “Prohibit Export” also comes to mind, but it’s more about interpersonal relationships, and in general, a ban on doing something does not mean that it won’t be done :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "do? do not? 14 january 2024 · work english among our projects, we have one where two systems are communicating with each other: erp and crm. data exchange is done well: a push'n'pull server has been set up, subscriptions to events have been registered, a rest api has been implemented, and so on. there are many other fascinating technical details, but i'm not talking about that now. the exchange has various logic chains inside. for instance, if a new company appears in crm, it sends the data to erp. the other day, a problem appeared: a company was not sent from the crm, no matter how many times you tried to write it. so we went to investigate, suspecting the worst: crm is written in php (nothing personal; it’s just not our technical stack), and there’s a lot of different legacy stuff there. it's easier to shoot yourself in the foot than to blow your nose. however, it didn't take much digging. we opened the company’s page in crm and saw that he had the “do not export to erp” checkbox, which, in fact, blocked the sending. a manager made an obvious mistake. should we uncheck the box and close the ticket? this will solve the problem with that particular company, but not the reason it appeared. it is actually in the interface, specifically in the name of the option: “do not” is used, which is advisable to avoid due to the fact that it is more difficult for users to read the wording correctly. by the way, this also applies to a simple “do”. it is often difficult for programmers to understand why this is so: we are used to instantly calculating boolean expressions in our heads, and variations like “not (not true)” are commonplace for us. but people with a different background can get confused. just a little, but sometimes this is enough for them to perceive “do not export” as “do export” in the heat of the day, click the option, and move on. to sum up, the solution is to rename the checkbox. “disable export” or “stop export” are both fine, for example. “prohibit export” also comes to mind, but it’s more about interpersonal relationships, and in general, a ban on doing something does not mean that it won’t be done :)",
    "tags": [
      "work",
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/last-meth\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Last Meth\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>17 December 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I'm digging into the code of an external component for 1C platform, published by its developers as an example. The good thing is: well, it can be compiled and if you tweak it a little — it does the job.</p>\n<p>As for other things, there are a lot of bruh moments. For example, the project can't be opened in modern Visual Studio (you need to specify CMake manually). The code is quite sloppy; there is no documentation, comments, or formatting. Long story short: I believe, it can be difficult for a developer without solid experience in C++ to get the hang of this.</p>\n<p>Was a bit amused by the naming in the code below:</p>\n<pre><code>long CAddInNative::FindMethod(const WCHAR_T* wsMethodName)\n{ \n    long plMethodNum = -1;\n    wchar_t* name = 0;\n\n    ::convFromShortWchar(&amp;name, wsMethodName);\n\n    plMethodNum = findName(g_MethodNames, name, eMethLast);\n\n    if (plMethodNum == -1)\n        plMethodNum = findName(g_MethodNamesRu, name, eMethLast);\n\n    delete[] name;\n\n    return plMethodNum;\n}\n</code></pre>\n<p>I see here the inexplicable love for abbreviations. What made the author name the variable “eMethLast”, not “eMethodLast”? They already created \"wsMethodName\" and \"plMethodNum\", after all.</p>\n<p>Perhaps this is an Easter egg with a reference to Breaking Bad. Then I like it for sure :)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "last meth 17 december 2023 · 1с i'm digging into the code of an external component for 1c platform, published by its developers as an example. the good thing is: well, it can be compiled and if you tweak it a little — it does the job. as for other things, there are a lot of bruh moments. for example, the project can't be opened in modern visual studio (you need to specify cmake manually). the code is quite sloppy; there is no documentation, comments, or formatting. long story short: i believe, it can be difficult for a developer without solid experience in c++ to get the hang of this. was a bit amused by the naming in the code below: long caddinnative::findmethod(const wchar_t* wsmethodname) { long plmethodnum = -1; wchar_t* name = 0; ::convfromshortwchar(&name, wsmethodname); plmethodnum = findname(g_methodnames, name, emethlast); if (plmethodnum == -1) plmethodnum = findname(g_methodnamesru, name, emethlast); delete[] name; return plmethodnum; } i see here the inexplicable love for abbreviations. what made the author name the variable “emethlast”, not “emethodlast”? they already created \"wsmethodname\" and \"plmethodnum\", after all. perhaps this is an easter egg with a reference to breaking bad. then i like it for sure :)",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/wrong-freeway-entrance\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Wrong Freeway Entrance\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>14 November 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Code Smell</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <blockquote>\n<p>Have you ever taken the wrong freeway entrance? You need to drive to the next exit to turn around, but you hate every inch of travel because you're going away from your goal.</p>\n<p><em>― Andy Weir, \"The Martian\"</em></p>\n</blockquote>\n<p>Programmers have exactly the same emotions when they spend a long time working on something. They suddenly realize that part of it should be designed differently. Moreover, this is exactly what you have to do since it solves several problems at once. This is where technical debt is born. </p>\n<p>However, right now you don’t change anything but continue to work with the part of the code that already exists. After all, you are professional, and you have a release date! You have to make it on time and then pay the debt, but you hate every inch of code you write because you're going away from your goal.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "wrong freeway entrance 14 november 2023 · code smell have you ever taken the wrong freeway entrance? you need to drive to the next exit to turn around, but you hate every inch of travel because you're going away from your goal. ― andy weir, \"the martian\" programmers have exactly the same emotions when they spend a long time working on something. they suddenly realize that part of it should be designed differently. moreover, this is exactly what you have to do since it solves several problems at once. this is where technical debt is born. however, right now you don’t change anything but continue to work with the part of the code that already exists. after all, you are professional, and you have a release date! you have to make it on time and then pay the debt, but you hate every inch of code you write because you're going away from your goal.",
    "tags": [
      "code-smell"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/how-to-be-a-hero\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Everyday Heroism\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>24 September 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Some time ago, I was setting up <a href=\"https://swagger.io\" target=\"_blank\">Swagger</a> for the internal API. While I was fiddling around, it became clear that some functionality did not need to be included in the documentation. I was looking for a way to do this without crutches and came across a funny <a href=\"https://github.com/tiangolo/full-stack-fastapi-couchbase/issues/10\" target=\"_blank\">question</a> on GitHub.</p>\n<p>What's funny, you ask? Well, I involuntarily remembered <a href=\"https://forum.mista.ru\" target=\"_blank\">Mista</a>. Among 1C developers, this is synonymous with the word “toxicity”: if you ask anything there, you get a bucket of slop by the collar instead of an answer. Here, of course, everything is not so neglected, but holy crap! These persistent guys who referring to the 14-page manual made me laugh a lot.</p>\n<p>One thing is good: by the end of the thread, there appeared a brave rebel who just answered the question. They, like, named the required parameter for a FastAPI method's decorator, which is not supposed to be shown in the documentation. No links — could you imagine?</p>\n<p>Not all heroes wear capes, I would say.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "everyday heroism 24 september 2023 · 1с work some time ago, i was setting up swagger for the internal api. while i was fiddling around, it became clear that some functionality did not need to be included in the documentation. i was looking for a way to do this without crutches and came across a funny question on github. what's funny, you ask? well, i involuntarily remembered mista . among 1c developers, this is synonymous with the word “toxicity”: if you ask anything there, you get a bucket of slop by the collar instead of an answer. here, of course, everything is not so neglected, but holy crap! these persistent guys who referring to the 14-page manual made me laugh a lot. one thing is good: by the end of the thread, there appeared a brave rebel who just answered the question. they, like, named the required parameter for a fastapi method's decorator, which is not supposed to be shown in the documentation. no links — could you imagine? not all heroes wear capes, i would say.",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/crossed\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Romania's Feature\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>30 August 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Making a password recover function via SMS for our customer portal. Got to the Twilio <a href=\"https://support.twilio.com/hc/en-us/articles/223133767-International-support-for-Alphanumeric-Sender-ID\" target=\"_blank\">documentation</a> related to <a href=\"https://www.twilio.com/docs/glossary/what-alphanumeric-sender-id\" target=\"_blank\">alphanumeric sender ID</a> support in different countries; this feature allows you to send messages so that the recipient sees not the sender's number but something meaningful (a company name, for example).</p>\n<p>The feature is regulated differently everywhere: in some countries it just works, but in others registration is possible or even required.</p>\n<p>Well, let's take a look:</p>\n<p><img alt=\"Screenshot\" src=\"https://kostyanetsky.me/notes/crossed/twilio.png\"/></p>\n<p>🤔</p>\n<ul>\n<li>Portugal: yes</li>\n<li>Puerto Rico: no</li>\n<li>Qatar: yes (with registration)</li>\n<li>Reunion: yes</li>\n<li>Romania: yes (with registration) (but be afraid of Dracula)</li>\n</ul>\n<p>I don’t know how else I can explain this cemetery.</p>\n<p>UPD: Found the answer. Grave crosses mean you have to pay $700 to register.</p>\n<p>To be frank, I like the explanation about Dracula much more.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "romania's feature 30 august 2023 · meanwhile work making a password recover function via sms for our customer portal. got to the twilio documentation related to alphanumeric sender id support in different countries; this feature allows you to send messages so that the recipient sees not the sender's number but something meaningful (a company name, for example). the feature is regulated differently everywhere: in some countries it just works, but in others registration is possible or even required. well, let's take a look: 🤔 portugal: yes puerto rico: no qatar: yes (with registration) reunion: yes romania: yes (with registration) (but be afraid of dracula) i don’t know how else i can explain this cemetery. upd: found the answer. grave crosses mean you have to pay $700 to register. to be frank, i like the explanation about dracula much more.",
    "tags": [
      "meanwhile",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/fastimer-1-3-1\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                New Fastimer\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>23 August 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Python</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Released a new <a href=\"https://github.com/vkostyanetsky/Fastimer/releases/tag/v1.3.1\" target=\"_blank\">version</a> of my console timer for <a href=\"https://en.wikipedia.org/wiki/Intermittent_fasting\" target=\"_blank\">intermittent fasting</a>. I wrote this app about a year ago, when I was once again upset by the <a href=\"https://www.zerolongevity.com/\" target=\"_blank\">Zero</a> application for Android: some very primitive functions (like viewing a specific interval) did not work. Oh my gosh, guys, you had one job!</p>\n<p>The main difference between 1.3.1 and 1.2.3 is that the console menu has been cut to hell in favor of the good old arguments and options. The menu concept looks convenient only if an application has few features. However, as soon as you take a step forward, the need to answer a list of questions each time you need something starts to irritate you.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "new fastimer 23 august 2023 · done python released a new version of my console timer for intermittent fasting . i wrote this app about a year ago, when i was once again upset by the zero application for android: some very primitive functions (like viewing a specific interval) did not work. oh my gosh, guys, you had one job! the main difference between 1.3.1 and 1.2.3 is that the console menu has been cut to hell in favor of the good old arguments and options. the menu concept looks convenient only if an application has few features. however, as soon as you take a step forward, the need to answer a list of questions each time you need something starts to irritate you.",
    "tags": [
      "done",
      "python"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/do-you-speak-english\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Do you speak English?\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>14 May 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>The repository login form of the current platform (8.3.22.1923, to be precise) launched with the English interface:</p>\n<p><img alt=\"Login Form\" src=\"https://kostyanetsky.me/notes/do-you-speak-english/login-form.png\"/></p>\n<p>You had one job, literally.</p>\n<p>I heard some rumors that development of the Designer was stopped largely due to the monstrous amount of technical debt that slows down any new features. But here are interface glitches right on one of the first application windows! Curious how it got through the build tests.</p>\n<p>Maybe they don't exist at all.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "do you speak english? 14 may 2023 · 1с the repository login form of the current platform (8.3.22.1923, to be precise) launched with the english interface: you had one job, literally. i heard some rumors that development of the designer was stopped largely due to the monstrous amount of technical debt that slows down any new features. but here are interface glitches right on one of the first application windows! curious how it got through the build tests. maybe they don't exist at all.",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/going-postal\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Going Postal\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>8 May 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Recently, I was working with vocabulary in an attempt to describe my latest adventures to an English-speaking friend and got to know about the colorful idiom “to go postal”. It means something like “go crazy with anger”; appeared somewhere between the 80s and 90s in the USA after a series of rather <a href=\"https://en.wikipedia.org/wiki/Going_postal\" target=\"_blank\">insane incidents</a> in which postal workers went crazy and attacked people around, including colleagues and visitors.</p>\n<p>The expression sounds funny at first glance, but the story behind the scenes is painfully gloomy. I think I will continue to use the good old “to go ballistic”. Literally, “get angry that strong so you become a rocket which lost control”. Or, to simplify, “explode with anger”.</p>\n<p>By the way, there are similar rocket-like connotations in Russian, but for some reason they are about a more manageable cases. Mostly, they implies something like \"the fire in the ass was so damn strong that the poor guy left Earth and successfully landed on Mars\". Sounds a bit better than a simple explosion — you didn't completely waste the precious resource, at least :-)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "going postal 8 may 2023 · english recently, i was working with vocabulary in an attempt to describe my latest adventures to an english-speaking friend and got to know about the colorful idiom “to go postal”. it means something like “go crazy with anger”; appeared somewhere between the 80s and 90s in the usa after a series of rather insane incidents in which postal workers went crazy and attacked people around, including colleagues and visitors. the expression sounds funny at first glance, but the story behind the scenes is painfully gloomy. i think i will continue to use the good old “to go ballistic”. literally, “get angry that strong so you become a rocket which lost control”. or, to simplify, “explode with anger”. by the way, there are similar rocket-like connotations in russian, but for some reason they are about a more manageable cases. mostly, they implies something like \"the fire in the ass was so damn strong that the poor guy left earth and successfully landed on mars\". sounds a bit better than a simple explosion — you didn't completely waste the precious resource, at least :-)",
    "tags": [
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/pause\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Pause()\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>30 April 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <blockquote>\n<p>An important detail: the CallPause method is not available in a client-server call; when a client calls a server method in which CallPause is called, the exception \"Cannot call the CallPause method in a client-server call\" will be thrown.</p>\n<p><a href=\"https://wonderland.v8.1c.ru/blog/metod-vyzvatpauzu/\" target=\"_blank\">CallPause Method</a> (RU)</p>\n</blockquote>\n<p>What a strange restriction, to be frank. On the one hand, an experienced developer will not make an intentional pause in a client-server call anyway; on the other hand, whoever wants to make it makes it anyway (by checking time in a cycle, for example). Does security by obscurity worth the efforts?</p>\n<p>At best, some junior will catch this exception, think “welp, it looks like I'm doing something wrong” and move in the right direction. However, putting the restriction on the platform for the sake of this case is like firing a cannon at sparrows. You know what? Let's implement a number limit as well — like, no more than 1000 pauses per session, otherwise users will suddenly think that the program is too slow :-)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "pause() 30 april 2023 · 1с an important detail: the callpause method is not available in a client-server call; when a client calls a server method in which callpause is called, the exception \"cannot call the callpause method in a client-server call\" will be thrown. callpause method (ru) what a strange restriction, to be frank. on the one hand, an experienced developer will not make an intentional pause in a client-server call anyway; on the other hand, whoever wants to make it makes it anyway (by checking time in a cycle, for example). does security by obscurity worth the efforts? at best, some junior will catch this exception, think “welp, it looks like i'm doing something wrong” and move in the right direction. however, putting the restriction on the platform for the sake of this case is like firing a cannon at sparrows. you know what? let's implement a number limit as well — like, no more than 1000 pauses per session, otherwise users will suddenly think that the program is too slow :-)",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/in-a-pedantic-way\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                In a Pedantic Way\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>21 Marth 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Code Smell</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>The daily award for the most philosophical code goes to the author of this elegant way to check that two boolean variables are not equal to each other:</p>\n<pre><code>If DataStructure.Property(\"AmountVATIn\")\n    And ((DataStructure.AmountVATIn And NOT SearchPriceIncludesVAT)\n    OR (NOT DataStructure.AmountVATIn And SearchPriceIncludesVAT)) Then    \n    Price = RecalculateAmountOnVATFlagsChange(Price, DataStructure.AmountVATIn, TabSectionLine.VATRate);\nEndIf;\n</code></pre>\n<p>I'm thinking of adding something like “And Not (DataStructure.AmountVATIn = SearchPriceIncludesVAT)” here to spice it up with a subtle note of insanity.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "in a pedantic way 21 marth 2023 · 1с work code smell the daily award for the most philosophical code goes to the author of this elegant way to check that two boolean variables are not equal to each other: if datastructure.property(\"amountvatin\") and ((datastructure.amountvatin and not searchpriceincludesvat) or (not datastructure.amountvatin and searchpriceincludesvat)) then price = recalculateamountonvatflagschange(price, datastructure.amountvatin, tabsectionline.vatrate); endif; i'm thinking of adding something like “and not (datastructure.amountvatin = searchpriceincludesvat)” here to spice it up with a subtle note of insanity.",
    "tags": [
      "1c",
      "work",
      "code-smell"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/environmental-storytelling\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Environmental Storytelling\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>19 Marth 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I like to notice things in the world around me that clearly have a story behind them. In video games, this is called “environmental storytelling”: they don’t tell you the story directly, but if you look around, you can guess which gun was hanging on the wall and who fired from it.</p>\n<p>For example, I recently celebrated the company's 10th anniversary with colleagues at a local golf club. Balls had to be sent flying from the second floor; there are no railings for obvious reasons, but a net is stretched in case someone loses their balance.</p>\n<p><img alt=\"Photo from the club website to make it clearer.\" src=\"https://kostyanetsky.me/notes/environmental-storytelling/topgolf.jpeg\"/></p>\n<p>Why are you talking about this, you ask? Well, there are warnings on the walls: jump into the net of your own free will and pay <abbr title=\"About two hundred thousand rubles at this moment.\">ten thousand dirhams</abbr>. Recording this heroic leap of faith on camera is fine as well, just prepare five thousand more.</p>\n<p>Do you feel the smell of a good history? </p>\n<p>Another example: once flew to Turkey to rest and decided, just in case, to look through the rules of the airline (what can be taken on board, what can not). Among the list of items prohibited from being carried on board, I found “steel spear” and “steel flail” 😬</p>\n<p>UPD: Another great <a href=\"https://kostyanetsky.me/notes/environmental-storytelling/soundproof.jpeg\" target=\"_blank\">example</a> from somewhere on the Internet.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "environmental storytelling 19 marth 2023 · meanwhile work i like to notice things in the world around me that clearly have a story behind them. in video games, this is called “environmental storytelling”: they don’t tell you the story directly, but if you look around, you can guess which gun was hanging on the wall and who fired from it. for example, i recently celebrated the company's 10th anniversary with colleagues at a local golf club. balls had to be sent flying from the second floor; there are no railings for obvious reasons, but a net is stretched in case someone loses their balance. why are you talking about this, you ask? well, there are warnings on the walls: jump into the net of your own free will and pay ten thousand dirhams . recording this heroic leap of faith on camera is fine as well, just prepare five thousand more. do you feel the smell of a good history? another example: once flew to turkey to rest and decided, just in case, to look through the rules of the airline (what can be taken on board, what can not). among the list of items prohibited from being carried on board, i found “steel spear” and “steel flail” 😬 upd: another great example from somewhere on the internet.",
    "tags": [
      "meanwhile",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/outgoing-requests-limiter\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Slow down, I'm recording\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>5 Marth 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Bitrix</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Usually the idea of developing is simple: the faster it works, the better. For example, the more requests an application manages to execute per unit of time, the faster the task for which these requests are needed will be solved.</p>\n<p>However, it also happens the other way around: you need to reduce the number of operations that a program is able to perform. Let's imagine we exchange data with an external service and it bans if we hit it with requests too often. For example: the cloud version of <a href=\"https://bitrix24.net\" target=\"_blank\">Bitrix24</a> requires sending requests to it no more than two per second.</p>\n<p>Here is an <a href=\"https://github.com/vkostyanetsky/OutgoingRequestsLimiter\" target=\"_blank\">implementation</a> of such a slowdown, which I wrote last week. There is no queue support; the main solved problem is to execute as many requests as possible without going beyond the limit (taking into account the fact that requests can be made from different sessions).</p>\n<p>The problem is solved through a constant that stores the date for the current second and the number of requests that have already been sent. Clients who run into a limitation are waiting. This approach is not suitable for high-loaded systems, but otherwise it can come in handy.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "slow down, i'm recording 5 marth 2023 · 1с bitrix done usually the idea of developing is simple: the faster it works, the better. for example, the more requests an application manages to execute per unit of time, the faster the task for which these requests are needed will be solved. however, it also happens the other way around: you need to reduce the number of operations that a program is able to perform. let's imagine we exchange data with an external service and it bans if we hit it with requests too often. for example: the cloud version of bitrix24 requires sending requests to it no more than two per second. here is an implementation of such a slowdown, which i wrote last week. there is no queue support; the main solved problem is to execute as many requests as possible without going beyond the limit (taking into account the fact that requests can be made from different sessions). the problem is solved through a constant that stores the date for the current second and the number of requests that have already been sent. clients who run into a limitation are waiting. this approach is not suitable for high-loaded systems, but otherwise it can come in handy.",
    "tags": [
      "1c",
      "bitrix",
      "done"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/rest-service-4-sm\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                REST service for Service Manager\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>25 February 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>This week, I developed a REST service to set up our service manager (this is a configuration for managing a 1cFresh instance). Deploying the development environment is a regular task for us, and every time the manager's database had to be tuned by hand: tweaking the storefront, changing application addresses, overwriting scheduled tasks, and so on.</p>\n<p>The implementation was simple. Come up with a JSON structure, write a parser, find a code in the configuration, make it work by external call, and make sure you don't break anything. Routine work, in general, but I love to do such things from time to time: I mean, to look around and try to figure out which of the daily tasks is annoying enough.</p>\n<p>This one is a good example. To be frank, setting up the Service Manager wasn't a problem (launching the app and fiddling with the settings), but it was a thing to pay attention &amp; spend time to. What do we have now:</p>\n<ol>\n<li>There is a JSON file with all the settings;</li>\n<li>There is a REST service for its processing;</li>\n<li>There is a script that will put the first into the second;</li>\n<li>There is a pipeline that will do it all by itself.</li>\n</ol>\n<p>In short, a boot was rubbing a leg, and now it isn't. Yahoo!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "rest service for service manager 25 february 2023 · 1с work this week, i developed a rest service to set up our service manager (this is a configuration for managing a 1cfresh instance). deploying the development environment is a regular task for us, and every time the manager's database had to be tuned by hand: tweaking the storefront, changing application addresses, overwriting scheduled tasks, and so on. the implementation was simple. come up with a json structure, write a parser, find a code in the configuration, make it work by external call, and make sure you don't break anything. routine work, in general, but i love to do such things from time to time: i mean, to look around and try to figure out which of the daily tasks is annoying enough. this one is a good example. to be frank, setting up the service manager wasn't a problem (launching the app and fiddling with the settings), but it was a thing to pay attention & spend time to. what do we have now: there is a json file with all the settings; there is a rest service for its processing; there is a script that will put the first into the second; there is a pipeline that will do it all by itself. in short, a boot was rubbing a leg, and now it isn't. yahoo!",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/haul-trucks\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Haul Trucks\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>20 February 2023</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Cars\" src=\"https://kostyanetsky.me/notes/haul-trucks/cars.jpg\"/></p>\n<p>The colleague grumbled that if you think like that, then the configurator will be Zhiguli, and the EDT will be Kama1 (this is an electric car that has been developed somewhere in the depths of KAMAZ for many years and still can’t gather strength and, finally, show the wonder to the world).</p>\n<p>Well, I try to look at things with optimism. I think the platform and its IDE are such haul trucks. No one in their right mind rides them on household chores, but these beasts are irreplaceable on a cut!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "haul trucks 20 february 2023 · 1с the colleague grumbled that if you think like that, then the configurator will be zhiguli, and the edt will be kama1 (this is an electric car that has been developed somewhere in the depths of kamaz for many years and still can’t gather strength and, finally, show the wonder to the world). well, i try to look at things with optimism. i think the platform and its ide are such haul trucks. no one in their right mind rides them on household chores, but these beasts are irreplaceable on a cut!",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/strange-bitrix\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                About Strange Bitrix\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>15 October 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Bitrix</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>The more I explore the Bitrix24 REST interface, the more I am amazed at how different its developers mindsets are. It is expressed in different ways.</p>\n<p>Let's take, for example, the interface of deals and product rows related to them. There is no amount field in the table of the products: like, you need the amount for each line – count it yourself, that's it. However, there is the amount field at the document level! Can you guess what the field is named?</p>\n<p>AMOUNT? DEAL_AMOUNT? DOCUMENT_AMOUNT? AMOUNT_TOTAL?</p>\n<p>You didn't guess, the correct answer is OPPORTUNITY.</p>\n<p><img alt=\"What the fuck?\" src=\"https://kostyanetsky.me/notes/strange-bitrix/what-the-fuck.jpg\"/></p>\n<p>Where'd I digress? Yeah, a product line. It contains a product, a VAT rate, and a unit of measure. All three entities are completely independent: each has a separate table with auxiliary information and its own unique identifier. It is logical to assume that identifiers are stored in the product line: product ID, VAT rate ID, and unit ID.</p>\n<p>Well, yes, but no. The product field actually contains ID, but for the VAT rate field it's a rate value. What's for the unit of measure field? Well, it contains a measurement code ¯\\_(ツ)_/¯</p>\n<p>Database normalization? What? What does it mean? Back off, man, you're distracting us from work.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "about strange bitrix 15 october 2022 · work bitrix the more i explore the bitrix24 rest interface, the more i am amazed at how different its developers mindsets are. it is expressed in different ways. let's take, for example, the interface of deals and product rows related to them. there is no amount field in the table of the products: like, you need the amount for each line – count it yourself, that's it. however, there is the amount field at the document level! can you guess what the field is named? amount? deal_amount? document_amount? amount_total? you didn't guess, the correct answer is opportunity. where'd i digress? yeah, a product line. it contains a product, a vat rate, and a unit of measure. all three entities are completely independent: each has a separate table with auxiliary information and its own unique identifier. it is logical to assume that identifiers are stored in the product line: product id, vat rate id, and unit id. well, yes, but no. the product field actually contains id, but for the vat rate field it's a rate value. what's for the unit of measure field? well, it contains a measurement code ¯\\_(ツ)_/¯ database normalization? what? what does it mean? back off, man, you're distracting us from work.",
    "tags": [
      "work",
      "bitrix"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/anonymous-quokka\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Group Work in Google Docs\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>18 September 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Bitrix</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>For the last month I have been rewriting standard data exchange between FirstBit ERP and Bitrix for a client task. Co-workers doing the same on the Bitrix side prepared a huge mapping for this case: which field on the 1C side should be transferred to which Bitrix field (and vice versa).</p>\n<p>They published this mapping as Google Docs tables, in the interface of which you can see users using any document at this moment — both logged in and anonymous. Anonymous ones traditionally are displaying as <a href=\"https://support.google.com/docs/answer/2494888?hl=en\" target=\"_blank\">animals</a>.</p>\n<p>Colleagues generally prefer to work anonymously. As a result, I definetely used to feel like a Disney princess: you start working in the morning, and anonymous quokkas, penguins and chinchillas roll out from everywhere :-)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "group work in google docs 18 september 2022 · work bitrix meanwhile for the last month i have been rewriting standard data exchange between firstbit erp and bitrix for a client task. co-workers doing the same on the bitrix side prepared a huge mapping for this case: which field on the 1c side should be transferred to which bitrix field (and vice versa). they published this mapping as google docs tables, in the interface of which you can see users using any document at this moment — both logged in and anonymous. anonymous ones traditionally are displaying as animals . colleagues generally prefer to work anonymously. as a result, i definetely used to feel like a disney princess: you start working in the morning, and anonymous quokkas, penguins and chinchillas roll out from everywhere :-)",
    "tags": [
      "work",
      "bitrix",
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/slack\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Slack Advises\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>25 August 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Slack, of course, is a thing to scold. For being slow, for having bugs, for notifications. However, I just love his stubs in case there are no new messages.</p>\n<p>Look at this cuteness:</p>\n<p><img alt=\"All done. The future is yours.\" src=\"https://kostyanetsky.me/notes/slack/all-done.png\"/></p>\n<p>Why do we need psychotherapists at all?</p>\n<p><img alt=\"You're up to date. Go forth and do great things.\" src=\"https://kostyanetsky.me/notes/slack/up-to-date.png\"/></p>\n<p>Or this:</p>\n<p><img alt=\"You're all read. Here is a tractor.\" src=\"https://kostyanetsky.me/notes/slack/here-is-tractor.png\"/></p>\n<p>Geez-Louise, Slack, hold on. You're not the first who advices this, believe me.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "slack advises 25 august 2022 · meanwhile slack, of course, is a thing to scold. for being slow, for having bugs, for notifications. however, i just love his stubs in case there are no new messages. look at this cuteness: why do we need psychotherapists at all? or this: geez-louise, slack, hold on. you're not the first who advices this, believe me.",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/shaken-not-stirred\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Shaken, Not Stirred\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>7 August 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Let's speak a bit about organization of the code. If you need to describe a set of objects with common properties, think about whether this description should be divided into separate methods, each of which intended to describe one specific object?</p>\n<p>Let's look at this example — a method that describes tabular parts of documents suitable for some task:</p>\n<pre><code>SupportedTypes[\"Document.SupplierPricesEntering\"]   = \"Prices\";\nSupportedTypes[\"Document.OpeningBalancesEntering\"]  = \"CustomerAccounts,VendorAccounts\";\nSupportedTypes[\"Document.Requisition\"]              = \"InventoryAndServices\";\n</code></pre>\n<p>Everything seems fine, right? Descriptions are there; tabular parts are listed; splitting them by comma doesn't look expensive at all.</p>\n<p>However, there are many documents in the method. Eventually, some colleague (or you) will need to refer to another tabular part of the document, which is already mentioned in the method. Something will distract they, they will forget to look for an existing line and something like this will turn out:</p>\n<pre><code>SupportedTypes[\"Document.SupplierPricesEntering\"]   = \"Prices\";\nSupportedTypes[\"Document.OpeningBalancesEntering\"]  = \"CustomerAccounts,VendorAccounts\";\nSupportedTypes[\"Document.Requisition\"]              = \"InventoryAndServices\";\n\n&lt;...&gt;\n\nSupportedTypes[\"Document.OpeningBalancesEntering\"]  = \"PayrollDeductions\";\n</code></pre>\n<p>As a result, a part of description will be erased, and it's good if the related functionality is covered by tests.</p>\n<p>Conclusion? Well, you can write a helper method that will take the document type and the name of <strong>one</strong> table part as input. The helper will add items to the SupportedTypes map and ensure that the data already added is not lost.</p>\n<p>However, if you need a better solution, then consider doing as I wrote at the beginning of this note: split the method into auxiliary methods. One method contains description for one document only (for all its tabular sections). Something like:</p>\n<pre><code>Procedure AddOpeningBalancesEnteringDocument(SupportedTypes)\n\n    TabularSections = New Array;\n\n    TabularSections.Add(\"CustomerAccounts\");\n    TabularSections.Add(\"VendorAccounts\");\n    TabularSections.Add(\"PayrollDeductions\");\n\n    SupportedTypes[\"Document.Requisition\"] = StrConcat(TabularSections, \",\");\n\nEndProcedure\n</code></pre>\n<p>What do we get here? Firstly, nobody will accidentally erase the description of the document. Secondly, SonarQube will be pleased: it is highly likely to begin swearing at repeating literals with the names of tabular parts, if the helper is implemented instead of code splitting.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "shaken, not stirred 7 august 2022 · 1с let's speak a bit about organization of the code. if you need to describe a set of objects with common properties, think about whether this description should be divided into separate methods, each of which intended to describe one specific object? let's look at this example — a method that describes tabular parts of documents suitable for some task: supportedtypes[\"document.supplierpricesentering\"] = \"prices\"; supportedtypes[\"document.openingbalancesentering\"] = \"customeraccounts,vendoraccounts\"; supportedtypes[\"document.requisition\"] = \"inventoryandservices\"; everything seems fine, right? descriptions are there; tabular parts are listed; splitting them by comma doesn't look expensive at all. however, there are many documents in the method. eventually, some colleague (or you) will need to refer to another tabular part of the document, which is already mentioned in the method. something will distract they, they will forget to look for an existing line and something like this will turn out: supportedtypes[\"document.supplierpricesentering\"] = \"prices\"; supportedtypes[\"document.openingbalancesentering\"] = \"customeraccounts,vendoraccounts\"; supportedtypes[\"document.requisition\"] = \"inventoryandservices\"; <...> supportedtypes[\"document.openingbalancesentering\"] = \"payrolldeductions\"; as a result, a part of description will be erased, and it's good if the related functionality is covered by tests. conclusion? well, you can write a helper method that will take the document type and the name of one table part as input. the helper will add items to the supportedtypes map and ensure that the data already added is not lost. however, if you need a better solution, then consider doing as i wrote at the beginning of this note: split the method into auxiliary methods. one method contains description for one document only (for all its tabular sections). something like: procedure addopeningbalancesenteringdocument(supportedtypes) tabularsections = new array; tabularsections.add(\"customeraccounts\"); tabularsections.add(\"vendoraccounts\"); tabularsections.add(\"payrolldeductions\"); supportedtypes[\"document.requisition\"] = strconcat(tabularsections, \",\"); endprocedure what do we get here? firstly, nobody will accidentally erase the description of the document. secondly, sonarqube will be pleased: it is highly likely to begin swearing at repeating literals with the names of tabular parts, if the helper is implemented instead of code splitting.",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/not-but\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Not, But!\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>23 Jule 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Someone told me about the Croatian comic strips <a href=\"http://www.to-zo.com/notbut\" target=\"_blank\">NOT/BUT</a> at the beginning of last year, when I was seriously learning to draw. Each strip there is about some kind of traumatic or simply gloomy thought that comes into the artist’s head while working. The idea is to push a reader in the right direction and give them a more practical perspective on the situation they're in.</p>\n<p>I quit drawing a year later, at the end of February: it became clear that I no longer had time for a hobby. But comics are completely universal; look through, even if you have no idea what a kneaded eraser is :-)</p>\n<p><a href=\"http://www.to-zo.com/notbut\" target=\"_blank\"><img alt=\"What the actual fuck?\" src=\"https://kostyanetsky.me/notes/not-but/mistakes.png\"/></a></p>\n<p>All these endless soul-searching are well known to any professional, and the way out of them is not always obvious. Especially if you are angry, tired, and the deadline for the project expired somewhere last week.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "not, but! 23 jule 2022 · work meanwhile someone told me about the croatian comic strips not/but at the beginning of last year, when i was seriously learning to draw. each strip there is about some kind of traumatic or simply gloomy thought that comes into the artist’s head while working. the idea is to push a reader in the right direction and give them a more practical perspective on the situation they're in. i quit drawing a year later, at the end of february: it became clear that i no longer had time for a hobby. but comics are completely universal; look through, even if you have no idea what a kneaded eraser is :-) all these endless soul-searching are well known to any professional, and the way out of them is not always obvious. especially if you are angry, tired, and the deadline for the project expired somewhere last week.",
    "tags": [
      "work",
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/ok\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Okay!\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>22 Jule 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <iframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https://www.youtube.com/embed/GuIPxcXwF30\" width=\"560\"></iframe>\n<p>Oh, shoot! Just watched the video and realized that I got used to writing OK in morning statuses when asked “how do you feel today”. Like, everything is normal with me, I'm alive and doing well, nothing affects my work, etc.</p>\n<p>Now I'm afraid to guess what colleagues thought about me. I hope they also did not know that okay in the answer to such a question does not mean okay at all :-)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "okay! 22 jule 2022 · english work oh, shoot! just watched the video and realized that i got used to writing ok in morning statuses when asked “how do you feel today”. like, everything is normal with me, i'm alive and doing well, nothing affects my work, etc. now i'm afraid to guess what colleagues thought about me. i hope they also did not know that okay in the answer to such a question does not mean okay at all :-)",
    "tags": [
      "english",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/cookie-jar\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Cookie Jar\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>28 May 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Python</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>The other day, I was working with cookies in one of my scripts. While searching for the optimal solution, I came across an absolutely charming (100% working, by the way) <a href=\"https://stackoverflow.com/questions/13030095/how-to-save-requests-python-cookies-to-a-file\" target=\"_blank\">tip</a> from StackOverflow:</p>\n<blockquote>\n<p>You can get a CookieJar object from the session with session.cookies, and use pickle to store it to a file.</p>\n</blockquote>\n<p>So, literally: keep your cookies in a jar, and to store them, pickle them. The jar with pickled cookies, by the way, can be put on the shelf later.</p>\n<p>How can you not love python after that, huh?</p>\n<p>P.S. While writing this post, I got curious – why pickle and not serialization? So, briefly: <a href=\"https://stackoverflow.com/questions/27324986/pickles-why-are-they-called-that/27325007#27325007\" target=\"_blank\">this is the way</a>.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "cookie jar 28 may 2022 · python the other day, i was working with cookies in one of my scripts. while searching for the optimal solution, i came across an absolutely charming (100% working, by the way) tip from stackoverflow: you can get a cookiejar object from the session with session.cookies, and use pickle to store it to a file. so, literally: keep your cookies in a jar, and to store them, pickle them. the jar with pickled cookies, by the way, can be put on the shelf later. how can you not love python after that, huh? p.s. while writing this post, i got curious – why pickle and not serialization? so, briefly: this is the way .",
    "tags": [
      "python"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/no-more-embedded-tweets\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                No More Embedded Tweets\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>21 Marth 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Blog</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Webdev</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Node.js</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Javascript</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>As soon as I <a href=\"https://kostyanetsky.me/notes/no-more-google-fonts\" target=\"_blank\">removed</a> Google Fonts from my blog, I had to remove embedded tweets as well.</p>\n<p>How did it work before? I want to link a tweet — I simply insert the link to it. The build script replaces it with an HTML block, then Twitter founds this block and replaces it with the text of the tweet (and some useful links as well). This <a href=\"https://github.com/vkostyanetsky/BlogBuilder/commit/c21ef8a7bec10672406e6be57b8e734ba3ac01c5\" target=\"_blank\">commit</a> shows you how it worked.</p>\n<p>How does it work now? You're right, it does not! Twitter is blocked in Russia.</p>\n<p><img alt=\"Well\" src=\"https://kostyanetsky.me/notes/no-more-embedded-tweets/well.jpg\"/></p>\n<p>The solution: I had to screen all the tweets that I once referred to and add them to the notes in the form of pictures with links. Whoever needs the original will turn on VPN and go to Twitter, and the rest, at least, can read the text.</p>\n<p>A few words about the technical side. I was too lazy to screen each tweet manually, so I was thinking about how to automate the process. At first, I came across only services that were ready to solve the problem for some pathetic ten dollars (thanks guys, maybe, one day…), but then I came across the perfect <a href=\"https://github.com/privatenumber/snap-tweet\" target=\"_blank\">tool</a>: a console script for Node.js.</p>\n<p>Nothing that you don't need. Pure functionality. You give a tweet to it. It gives you a picture back:</p>\n<blockquote>\n<p>npx snap-tweet https://twitter.com/PossumEveryHour/status/1506148678461014016</p>\n</blockquote>\n<p>That's all. I want to donate the author, really.</p>\n<p>I thought about attaching snap-tweet to my build script (so that it would be like before: I insert a link to a tweet, and then it generates a picture by itself and puts it where it needs to be). Decided that I'm not gonna do it. Rude violation of KISS, and indeed… There's enough entropy in the world so far. Especially now.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "no more embedded tweets 21 marth 2022 · blog webdev node.js javascript as soon as i removed google fonts from my blog, i had to remove embedded tweets as well. how did it work before? i want to link a tweet — i simply insert the link to it. the build script replaces it with an html block, then twitter founds this block and replaces it with the text of the tweet (and some useful links as well). this commit shows you how it worked. how does it work now? you're right, it does not! twitter is blocked in russia. the solution: i had to screen all the tweets that i once referred to and add them to the notes in the form of pictures with links. whoever needs the original will turn on vpn and go to twitter, and the rest, at least, can read the text. a few words about the technical side. i was too lazy to screen each tweet manually, so i was thinking about how to automate the process. at first, i came across only services that were ready to solve the problem for some pathetic ten dollars (thanks guys, maybe, one day…), but then i came across the perfect tool : a console script for node.js. nothing that you don't need. pure functionality. you give a tweet to it. it gives you a picture back: npx snap-tweet https://twitter.com/possumeveryhour/status/1506148678461014016 that's all. i want to donate the author, really. i thought about attaching snap-tweet to my build script (so that it would be like before: i insert a link to a tweet, and then it generates a picture by itself and puts it where it needs to be). decided that i'm not gonna do it. rude violation of kiss, and indeed… there's enough entropy in the world so far. especially now.",
    "tags": [
      "blog",
      "webdev",
      "nodejs",
      "javascript"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/do-not-confuse\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Do Not Confuse\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>16 Marth 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Code Smell</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Code\" src=\"https://kostyanetsky.me/notes/do-not-confuse/do-not-confuse.png\"/></p>\n<p>If the type of operation is the sale of goods or real estate, then open the common form AdvancesPickFormWithVAT with the parameters defined in the PickParameters structure. The callback is EditPrepaymentOffsetEnd method, defined in the same module; pass it the AdditionalParameters structure. The form needs to be opened so that it locks the whole interface.</p>\n<p>However, if the type of operation is a return to the supplier, then open the general form AdvancesPickFormWithVAT with the parameters defined in the PickParameters structure. The callback is the EditPrepaymentOffsetEnd method, defined in the same module; pass it the AdditionalParameters structure. The form needs to be opened so that it locks the whole interface.</p>\n<p>I hope you won't confuse.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "do not confuse 16 marth 2022 · 1с code smell if the type of operation is the sale of goods or real estate, then open the common form advancespickformwithvat with the parameters defined in the pickparameters structure. the callback is editprepaymentoffsetend method, defined in the same module; pass it the additionalparameters structure. the form needs to be opened so that it locks the whole interface. however, if the type of operation is a return to the supplier, then open the general form advancespickformwithvat with the parameters defined in the pickparameters structure. the callback is the editprepaymentoffsetend method, defined in the same module; pass it the additionalparameters structure. the form needs to be opened so that it locks the whole interface. i hope you won't confuse.",
    "tags": [
      "1c",
      "code-smell"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/no-more-google-fonts\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                No More Google Fonts\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>19 February 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Blog</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Webdev</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><a href=\"https://twitter.com/PixelAmbacht/status/1494272370076536840\" target=\"_blank\"><img alt=\"Tweet\" src=\"https://kostyanetsky.me/notes/no-more-google-fonts/snap-tweet-PixelAmbacht-1494272370076536840.png\"/></a></p>\n<p>A year ago, damn it. Okay, hello everyone! Johnny Slowpoke is here! Today we will throw out Google Fonts from my blog. I used to load the main font (PT Sans) from this service, but it makes almost no sense without cross-domain caching. Frankly speaking, the only point to do this further is if a server on which the site is running is slow, so it is faster to load fonts from Google. </p>\n<p>I host my blog on GitHub servers and have no complaints about performance. So, I'm self-hosting PT Sans now, and you know what? The difference is dramatic. When updating a page before, there was clearly a noticeable delay between loading the page and loading the font. For now, it is barely recognizable. If you have a blog and want to try to self-host fonts — here is a cool <a href=\"https://google-webfonts-helper.herokuapp.com/fonts\" target=\"_blank\">service</a> that solves the problem in a few clicks.</p>\n<p>Don't forget to put a big, nice star on the <a href=\"https://github.com/majodev/google-webfonts-helper\" target=\"_blank\">repository</a>!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "no more google fonts 19 february 2022 · blog webdev a year ago, damn it. okay, hello everyone! johnny slowpoke is here! today we will throw out google fonts from my blog. i used to load the main font (pt sans) from this service, but it makes almost no sense without cross-domain caching. frankly speaking, the only point to do this further is if a server on which the site is running is slow, so it is faster to load fonts from google. i host my blog on github servers and have no complaints about performance. so, i'm self-hosting pt sans now, and you know what? the difference is dramatic. when updating a page before, there was clearly a noticeable delay between loading the page and loading the font. for now, it is barely recognizable. if you have a blog and want to try to self-host fonts — here is a cool service that solves the problem in a few clicks. don't forget to put a big, nice star on the repository !",
    "tags": [
      "blog",
      "webdev"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/totals-of-2021\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Totals of 2021\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>8 February 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>It is a bit late to sum up, isn't it? Well, the previous couple of months have been, um, tight, so I had no actual time  to sit down and think. Now I'm on vacation for 2021 – so no time like the present. I'm writing, like, from the past.</p>\n<p>Write out each achievement doesn't attract me at all. The year definitely turned out to be good: I did a lot of complex work on FirstBit ERP (wrote new modules, rewrote existing ones, crushed bugs, wrote functional and load tests – yes, there were countless things). This had a good effect both on the configuration itself and on the profits of my company. In addition, I passed 1C expert exam and a PostgreSQL professional exam. Hip-hip-hooray.</p>\n<p>There were fails as well. I still feel lazy to jot them down, but the main one is obvious – I became monstrously fat and instead of losing ten kilograms (that was the original plan) – I gained five more.</p>\n<p>Looking back, the root of most of the problems over the past year is this: I focused too much on task flow. They were all interesting in their own way, from a carefully written technical task to challenges like “find a problem in the code using your witcher's instincts”. You do one task, another, a third, a hundredth, and you do not notice that you have ignored almost everything except work. As a result, you get a lot of experience, but the world dries up to the Configurator window and there is no strength to somehow apply this experience. Unhealthy bullshit.</p>\n<p>In short, if you imagine me as a character in some video game, it looks like this: attack and intelligence have grown noticeably over the year, but health, agility, charisma, and almost everything else in general, have dropped. Now I need to do something to deal with this mess.</p>\n<p>You know what? I'll take ten kilometers run for a start.</p>\n<p><a href=\"https://twitter.com/EffinBirds/status/1329575199667347459\" target=\"_blank\"><img alt=\"Tweet\" src=\"https://kostyanetsky.me/notes/totals-of-2021/snap-tweet-EffinBirds-1329575199667347459.png\"/></a></p>\n<p>Maybe, birdie, maybe.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "totals of 2021 8 february 2022 · work it is a bit late to sum up, isn't it? well, the previous couple of months have been, um, tight, so i had no actual time to sit down and think. now i'm on vacation for 2021 – so no time like the present. i'm writing, like, from the past. write out each achievement doesn't attract me at all. the year definitely turned out to be good: i did a lot of complex work on firstbit erp (wrote new modules, rewrote existing ones, crushed bugs, wrote functional and load tests – yes, there were countless things). this had a good effect both on the configuration itself and on the profits of my company. in addition, i passed 1c expert exam and a postgresql professional exam. hip-hip-hooray. there were fails as well. i still feel lazy to jot them down, but the main one is obvious – i became monstrously fat and instead of losing ten kilograms (that was the original plan) – i gained five more. looking back, the root of most of the problems over the past year is this: i focused too much on task flow. they were all interesting in their own way, from a carefully written technical task to challenges like “find a problem in the code using your witcher's instincts”. you do one task, another, a third, a hundredth, and you do not notice that you have ignored almost everything except work. as a result, you get a lot of experience, but the world dries up to the configurator window and there is no strength to somehow apply this experience. unhealthy bullshit. in short, if you imagine me as a character in some video game, it looks like this: attack and intelligence have grown noticeably over the year, but health, agility, charisma, and almost everything else in general, have dropped. now i need to do something to deal with this mess. you know what? i'll take ten kilometers run for a start. maybe, birdie, maybe.",
    "tags": [
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/reuse-carefully\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Reuse Carefully\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>8 February 2022</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I'll tell you about a funny and a little embarrassing case that I took apart in January. The essence in a nutshell: a huge auto-test based on Vanessa, which is intended to check the VAT calculation, falls somewhere near the end.</p>\n<p>I start investigating. First, I look at the screenshots in Allure: OK, the reason is obvious – in one of the documents, the conditional appearance for the field with the VAT amount doesn't work. The test expected it to be unavailable if the VAT rate is zero, but it turned out to be available somehow.</p>\n<p>It's a mess, it needs to be fixed! I look at the condition in the code: well, it locks the field if the VAT rate is in the list of “zero” rates (list of VAT rates whose rate is equal to zero). Everything appears to be simple and logical. What the hell could possibly go wrong here?</p>\n<p><a href=\"https://twitter.com/EffinBirds/status/1489980393675702281\" target=\"_blank\"><img alt=\"Tweet\" src=\"https://kostyanetsky.me/notes/reuse-carefully/snap-tweet-EffinBirds-1489980393675702281.png\"/></a></p>\n<p>Well, I try to reproduce the bug manually. And there, all of a sudden, everything is nice: the conditional appearance works as it should. Floating bug, or what? I run the auto-test again, at the right moment I jump in with the debugger and find some outright garbage: in the list of “zero” rates, besides themselves, there are a bunch of empty links!</p>\n<p>Frankly speaking, I was scratching the back of my head. The document receives this list from the common module with <a href=\"https://gist.github.com/vkostyanetsky/5ec036ee148606aad9caefbc9305bfb0\" target=\"_blank\">this code</a>. An empty ref from here, even theoretically, cannot be obtained. Moreover, the module has the “Reuse Return Values” option ​​enabled, and the function is actually executes once somewhere at the beginning of the test, before all complex data manipulations. So, the test cannot affect it in any way, in theory.</p>\n<p>Is it a dead end? Well, experienced colleagues have probably already guessed everything, but I had to dance around the bug  and even check the <a href=\"https://its.1c.ru/db/v8std/content/724/hdoc\" target=\"_blank\">standard</a>, until got the following: <strong>return values ​​cache in 1C can be changed</strong>. I mean, not by calling <code>RefreshReusableValues​​()</code>, but by changing reusable values directly.</p>\n<p>How? Well, if you get some values ​​from a cached common module, and they are not of a primitive type (string, number, etc.), you will not get the value itself, but a pointer to it somewhere in memory. You write this pointer to a variable and try to change it – you change the cache.</p>\n<p>It's that simple, yes. This is what happened in my case: the form of another document called the method that generates the list of “zero” rates. Having received a list of values, it added an empty ref to it and used it in its logic. Thus, each time this form opens, the list cache contains more and more empty refs, which eventually broke the document at the other end of the configuration.</p>\n<p><a href=\"https://twitter.com/EffinBirds/status/1488165946342662144\" target=\"_blank\"><img alt=\"Tweet\" src=\"https://kostyanetsky.me/notes/reuse-carefully/snap-tweet-EffinBirds-1488165946342662144.png\"/></a></p>\n<p>In a good way, the platform should throw exceptions when developer trying to change the cache, but until this happens, you have to take care yourself. For example, when developing cached modules, return immutable data types from them (FixedStructure instead of Structure, FixedArray instead of Array, and so on). True, this is not a 100% protection: firstly, fixed types are not applicable everywhere, and secondly, even in the latest versions of the SSL, this is far from being done everywhere. Do you know many configurations not based on SSL?</p>\n<p>Sonar also know nothing about the problem, as well as less popular software. No silver bullet, in short – check your code, look at the code of your colleagues and try not to forget about another elegant way to bang ourselves in the foot.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "reuse carefully 8 february 2022 · 1с work i'll tell you about a funny and a little embarrassing case that i took apart in january. the essence in a nutshell: a huge auto-test based on vanessa, which is intended to check the vat calculation, falls somewhere near the end. i start investigating. first, i look at the screenshots in allure: ok, the reason is obvious – in one of the documents, the conditional appearance for the field with the vat amount doesn't work. the test expected it to be unavailable if the vat rate is zero, but it turned out to be available somehow. it's a mess, it needs to be fixed! i look at the condition in the code: well, it locks the field if the vat rate is in the list of “zero” rates (list of vat rates whose rate is equal to zero). everything appears to be simple and logical. what the hell could possibly go wrong here? well, i try to reproduce the bug manually. and there, all of a sudden, everything is nice: the conditional appearance works as it should. floating bug, or what? i run the auto-test again, at the right moment i jump in with the debugger and find some outright garbage: in the list of “zero” rates, besides themselves, there are a bunch of empty links! frankly speaking, i was scratching the back of my head. the document receives this list from the common module with this code . an empty ref from here, even theoretically, cannot be obtained. moreover, the module has the “reuse return values” option ​​enabled, and the function is actually executes once somewhere at the beginning of the test, before all complex data manipulations. so, the test cannot affect it in any way, in theory. is it a dead end? well, experienced colleagues have probably already guessed everything, but i had to dance around the bug and even check the standard , until got the following: return values ​​cache in 1c can be changed . i mean, not by calling refreshreusablevalues​​() , but by changing reusable values directly. how? well, if you get some values ​​from a cached common module, and they are not of a primitive type (string, number, etc.), you will not get the value itself, but a pointer to it somewhere in memory. you write this pointer to a variable and try to change it – you change the cache. it's that simple, yes. this is what happened in my case: the form of another document called the method that generates the list of “zero” rates. having received a list of values, it added an empty ref to it and used it in its logic. thus, each time this form opens, the list cache contains more and more empty refs, which eventually broke the document at the other end of the configuration. in a good way, the platform should throw exceptions when developer trying to change the cache, but until this happens, you have to take care yourself. for example, when developing cached modules, return immutable data types from them (fixedstructure instead of structure, fixedarray instead of array, and so on). true, this is not a 100% protection: firstly, fixed types are not applicable everywhere, and secondly, even in the latest versions of the ssl, this is far from being done everywhere. do you know many configurations not based on ssl? sonar also know nothing about the problem, as well as less popular software. no silver bullet, in short – check your code, look at the code of your colleagues and try not to forget about another elegant way to bang ourselves in the foot.",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/infostart-event-2021\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Infostart Event 2021\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>16 November 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">PostgreSQL</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Last week I visited Moscow for <a href=\"https://event.infostart.ru/2021_msk/\" target=\"_blank\">Infostart Event 2021</a>:</p>\n<ul>\n<li>Listen to numbers of interesting reports — check;</li>\n<li>Meet a few cool people in real life — check;</li>\n<li>Chat with friends — check!</li>\n</ul>\n<p>As a result, I suddenly felt rested despite the flights, stress, and fuss. I think it's because I'm working remotely, so it was really cool to look at so many colleagues in real life (not as a stream of electrons, I mean).</p>\n<p>In order not to <s>get up</s> to fly twice, I passed the <a href=\"https://postgrespro.ru/education/exam/DBA1-10\" target=\"_blank\">first test</a> for PostgreSQL administration in the PostgresPro office. There are three more tests ahead, and the final one does not exist at all yet — but the walking one will master the road, I guess.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "infostart event 2021 16 november 2021 · 1с done postgresql last week i visited moscow for infostart event 2021 : listen to numbers of interesting reports — check; meet a few cool people in real life — check; chat with friends — check! as a result, i suddenly felt rested despite the flights, stress, and fuss. i think it's because i'm working remotely, so it was really cool to look at so many colleagues in real life (not as a stream of electrons, i mean). in order not to get up to fly twice, i passed the first test for postgresql administration in the postgrespro office. there are three more tests ahead, and the final one does not exist at all yet — but the walking one will master the road, i guess.",
    "tags": [
      "1c",
      "done",
      "pgsql"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/matryoshka\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Matryoshka\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>30 October 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>A few days ago, there was a link to 1Ci certificate in the team chat (a colleague passed their junior <a href=\"https://academy.1ci.com/courses/1c-junior-developer\" target=\"_blank\">course</a>). I go over and see no auth form, no errors — I just get a PDF file. Everything is OK, right? Well, then I open the file:</p>\n<p><img alt=\"Error.pdf\" src=\"https://kostyanetsky.me/notes/matryoshka/not-your-certificate.png\"/></p>\n<p>Honestly, I am even delighted. We need to implement this UX in our products: you press, for example, the “print” button for a document, and it gives you a PDF! And inside it — a link to another PDF! And inside it — “entity is not filled”, so go fill.</p>\n<p>You can sell it as a Russian way of dealing with errors. This is, like, for historical reasons! Blame all the damned matryoshkas, and <a href=\"https://en.wikipedia.org/wiki/Koschei\" target=\"_blank\">Koschei</a> with his needle. It is, as you remember, in the egg, and it is in the duck, which is in the rabbit, tucked into the chest, and further along the chain of nesting.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "matryoshka 30 october 2021 · 1с work a few days ago, there was a link to 1ci certificate in the team chat (a colleague passed their junior course ). i go over and see no auth form, no errors — i just get a pdf file. everything is ok, right? well, then i open the file: honestly, i am even delighted. we need to implement this ux in our products: you press, for example, the “print” button for a document, and it gives you a pdf! and inside it — a link to another pdf! and inside it — “entity is not filled”, so go fill. you can sell it as a russian way of dealing with errors. this is, like, for historical reasons! blame all the damned matryoshkas, and koschei with his needle. it is, as you remember, in the egg, and it is in the duck, which is in the rabbit, tucked into the chest, and further along the chain of nesting.",
    "tags": [
      "1c",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/2nd-monitor-and-console\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Second Monitor Management via Console\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>16 October 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Workplace</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I have two monitors. I use the second one during meetings in Zoom or when playing together with friends (in both cases it's convenient to bring the people's cameras there). There are more examples when it's useful, but often the device is simply idle. In order not to be distracted, I decided to turn it off.</p>\n<p>What is the ambush here: it is inconvenient to enable or disable the second monitor via OS (a few clicks, and you need to scroll, and all the time you get confused where to go — in “Screen settings” or “Personalization”). I would like one command, and the command on a hotkey. And, ideally, from the script to rule all this.</p>\n<p>I did not find the script, but I found a ready-made utility — MultiMonitorTool. It's free. Works under the Windows 10 without problems. The commands below turn on / off the 2nd monitor:</p>\n<pre><code>MultiMonitorTool.exe / disable 2\nMultiMonitorTool.exe / enable 2\nMultiMonitorTool.exe / switch 2\n</code></pre>\n<p>For some reason, when you turn on a monitor via enable or switch, it's positioned incorrectly sometimes (for example, before it was turned off, it was on the right, and after turning it on, it was on the left). This is fixable. First, let's save the configuration at the moment when both monitors are on:</p>\n<pre><code>MultiMonitorTool.exe / SaveConfig Monitors.cfg\n</code></pre>\n<p>And then, when you need to turn on the monitor, load the saved config:</p>\n<pre><code>MultiMonitorTool.exe / LoadConfig Monitors.cfg\n</code></pre>\n<p>The utility can do a lot more (for example, one of the commands flips application windows between monitors). Follow the link above for the description.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "second monitor management via console 16 october 2021 · workplace i have two monitors. i use the second one during meetings in zoom or when playing together with friends (in both cases it's convenient to bring the people's cameras there). there are more examples when it's useful, but often the device is simply idle. in order not to be distracted, i decided to turn it off. what is the ambush here: it is inconvenient to enable or disable the second monitor via os (a few clicks, and you need to scroll, and all the time you get confused where to go — in “screen settings” or “personalization”). i would like one command, and the command on a hotkey. and, ideally, from the script to rule all this. i did not find the script, but i found a ready-made utility — multimonitortool. it's free. works under the windows 10 without problems. the commands below turn on / off the 2nd monitor: multimonitortool.exe / disable 2 multimonitortool.exe / enable 2 multimonitortool.exe / switch 2 for some reason, when you turn on a monitor via enable or switch, it's positioned incorrectly sometimes (for example, before it was turned off, it was on the right, and after turning it on, it was on the left). this is fixable. first, let's save the configuration at the moment when both monitors are on: multimonitortool.exe / saveconfig monitors.cfg and then, when you need to turn on the monitor, load the saved config: multimonitortool.exe / loadconfig monitors.cfg the utility can do a lot more (for example, one of the commands flips application windows between monitors). follow the link above for the description.",
    "tags": [
      "workplace"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/top-salaries\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Top Salaries\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>2 October 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <blockquote>\n<p>There is a path to a CSV file. You need to open it, read the header (first line), find the Salary column and display the top 10 salaries.</p>\n<p><em><a href=\"https://t.me/nikitonsky_chat/26402\" target=\"_blank\">Link</a></em></p>\n</blockquote>\n<p>Threw in my <a href=\"https://gist.github.com/tonsky/881d5d8c4fbed818fe2905a7591a91e0#file-vkostyanetsky-1c\" target=\"_blank\">two cents</a> just to complete the picture. If you forget about stability, readability, and performance — you can cut it in half. Here it was obvious from the very beginning that it would be shorter in bash and clearer in Python, so I just wrote it as I was used to.</p>\n<p>What was useful: there are a bunch of examples in other languages ​​in the comments to the post. Frankly speaking, I haven’t come across some of them; it was really curious to look at the syntax and try to understand the way to solve the task.</p>\n<p>In general, the whole story reminded Eugene Stepanishev's <a href=\"https://bolknote.ru/tags/beer99/\" target=\"_blank\">hobby</a> — to write the output of the American “beer song” in all languages ​​in a row. By the way, Tonsky's issue looks as fun for me too — too trivial to seriously compare something on its basis.</p>\n<p>What was funny: for a couple of <a href=\"https://t.me/nikitonsky_pub/201?comment=26703\" target=\"_blank\">colleagues</a>, the 1C code caused such acute vision problems that they considered it necessary to report it :-) I partly understand the desire to assert itself on the stereotype “1C is bad, mkay?”, but it's the wrong case. The preference in syntax is nothing but a matter of taste, and besides it, the solution in 1C is no different from solutions in any other language without a built-in library for parsing CSV.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "top salaries 2 october 2021 · 1с there is a path to a csv file. you need to open it, read the header (first line), find the salary column and display the top 10 salaries. link threw in my two cents just to complete the picture. if you forget about stability, readability, and performance — you can cut it in half. here it was obvious from the very beginning that it would be shorter in bash and clearer in python, so i just wrote it as i was used to. what was useful: there are a bunch of examples in other languages ​​in the comments to the post. frankly speaking, i haven’t come across some of them; it was really curious to look at the syntax and try to understand the way to solve the task. in general, the whole story reminded eugene stepanishev's hobby — to write the output of the american “beer song” in all languages ​​in a row. by the way, tonsky's issue looks as fun for me too — too trivial to seriously compare something on its basis. what was funny: for a couple of colleagues , the 1c code caused such acute vision problems that they considered it necessary to report it :-) i partly understand the desire to assert itself on the stereotype “1c is bad, mkay?”, but it's the wrong case. the preference in syntax is nothing but a matter of taste, and besides it, the solution in 1c is no different from solutions in any other language without a built-in library for parsing csv.",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/build-on-github\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Building The Blog on GitHub\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>29 September 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Blog</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>For the last year this site has been working on a simple platform: statics, GitHub and my domain. All the pages were pre-generated and placed in a GitHub's <a href=\"https://github.com/vkostyanetsky/kostyanetsky.me-static\" target=\"_blank\">repository</a> with <a href=\"https://pages.github.com/\" target=\"_blank\">GitHub Pages</a> enabled.</p>\n<p>I collected statics using a script. It was working with a list of text files, pedantically arranged in folders. The script rummaged through them and generated HTML files. Then I manually pushed them to the repository.</p>\n<p>This scheme worked well, but the number of clicks annoyed me. Here is the script pull, and there is the script pull, and then you have to tinker with the git. I wanted it to be simpler.</p>\n<p>At some point, I figured out that not only the deployment of statics, but also the assembly can be shifted onto the shoulders of GitHub. I put together some thoughts and added two more repositories:</p>\n<ol>\n<li>A <a href=\"https://github.com/vkostyanetsky/kostyanetsky.me\" target=\"_blank\">repository</a> of initial data. Here I put the content of the site: the text files and a bit of metadata (page titles, dates of pages creation, tags for notes, and so on).</li>\n<li>A <a href=\"https://github.com/vkostyanetsky/BlogBuilder\" target=\"_blank\">repository</a> of the script for generating statics. In addition to the script itself, I put various assets here (icons, styles, manifests — in general, everything that doesn't need to be generated every time, but you have to “put” it next to the resulting HTML).</li>\n</ol>\n<p>Then I wrote an <a href=\"https://github.com/vkostyanetsky/kostyanetsky.me/blob/main/.github/workflows/main.yml\" target=\"_blank\">action</a> that wakes up with every push to the repository with the initial data. Shortly, its logic:</p>\n<ol>\n<li>Clone the repository with statics and the repository with the generating script;</li>\n<li>Update the repository with statics using the generating script;</li>\n<li>Push changes of the repository with static to the main branch;</li>\n<li>Notify the owner (me) via Telegram.</li>\n</ol>\n<p>Voilà! Now, whenever the repository with the original data changes, the GitHub immediately (well, as soon as possible — within a minute) updates the repository with the site and deploys it via GitHub Pages. A bonus is a web interface to manage the site (in fact, the GitHub site). No Code. :-)</p>\n<p>While I'm at it, I added links for editing pages directly to the site (the pencil icon in the upper-right corner). This is intended as a convenience for me, but anyone who finds a typo can send a PR. Thank you in advance!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "building the blog on github 29 september 2021 · blog done for the last year this site has been working on a simple platform: statics, github and my domain. all the pages were pre-generated and placed in a github's repository with github pages enabled. i collected statics using a script. it was working with a list of text files, pedantically arranged in folders. the script rummaged through them and generated html files. then i manually pushed them to the repository. this scheme worked well, but the number of clicks annoyed me. here is the script pull, and there is the script pull, and then you have to tinker with the git. i wanted it to be simpler. at some point, i figured out that not only the deployment of statics, but also the assembly can be shifted onto the shoulders of github. i put together some thoughts and added two more repositories: a repository of initial data. here i put the content of the site: the text files and a bit of metadata (page titles, dates of pages creation, tags for notes, and so on). a repository of the script for generating statics. in addition to the script itself, i put various assets here (icons, styles, manifests — in general, everything that doesn't need to be generated every time, but you have to “put” it next to the resulting html). then i wrote an action that wakes up with every push to the repository with the initial data. shortly, its logic: clone the repository with statics and the repository with the generating script; update the repository with statics using the generating script; push changes of the repository with static to the main branch; notify the owner (me) via telegram. voilà! now, whenever the repository with the original data changes, the github immediately (well, as soon as possible — within a minute) updates the repository with the site and deploys it via github pages. a bonus is a web interface to manage the site (in fact, the github site). no code. :-) while i'm at it, i added links for editing pages directly to the site (the pencil icon in the upper-right corner). this is intended as a convenience for me, but anyone who finds a typo can send a pr. thank you in advance!",
    "tags": [
      "blog",
      "done"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/diablo\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Diablo\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>22 September 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Videogames</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <iframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https://www.youtube.com/embed/kVd6qeWoAxg\" width=\"560\"></iframe>\n<p>The nice episode of the “We Are Doomed” IT podcast about developer burnout. No insights, but you can hear something useful for yourself. I liked the analogy with video games, somewhere close to the middle:</p>\n<blockquote>\n<p>There was such a game — Diablo. RPG, all sorts of spells, you know. A character has mana and health, and when you have no mana to cast… Ha, I sound like a nerd! Well, nevermind. Briefly speaking, when you have no mana to cast, it's taken from your health.</p>\n<p><em>— Doctor Cat</em></p>\n</blockquote>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "diablo 22 september 2021 · work videogames the nice episode of the “we are doomed” it podcast about developer burnout. no insights, but you can hear something useful for yourself. i liked the analogy with video games, somewhere close to the middle: there was such a game — diablo. rpg, all sorts of spells, you know. a character has mana and health, and when you have no mana to cast… ha, i sound like a nerd! well, nevermind. briefly speaking, when you have no mana to cast, it's taken from your health. — doctor cat",
    "tags": [
      "work",
      "videogames"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/hammer-and-nails\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Hammer & Nails\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>15 September 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Code Smell</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I was developing payment documents in our configuration last week and came across an incredibly redundant solution to a primitive problem. Sorry, I can't keep to myself.</p>\n<p>Just imagine: you have a document, which contains several tabular sections. Each of them has a comment field. You make a print form for this document; if at least one row of any TS contains a comment — you need to use one template 1, if there are no comments — template 2.</p>\n<p>The task is pretty primitive, isn't it? All of us have done something like this a million times. Just read the selection, use IsBlankString() on the comment field and load the appropriate template. Coffee time!</p>\n<p>However, instead of a short cycle, I saw this:</p>\n<script src=\"https://gist.github.com/vkostyanetsky/e870d5bb3d2f23d93f3d17001eaef59b.js\">Gist</script>\n<p>There is a chain of queries, in the lowest of which we scan all the TS (which, I remind you, we just raked out for printing). We are looking for comments in them, then we group the result several times and return it to the script.</p>\n<p>Well, I'm not even talking about the load on the DBMS (I would venture to guess that this trick doesn't give a noticeable effect — after all, the selection is going to be small). It's just… Well… Checking a selection of rows is, like, five lines of code. Clear, simple, short, Sonar has no room to swear. How could you give birth to this? Because of great love for queries?</p>\n<p>You know what? I bet that it's the correct answer. I can almost see this programmer, who has just mastered the query language more or less tolerably. He is in the absolute delight of new opportunities, so… If all you have is a hammer, everything around looks like nails.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "hammer & nails 15 september 2021 · 1с work code smell i was developing payment documents in our configuration last week and came across an incredibly redundant solution to a primitive problem. sorry, i can't keep to myself. just imagine: you have a document, which contains several tabular sections. each of them has a comment field. you make a print form for this document; if at least one row of any ts contains a comment — you need to use one template 1, if there are no comments — template 2. the task is pretty primitive, isn't it? all of us have done something like this a million times. just read the selection, use isblankstring() on the comment field and load the appropriate template. coffee time! however, instead of a short cycle, i saw this: there is a chain of queries, in the lowest of which we scan all the ts (which, i remind you, we just raked out for printing). we are looking for comments in them, then we group the result several times and return it to the script. well, i'm not even talking about the load on the dbms (i would venture to guess that this trick doesn't give a noticeable effect — after all, the selection is going to be small). it's just… well… checking a selection of rows is, like, five lines of code. clear, simple, short, sonar has no room to swear. how could you give birth to this? because of great love for queries? you know what? i bet that it's the correct answer. i can almost see this programmer, who has just mastered the query language more or less tolerably. he is in the absolute delight of new opportunities, so… if all you have is a hammer, everything around looks like nails.",
    "tags": [
      "1c",
      "work",
      "code-smell"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/no-comment\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                No Comment\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>8 September 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Code Smell</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I did not notice when I gave up the habit of pedantically commenting on every method with which I have to work. This practice has some clever name for sure, but I don't care, to be honest. I mean the style when a description is added to every meaningful block of code, like this:</p>\n<script src=\"https://gist.github.com/vkostyanetsky/afae4dee09d639f34156d6c02b29c2a5.js\">Gist</script>\n<p>The meaning here is simple: when you dig in some dense legacy and run back and forth between chaotically scattered, big procedures — it is rather difficult to keep the logic of each of them in your head. The next cup of coffee will wash everything away. Therefore, such notes greatly speed up orientation on the ground, and the more time passes between approaches to the code, the more noticeable the effect.</p>\n<p>However, at some point it became clear that this know-how is just a crutch supporting the frankly crappy code design. If you have a long procedure or function - take a breath, sit down and cut the fatty one into smaller methods. You will save both time and nerves, and you will figure out the code faster, and you will delight SonarCube.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "no comment 8 september 2021 · 1с code smell i did not notice when i gave up the habit of pedantically commenting on every method with which i have to work. this practice has some clever name for sure, but i don't care, to be honest. i mean the style when a description is added to every meaningful block of code, like this: the meaning here is simple: when you dig in some dense legacy and run back and forth between chaotically scattered, big procedures — it is rather difficult to keep the logic of each of them in your head. the next cup of coffee will wash everything away. therefore, such notes greatly speed up orientation on the ground, and the more time passes between approaches to the code, the more noticeable the effect. however, at some point it became clear that this know-how is just a crutch supporting the frankly crappy code design. if you have a long procedure or function - take a breath, sit down and cut the fatty one into smaller methods. you will save both time and nerves, and you will figure out the code faster, and you will delight sonarcube.",
    "tags": [
      "1c",
      "code-smell"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/rclone-abuser\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                A Script to Sync With NAS\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>7 June 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Done</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Python</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Workplace</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I posted on GitHub a Python <a href=\"https://github.com/vkostyanetsky/RCloneAbuser\" target=\"_blank\">script</a> which I use to sync files between my PC and a NAS. I have a Synology DS220j; a lot of software comes with it, including a backup utility. However, it seems to have been made for show only: the program began to fail even at the setup stage, so I lost confidence in it pretty fast.</p>\n<p>I suffered with the problem for some time and eventually returned to the good old <a href=\"https://rclone.org\" target=\"_blank\">rclone</a>, which has only two problems for me. Firstly, I can't normally connect to an SMB share: yes, the login and password can be saved in Windows and rclone will use them, but OS will forget it as soon as possible. I got out of the situation by connecting my NAS as an external drive.</p>\n<p>Secondly, I had many files and folders to sync: a directory here, a directory there, a config from there, a profile from here… In order not to produce spaghetti code, I wrote a simple script that takes sources and receivers from a config file, and then executes rclone for each pair.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "a script to sync with nas 7 june 2021 · done python workplace i posted on github a python script which i use to sync files between my pc and a nas. i have a synology ds220j; a lot of software comes with it, including a backup utility. however, it seems to have been made for show only: the program began to fail even at the setup stage, so i lost confidence in it pretty fast. i suffered with the problem for some time and eventually returned to the good old rclone , which has only two problems for me. firstly, i can't normally connect to an smb share: yes, the login and password can be saved in windows and rclone will use them, but os will forget it as soon as possible. i got out of the situation by connecting my nas as an external drive. secondly, i had many files and folders to sync: a directory here, a directory there, a config from there, a profile from here… in order not to produce spaghetti code, i wrote a simple script that takes sources and receivers from a config file, and then executes rclone for each pair.",
    "tags": [
      "done",
      "python",
      "workplace"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                The Date Literal Problem During Totals Recalculation\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>6 February 2021</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>So, during a routine totals recalculation from the Configurator, we suddenly got the error: \"the year in the Date literal exceeds 3999\". Which means there's a date somewhere in the database — or trying to get there — that is beyond the maximum 1C can handle: 31.12.3999 23:59:59.</p>\n<p><img alt=\"Exception\" src=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999/excp.png\"/></p>\n<p>Alright. What do we do with that?</p>\n<p>The main thing is to identify the exact table that contains the bad dates. Since the error showed up during totals recalculation, the obvious place to look is the registers. Open the standard totals management tool, start recalculation, and <a href=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999/totals.png\" target=\"_blank\">you'll get</a> the name of the register the platform trips over.</p>\n<p>Another approach — more proper, methodologically speaking — is to enable tech log collection (<code>SDBL</code>, <code>EXCP</code>, and <code>EXCPCNTX</code>) and get a log that looks roughly like <a href=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999/excp.log\" target=\"_blank\">this</a>. In that log, find the <code>EXCP</code> event, and right before it the <code>SDBL</code> event. That <code>SDBL</code> entry contains the SQL query that caused the crash. In its text, you'll see the table name you need (<code>AccumRgTn11530</code>). The corresponding configuration object name can be pulled out with pretty much any utility built around <code>GetDBStorageStructureInfo()</code>.</p>\n<p>One way or another, you end up with the register name. Open its form, sort by period, and you'll quickly get to the <a href=\"https://kostyanetsky.me/notes/date-literal-exceeds-3999/entries.png\" target=\"_blank\">bad entries</a>. Then the job is to inspect the documents that created those records, fix the root cause, and repost the documents. If totals recalculation is still broken after that, then either this is not the only table with broken dates, or those dates have already spread somewhere beyond the records table.</p>\n<p>For example, I once had a case where fixing the records was not enough, because records with invalid dates were still sitting in the turnover table. The platform itself could not remove them, but the database was small enough that I could get away with some restructuring tricks. I pulled the following stunt: turned off the \"Use in totals\" flag for all register dimensions and applied the changes; then turned it back on and recalculated totals again. As a result, the register's turnover table was physically dropped, then recreated and filled from scratch — this time without dates from the distant future.</p>\n<p>As a last resort, you could delete the bad records with direct SQL queries (<code>DELETE</code> or even <code>TRUNCATE</code>). But first, that violates the platform vendor's license agreement, and second, it's risky: it's very easy to remove something important and not notice until later. So I would, uh, not recommend trying that at home.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "the date literal problem during totals recalculation 6 february 2021 · 1с so, during a routine totals recalculation from the configurator, we suddenly got the error: \"the year in the date literal exceeds 3999\". which means there's a date somewhere in the database — or trying to get there — that is beyond the maximum 1c can handle: 31.12.3999 23:59:59. alright. what do we do with that? the main thing is to identify the exact table that contains the bad dates. since the error showed up during totals recalculation, the obvious place to look is the registers. open the standard totals management tool, start recalculation, and you'll get the name of the register the platform trips over. another approach — more proper, methodologically speaking — is to enable tech log collection ( sdbl , excp , and excpcntx ) and get a log that looks roughly like this . in that log, find the excp event, and right before it the sdbl event. that sdbl entry contains the sql query that caused the crash. in its text, you'll see the table name you need ( accumrgtn11530 ). the corresponding configuration object name can be pulled out with pretty much any utility built around getdbstoragestructureinfo() . one way or another, you end up with the register name. open its form, sort by period, and you'll quickly get to the bad entries . then the job is to inspect the documents that created those records, fix the root cause, and repost the documents. if totals recalculation is still broken after that, then either this is not the only table with broken dates, or those dates have already spread somewhere beyond the records table. for example, i once had a case where fixing the records was not enough, because records with invalid dates were still sitting in the turnover table. the platform itself could not remove them, but the database was small enough that i could get away with some restructuring tricks. i pulled the following stunt: turned off the \"use in totals\" flag for all register dimensions and applied the changes; then turned it back on and recalculated totals again. as a result, the register's turnover table was physically dropped, then recreated and filled from scratch — this time without dates from the distant future. as a last resort, you could delete the bad records with direct sql queries ( delete or even truncate ). but first, that violates the platform vendor's license agreement, and second, it's risky: it's very easy to remove something important and not notice until later. so i would, uh, not recommend trying that at home.",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/nerdview\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Nerd View\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>19 October 2020</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Family</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"A chat with my daughter\" src=\"https://kostyanetsky.me/notes/nerdview/telegram.png\"/></p>\n<p>On the screenshot above my little one is just letting me know where she is: walking down the street, at the school, at a playground. It's not her fault that I have a sort of nerd view: when I look at this chat I see nothing but code on Gherkin, which is just a bit broken. A little patch here and there and it will be fine :-)</p>\n<pre><code>And I exit home\nThen I enter school\nAnd I exit school\nThen I gonna swing\n</code></pre>\n<p>We use Gherkin to write our autotests for <a href=\"https://github.com/Pr-Mex/vanessa-automation\" target=\"_blank\">Vanessa Automation</a>. I can't say I've made very many of them, especially in comparison with some of my colleagues… Well, it seems like I've made them enough to twist the reality a few.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "nerd view 19 october 2020 · 1с family work on the screenshot above my little one is just letting me know where she is: walking down the street, at the school, at a playground. it's not her fault that i have a sort of nerd view: when i look at this chat i see nothing but code on gherkin, which is just a bit broken. a little patch here and there and it will be fine :-) and i exit home then i enter school and i exit school then i gonna swing we use gherkin to write our autotests for vanessa automation . i can't say i've made very many of them, especially in comparison with some of my colleagues… well, it seems like i've made them enough to twist the reality a few.",
    "tags": [
      "1c",
      "family",
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/ninth-wave\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                The Ninth Wave\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>9 Marth 2020</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Yesterday morning, I was buying gifts for my women. While a florist was makings bouquets for me, we had a small talk and I suddenly caught her eye. She was looking at the growing crowd of customers with calmness and a clearly readable shadow of doom. This is probably how sailors looking at a surging wave which is about to bury their boat :-)</p>\n<p>People outside the flower industry grin sometimes — they say, eight of March is such a magical holiday for all the florists who make a fortune in ten hours. Well, income is really good these days, but literally anybody who has ever worked in this sphere more often associates the holiday (and a couple of days before it, by the way) with a monstrous strain on health and nerves.</p>\n<p>I can say that I got off cheaply: was just deploying and servicing some IT of a local net of flower shops, nothing more (by the way, I want to proudly <a href=\"http://rosetta.florist/\" target=\"_blank\">recommend</a> my former colleagues!). Nonetheless, the smell of flowers caused me Vietnam syndrome for a long time :-)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "the ninth wave 9 marth 2020 · meanwhile yesterday morning, i was buying gifts for my women. while a florist was makings bouquets for me, we had a small talk and i suddenly caught her eye. she was looking at the growing crowd of customers with calmness and a clearly readable shadow of doom. this is probably how sailors looking at a surging wave which is about to bury their boat :-) people outside the flower industry grin sometimes — they say, eight of march is such a magical holiday for all the florists who make a fortune in ten hours. well, income is really good these days, but literally anybody who has ever worked in this sphere more often associates the holiday (and a couple of days before it, by the way) with a monstrous strain on health and nerves. i can say that i got off cheaply: was just deploying and servicing some it of a local net of flower shops, nothing more (by the way, i want to proudly recommend my former colleagues!). nonetheless, the smell of flowers caused me vietnam syndrome for a long time :-)",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/snowboard-effect\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Snowboard Effect\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>1 December 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Sport</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><a href=\"https://kostyanetsky.me/notes/snowboard-effect/standing.jpg\" target=\"_blank\"><img alt=\"Standing!\" src=\"https://kostyanetsky.me/notes/snowboard-effect/standing-thumbnail.jpg\"/></a> <a href=\"https://kostyanetsky.me/notes/snowboard-effect/sitting.jpg\" target=\"_blank\"><img alt=\"Sitting!\" src=\"https://kostyanetsky.me/notes/snowboard-effect/sitting-thumbnail.jpg\"/></a></p>\n<p>You're sliding down the side of a mountain and trying to feel an equilibrium point, for the hundredth time. However, your nagging back is the only thing you're able to feel, and the Vaas speech from Far Cry 3 isn't going out of your mind.</p>\n<blockquote>\n<p>Did I ever tell you what the definition of insanity is? Insanity is doing the exact… Same fucking thing… Over and over again expecting… Shit to change… That. Is. Crazy.</p>\n<p><em>― Vaas Montenegro, Far Cry 3</em></p>\n</blockquote>\n<p>Surprisingly, you're certainly satisfied with the trip when it's done.</p>\n<p>There's some kind of magic in it.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "snowboard effect 1 december 2018 · sport you're sliding down the side of a mountain and trying to feel an equilibrium point, for the hundredth time. however, your nagging back is the only thing you're able to feel, and the vaas speech from far cry 3 isn't going out of your mind. did i ever tell you what the definition of insanity is? insanity is doing the exact… same fucking thing… over and over again expecting… shit to change… that. is. crazy. ― vaas montenegro, far cry 3 surprisingly, you're certainly satisfied with the trip when it's done. there's some kind of magic in it.",
    "tags": [
      "sport"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/non-judgmental-attitude\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                A Principle of Non-Judgemental Attitude\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>2 September 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>There is a good <a href=\"http://maximilyahov.ru/blog/all/mne-ok/\" target=\"_blank\">note</a> from Maxim Ilyahov about a way of analyzing something which doesn't concern you but annoys you anyway. It's reminded me of an American principle of non-judgemental attitude which I read about a couple of years ago. As for me, it uses different words to make the same point.</p>\n<p>By the way, this principle presents in Russia too — there is even a famous adage “don't be judgemental so you won't be judged”. What a pity for us that it isn't so widespread yet.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "a principle of non-judgemental attitude 2 september 2018 · meanwhile there is a good note from maxim ilyahov about a way of analyzing something which doesn't concern you but annoys you anyway. it's reminded me of an american principle of non-judgemental attitude which i read about a couple of years ago. as for me, it uses different words to make the same point. by the way, this principle presents in russia too — there is even a famous adage “don't be judgemental so you won't be judged”. what a pity for us that it isn't so widespread yet.",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/jaina\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Beware the Daughter of the Sea\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>29 Jule 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Videogames</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Natalia O'Shea has sung a Jaina's song in a Russian version of a trailer for a future update of World of Warcraft. As for me, she's extraordinary good in it — I mean, she knows how to make a proper mood and season a speech with steel.</p>\n<iframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https://www.youtube.com/embed/5j-S448XC8k\" width=\"560\"></iframe>\n<p>By the way, speaking about her and “Melnitsa” as a whole thing — all of their most powerful songs are about something particular. We were at a concert dedicated to the “Luciferase” release and it's hard to compare, seriously. Perhaps, I didn't know something essential to understanding a context, but sometimes it was even barely possible to figure out a story which I was hearing.</p>\n<p>Just watch a video I posted under. You don't need to know something special about the World of Warcraft universe, do you? For example, I haven't played WoW and not planning to do it, but the end of the song literally creeps me out :-)</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "beware the daughter of the sea 29 jule 2018 · videogames natalia o'shea has sung a jaina's song in a russian version of a trailer for a future update of world of warcraft. as for me, she's extraordinary good in it — i mean, she knows how to make a proper mood and season a speech with steel. by the way, speaking about her and “melnitsa” as a whole thing — all of their most powerful songs are about something particular. we were at a concert dedicated to the “luciferase” release and it's hard to compare, seriously. perhaps, i didn't know something essential to understanding a context, but sometimes it was even barely possible to figure out a story which i was hearing. just watch a video i posted under. you don't need to know something special about the world of warcraft universe, do you? for example, i haven't played wow and not planning to do it, but the end of the song literally creeps me out :-)",
    "tags": [
      "videogames"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/hpmor-printing\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                HPMoR Printing\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>22 Jule 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Books</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Perhaps you already know that Eliezer Yudkowsky's “Methods of Rationality” in Russian is going to be published as a standard book (thanks to “Evolution” and other information partners), but I still want to remind again.</p>\n<p>The book is really good, I had <a href=\"https://kostyanetsky.me/notes/hpmor\" target=\"_blank\">written</a> about it a couple of years ago. It teaches useful things in such an attractive way that it's really hard to stop reading. The whole text is in public access, but if you want a hard copy — you can <a href=\"https://planeta.ru/campaigns/hpmor\" target=\"_blank\">make a request</a> now.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "hpmor printing 22 jule 2018 · books perhaps you already know that eliezer yudkowsky's “methods of rationality” in russian is going to be published as a standard book (thanks to “evolution” and other information partners), but i still want to remind again. the book is really good, i had written about it a couple of years ago. it teaches useful things in such an attractive way that it's really hard to stop reading. the whole text is in public access, but if you want a hard copy — you can make a request now.",
    "tags": [
      "books"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/fce-results\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                FCE Results\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>15 Jule 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Books</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Cambridge just sent me results of my FCE exam in June and — dramatic drum roll — I passed it! According to the statement of results, I made a bunch of mistakes in writing tasks but particularly took it out during a Speaking test. It's a pity that examiners don't give comments and reasons so it's hard to estimate the results properly; however, it's quite clear what to do next :) My English teacher said that Cambridge used to provide an overall score only earlier and it sounded like “take it any way you want, dear pretenders”.</p>\n<p>Well, I guess I should begin my preparation for CAE in the next year.</p>\n<p>Speaking about languages, I remembered Feynman with his famous “Surely You're Joking”. Among many things, he told that he learned to play on a frigideira when he lived in Brazil and had reached so high level of skill that he served as a model for local musicians.</p>\n<blockquote>\n<p>My theory is that it's like a person who speaks French who comes to America. At first they're making all kinds of mistakes, and you can hardly understand them. Then they keep on practicing until they speak rather well, and you find there's a delightful twist to their way of speaking their accent is rather nice, and you love to listen to it.</p>\n<p><em>― Richard Feynman, ”Surely You're Joking, Mr. Feynman!”</em></p>\n</blockquote>\n<p>As for me, there is a lot of efforts between “all kinds of mistakes” and “love to listen”, but it is such a good synopsis. Working on it!</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "fce results 15 jule 2018 · books english cambridge just sent me results of my fce exam in june and — dramatic drum roll — i passed it! according to the statement of results, i made a bunch of mistakes in writing tasks but particularly took it out during a speaking test. it's a pity that examiners don't give comments and reasons so it's hard to estimate the results properly; however, it's quite clear what to do next :) my english teacher said that cambridge used to provide an overall score only earlier and it sounded like “take it any way you want, dear pretenders”. well, i guess i should begin my preparation for cae in the next year. speaking about languages, i remembered feynman with his famous “surely you're joking”. among many things, he told that he learned to play on a frigideira when he lived in brazil and had reached so high level of skill that he served as a model for local musicians. my theory is that it's like a person who speaks french who comes to america. at first they're making all kinds of mistakes, and you can hardly understand them. then they keep on practicing until they speak rather well, and you find there's a delightful twist to their way of speaking their accent is rather nice, and you love to listen to it. ― richard feynman, ”surely you're joking, mr. feynman!” as for me, there is a lot of efforts between “all kinds of mistakes” and “love to listen”, but it is such a good synopsis. working on it!",
    "tags": [
      "books",
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/message-to-user\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Message to User\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>30 April 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>1C:Enterprise has a convenient and accustomed method of showing information for a user — it's a UserMessage object. It outputs messages at the bottom of a form and suddenly it's a potential problem. The thing is, most users don't look at it. It's like: well, I see no critical errors for now so there is nothing to worry about.</p>\n<p>Therefore, in case an error happens or you just have an essential message, you should show it through a dialogue window — by the ShowQueryBox() method or a ShowMessageBox() method, for example. Otherwise, a user may not notice a problem and continue to work in spite of some action might not be executed or might be executed in a wrong way. The issue will come out later and you will be rightfully blamed for it.</p>\n<p>In addition, using of a UserMessage object should be prohibited in case of small service forms. Yes, in fact, it's hard to overlook a text if a window is small, but that's a different matter: the messages below literally <a href=\"https://kostyanetsky.me/notes/message-to-user/en.png\" target=\"_blank\">devour</a> form's workspace and it becomes hard to work with.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "message to user 30 april 2018 · 1с 1c:enterprise has a convenient and accustomed method of showing information for a user — it's a usermessage object. it outputs messages at the bottom of a form and suddenly it's a potential problem. the thing is, most users don't look at it. it's like: well, i see no critical errors for now so there is nothing to worry about. therefore, in case an error happens or you just have an essential message, you should show it through a dialogue window — by the showquerybox() method or a showmessagebox() method, for example. otherwise, a user may not notice a problem and continue to work in spite of some action might not be executed or might be executed in a wrong way. the issue will come out later and you will be rightfully blamed for it. in addition, using of a usermessage object should be prohibited in case of small service forms. yes, in fact, it's hard to overlook a text if a window is small, but that's a different matter: the messages below literally devour form's workspace and it becomes hard to work with.",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/these-nasty-smartphones\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                These Nasty Smartphones\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>31 Marth 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Meanwhile</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Society\" src=\"https://kostyanetsky.me/notes/these-nasty-smartphones/drawing.png\"/></p>\n<p>The artist is <a href=\"https://www.patreon.com/adamtots\" target=\"_blank\">Adam Ellis</a>.</p>\n<p>As for me, it's a great illustration for an everlasting moan “why do you always stare at your smartphone blah blah blah”. A reason is quite simple: people have their friends, books, podcasts, games, and YouTube in their smartphones. It's much more fun than a frowning man or a grim women with guru syndrome next to them, for example.</p>\n<p>The same is true of children. Social networks are full of arguments about it, but a reason is still the same: if a teenager flips through pictures in his phone in front of you, you bore him and a problem obviously is you.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "these nasty smartphones 31 marth 2018 · meanwhile the artist is adam ellis . as for me, it's a great illustration for an everlasting moan “why do you always stare at your smartphone blah blah blah”. a reason is quite simple: people have their friends, books, podcasts, games, and youtube in their smartphones. it's much more fun than a frowning man or a grim women with guru syndrome next to them, for example. the same is true of children. social networks are full of arguments about it, but a reason is still the same: if a teenager flips through pictures in his phone in front of you, you bore him and a problem obviously is you.",
    "tags": [
      "meanwhile"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/double-i\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Double “i”\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>9 Marth 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I was trying to understand how to transliterate my surname properly yesterday. Ministry of Foreign Affairs says it should be written as “Kostianetskii” in English — with double “i” at the end. It's the quite rare combination: “skiing” is the only frequency word that I'm able to remember.</p>\n<p>It caused my curiosity and I googled it. The possible reason I came across is funny: cursive writing! Double “i” looks well only on a computer screen but it suddenly turns into “u” when you try to write it on paper.</p>\n<p>More details are <a href=\"https://spellingisnotcrazy.weebly.com/blog/category/the-letter-i\" target=\"_blank\">here</a>.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "double “i” 9 marth 2018 · english i was trying to understand how to transliterate my surname properly yesterday. ministry of foreign affairs says it should be written as “kostianetskii” in english — with double “i” at the end. it's the quite rare combination: “skiing” is the only frequency word that i'm able to remember. it caused my curiosity and i googled it. the possible reason i came across is funny: cursive writing! double “i” looks well only on a computer screen but it suddenly turns into “u” when you try to write it on paper. more details are here .",
    "tags": [
      "english"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/different-sides-of-one-coin\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Different Sides of One Coin\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>5 Marth 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Work</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p><img alt=\"Hi!\" src=\"https://kostyanetsky.me/notes/different-sides-of-one-coin/en.png\"/></p>\n<p>Feedback is one of the coolest things in my work. It's not my first year of programming and I've written a lot of tools, mechanics and interfaces. However, ever complicated mechanism working as it should is… I don't know. It's like hearing “yes” on a graduation party, again and again :-)</p>\n<p>It partially compensates another side of the coin. I mean a case when you are trying to understand one hundred levels of some application's abstraction for the hundredth time, again and again, through a lot of mistakes. Meanwhile, it's 2 a.m. already and coffee had replaced blood in your veins ages ago.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "different sides of one coin 5 marth 2018 · work feedback is one of the coolest things in my work. it's not my first year of programming and i've written a lot of tools, mechanics and interfaces. however, ever complicated mechanism working as it should is… i don't know. it's like hearing “yes” on a graduation party, again and again :-) it partially compensates another side of the coin. i mean a case when you are trying to understand one hundred levels of some application's abstraction for the hundredth time, again and again, through a lot of mistakes. meanwhile, it's 2 a.m. already and coffee had replaced blood in your veins ages ago.",
    "tags": [
      "work"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/why-so-serious\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Why So Serious?\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>17 February 2018</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">1С</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Sometimes when you developing some complex mechanic you don't have enough time time for the adequate naming of variables. As a result, there is a lot of mysterious WhatTheHeck, ApplyMagic and bunch of other LivingFailures.</p>\n<p>It's what you should avoid despite it looks funny. You'll rewrite code you've written month or two later and it will be hard to shame its author because it is you.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "why so serious? 17 february 2018 · 1с sometimes when you developing some complex mechanic you don't have enough time time for the adequate naming of variables. as a result, there is a lot of mysterious whattheheck, applymagic and bunch of other livingfailures. it's what you should avoid despite it looks funny. you'll rewrite code you've written month or two later and it will be hard to shame its author because it is you.",
    "tags": [
      "1c"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/sebby-x-player\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                Sebby x Player\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>14 August 2017</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">English</span>\n                </div>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Videogames</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>I have <a href=\"https://acomics.ru/~sebby-x-player\" target=\"_blank\">translated</a> Stardew Valley fan manga on a wave of enthusiasm at the end of July (SV is an enormously addictive farmer simulator which <a href=\"https://store.steampowered.com/app/413150/Stardew_Valley/\" target=\"_blank\">went out</a> a couple of years ago).</p>\n<p>It was an amusing experience. Firstly, an author of the manga is Chinese and her work was already translated from Chinese to English. I'm not sure what was the bigger problem — cultural differences or language skills, but several frames were a bit difficult to understand what's going on. Secondly, I've figured out that it's a real challenge to pick proper Russian words and not to get something like a quote from an official government's letter in the end.</p>\n<p>So, a part of sense had lost during the process, I guess, although I tried to keep everything I could and even had a word with the author in order to solve the most problematic cases. It was quite funny — I don't know Chinese, she doesn't know Russian, so our a bit poor English was the only way to understand each other.</p>\n<p>Something could have been translated better, I suppose, and several pictures definitely could have been changed more accurately. But you know what? Hell it out, perfection is a cruel mistress and I like the result yet. Yeah, there is no big deal or something like it — a drawing style is quite common, a plot has no significant differences with the game, but… I don't know. Perhaps, visual novels made a too sentimental son of a bitch out of me :-)</p>\n<p>Thanks to <a href=\"https://vk.com/id54890849\" target=\"_blank\">Alice</a> for helping me with image processing, <a href=\"https://twitter.com/amish77kin\" target=\"_blank\">Lem</a> for helping me with the translation and <a href=\"https://vk.com/mahrunteka\" target=\"_blank\">Marika</a> for the inspiration. And, sure, thanks to <a href=\"https://curayukie.deviantart.com\" target=\"_blank\">Quantus</a> for the manga.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "sebby x player 14 august 2017 · english videogames i have translated stardew valley fan manga on a wave of enthusiasm at the end of july (sv is an enormously addictive farmer simulator which went out a couple of years ago). it was an amusing experience. firstly, an author of the manga is chinese and her work was already translated from chinese to english. i'm not sure what was the bigger problem — cultural differences or language skills, but several frames were a bit difficult to understand what's going on. secondly, i've figured out that it's a real challenge to pick proper russian words and not to get something like a quote from an official government's letter in the end. so, a part of sense had lost during the process, i guess, although i tried to keep everything i could and even had a word with the author in order to solve the most problematic cases. it was quite funny — i don't know chinese, she doesn't know russian, so our a bit poor english was the only way to understand each other. something could have been translated better, i suppose, and several pictures definitely could have been changed more accurately. but you know what? hell it out, perfection is a cruel mistress and i like the result yet. yeah, there is no big deal or something like it — a drawing style is quite common, a plot has no significant differences with the game, but… i don't know. perhaps, visual novels made a too sentimental son of a bitch out of me :-) thanks to alice for helping me with image processing, lem for helping me with the translation and marika for the inspiration. and, sure, thanks to quantus for the manga.",
    "tags": [
      "english",
      "videogames"
    ]
  },
  {
    "html": "\n\n        <article class=\"rounded-2xl bg-white\">\n\n          <header class=\"space-y-2\">\n\n                        \n            <header class=\"space-y-2\">\n            <a href=\"https://kostyanetsky.me/notes/hpmor\"\n                class=\"inline text-2xl font-semibold tracking-tight hover:underline\">\n                HPMoR\n            </a>\n            </header>\n            \n\n            <div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm text-slate-600\">\n              <span>6 November 2016</span>\n              \n                <span class=\"text-slate-300\">·</span>\n                \n                <div class=\"flex flex-wrap gap-2\">\n                    <span class=\"inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs text-slate-700\">Books</span>\n                </div>\n                \n              \n            </div>\n\n          </header>\n\n          <div class=\"mt-5\">\n            <div class=\"prose-like\">\n              <p>Just finished reading “Harry Potter and Methods of Rationality” — the epic fanfic based on the you-know-whose universe. An author is a tough specialist in the field of artificial intelligence and interesting on his own, but his book is what I insistently <a href=\"http://hpmor.com/\" target=\"_blank\">recommend</a> to read.</p>\n<p>First of all, it is the magnificent rethinking of the original saga. Many aspects seem not less fascinating, I may say; moreover, the plot itself is certainly excellent — I read two-thirds of the story without switching <a href=\"https://kostyanetsky.me/notes/hpmor/gene-wilder-meme.jpg\" target=\"_blank\">Gene Wilder</a> off :-) Nevertheless, the author was skillful enough to make all points meet and finish a storyline in such a pretty way that I had almost nothing to complain about.</p>\n<p>In any case, this book is a well way to meet with a lot of scientific and just interesting things which were mentioned along the way. The author is smart and his book is a smart one too.</p>\n            </div>\n          </div>\n          \n        </article>\n\n",
    "text": "hpmor 6 november 2016 · books just finished reading “harry potter and methods of rationality” — the epic fanfic based on the you-know-whose universe. an author is a tough specialist in the field of artificial intelligence and interesting on his own, but his book is what i insistently recommend to read. first of all, it is the magnificent rethinking of the original saga. many aspects seem not less fascinating, i may say; moreover, the plot itself is certainly excellent — i read two-thirds of the story without switching gene wilder off :-) nevertheless, the author was skillful enough to make all points meet and finish a storyline in such a pretty way that i had almost nothing to complain about. in any case, this book is a well way to meet with a lot of scientific and just interesting things which were mentioned along the way. the author is smart and his book is a smart one too.",
    "tags": [
      "books"
    ]
  }
]