<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>127.0.0.1</title><link>https://127001.me/</link><description>Recent content on 127.0.0.1</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Dmytro Kostiuchenko</copyright><lastBuildDate>Wed, 21 Jan 2026 14:58:07 +0200</lastBuildDate><atom:link href="https://127001.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Pull requests with LLM attribution are predatory behavior</title><link>https://127001.me/post/llm-attribution-predatory/</link><pubDate>Wed, 21 Jan 2026 14:58:07 +0200</pubDate><guid>https://127001.me/post/llm-attribution-predatory/</guid><description>&lt;p>If there’s a predator&lt;a class="footnote-ref" id="_footnoteref_1" href="#_footnote_1" title="View footnote 1" role="doc-noteref">[1]&lt;/a>, there must be prey. Here, the prey is &lt;em>time&lt;/em> — first, the time of a person who reviews the PR; second, the time of a maintainer who will be maintaining the code after it lands in master.&lt;/p>
&lt;p>Pull requests are usually asymmetric&lt;a class="footnote-ref" href="#_footnote_1" title="View footnote 1" role="doc-noteref">[1]&lt;/a>: it takes significantly less effort to write a PR, than to review it and then maintain it.&lt;/p>
&lt;p>But LLMs skew the asymmetry to an absurd proportion. Many open-source projects have recognized&lt;a class="footnote-ref" id="_footnoteref_2" href="#_footnote_2" title="View footnote 2" role="doc-noteref">[2]&lt;/a>&lt;a class="footnote-ref" id="_footnoteref_3" href="#_footnote_3" title="View footnote 3" role="doc-noteref">[3]&lt;/a>&lt;a class="footnote-ref" id="_footnoteref_4" href="#_footnote_4" title="View footnote 4" role="doc-noteref">[4]&lt;/a> the problem, requiring LLM disclosures or prohibiting LLM-powered contributions altogether. I believe for the majority of projects, the former approach is a flimsy band-aid, and the latter may be the only sustainable strategy — in the near future, at least.&lt;/p></description></item><item><title>How do you change browser in Slack anyway?</title><link>https://127001.me/post/change-browser-in-slack/</link><pubDate>Wed, 31 Jul 2024 01:52:00 +0200</pubDate><guid>https://127001.me/post/change-browser-in-slack/</guid><description>&lt;p>Overriding the default browser in Slack is my vexatious personal itch. I have a dedicated browser just for work, and I use Slack solely for work. Any link from Slack, be it a GitHub pull request, an unlisted corporate video on YouTube, or an internal meme, I want to open it in my work-only browser. Everything else I want to open in my default browser. &lt;em>And if I get this to work, I’ll be awesome&lt;/em>.&lt;/p>
&lt;p>Of course, you may argue: but hey, why would you mix your work and personal environments? That’s not healthy! Get yourself a different laptop.&lt;/p>
&lt;p>Wow, dear, wow! What discipline and work ethics you have. &lt;em>Let’s go. In and out, twenty-minute adventure&lt;/em>.&lt;/p>
&lt;div class="image-block">&lt;img src="https://127001.me/post/change-browser-in-slack/
img/rick_morty_in_out.jpg" alt="rick morty in out"/>&lt;/div>
&lt;small style="color: grey;">Rick &amp;amp; Morty. Season 3, Episode 6. TM &amp;amp; © Adult Swim&lt;/small></description></item><item><title>Ten years of ThinkPadding</title><link>https://127001.me/post/ten-years-of-thinkpadding/</link><pubDate>Mon, 07 Feb 2022 02:30:00 +0300</pubDate><guid>https://127001.me/post/ten-years-of-thinkpadding/</guid><description>&lt;p>I’m the author of the title picture, and these are my ThinkPads. I’ve been very loyal to the ThinkPad brand for more than a decade. Until Lenovo sold me a lemon — ThinkPad X13 AMD. That event encouraged me to reflect on my loyalty. Which I did, and now I’m happy to share the results.&lt;/p>
&lt;p>How did I reflect? I looked at the ThinkPad evolution under Lenovo by comparing all the models I own: X220, X270 and X13 AMD (and occasionally a very similar T14s). If there was something I liked in X220 which Lenovo killed in subsequent models, I put it on &lt;em>the bad&lt;/em> list. If there is something that Lenovo kept or even improved in its newer models, I put it on &lt;em>the good&lt;/em> list. By doing so, I was hoping to understand if my loyalty to ThinkPads still has any rational grounds or is mainly driven by habit.&lt;/p>
&lt;p>In the end, as a bonus, I will share what’s so awful about X13 AMD (and any other AMD-based laptop sold by Lenovo).&lt;/p>
&lt;section class="admonition-block caution" role="doc-notice">&lt;h6 class="block-title">&lt;span class="title-label">Caution: &lt;/span>Biases ahead 😉&lt;/h6>&lt;p>When I started working on this post, I did not know where my reflecting would lead me. I admit that I had a feeling I was going to bash Lenovo for selling me a terrible product, but nevertheless, I tried to remain calm and rational. Despite my trying, you may find some statements biased and unjustified&lt;/p>&lt;/section></description></item><item><title>Eliminate backlight flicker with Intel i915</title><link>https://127001.me/post/eliminate-backlight-flicker-with-i915/</link><pubDate>Sun, 26 Jul 2020 22:30:00 -0400</pubDate><guid>https://127001.me/post/eliminate-backlight-flicker-with-i915/</guid><description>&lt;aside class="admonition-block note" role="note">&lt;h6 class="block-title label-only">&lt;span class="title-label">Note: &lt;/span>&lt;/h6>&lt;p>This is a revised version of my post from 2013 previously published at
&lt;a class="bare" href="http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html">http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html&lt;/a>.&lt;/p>
&lt;p>Although still popular, that post was full of factual mistakes.&lt;/p>&lt;/aside>
&lt;p>The brightness of LED backlight in TFT displays is sometimes controlled using a technique called PWM or &lt;em>pulse width
modulation&lt;/em>. If implemented incorrectly, particularly if PWM frequency is too low, it can introduce distracting visual
effects and induce eye strain, headaches, and even dizziness in some
people&lt;a class="footnote-ref" id="_footnoteref_1" href="#_footnote_1" title="View footnote 1" role="doc-noteref">[1]&lt;/a>.&lt;/p>
&lt;p>Many older laptops set PWM frequency for their backlight too low. Luckily, in laptops equipped with Intel i915 GPU the
PWM frequency is often controlled by the GPU and thus can be adjusted by a software.&lt;/p></description></item><item><title>You may be doing FP already</title><link>https://127001.me/post/you-may-be-doing-fp-already/</link><pubDate>Mon, 10 Feb 2020 22:59:08 -0500</pubDate><guid>https://127001.me/post/you-may-be-doing-fp-already/</guid><description>&lt;p>Functional programming (FP) has been a somewhat hot topic in recent years in my surroundings. Although in my &lt;em>close&lt;/em>
surroundings people are usually not zealous or overly excited, I do notice sometimes talks, discussions and vocally
expressed opinions where &lt;em>tremendous&lt;/em> benefits of FP over other paradigms are claimed, through presenting FP as a
fundamentally new approach to writing code, opposite to, say, OOP. Some go as far as saying, that one must fully ditch
OOP and all related experience because it’s all just a mistake.&lt;/p>
&lt;p>Such extreme claims are rarely challenged. When a person with an OOP background gets involved in any FP-related
discussion, it quickly gets overwhelmed with new unfamiliar vocabulary: algebras, monads, semigroups, functors, type
classes…​ And I start questioning intents of those claims — are they made to make people shift to FP, or to prove, that
some definition of FP is better than some definition of OOP?&lt;/p>
&lt;p>With this post, I hope to show that FP can be seen as an evolutionary step, a generalization over practices we already
consider the best in OOP paradigm. And if viewed like this, it can be useful even when adopted gradually. I hope this
point of view will persuade programmers to look into FP and to borrow new techniques from it to improve non-FP code.&lt;/p></description></item><item><title>Filtering ScalaTest tests by tags in sbt</title><link>https://127001.me/post/filter-scalatests-by-tags-in-sbt/</link><pubDate>Mon, 08 Jul 2019 11:00:00 -0400</pubDate><guid>https://127001.me/post/filter-scalatests-by-tags-in-sbt/</guid><description>&lt;p>&lt;em>ScalaTest&lt;/em> lets you tagging your tests with arbitrary tags and then filtering
by tags when executing tests.&lt;/p>
&lt;p>It’s not immediately obvious though, how to make use of this in &lt;em>sbt&lt;/em>, at least
I couldn’t find an answer on the very first page in Google or StackOverflow,
and I remember myself looking for a complete solution for quite a while, so
here it is.&lt;/p></description></item><item><title>Turning Synology NAS into a geeky media server: PulseAudio</title><link>https://127001.me/post/synology/mediaserver-p2/</link><pubDate>Tue, 16 Aug 2016 21:00:00 +0100</pubDate><guid>https://127001.me/post/synology/mediaserver-p2/</guid><description>&lt;section class="admonition-block warning" role="doc-notice">&lt;h6 class="block-title label-only">&lt;span class="title-label">Warning: &lt;/span>&lt;/h6>&lt;p>This post was written in pre-docker era. Back in the time it was necessary to perform many things that are
no longer required on modern devices (like installing Debian Chroot package which, expectedly, is no longer offered).&lt;/p>
&lt;p>Modern devices with Docker support or equivalent features (FWIW, my choice is Linux Station from QNAP) are much more
friendly towards linux enthusiasts&lt;/p>&lt;/section>
&lt;aside class="admonition-block note" role="note">&lt;h6 class="block-title label-only">&lt;span class="title-label">Note: &lt;/span>&lt;/h6>&lt;p>Required files can be downloaded from &lt;a class="bare" href="https://github.com/edio/synology-mediaserver">https://github.com/edio/synology-mediaserver&lt;/a>&lt;/p>&lt;/aside>
&lt;p>&lt;a href="https://127001.me/post/synology/mediaserver-p1">Previously&lt;/a> we’ve covered ALSA setup and Debian chroot.&lt;/p>
&lt;p>In this post I’ll describe how to set up PulseAudio in Debian chroot, so that it’s possible to stream any sound from
linux-powered pc to a sound card connected to Synology NAS.&lt;/p></description></item><item><title>Overloading that is not permitted or Java bridge methods</title><link>https://127001.me/post/java-bridge-methods/</link><pubDate>Mon, 09 May 2016 00:59:08 +0200</pubDate><guid>https://127001.me/post/java-bridge-methods/</guid><description>&lt;aside class="admonition-block note" role="note">&lt;h6 class="block-title">&lt;span class="title-label">Note: &lt;/span>Third-party translation&lt;/h6>&lt;p>This article is also available in Russian &lt;a class="bare" href="https://habr.com/ru/company/haulmont/blog/426419/">https://habr.com/ru/company/haulmont/blog/426419/&lt;/a>&lt;/p>&lt;/aside>
&lt;p>Most of my technical interviews for Java developer position include a puzzle, where candidate should implement 2 very
similar interfaces in a single class:&lt;/p>
&lt;div class="listing-block">&lt;pre class="rouge highlight" style="background-color: #f8f8f8">&lt;code data-lang="java">&lt;span style="color: #999988;font-style: italic">// Implement both interfaces in a single class if possible&lt;/span>
&lt;span style="color: #999988;font-style: italic">// Explain why possible or not possible&lt;/span>
&lt;span style="color: #000000;font-weight: bold">interface&lt;/span> &lt;span style="color: #445588;font-weight: bold">WithPrimitiveInt&lt;/span> &lt;span style="color: #000000;font-weight: bold">{&lt;/span>
&lt;span style="color: #445588;font-weight: bold">void&lt;/span> &lt;span style="color: #990000;font-weight: bold">m&lt;/span>&lt;span style="color: #000000;font-weight: bold">(&lt;/span>&lt;span style="color: #445588;font-weight: bold">int&lt;/span> &lt;span style="background-color: #f8f8f8">i&lt;/span>&lt;span style="color: #000000;font-weight: bold">);&lt;/span>
&lt;span style="color: #000000;font-weight: bold">}&lt;/span>
&lt;span style="color: #000000;font-weight: bold">interface&lt;/span> &lt;span style="color: #445588;font-weight: bold">WithInteger&lt;/span> &lt;span style="color: #000000;font-weight: bold">{&lt;/span>
&lt;span style="color: #445588;font-weight: bold">void&lt;/span> &lt;span style="color: #990000;font-weight: bold">m&lt;/span>&lt;span style="color: #000000;font-weight: bold">(&lt;/span>&lt;span style="color: #445588;font-weight: bold">Integer&lt;/span> &lt;span style="background-color: #f8f8f8">i&lt;/span>&lt;span style="color: #000000;font-weight: bold">);&lt;/span>
&lt;span style="color: #000000;font-weight: bold">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Sometimes candidates, not being sure about the right answer, are willing to solve the following puzzle instead (I give
it to candidates later anyway):&lt;/p>
&lt;div class="listing-block">&lt;pre class="rouge highlight" style="background-color: #f8f8f8">&lt;code data-lang="java">&lt;span style="color: #000000;font-weight: bold">interface&lt;/span> &lt;span style="color: #445588;font-weight: bold">S&lt;/span> &lt;span style="color: #000000;font-weight: bold">{&lt;/span>
&lt;span style="color: #445588;font-weight: bold">String&lt;/span> &lt;span style="color: #990000;font-weight: bold">m&lt;/span>&lt;span style="color: #000000;font-weight: bold">(&lt;/span>&lt;span style="color: #445588;font-weight: bold">int&lt;/span> &lt;span style="background-color: #f8f8f8">i&lt;/span>&lt;span style="color: #000000;font-weight: bold">);&lt;/span>
&lt;span style="color: #000000;font-weight: bold">}&lt;/span>
&lt;span style="color: #000000;font-weight: bold">interface&lt;/span> &lt;span style="color: #445588;font-weight: bold">V&lt;/span> &lt;span style="color: #000000;font-weight: bold">{&lt;/span>
&lt;span style="color: #445588;font-weight: bold">void&lt;/span> &lt;span style="color: #990000;font-weight: bold">m&lt;/span>&lt;span style="color: #000000;font-weight: bold">(&lt;/span>&lt;span style="color: #445588;font-weight: bold">int&lt;/span> &lt;span style="background-color: #f8f8f8">i&lt;/span>&lt;span style="color: #000000;font-weight: bold">);&lt;/span>
&lt;span style="color: #000000;font-weight: bold">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Turning Synology NAS into a geeky media server</title><link>https://127001.me/post/synology/mediaserver-p1/</link><pubDate>Wed, 06 Jan 2016 01:51:40 +0100</pubDate><guid>https://127001.me/post/synology/mediaserver-p1/</guid><description>&lt;section class="admonition-block warning" role="doc-notice">&lt;h6 class="block-title label-only">&lt;span class="title-label">Warning: &lt;/span>&lt;/h6>&lt;p>This post was written in pre-docker era. Back in the time it was necessary to perform many things that are
no longer required on modern devices (like installing Debian Chroot package which, expectedly, is no longer offered).&lt;/p>
&lt;p>Modern devices with Docker support or equivalent features (FWIW, my choice is Linux Station from QNAP) are much more
friendly towards linux enthusiasts&lt;/p>&lt;/section>
&lt;aside class="admonition-block note" role="note">&lt;h6 class="block-title label-only">&lt;span class="title-label">Note: &lt;/span>&lt;/h6>&lt;p>Required files can be downloaded from &lt;a class="bare" href="https://github.com/edio/synology-mediaserver">https://github.com/edio/synology-mediaserver&lt;/a>&lt;/p>&lt;/aside>
&lt;p>I’m not a huge fan of Synology. I bought my DS214 by friend’s recommendation and became frustrated with it right after
the purchase. Bundled software was limited and buggy. Many people find Synology products great. But for me it just
didn’t work well because it forced its use cases on me instead of being a helpful tool for my own very specific use
cases.&lt;/p>
&lt;p>Anyway, I wasn’t willing to lose money on reselling my NAS, so I decided to get as much as possible from it and
currently with my DS214Play I can:&lt;/p>
&lt;div class="olist arabic">&lt;ol class="arabic">&lt;li>Play virtually any sound via connected USB sound card.&lt;/li>&lt;li>Particularly, I can play my huge collection of high-resolution music in various formats (with replaygain tags
respected). All that thanks to &lt;em>mpd&lt;/em>, which I can control from any decent phone, web-browser or even smart-watch and
scrobble all statistics to Last.fm.&lt;/li>&lt;li>Stream sound from my laptop via &lt;strong>PulseAudio&lt;/strong>, while watching videos on YouTube or movies.&lt;/li>&lt;/ol>&lt;/div></description></item><item><title>randrctl — profile-based screen manager for X</title><link>https://127001.me/post/introducing-randrctl/</link><pubDate>Wed, 17 Sep 2014 18:45:22 +0300</pubDate><guid>https://127001.me/post/introducing-randrctl/</guid><description>&lt;p>While having some free time, decided to automate one of my daily routines — setting up external display.&lt;/p>
&lt;p>Idea appeared long before I was told about famous (or not?) &lt;a href="https://github.com/wertarbyte/autorandr">autorandr&lt;/a> project.
So if you are familiar with autorandr, you are already familiar with randrctl idea.&lt;/p></description></item><item><title>How Java logging frameworks determine caller class and method name</title><link>https://127001.me/post/java-logging-caller-class-and-method/</link><pubDate>Tue, 08 Apr 2014 23:54:49 +0200</pubDate><guid>https://127001.me/post/java-logging-caller-class-and-method/</guid><description>&lt;p>This post describes how java logging frameworks (&lt;em>log4j&lt;/em>, for example) know the exact place in code (class and method name), where the logging statement was invoked.&lt;/p>
&lt;p>I decided to write this post because often I meet developers who do not understant what is the cost of writing caller information to logs, or why the cost is so high.&lt;/p></description></item><item><title>Listen tracks from youtube in mpd</title><link>https://127001.me/post/youtube-in-mpd/</link><pubDate>Fri, 13 Sep 2013 14:18:07 +0300</pubDate><guid>https://127001.me/post/youtube-in-mpd/</guid><description>&lt;p>We’ll need&lt;/p>
&lt;div class="ulist">&lt;ul>&lt;li>&lt;em>mpd&lt;/em> with &lt;em>curl&lt;/em> support&lt;/li>&lt;li>&lt;a href="http://rg3.github.io/youtube-dl/">youtube-dl&lt;/a>&lt;/li>&lt;/ul>&lt;/div></description></item></channel></rss>