<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xml:base="https://graker.ru/en" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Programming</title>
    <link>https://graker.ru/en</link>
    <description>Feed of the Graker.Ru home page</description>
    <language>en</language>
    
    <item>
  <title>Критическое обновление безопасности PHP</title>
  <link>https://graker.ru/news/2026/10/21/php-critical-security-update</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Today at 14:00 UTC (5 p.m. Moscow time) a critical PHP security update is coming out: &lt;a href=&quot;https://www.php.net/archive/2026.php#2026-10-20-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.php.net/archive/2026.php#2026-10-20-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The update is so monstrously critical that no details are disclosed, so that nobody hacks absolutely everyone in advance.&lt;/p&gt;
&lt;p&gt;So get your consoles ready, open your Docker configs and off we go, updating everything one by one.&lt;/p&gt;
&lt;p&gt;But if vulnerabilities and updates keep pouring in like this, sooner or later we will really have to let robots loose on production and let them handle it themselves. Otherwise how is one supposed to keep up with all this?&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Wed, 21 Oct 2026 08:55:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2245 at https://graker.ru</guid>
    </item>
<item>
  <title>PR на шиссот!</title>
  <link>https://graker.ru/news/2026/10/07/pr-600</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;The other day a PR of 610 files was finally defeated and merged! The result is a complete redesign of Docturist. The public part (the landing page and the blog) got a bit of it too, but first of all it is the whole inside: all the pages, forms and dialogs of the CRM itself.  &lt;/p&gt;
&lt;p&gt;This is one more example of how you can get carried away solving tasks with a neural network. Initially the idea was much more modest. The dashboard, also known as the desktop, also known as the home page inside the system, was made rather simple. This is what it looked like:&lt;/p&gt;&lt;/div&gt;
&lt;figure data-component-id=&quot;grakerru:figure&quot; class=&quot;figure figure--center figure--medium&quot;&gt;
      &lt;a href=&quot;/sites/default/files/uploads/2026-10/dashboard.png&quot; data-lightbox=&quot;node-2243&quot;&gt;
    &lt;img loading=&quot;lazy&quot; srcset=&quot;/sites/default/files/styles/content_medium/public/uploads/2026-10/dashboard.png.webp?itok=yo1Bng8q 850w, /sites/default/files/styles/content_medium_2x/public/uploads/2026-10/dashboard.png.webp?itok=S8nvKheF 1700w&quot; sizes=&quot;(min-width: 1200px) 850px, (min-width: 768px) 75vw, calc(100vw - 30px)&quot; width=&quot;850&quot; height=&quot;413&quot; src=&quot;/sites/default/files/styles/content_medium/public/uploads/2026-10/dashboard.png.webp?itok=yo1Bng8q&quot; alt=&quot;dashboard.thumb.png&quot; /&gt;



&lt;/a&gt;
    &lt;/figure&gt;
&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Of course, the travel agents reported that they did not use the widgets on this desktop at all. Only the links, to jump straight to the section they need. And I wanted it to be rather a quick access to important sections and information. So that some things could be done without leaving the dashboard at all.  &lt;/p&gt;
&lt;p&gt;That is what Claude Design and I took on. We rethought the contents of the dashboard to make it convenient and actually used, not just a place for links like the desktop in Win95. And the «before» above turned into a new «after»:  &lt;/p&gt;&lt;/div&gt;
&lt;figure data-component-id=&quot;grakerru:figure&quot; class=&quot;figure figure--center figure--medium&quot;&gt;
      &lt;a href=&quot;/sites/default/files/uploads/2026-10/dashboard_3.png&quot; data-lightbox=&quot;node-2243&quot;&gt;
    &lt;img loading=&quot;lazy&quot; srcset=&quot;/sites/default/files/styles/content_medium/public/uploads/2026-10/dashboard_3.png.webp?itok=ORE5xe4w 850w, /sites/default/files/styles/content_medium_2x/public/uploads/2026-10/dashboard_3.png.webp?itok=f57DgDy- 1700w&quot; sizes=&quot;(min-width: 1200px) 850px, (min-width: 768px) 75vw, calc(100vw - 30px)&quot; width=&quot;850&quot; height=&quot;531&quot; src=&quot;/sites/default/files/styles/content_medium/public/uploads/2026-10/dashboard_3.png.webp?itok=ORE5xe4w&quot; alt=&quot;dashboard.thumb.png&quot; /&gt;



&lt;/a&gt;
    &lt;/figure&gt;
&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Now there are all kinds of metrics, and most importantly a smarter bookings feed. You can look at the latest bookings by date, or at the ones that need particular attention.&lt;/p&gt;&lt;p&gt;I did not hold back Claude&#039;s design impulses, so on top of that I got a new style at once. The previous style was built on the Color Admin theme, which I bought specially back in 2018. The theme has of course aged somewhat since then and lost some of its relevance.&lt;/p&gt;&lt;p&gt;Anyway, once there is a new look, you do not want to leave the other pages in the old one. And so, page by page, component by component, first with Claude Design and then with Claude Code, we brought the whole service to the new styles. And since just redrawing things is boring, we also rethought, improved and remade the components on the pages along the way.&lt;/p&gt;&lt;p&gt;That is how we got a PR of 610 files. Which of course wore me out with reviewing and testing. In the nutshell, the points of my &lt;a href=&quot;/news/2026/08/11/zeldevmeetup-talk-2026&quot;&gt;talk&lt;/a&gt; (in Russian) on this topic still hold. You have to test, structure, decompose. But not looking at the generated code, as Robert Martin advises, does not work out for me just yet: I checked every screen, inspected the changes, the tests, the front end, and in each part I found something that was not done quite right, or did not work, or caused some new problems.&lt;/p&gt;&lt;p&gt;But in the end I checked everything, tried it by hand and shipped it. So now Docturist has not only a new, rethought, modern design, but also all kinds of usability bits, including:&lt;/p&gt;&lt;p&gt;— Docturist remembers and shows right away the set of tour operators the agent works with most often, no need to search through autocomplete every time.&lt;br&gt;— &lt;code&gt;/&lt;/code&gt; or &lt;code&gt;Ctrl+F&lt;/code&gt; immediately starts a search across all data (pressing Ctrl+F again starts the browser&#039;s native search).&lt;br&gt;— Booking documents can be generated and signed right from a popup on the desktop, without having to open the booking.&lt;br&gt;— The calendar works better on mobile devices (the mobile calendar is simply made anew).&lt;br&gt;— The profile page is finally split into 5 sections by the topics of the settings.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I am happy with the result, and now updates can be rolled out more often again, without reviewing such huge PRs. Overall the redesign took about a month and a half. Next up are the integration with an online cash register service (already done) and a dark theme (also done). Let&#039;s go!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://docturist.ru&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;Docturist, a smart planner for travel agents&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Wed, 07 Oct 2026 18:30:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2243 at https://graker.ru</guid>
    </item>
<item>
  <title>Нейросети и анализ кода</title>
  <link>https://graker.ru/news/2026/07/22/ai-code-analysis</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Yesterday I was estimating a group of ~40 tickets. All of them were created from an AI code analysis report on a large Drupal project. The project is about 10 years old, the codebase has evolved all this time, 20 subdomains, integrations, APIs, content synchronization — all in all, a cool project.&lt;/p&gt;
&lt;p&gt;The report is structured, the neural network checked the project for all four horsemen of the apocalypse: Vulnerabilities, Bugs, Slowness and Dirty Code. Originally the report produced many more tasks, but I slapped won&#039;t fix on about 30% of them right away. There were glitches and misunderstandings of the context. But 40 tickets still remained.&lt;/p&gt;
&lt;p&gt;Most of them are also tasks of the very lowest priority, like&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a custom module doesn&#039;t declare a dependency on something like paragraphs;&lt;/li&gt;
&lt;li&gt;somewhere in the code a brazen programmer called \Drupal::service() instead of using dependency injection;&lt;/li&gt;
&lt;li&gt;somewhere deprecated Drupal versions haven&#039;t been removed from the supported versions, and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were also a few more serious issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a couple of N+1 problems;&lt;/li&gt;
&lt;li&gt;several XSS vulnerabilities (only accessible to admins, but still);&lt;/li&gt;
&lt;li&gt;several places lacking checks for whether a key exists in an array (spamming the log with warnings);&lt;/li&gt;
&lt;li&gt;and even one timing oracle vulnerability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, dirty code is a sign of dirty thoughts :) Yes, it would be nice to clean it all up. But apart from 3–4 issues, it adds up to more than a hundred hours of work in total, and the payoff is slightly cleaner code, tidied-up legacy, a bit less tech debt and fewer warning/debug entries in the log. It&#039;s nice, of course, when the client doesn&#039;t mind such a spring cleaning. And all honor and glory to the account managers who can convince the client of the need for such cleaning when its value to the end user is roughly zero.&lt;/p&gt;
&lt;p&gt;And these reports still leave a strange feeling. They do find something. But so far these reports bring much more fuss than benefit.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Wed, 22 Jul 2026 09:15:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2227 at https://graker.ru</guid>
    </item>
<item>
  <title>Виртуализация локальной разработки, docker-compose и traefik</title>
  <link>https://graker.ru/news/2026/06/25/local-dev-virtualization-docker-compose-and-traefik</link>
  <description>&lt;p&gt;A long time ago I described &lt;a href=&quot;/news/2019/03/26/virtual-local-projects-in-docker&quot;&gt;a fairly simple way to virtualize the projects&lt;/a&gt; I work on, so it&#039;s easy to switch between them and they don&#039;t get in each other&#039;s way. 7 years have passed and of course the approach has evolved. Back then, using separate containers started with `docker run` was faster and more convenient, so I didn&#039;t write Dockerfiles and docker-compose files. But progress did catch up with me on this one and won. Now I use docker compose for local development too.&lt;/p&gt;
&lt;blockquote&gt;Still, I try not to use tools with all sorts of presets like lando or ddev. Mostly because when I ran into them, they worked fine — until I needed to change something in them or do something non-standard. After that the brain-melting began, sometimes so bad that it was easier to rebuild everything myself right away.&lt;br&gt;
Besides, if you build &quot;clean&quot; environments, you have a chance to better understand how it all works, and if you use lando, forge, ddev and the like — the opposite.&lt;/blockquote&gt;
&lt;p&gt;So, why docker compose is better.&lt;/p&gt;</description>
  <pubDate>Thu, 25 Jun 2026 15:20:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2220 at https://graker.ru</guid>
    </item>
<item>
  <title>Код пишут роботы, но отвечать за него нам</title>
  <link>https://graker.ru/news/2026/04/08/robots-code-we-take-responsibility</link>
  <description>&lt;p&gt;Lately I&#039;ve been using generative neural networks in agent mode more and more in development; for simplicity, let&#039;s call it vibe coding, like everyone does. Why not? These days every toaster and its grandmother is vibe coding and telling everyone how great it has become. And in terms of opening up development to those who couldn&#039;t develop before, it really is great, by the way.&lt;/p&gt;
&lt;p&gt;But those who could develop on their own before still look at the subject from a slightly different angle. So I decided to let my thoughts wander a bit, grumble, be a bit of a bore and reflect not on how to set up Codex or an MCP server, or how to unleash Claude Code on KWork. But on the effects, on the inevitable changes that neural networks have brought, are bringing and will bring into our daily work — into software development by living human people.&lt;/p&gt;
&lt;blockquote&gt;First, let&#039;s briefly define our place in space and time relative to the very phenomenon of neural networks (here and below — in software development). It&#039;s too late to discuss whether they are needed, whether they help, whether we should use them. That question is off the table. If you somehow haven&#039;t started yet, you should. The cat looks at the clock and says: it&#039;s time!&lt;/blockquote&gt;</description>
  <pubDate>Wed, 08 Apr 2026 08:20:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2202 at https://graker.ru</guid>
    </item>
<item>
  <title>С Днём программиста!</title>
  <link>https://graker.ru/news/2025/09/13/happy-programmers-day</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Happy Programmer&#039;s Day, programmers!&amp;nbsp;&lt;/p&gt;&lt;p&gt;Today we can all bathe in torrents and smash up internet cafes!&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Sat, 13 Sep 2025 12:40:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2141 at https://graker.ru</guid>
    </item>

  </channel>
</rss>
