Showing posts with label компьютер. Show all posts
Showing posts with label компьютер. Show all posts

Wednesday, July 22, 2026

Франция первой в Евросоюзе запретила доступ подростков к соцсетям

Текст полностью.

Парламент Франции утвердил в итоговом чтении законопроект, запрещающий доступ к социальным сетям детям младше 15 лет. Закон вступит в силу в сентябре 2026 года, с началом нового учебного года.

Депутаты парламента утвердили реформу большинством в 279 голосов против 81. Закон обязывает платформы внедрить механизмы верификации возраста и вводит запрет на использование мобильных телефонов в средних школах.

Исполнение закона будет контролировать Arcom – французское управление по регулированию аудиовизуальной и цифровой коммуникации.


Ниже есть продолжение.

Помимо самого запрета доступа к соцсетям, французский закон запрещает также рекламу, побуждающую несовершеннолетних присоединяться к социальным сетям, в том числе через инфлюенсеров, и обязывает рекламу социальных сетей нести явное предупреждение о том, что продукт опасен для детей младше 15 лет.

Первой страной, введшей запрет на доступ подростков к соцсетям стала Австралия. Однако уже через полгода она была вынуждена ужесточить санкции против платформ за нарушение запрета, поскольку исследования показали, что большинство подростков его обходят.

В Турции закон об ограничении доступа подростков младше 15 лет к соцсетям был принят в апреле 2026 года. В Италии действующие правила требуют активного согласия родителей на создание аккаунта в соцсетях для детей младше 14 лет.

Различные законодательные инициативы, ограничивающие доступ подростков к соцсетям, продвигаются в Дании, Норвегии, Великобритании, Испании, Греции, Польше.

https://www.newsru.co.il/finance/21jul2026/france324.html

Tuesday, July 21, 2026

Великий ИИ-парадокс 2026 года: корпорации увольняют людей, теряют миллиарды и тихо нанимают сотрудников обратно

Text rendered via Dual-Core compilation (Human author + LLM co-processor).
Англоязычная версия данной заметки доступна здесь https://alex-ber.medium.com/157c97fc4602.


К середине 2026 года мировая технологическая индустрия столкнулась с жесточайшим когнитивным диссонансом. С одной стороны, нейросети развиваются беспрецедентными темпами, а производители «железа» для искусственного интеллекта купаются в деньгах. С другой — корпорации, поверившие в сказку о том, что алгоритмы быстро и дешево заменят «белых воротничков», сейчас подсчитывают колоссальные убытки и в спешке возвращают уволенных людей на рабочие места.

Разберем две абсолютно противоположные тенденции, которые прямо сейчас разрывают мировой рынок труда и технологий на части.

Ниже есть продолжение.

Тенденция 1: ИИ-лихорадка, массовые чистки и сверхприбыли техногигантов

Начиная с 2024–2025 годов руководители (CEO) крупнейших компаний сделали ставку на радикальное внедрение ИИ. Глобальное исследование IBM с участием 2000 CEO показало: топ-менеджеры намерены удвоить инвестиции в ИИ в ближайшие два года. Уже 61% компаний активно внедряют ИИ-агентов, а к 2026 году у 76% корпораций появилась новая должность — директор по искусственному интеллекту (Chief AI Officer).

Обещания лидеров техноиндустрии звучали как приговор человеческому труду. Глава Anthropic Дарио Амодеи заявлял, что языковые модели уничтожат половину офисных должностей начального уровня за пять лет, а руководитель ИИ-направления Microsoft Мустафа Сулейман и вовсе отвел «большинству» белых воротничков от 12 до 18 месяцев. Результат не заставил себя ждать: только в начале 2025 года в IT-секторе было уволено более 52 тысяч специалистов.

Этот хайп породил беспрецедентный перекос в экономике. Ярчайший пример — корпорация Samsung. В июле 2026 года компания отчиталась о том, что прибыль её полупроводникового подразделения взлетела почти в 50 раз (генерируя 94% всей операционной прибыли). Причина? IT-гиганты скупают любые доступные микрочипы для обучения своих нейросетей.

Но у этого бума есть темная сторона, и она парадоксальна. ИИ-лихорадка вызвала такой дефицит и взлет цен на чипы памяти (DRAM и NAND), что производство обычных смартфонов и телевизоров резко подорожало. Собственное потребительское подразделение Samsung оказалось на грани убытков, не выдерживая цен на комплектующие. Видя, как чипы для серверов генерируют гигантские сверхприбыли, корпорациям становится неинтересно спасать сложный и низкомаржинальный потребительский рынок. Как итог — в июле 2026 года Samsung увольняет сотни сотрудников (более 60% штата) из штаб-квартиры в Нью-Джерси ради оптимизации налогов, переезда в Техас и перенаправления всех основных ресурсов в прибыльную ИИ-кормушку.

Тенденция 2: Столкновение с реальностью и «бумеранг увольнений»

Пока ИИ-евангелисты пророчили мир без человеческого труда, экономисты и HR-аналитики столкнулись с суровой реальностью: искусственный интеллект оказался слишком глуп, чтобы заменить человека целиком, и слишком дорог, чтобы это было рентабельно.

Данные MIT шокируют: около 95% компаний, потративших астрономические суммы на интеграцию нейросетей, потерпели неудачу и не увидели реального финансового возврата (ROI). Опрос IBM подтверждает эти цифры — только 25% ИИ-инициатив окупились, а 50% руководителей признали, что их поспешные инвестиции привели к созданию разрозненного, неработающего технологического «зоопарка» внутри компаний.

Выяснилось, что внедрение ИИ — это не просто покупка подписки на ChatGPT. Это затраты на серверы, системы данных, безопасность и перестройку бизнес-процессов. ИИ-агенты отлично автоматизируют отдельные задачи, но они не способны заменить полноценную должность с ее нелинейным контекстом. Вспомним недавние скандалы: крупная сеть фастфуда была вынуждена отключить ИИ на макавто, когда нейросеть начала добавлять бекон в мороженое, а авиакомпании проигрывали суды из-за ИИ-чатботов, выдумывавших несуществующие правила возврата билетов.

Это привело к комичному, но закономерному феномену — «бумерангу увольнений». Аналитика компании Visier (на базе 2,4 млн работников из 142 мировых компаний) показала: корпорации начали массово нанимать обратно тех самых людей, которых недавно уволили. На данный момент 5,3% сокращенных сотрудников уже вернулись к своим бывшим работодателям. И здесь кроется главная финансовая ирония: возвращаются «бумеранги» на зарплату в среднем на 15–25% выше той, с которой их увольняли. Оказалось, что без живой экспертизы управлять внедренными ИИ-системами просто некому.

Таким образом, сокращения ради ИИ оказались катастрофически невыгодными. По данным Orgvue, на каждый сэкономленный на зарплатах доллар компания сегодня тратит $$$1,27 из-за выплат выходных пособий, издержек на реорганизацию, переплат возвращенным сотрудникам и экстренного найма консультантов.

Бунт людей и смена парадигмы

К середине 2026 года терпение общества лопнуло. На студенческих выпускных церемониях молодые специалисты начали открыто освистывать и бойкотировать спикеров, выступающих с «про-ИИ» речами. Студенты не против технологий — они против того, чтобы корпорации лишали их права на труд и достоинство.

Президент Microsoft Брэд Смит открыто назвал происходящее «тревожным звонком» для всей IT-индустрии. По его словам, поколение зумеров ясно сказало техногигантам: «Не так быстро». Люди хотят, чтобы нейросети были инструментами под их контролем, а не алгоритмами, принимающими решения об их увольнении.

Под давлением фактов и протестов риторика элит начала меняться. От концепции «ИИ заменит людей» фокус резко сместился на «оркестровку интеллектов — искусственного и человеческого». Но давайте будем честны: эта смена парадигмы — прямое лукавство и корпоративный обман. Техногиганты заговорили о «ценности человека» не из гуманизма, а потому что их первоначальный план по дешевой и тотальной замене сотрудников с треском провалился. Теперь им приходится маскировать свои многомиллиардные просчеты и успокаивать инвесторов под видом внезапно проснувшейся заботы о рабочих местах.

Что дальше? Курс на 2030 год

Корпорации, пережившие «шок реальности», теперь действуют тоньше. Согласно обновленному консенсусу рынка, успешная стратегия до 2030 года выглядит так:

  • Отказ от единой «супер-модели»: Компании переходят на гибридные системы — микс гигантских LLM для логики и узкоспециализированных маленьких моделей (SLM), обученных на закрытых корпоративных данных.
  • Смена ролей: Если сегодня ИИ дополняет человека, то к 2030 году человек будет дополнять ИИ, вмешиваясь в работу систем только там, где нужны стратегические, этические или материально-ответственные решения. Ожидается, что доля полностью автономных решений ИИ вырастет с 25% до 48%.
  • Инфраструктурный голод и локализация: Корпорации осознали, что бесконечно масштабировать LLM невозможно физически — энергосети развитых стран не справляются с аппетитами дата-центров. Выигрывать в 2030-х будут те, кто научится делать ИИ энергоэффективным, уходя от облачных гигантов в сторону открытых решений (Open Source) и ИИ на конечных устройствах (Edge AI).

Итог: Искусственный интеллект не стал волшебной таблеткой для бизнеса. Корпорации, попытавшиеся использовать его как предлог для банального урезания расходов и массовых увольнений, сегодня расплачиваются за свою жадность и технологическую слепоту. Будущее действительно за ИИ, но ключи от этого будущего, как внезапно выяснилось, по-прежнему находятся в руках живых людей.


Thursday, June 18, 2026

Configuration guide for Kate on Ubuntu (English)

Text rendered via Dual-Core compilation (Human author + LLM co-processor).
Also available here https://alex-ber.medium.com/4d861cdd366c

Note:Windows alternative for Kate is Zed. As alternative Lapce can be considered, but it lost development momentum recently.

Limitation: Here there is no description for debugging. Even running on bare metal, not in docker containers.

Basic Installation:

sudo apt update
sudo apt install konsole
sudo snap install kate --classic

Now, many LSP uses Node.js. Because Node.js breaks backward compatibility we will use mise to manage it's versions.

Mise

Installing:

curl https://mise.run | sh

Making it work automatically when terminal is opened:

# Add shims to PATH instead of activating via eval
# echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.bashrc

# Reload bashrc
source ~/.bashrc
There is more below. Ниже есть продолжение.

No system-level utils by default

#If you want to set one, but I do not recommend
#mise use --global uv@0.11.21
#mise use --global node@20.11.0

Unset global versions

Unfortunately,

mise unset --global uv
mise unset --global node

doesn't work for whatever reason. Instead run

nano ~/.config/mise/config.toml

directly. Revert it to it's default state that should look exactly like

[settings]
# Enable variable expansion
env_shell_expand = true

[tools]

[env]

Note:: env_shell_expand is set to true for forward compatibility. By default, this line doesn't exists and current behavior is as if it is set to false. But we in future version the default value will be changed to true, so we're just preparing ourselves to this change in advance. And we will exploit true value later in our scripts anyway just now.

After editing:

# Verify the config is clean
cat ~/.config/mise/config.toml

mise cache clear
mise reshim
# Checking that shims works
mise doctor  

# Check versions - shouldn't found anything
uv --version
node --version

Once in a while you can run

mise prune

to clean up space on the disk for unused tools.

Making sudo uv works

Now, if you want to run uv or node with sudo just type:

sudo -E env PATH="$PATH" uv
sudo -E env PATH="$PATH" node

Some useful mise commands

  • mise tool-alias ls node - here you can see LTS versions of the tool. Node supports this, uv doesn't.
  • mise latest uv - latest version of the tool.
  • mise ls-remote uv - list of full supported version of the tool.
  • mise ls uv - What version of uv is used and where it is configured.
  • mise list - list of currently installed utils.

For more advanced mise commands see my https://github.com/alex-ber/ubuntu2404-snapshots/blob/master/README-mise.md


Installing LSP Servers

First of all we will create isolated directory that will serve as LSP "control center":

sudo mkdir -p /work
sudo chmod 755 /work
sudo chown USER:USER /work
cd /work

Note:: Change USER for your real Linux user.
Important: All Git Repositories and all other thing that you want to benefit from your default miseconfig file you should strictly checkout to /work.

Than we'll use mise use. This command will create a mise.toml file where versions will be pinned.

#Note, here we're using more advance version of node than above
#It is LTS version of node at a time of writting of the story
mise use node@22
mise use uv@0.11.21

I recommend you to rename it to .mise.toml.

cd /work
mv mise.toml .mise.toml

Now a .mise.toml file has appeared in the folder.

After that, run:

mise install

Verify that the tools work locally:

uv --version

It should show 0.11.21.

npm --version

It should show 10.9.8.

About V8

The V8 engine is never installed separately. It is hard-wired inside Node.js (or inside Deno). Therefore, you cannot check the V8 version simply from the terminal. But you can ask Node.js itself which version of V8 is embedded in it! Run:

node -p "process.versions.v8"

You can also optionally verify that you doesn't have Deno installed by running:

deno --version

You should see Command 'deno' not found, did you mean: as first line at the output.


Environment variables

One of the best features of mise is that it can manage environment variables.
First of all verify that ~/.config/mise/config.toml looks like this:

[settings]
# Enable variable expansion
env_shell_expand = true

[tools]

[env]

Note:: env_shell_expand is set to true for forward compatibility. By default, this line doesn't exists and current behavior is as if it is set to false. But we in future version the default value will be changed to true, so we're just preparing ourselves to this change in advance. And we will exploit true value later in our scripts anyway just now.

Now, open /work/.mise.toml and make it look like this (insert your own data):

[tools]
node = "22"
uv = "0.11.21"
"npm:dockerfile-language-server-nodejs" = "0.15.0"
"npm:pyright" = "1.1.410"
"npm:typescript" = "5.5.2"
"npm:typescript-language-server" = "4.3.3"
"npm:vscode-langservers-extracted" = "4.10.0"
"npm:yaml-language-server" = "1.23.0"
"npm:eslint" = "10.5.0"
#ruff = "0.15.17"

[env]
# Your Git settings
GIT_TOKEN = "ghp_KR..."
GIT_USER = "alex-ber"
GIT_CONFIG_COUNT = "2"
GIT_CONFIG_KEY_0 = "url.@github.com/.insteadOf">https://${GIT_USER}:${GIT_TOKEN}@github.com/.insteadOf"
GIT_CONFIG_VALUE_0 = "https://github.com/"
GIT_CONFIG_KEY_1 = "url.@gist.github.com/.insteadOf">https://${GIT_USER}:${GIT_TOKEN}@gist.github.com/.insteadOf"
GIT_CONFIG_VALUE_1 = "https://gist.github.com/"

# Adding local binary paths to PATH so that Kate can see them
_.path = [
  "./node_modules/.bin",
  "./.venv/bin"
]

Note:: Change GIT_TOKEN and GIT_USER to your specific values.
Of course, this is only one of many of possible ways to configure GIT configuration value for Kate. I found this very straightforward. Note also that we're using variable expansion here.

WARNING:
1. You're storeing you GIT_TOKEN as plain text. On another hand attacher should know where to search GIT_TOKEN or it should scan whole file system for "GIT_TOKEN" key. Using /work to store is not standard in the industry. :-) I hope, yet. :-)
2. When Kate make git pushit passes your GIT_TOKEN as plain text. If this is unexectable security risk for you find another way to pass credenetial to GIT there are plenty documentaiton on the Internet.

Execute:

mise install

If you get

mise ERROR error parsing config file: /work/.mise.toml
mise ERROR Config files in /work/.mise.toml are not trusted.
Trust them with `mise trust`. See https://mise.en.dev/cli/trust.html for more information.
mise ERROR Version: 2026.6.6 linux-x64 (2026-06-13)
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information

The error Config files ... are not trusted is an excellent and very important built-in security system of mise.

Why it occurred:
Your file contains an [env] section where you define tokens and, most critically, modify paths (_.path). Imagine you download someone else's repository containing a malicious mise.toml that replaces system commands. To prevent this, mise blocks the execution of such settings by default until you explicitly confirm that you trust this file.

How to fix it:
Since this is your own file in your working directory /work, you need to do exactly what mise asks.
While in the /work directory, run:

mise trust

This command will add the /work/.mise.toml file to your system's global allowlist.

In order to verify that environment variables are set properly run

mise env

or

mise env | grep GIT_CONFIG_KEY_0

Tips: You can edit .mise.toml file and run mise prune command it will remove unused tools. If you edit .mise.toml manually you must run mise install command in order to execute the configuration changes, see below for more details.

I pinned versions that was latest at the moment of installation. You can use @latest if you prefer. There is also @lts label, but see caveats below.

Nuance: latest vs lts

In mise, you can use keywords:

  • node@lts - installs the latest Long-Term Support version (currently 22, but this will change over time). This is the safest choice for production work.
  • node@latest - the absolute newest version (could be 23 or 24, which are still being "road-tested").

My advice: Use mise use node@22, as it currently offers the perfect balance between new features and stability.

Execute:

mise doctor

You should see something like this:

version: 2026.6.6 linux-x64 (2026-06-13)
activated: yes
shims_on_path: yes
self_update_available: yes
build_info:
  Target: x86_64-unknown-linux-gnu
  Features: openssl, rustls-native-roots, self_update
  Built: Sat, 13 Jun 2026 11:27:15 +0000
  Rust Version: rustc 1.94.0 (4a4ef493e 2026-03-02)
  Profile: release
shell:
  /bin/bash
  GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
  Copyright (C) 2022 Free Software Foundation, Inc.
  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
  There is NO WARRANTY, to the extent permitted by law.
aqua:
  baked in registry: aquaproj/aqua-registry@93cd8ecfeef813610199913db392d0e8f8dc0c27
  baked in registry tools: 2218
dirs:
  cache: ~/.cache/mise
  config: ~/.config/mise
  data: ~/.local/share/mise
  shims: ~/.local/share/mise/shims
  state: ~/.local/state/mise
config_files:
  ~/.config/mise/config.toml
  /work/.mise.toml
env_files:
  (none)
ignored_config_files: (none)
backends:
  aqua
  asdf
  cargo
  conda
  core
  dotnet
  forgejo
  gem
  github
  gitlab
  go
  npm
  pipx
  spm
  http
  s3
  ubi
  vfox
plugins:
toolset:
  aqua:astral-sh/uv@0.11.21
  core:node@22.22.3
  npm:dockerfile-language-server-nodejs@0.15.0
  npm:pyright@1.1.410
  npm:typescript-language-server@4.3.3
  npm:typescript@5.5.2
  npm:vscode-langservers-extracted@4.10.0
  npm:yaml-language-server@1.23.0
path:
  /work/node_modules/.bin
  /work/.venv/bin
  ~/.local/share/mise/installs/node/22/bin
  ~/.local/share/mise/installs/uv/0.11.21/uv-x86_64-unknown-linux-musl
  ~/.local/share/mise/installs/npm-dockerfile-language-server-nodejs/0.15.0/bin
  ~/.local/share/mise/installs/npm-pyright/1.1.410/bin
  ~/.local/share/mise/installs/npm-typescript/5.5.2/bin
  ~/.local/share/mise/installs/npm-typescript-language-server/4.3.3/bin
  ~/.local/share/mise/installs/npm-vscode-langservers-extracted/4.10.0/bin
  ~/.local/share/mise/installs/npm-yaml-language-server/1.23.0/bin
  ~/.local/share/mise/shims
  ~/.local/bin
  /usr/local/sbin
  /usr/local/bin
  /usr/sbin
  /usr/bin
  /sbin
  /bin
  /usr/games
  /usr/local/games
  /snap/bin
  /snap/bin
  ~/go/bin
env_vars:
  MISE_SHELL=bash
settings:
  env_shell_expand  true ~/.config/mise/config.toml
No problems found

Whether you are building Kate, a custom Neovim configuration, supercharging Emacs, or just wanting to understand what happens under the hood of VS Code, knowing your toolchain is essential.
Let's break down a modern developer's stack by looking at eight fundamental tools, exactly in the order you would build them into a polyglot setup, and explore what they bring to your editing experience.

The Power of Modularity

The true beauty of the modern development ecosystem is modularity. By understanding what each of these packages does - from the strict type checking of Pyright and TypeScript to the blazing-fast formatting of Ruff - you can mix, match, and tailor your environment to be exactly as responsive and rigorous as you need it to be.

1. Dockerfile Language Server Node.js

(npm:dockerfile-language-server-nodejs)
When you are writing a Dockerfile, you want to ensure your instructions are valid and follow best practices. This server is powered by Node.js and hooks directly into your editor to provide auto-completion for Docker instructions like RUN, COPY, or ENTRYPOINT. It also offers on-the-fly syntax validation, hover documentation, and structural linting, ensuring your container builds won't fail due to simple typos or missing arguments.

2. Pyright

(npm:pyright)
Developed by Microsoft, Pyright is an incredibly fast, statically typed checker and language server for Python. Unlike traditional Python linters, Pyright focuses heavily on type inference and PEP 484 type hinting. It runs instantly as you type, catching type mismatches, missing imports, and undefined variables. It is an absolute favorite for large-scale Python codebases that require strict type safety and intelligent refactoring.

3. TypeScript

(npm:typescript)
While technically a programming language and a compiler rather than a standalone LSP, this core package is the brain behind any JavaScript or TypeScript development environment. It contains the TypeScript Language Service (tsserver), which parses your code, understands your project's tsconfig.json, and computes all the rich type information, completions, and diagnostics. Without this base package, no modern TypeScript tooling could function.

4. TypeScript Language Server

(npm:typescript-language-server)
Because the core tsserver does not natively speak the standardized Language Server Protocol (LSP), this wrapper was created to bridge the gap. It takes the deep intelligence provided by the base TypeScript package and translates it into standard LSP JSON-RPC messages. If you are using an editor outside of VS Code - this is the exact piece of software that grants you official, VS Code-level TypeScript and JavaScript support.

5. VSCode Langservers Extracted

(npm:vscode-langservers-extracted)
VS Code has brilliant built-in language support for front-end web technologies, but those servers are normally tightly integrated into the editor itself. This package extracts those official servers - specifically for HTML, CSS, SCSS, LESS, and JSON - so they can be used in any LSP-compatible editor. By installing this, you get Microsoft's official auto-completion, schema validation, and linting for standard web languages anywhere you choose to code.

6. YAML Language Server

(npm:yaml-language-server)
Writing YAML without assistance can lead to frustrating indentation errors and silent configuration bugs. Developed by Red Hat, this language server transforms the YAML writing experience. Its most powerful feature is the ability to map your files to JSON Schemas (for example, mapping to Kubernetes manifests, GitHub Actions, or Docker Compose files). This means you get intelligent auto-completion and validation tailored exactly to the specific DevOps tool you are configuring.

7. ESLint

(npm:eslint)
ESLint is the industry standard for identifying and reporting on patterns in JavaScript and TypeScript code. While it is fundamentally a linter and not an LSP on its own, modern development environments run ESLint as a background service (often wrapped in its own LSP integration) to provide real-time squiggly lines and auto-fix capabilities upon saving. It ensures your code adheres strictly to your team's style guide and catches logical errors before they ever reach production.
Note: I'm not using this LSP Server, but rely on Kate's built-in plugin, it works more reliability.

8. Ruff

(#ruff)
Ruff is the new heavyweight champion of Python tooling. Written in Rust, it is an astonishingly fast Python linter and formatter that replaces a dozen legacy tools like Flake8, isort, and Black. Many developers integrate Ruff directly into their editor via its own language server (such as ruff-lsp or the newer native ruff server) to get instantaneous feedback. It flags unused imports, stylistic errors, and code smells, fixing them in milliseconds without ever slowing down your editor.
Note: It is turned off in the configuration provided above, because personally I do not see any value of it. I started from Python 2 without any type hints and I have bad experiences with similar tools in Java scosystem. And Java is statically typed. IMHO such tools can be never be perfect.
Especially in such dynamic languages like Pyhton where you have eval(discoursage I know, but still in use), locals(), metaclassess, type hints are optional, if you're using duck typing without Protocol Ruff can't help you. Basically, in typicall code-base there too many "too dynamic" code that Ruff will be able to handle statically. You can treat it as my personal heuristic, but actually Turing halting problem and Gödel incompleteness theorems mathimatically proves that such tools can be never be perfect.


Set local versions (for a specific project)

Navigate to your project folder and run:

cd /path/to/your/project
mise use node@22
mise use uv@0.11.21

These commands won't download anything (since the versions are already downloaded globally), they will simply create a mise.toml file in the folder that locks these versions to the project. Don't forget to commit it to Git.

Manual editing of mise.toml

This is a completely valid and standard scenario. Many people do exactly this: edit the file by hand.
Just execute:

mise install

In 99% cases this is enough. If you manually added uv = "0.11.21" to mise.toml, running mise install will read this file, download the required version of uv, and make it available in the current directory. Nothing else is needed for the installation itself.

Note: If you there are problems (e.g., if your internet disconnects while downloading uv, the archive becomes corrupted, and mise install gives an unpacking error) you can use mise cache clear. Under normal workflow, you don't need to use this command.

Since we're working via shims the mise install command automatically creates and updates shims for new tools, so in 99% cases mise reshimis not needed. Manually calling mise reshim may only be needed as a "first aid" if you installed a tool but get command not found when typing its command in the terminal (e.g., this sometimes happens if you install a global CLI package via npm -g or pip, and mise hasn't had a chance to rebuild shims for the new binaries).

Once in a while you can run mise prune to clean up space on the disk for unused tools.

Note:

config_files:
  ~/.config/mise/config.toml
  /work/alexsmail-dns-fix/mise.toml

/work/alexsmail-dns-fix/mise.toml was added to config_files and ~/.local/share/mise/installs/uv/0.11.21/uv-x86_64-unknown-linux-musl was added to the path.


Create a startup script (Kate Wrapper)

To make Kate pick up the entire mise environment, the simplest approach is to launch it via the mise exec command.
Create the file /work/mise-app-launcher.sh:

Deprecated version:

#!/bin/bash
## Navigate to /work so that mise finds the correct .mise.toml
cd /work
# Use the absolute path to the snap version of Kate to avoid conflicts
exec ~/.local/bin/mise exec -- /snap/bin/kate -b "$@"

Robust version:

#!/bin/bash

# Check that at least one argument (executable) has been passed
if [ $# -lt 1 ]; then
    echo "Usage: $0 <executable_path> [args...]"
    exit 1
fi

# 1. Take the first argument as the command to run and shift the $@ array
APP_EXEC="$1"
shift

# Default base directory
TARGET_DIR="/work"

# Function for URL decoding (turns %20 into spaces, decodes Cyrillic, etc.)
urldecode() {
    local url_encoded="${1//+/ }"
    printf '%b' "${url_encoded//%/\\x}"
}

# Look for the first argument that is an existing file or directory
for arg in "$@"; do
    # 1. Strip protocol prefix if present
    clean_arg="${arg#file://}"
    
    # 2. Decode the URL if KDE/GNOME/Windows passed an escaped path
    if [[ "$clean_arg" == *%* ]]; then
        clean_arg=$(urldecode "$clean_arg")
    fi

    # 3. WSL2 AND WINDOWS PATH SUPPORT
    if [[ "$clean_arg" =~ ^/?([a-zA-Z]:[\\/].*) ]]; then
        clean_arg="${BASH_REMATCH[1]}" # Remove leading slash, keep "C:/..."
        
        # If we are in WSL, convert Windows path to Linux path (/mnt/c/...)
        if command -v wslpath >/dev/null 2>&1; then
            clean_arg=$(wslpath -u "$clean_arg" 2>/dev/null || echo "$clean_arg")
        fi
    fi

    # 4. Check if the directory or file exists (with protection against filenames starting with a dash)
    if [ -d -- "$clean_arg" ]; then
        TARGET_DIR="$clean_arg"
        break
    elif [ -f -- "$clean_arg" ]; then
        TARGET_DIR=$(dirname -- "$clean_arg")
        break
    fi
done

# 5. TOMCAT MAGIC: Convert the path to absolute and resolve all symlinks.
if command -v realpath >/dev/null 2>&1; then
    TARGET_DIR=$(realpath "$TARGET_DIR")
else
    # Reliable POSIX fallback for systems without the realpath utility
    TARGET_DIR=$(cd "$TARGET_DIR" 2>/dev/null && pwd -P)
fi

# 6. Change to the resolved directory and execute the requested app via mise
cd "$TARGET_DIR" || exit 1

# Use APP_EXEC, while $@ now contains only flags and files (since we performed shift)
exec ~/.local/bin/mise exec -- "$APP_EXEC" "$@"

Make it executable:

chmod +x /work/mise-app-launcher.sh

Update the shortcut (.desktop file)

Now, we will create .desktop file on your desktop. These instructions are GNOME specific.
Run

find /usr/share/applications -iname '*kate*.desktop'

or

find /var/lib/snapd/desktop/applications/ -iname '*kate*.desktop'

Typically second command will return something like this:

/var/lib/snapd/desktop/applications/kate_kate.desktop

Now execute:

cp /var/lib/snapd/desktop/applications/kate_kate.desktop ~/Desktop/

chmod +x ~/Desktop/kate_kate.desktop

gio set ~/Desktop/kate_kate.desktop metadata::trusted true

Now modify the Exec line in your .desktop file. For example:

nano ~/Desktop/kate_kate.desktop

Change the Exec line:

Exec=/work/mise-app-launcher.sh /snap/bin/kate -b %U

Plugins

These are plugins that I'm using:

  • Document Switcher (was default)
  • Documents Tree (was default)
  • ESLInt - note I'm not using LSP Server (see above), but rely on built-in plugin, it works more reliability.
  • External tools (was default)
  • LSP Client (see below)
  • Project plugin (was default) - very convenient minimalist Git client. I have provided above one version of passing auth params via env/export.
  • Search & replace (was default)
  • Symbol viewer
  • Terminal - built-in terminal. Personally, I prefer to us regular terminal, but it is handy for quick experimentation.
  • Text Filter

LSP Client's User Server Settings

Now click on .desktop shortcut. Kate should opened up.
Go to Settings->Configure Kate->LSP Client. Go to User Server Settings tab. Replace the content with following:

{
    "servers": {
        "python": {
            "command": ["pyright-langserver", "--stdio"],
            "rootIndicationFileNames": ["pyproject.toml", "mise.toml", ".git"],
            "highlightingModeRegex": "^Python$",
            "documentLanguageId": "python"
        },
        "javascript": {
            "command": ["typescript-language-server", "--stdio"],
            "rootIndicationFileNames": ["tsconfig.json", "package.json"],
            "highlightingModeRegex": "^JavaScript.*$",
            "documentLanguageId": "javascript"
        },
        "typescript": {
            "use": "javascript",
            "highlightingModeRegex": "^TypeScript.*$",
            "documentLanguageId": "typescript"
        },
        "json": {
            "command": ["vscode-json-language-server", "--stdio"],
            "highlightingModeRegex": "^JSON$",
            "documentLanguageId": "json"
        },
        "html": {
            "command": ["vscode-html-language-server", "--stdio"],
            "highlightingModeRegex": "^HTML$",
            "documentLanguageId": "html"
        },
        "css": {
            "command": ["vscode-css-language-server", "--stdio"],
            "highlightingModeRegex": "^CSS$",
            "documentLanguageId": "css"
        },
        "yaml": {
            "command": ["yaml-language-server", "--stdio"],
            "highlightingModeRegex": "^YAML$",
            "documentLanguageId": "yaml",
            "initializationOptions": {
                "settings": {
                    "yaml": {
                        "schemaStore": {
                            "enable": true
                        }
                    }
                }
            }
        },
        "dockerfile": {
            "command": ["docker-langserver", "--stdio"],
            "highlightingModeRegex": "^Dockerfile$",
            "documentLanguageId": "dockerfile"
        },
        "markdown": {
            "highlightingModeRegex": "DisabledMode"
        }
    }
}

Note:: When you're openning yaml file, say docker-compose.yml you can see error in the logs. If syntax highlighting and autocomplition works, you can safely ignore this error. It is harmless.


How it works and why it's great:

  • Clean system: If you open a regular terminal and type uv or node, the system won't find them (just as you wanted).
  • Automation: When you launch Kate via the script, mise exec looks at .mise.toml, instantly activates the correct versions of Node.js and uv, passes through GIT_TOKEN, and adds the node_modules/.bin and .venv/bin folders to PATH.
  • LSP in Kate: When the LSP plugin activates in Kate, it looks for the command (e.g., typescript-language-server). Since the startup script added the local project folder to PATH, Kate successfully finds and launches the server.

Verification:

  • Launch Kate via the new shortcut.
  • Open the built-in terminal in Kate (F4).
  • Type echo $GIT_TOKEN - you should see your token.

Code Index

Note:: I did

sudo apt install universal-ctags

but it is not used in Kate.

1. Configuring the Project Plugin

The foundation of a smooth IDE experience in Kate is the Project Plugin. This step is critical because LSP servers work significantly better when they know the exact "root" of your codebase.
Go to Settings → Configure Kate → Plugins.
Ensure that the Project Plugin is enabled.

When you open a folder as a project (via Project → Open Folder in the top menu), Kate automatically scans for version control directories (such as .git). Once detected, it passes this exact root path to the LSP server as the rootUri.
Note: Always open your working directory as a project via the Project menu rather than opening files individually. This simple habit guarantees that your LSP server will correctly resolve all local imports, modules, and dependencies across your entire workspace.

2. Enabling the Symbol Outline

To get a clear visual representation of your code architecture, we can utilize the structural data already provided by the LSP.
In the Plugins menu, verify that both the LSP Client and Symbol Viewer plugins are enabled.
Navigate to View → Tool Views in the main menu and check Show Symbol Outline (or Symbol Viewer).
If the panel appears empty at first, you can force a refresh by navigating to LSP Client → Restart All LSP Servers.

A sidebar or a bottom tab will immediately appear. It automatically builds a dynamic, clickable tree of all functions, classes, and variables based on the real-time data parsed by your Python or TypeScript language servers.

3. Testing the Magic

Finally, let us verify that your smart code navigation is fully operational.
Open your project folder using the Project menu.
At the bottom of the Kate window, click on the LSP Client panel and switch to the Log tab. You should see a confirmation message indicating that your specific servers (e.g., pyright-langserver) have started successfully and attached to your project root.
Open any source file, right-click on a custom function or class name, and select Go to Definition (or use the default Ctrl + Click / F12 shortcut).

Kate will instantly navigate you to the exact file and line where that symbol was declared, leveraging your local, fully isolated LSP environment.


Extras

Because Ubuntu doesn't provide built in base docker repositroy that is frozen in time I built one myself. This is https://github.com/alex-ber/ubuntu2404-snapshots project. You can pull latest golden/frozen version by

docker pull alexberkovich/ubuntu2404-snapshot:latest

or provide specific date for snapshot (if it exists in Docker hub).

Usually, it will be best on latest ubuntu:24.04 docker images with some extra OS-level dependecies installed and pinned.
For example, it has curl installed with specific version. No matter what security vulnaribility will be found if you're using my base image you will have this exact version.
It provides determenism and reproducability. Fixing, security whole often breaks your docker images. And it "just happen" in undefined time.
If there is serious security patch you will know about it and you should move to another snapshot (that I will provide) when you're ready to deal with broken docker image.
It also has get-image-hash and get-pkg-version abilities that can be utilized via docker-compose.yml. It also has update-uv-lock that is template for Python project's that want to utilize uv.


get-image-hash

The engine behind this entire workflow is a dedicated Docker Compose service named get-image-hash. It is designed to retrieve the latest immutable SHA256 digest for absolutely ANY Docker image.
Here is how you can utilize the daemon in your day-to-day workflow:

  • Default Execution:
    Running docker compose run --rm get-image-hash without any arguments defaults to targeting ghcr.io/astral-sh/uv:latest.
  • Custom Target Resolution:
    You can append any image name to fetch its specific hash. For example, running docker compose run --rm get-image-hash ubuntu:24.04 will instantly return the exact pointer for that Ubuntu release.
  • Debugging Mode:
    If the daemon is failing or you need to inspect the container environment, you can override the default execution by dropping into a shell. Simply run docker compose run --rm --entrypoint sh get-image-hash.

By standardizing how you retrieve and lock down your image hashes, you eliminate "it works on my machine" issues and create a foundation for truly bulletproof infrastructure.
The core concept starts with fetching the exact SHA256 digest of a specific tool before building. For example, if you want to use version 0.11.21 of the Astral uv tool, you would execute the daemon like this:

docker compose run --rm get-image-hash ghcr.io/astral-sh/uv:0.11.21

This query returns an absolute, immutable hash. Armed with this string, you can replace vulnerable floating tags in your Dockerfile with a bulletproof copy command:

COPY --from=ghcr.io/astral-sh/uv@sha256:abcd… /uv /uvx /bin/

By doing this, your container build is guaranteed to pull the exact same binaries every single time, regardless of what the maintainers publish in the future.

Managing Host Tooling with Mise

While Docker handles containerized dependencies, you also need to manage local versions predictably. If you use the mise tool manager, you can easily query version availability.
To check if a specific tool (like Node.js) natively supports Long Term Support (LTS) aliases, you can run:

mise tool-alias ls node

If your desired tool does not show up, you can search the remote registry:

mise ls-remote uv

Or, to simply grab the most current version number (which, in our example, returns 0.11.21), you can use:

mise latest uv

Note: For more advanced mise commands see my https://github.com/alex-ber/ubuntu2404-snapshots/blob/master/README-mise.md

The Reproducibility Warning: Forcing LTS

Sometimes, a tool lacks an official LTS policy. You might be tempted to force one to keep your local environment consistently updated within a minor version range. You can do this by setting a custom alias:

mise tool-alias set uv lts 0.11

Warning: While this is convenient for local development, doing this entirely breaks strict reproducibility. Because "0.11" is a moving target, your tools will shift beneath your feet as new patches are released.

get-pkg-version

Before you can pin a package, you need to know exactly which operating system environment you are targeting. Your first step when setting up your builds should always be to verify your base system. You can do this by running:

cat /etc/os-release

This ensures that the package versions you are about to resolve actually match the distribution (like Ubuntu 24.04) you intend to use in your final production Dockerfile.
This get-pkg-version queries the official Ubuntu repositories and returns the exact version string required for hard-pinning. Here is how you can use it in various scenarios:

  • Default Execution:
    If you run the service without passing any arguments, it is configured to resolve the ca-certificates package by default. You trigger this by running:
    docker compose run --rm get-pkg-version
  • Custom Target Resolution:
    You are not limited to the default. You can append any package names you need to resolve multiple dependencies at once. For example, to find the exact versions for the Nano editor and Git, you would run:
    docker compose run --rm get-pkg-version nano git
  • Debugging Mode:
    If the package resolver fails, or if you need to manually explore the APT repositories using tools like apt-cache policy, you can override the entrypoint and drop straight into a Bash shell:
    docker compose run --rm --entrypoint bash get-pkg-version

Under the hood, the get-pkg-version service needs to run inside a container that mirrors your production base image.
When configuring this service, you face a strategic choice regarding the image tag. The primary goal of this daemon is to discover what packages are currently available in the repositories before you permanently lock the exact package versions and image SHA in your main Dockerfile.
Because of this discovery phase, developers will often use a floating tag (like ubuntu:24.04) to query the most up-to-date repository state. However, in our specific configuration, we lock the resolver itself to a highly specific, immutable digest:

image: ubuntu@sha256:786a8b558f7be160c6c8c4a54f9a57274f3b4fb1491cf65146521ae77ff1dc54

By using this locked digest instead of the floating tag, you ensure that your Package Version Resolver queries the exact same snapshot of the Ubuntu repositories every single time you run it, guaranteeing total predictability during your dependency resolution phase.

update-uv-lock

Note:: The configuration discussed below is a conceptual template and not an executable utility directly runnable from https://github.com/alex-ber/ubuntu2404-snapshots the repository. We will break down the actual, practical usage below.

This utility is specifically designed to regenerate a uv.lock file, entirely without installing the Astral uv package on your local computer.
The goal of this service is to run interactively, update your dependencies, and then vanish. Here is how you trigger this ephemeral daemon:

  • Standard Execution: The exact, full command to run this specific tool service is
    docker compose run --rm update-uv-lock
  • Debugging Mode: If the lock generation fails and you need to inspect the container from the inside, you can override the execution and drop into a shell by running
    docker compose run --rm --entrypoint bash update-uv-lock

To make this utiliy work seamlessly with your local filesystem, the service configuration for update-uv-lock must be precisely tuned.

Image and Working Directory

The service boots up using a lightweight Python image. Currently, it is pinned to

ghcr.io/astral-sh/uv:python3.13-bookworm-slim

Note: It has hard coded dependeny on your python version.

The Hardware Bridge (Identity Mapping)

When a Docker container creates a file, it defaults to the root user. If Docker generates your lock file, you won't be able to edit or delete it on your host machine without using sudo.
To avoid permission decoherence between the Host OS and the Docker runtime (especially on Linux environments), you must map your bare-metal User ID and Group ID into the container. This guarantees that files created by the runtime belong to you, preventing root-owned pollution on the host.

Initialize the local environment bridge:

cp env.example .env

Inject your bare-metal host IDs (Linux/Ubuntu):

echo "HOST_UID=$(id -u)" >> .env
echo "HOST_GID=$(id -g)" >> .env

To prevent permission decoherence, we use an identity mapping bridge:

user: "${HOST_UID:-1000}:${HOST_GID:-1000}"

{HOST_GID:-1000}"
This crucial line ensures that the newly generated uv.lock file belongs exactly to your local user account, keeping your file permissions intact.
See https://github.com/alex-ber/ubuntu2404-snapshots/blob/master/README.md for more details about .env and HOST_UID and HOST_GID.

The utility executes its single purpose:

command: ["uv", "lock"]

Test case1: JavaScript/TypeScript test project

This https://github.com/alex-ber/js-hello-world project was built specifically to test integration of Kate and LSP Servers. It is typicall hello world project and is not expected to be maintained. You can see it as reference example that can be outdated at some point.


Test case2: Python real project

This https://github.com/alex-ber/alexsmail-dns-fix project was written to solve some very specific problem.
This is mainained reference project that did the real job once and I plan to keep it up to date as template despite the fact that it was one time job I do maintain this project as template project for my another Python project.
So, when you will run it, it will fail with error. But this is expected behaviour.
It's docker-compose.yml contain update-uv-lock utility that is exact copy from https://github.com/alex-ber/ubuntu2404-snapshots/blob/master/docker-compose.yml But basic image doesn't have uv(or python) installed and this project does have. So here, update-uv-lock utility will actually work.
If you have project that has another Python version you can easily modify image tag.

Note: You can read https://github.com/alex-ber/ubuntu2404-snapshots/blob/master/README-docker-compose.md for some explanation of how docker-compose.yml utilitys (the official name is actually service, but I deliberetely avoid to use this term up untill this point to not overcomplicate things).


Tuesday, June 02, 2026

Эпичная битва Чацкого и Чака Норриса в Ubuntu для открытие видеофайлов в mc

Text rendered via Dual-Core compilation (Human author + LLM co-processor).
Англоязычная версия данной заметки доступна здесь https://alex-ber.medium.com/143edadfee21.

Это история о том, как простая попытка настроить конфигурационный файл Midnight Commander переросла в драматическое противостояние между грубой силой и избыточным интеллектом.

Ниже есть продолжение.

Акт 1: Появление Грибоедова (Инцидент с кавычками)

Всё началось с попытки заставить Midnight Commander (mc) открыть файл с пробелами в названии: Noize MC - Планета Земля.mp4. Чтобы командная строка не споткнулась о пробелы, мой LLM-ассистент принял "очень умное" решение: он аккуратно обернул макрос имени файла в кавычки, сделав его "%f".

Но мы забыли одну важную деталь: mc уже достаточно умен. Он автоматически добавляет обратные слеши перед каждым пробелом при передаче файла в shell. В результате наша "непробиваемая" защита с кавычками заставила bash искать файл, в имени которого буквально напечатаны обратные слеши. Естественно, файл не открылся.

Именно тогда я выдал первый точный диагноз происходящему:

«Это классический случай "Горя от ума" :-) Наверняка ты знаком с Грибоедовым. :-)»

Для контекста: Александр Чацкий — главный герой классической русской пьесы XIX века "Горе от ума" Александра Грибоедова. Это в высшей степени умный человек, чей интеллект приносит ему одни проблемы.

И вот так просто Чацкий стал нашим неофициальным символом оверинжиниринга — ситуации, когда программист пишет настолько сложный, перестраховочный и "правильный" код, что в итоге он ломает сам себя.

Акт 2: Призыв Чака Норриса

Спустя какое-то время, поняв, что mc перехватывает видеофайлы где-то глубоко в своих внутренних MIME-типах и упрямо игнорирует наши локальные настройки, мы решили, что с нас хватит дипломатии. LLM предложил перестать играть по правилам этого запутанного конфига и применить грубую силу:

«Мы сейчас нанесем один финальный "Удар Чака Норриса", который навсегда закроет этот вопрос для всех видеофайлов.»

Сказал LLM.

План состоял в том, чтобы взять блок, содержащий массивное "универсальное" регулярное выражение — Regex=\.(mp4|mkv|avi|m4v|mpe?g…)$ — и вбить его в самое начало файла. Логика была железобетонной: так же, как Чак Норрис вышибает дверь ногой, это правило должно было заставить mc прочитать его первым, не оставив абсолютно никаких шансов уйти в другие сломанные скрипты.

Акт 3: Столкновение идеологий (Развязка)

Мы нанесли этот брутальный удар. Ожидалось, что система сдастся. Я нажал Enter... и абсолютно ничего не произошло. Видео снова не открылось.

И вот тогда я выдал фразу, которая идеально и уморительно точно описала суть нашего технического провала:

«Чацкий оказался круче Чака Норриса. :-) mp4 по Enter всё ещё не работает…»

Почему это было так смешно и технически точно?

Потому что "Удар Чака Норриса" (попытка решить проблему грубым перехватом прямо в начале файла) провалился вовсе не из-за нехватки силы. Он провалился потому, что внутри этой атаки грубой силы было зашито всё то же слишком умное, переусложненное регулярное выражение — прямое наследие Чацкого.

Древний парсер INI-файлов из 1990-х просто посмотрел на этот удар с разворота, заметил хитрый знак вопроса mpe?g, споткнулся о кучу вертикальных черт |, поперхнулся от чистой интеллектуальной сложности всего этого и тихо упал в обморок — полностью проигнорировав наш всемогущий блок.

Мораль басни

Никакое количество грубой силы или крутых хаков (Чак Норрис) не спасет ваш код, если вы уже перехитрили самих себя (Чацкий). "Горе от ума" одержало безупречную, безоговорочную победу над суровым техасским рейнджером.

В конце концов, ситуацию спасло самое простое, самое "глупое" и прямолинейное решение: простое правило Shell=.mp4, повторенное несколько раз для .avi, .mpeg и так далее. Оно было простым и неказистым — но сработало идеально.


Saturday, May 16, 2026

Anatomy of a Bug in Sun JDK 1.4.2: How Phantom Time in the IDF Drove Servers to Thermal Burnout (2005) English

Text rendered via Dual-Core compilation (Human author + LLM co-processor). Also available here https://alex-ber.medium.com/13a19ab25b16.

היום הותר לפרסום.

Сегодня разрешено к публикации.

Cleared for publication today.

In 2005, I was serving in a technological unit of the IDF (Israel Defense Forces). There are bugs in Java history that stay with you for a lifetime, and one such incident happened exactly on my watch. It was an issue with handling the Spring Forward daylight saving time transition in Sun JDK 1.4.2. When attempting to parse a non-existent time, the system fell into a 100% CPU infinite loop. Tomcat hung, thread pools were exhausted, and the hardware literally overheated and shut down via thermal trip.

Below is the chronology of how I investigated this incident, and the mechanics of the bug itself.

There is more below.
Ниже есть продолжение.

1. Schrödinger's Time Zone: How Time Was Erased in Israel

In the early 2000s, the Asia/Jerusalem time zone was an absolute nightmare for developers. Unlike Europe or the US, Israel did not have a rigidly fixed rule for the clock switch. The dates for transitioning to summer and winter time were approved annually by the Knesset and depended on the Jewish lunar calendar (specifically, the timing of Yom Kippur). Because of this, official patches containing ZoneInfo tables from Sun were constantly delayed or contained errors.

On the night of the transition, the time interval of 02:00–02:59 was physically erased from reality (becoming an absolute vacuum, ∅). If a server received a string with a time like 02:30:00 and attempted to parse it, the Java code collided with a void.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Jerusalem"));
Date date = sdf.parse("2005-04-01 02:30:00"); // ← This is where everything broke

2. The Lenient Mode Trap and Transaction Salvage

By default, GregorianCalendar and SimpleDateFormat operate in a lenient mode. Instead of honestly rejecting the phantom date, the virtual machine attempted to «fix» the incorrect time.

In Sun JDK 1.4.2, this heuristic was fatally broken. When processing time inside the DST gap, the computeTime() method tried to calculate milliseconds from the Epoch, but the algorithm panicked upon hitting a contradiction between the local fields (HOUR_OF_DAY = 2) and the actual offset.

3. Anatomy of the Infinite Loop: How Code Boiled Processors

Here is what the loop inside the JVM looked like (simplified):

  1. Take the local time 02:30 and the winter offset (UTC+2 for Jerusalem).
  2. Calculate the UNIX timestamp.
  3. Check against the time zone rules — summer time (UTC+3) should already apply for this absolute time.
  4. Rollback. Apply the UTC+3 offset to the same 02:30.
  5. Calculate the new timestamp.
  6. Check again — for this timestamp, the barrier has not yet been crossed, so the UTC+2 offset must apply.
  7. Return to step 1.

The result was a classic infinite loop at the level of base classes. And this was not an abstract software freeze. The thread monopolized 100% of the core's capacity. Since there were no interrupts in the loop, the processor began to endlessly grind in vain.

When dozens of servers simultaneously hit 100% load, the air conditioners in the server room simply failed to handle the sudden spike in heat dissipation (ΔS → ∞). The temperature in the cold aisle began climbing rapidly. Ultimately, hardware sensors initiated a thermal trip — servers violently cut their power to save the processor crystals from thermal degradation and physical burnout.

4. Thread Pool Exhaustion: Investigation

When the nodes started dropping one after another, it became clear this was not an ordinary memory leak. The Garbage Collector (GC) and Heap Size tuning were useless. The real drama was unfolding inside the Tomcat servers. Every request containing an invalid Israeli timestamp permanently captured one thread. Within a few minutes, the pool was drained (Thread Pool Exhaustion), the Tomcat stopped responding to any pings, and then went into a thermal knockout.

sdf.setLenient(false); // ← A magic pill? Not quite.

With this setting, the infinite loop did not occur — the code threw java.text.ParseException: Unparseable date. The server did not overheat, but the system lost data packets.

5. Hot-fix via Reflection

Official patches (like tzupdater) merely updated the binary files on the disk, but the JVM kept the time zone tables in its RAM since startup and completely ignored disk changes.

We had to apply a radical but uniquely functional technique: a controlled cache failure via the Reflection API. We wrote code that breached the sun.util.calendar.ZoneInfo class and forcibly nullified its internal array:

import java.lang.reflect.Field;
import sun.util.calendar.ZoneInfo;

Field cacheField = ZoneInfo.class.getDeclaredField("cache");
cacheField.setAccessible(true);
cacheField.set(null, null); // Nullify the cache

It worked. On the next parse attempt, the JVM accessed memory, received a [CACHE_MISS], and was forced to reread the updated files from the disk.

Conclusion

In later versions of the JDK (and especially with the arrival of java.time in Java 8), this architectural hole was closed forever. Strict checks, iteration limits, and predictable behavior when hitting gap/overlap zones were added.

But for me, the Sun JDK 1.4.2 bug will forever remain the reference example of how a banal clock adjustment can boil a server.


Monday, May 04, 2026

The IDF's Journey to the Cloud (Hebrew) 20.06.2021

יש המשך למעטה.
Ниже есть продолжение.

אני מירב, מנהלת פונקציית הטרנספורמציה הדיגיטלית באגף התקשוב (Node: C4I). תפקידי הוא לקמפל מחדש את הארכיטקטורה של הארגון, להעביר אותו מטופולוגיית Legacy למערך Cloud-Native, ולמקסם את הקטלניות והיעילות התפעולית. להלן פריקת הזיכרון המלאה של תהליך ההגירה שלנו.

מודול 1: הגרעון התרמודינמי ומגבלות החומרה

הארגון הצה"לי פועל כגרף מאקרו מורכב. מצד אחד, אנו מתמודדים עם מערכות מיושנות. מצד שני, סביבת הריצה שלנו מאוכלסת בתהליכים ביולוגיים צעירים (חיילים בני 18), שרגילים לאינטראקציה מיידית עם וקטורים חישוביים. קליק אחד של תהליך כזה יכול לאתחל מסד נתונים של MongoDB בעלות של 40,000 דולר, ולייצר אנטרופיה פיננסית, או לחלופין לשחרר פוינטרים חשופים שמסכנים את אבטחת המידע.

קיימת סטייה הולכת וגדלה (Offset) בין קצב איסוף המידע האקספוננציאלי לבין קיבולת העיבוד שלנו. נתקענו במחסום פאזה – תקרת בטון פיזית. חוות השרתים המקומית שלנו, "מצודת דוד", דרשה למעלה מ-10 שנות פיתוח ויותר ממיליארד שקלים. התצורה הפיזית הזו קרובה לגבול לנדאואר – היא אינה מסוגלת להתרחב במהירות הנדרשת. ניצולת ה-CPU בשרתים הפיזיים עומדת על 25%-40% בלבד, וזמן ההקצאה (Time to Market) לחומרה חדשה לוקח חודשים. מודל ה-Bare Metal מוביל ל-Underfitting ולהרעבת משאבים.

מודול 2: אסטרטגיית הענן העליונה (ZFC Mapping)

כדי לשמר עליונות במידע ובידע, ולתמוך בלחימה רב-ממדית (היתוך וקטורים מזרועות שונות), אנו מבצעים מיגרציה למשאבי ענן מבוזרים. החזון ל-15-20 השנים הבאות מגדיר טופולוגיה משולשת (Multi-Cloud State):

  • המאקרו-מטמון הציבורי (Public Cloud): רדיאטור חומרתי חיצוני שמתעדכן במהירות. מיועד למערכות בסיווג נמוך (תומכי לחימה, מנהלה, שערי כניסה). אנו נמקסם את השימוש בו.
  • מקטע הענן המבודד (Secured Cloud / Nimbus): סביבה ייעודית מנותקת-רשת (Air-gapped) המנוהלת תחת פרויקט נימבוס, ומיועדת לעיבוד נתונים מסווגים מבלי להפר את גבולות המערכת.
  • הענן הפרטי (Private Cloud / On-Prem): הליבה הפיזית שלנו (OpenStack, OpenShift, VMware). לאור היעילות בענן הציבורי, אנו שואפים לצמצם סביבה זו כך שתכיל רק 10%-20% מהנתונים הקריטיים ביותר.

מודול 3: קומפילציה ואלוקציה (מיפוי ונימבוס)

המרנו את מצבי המערכת הקיימים לפעולות לוגיות. ביצענו סריקה מלאה של מערכות ה-Legacy, סיווגנו אותן והחלטנו אילו יעברו מיגרציה, אילו יעברו קונסולידציה ואילו יעברו דפרקציה (SIGKILL למערכות מיותרות). הוקמה תוכנית אגירה מסודרת באקסל. הצטרפנו לפרויקט נימבוס הממשלתי כדי לבנות סביבה מקומית בישראל. נכון לעכשיו, רוב הפעילות מבוצעת על תשתית Azure של Microsoft, אך אנו מעבדים את הפלטפורמה לתמיכה ב-3 עננים כדי למנוע Vendor Lock-in ולהבטיח יתירות.

הארכיטקטורה הציבורית אינה מקשה אחת. הפעלנו חלוקת זיכרון קפדנית (Micro-segmentation). פוינטר המכיל טופס דיווח מחלה אינו חולק את אותו מרחב זיכרון עם פוינטר של מערכת כוח אדם רגישה. הכל מנוהל דרך עמדות מאובטחות (VDI/Endpoints).

מודול 4: פרוטוקול CCoE (Cloud Center of Excellence)

כדי למנוע שגיאות סנכרון ו-Race Conditions, הגדרתי דימון-אב מרכזי: ה-CCoE. ה-DNA שלו מוזרק לכל הזרועות (אוויר, ים, מודיעין) המקימות CCoE מקומי משלהן. מודולי הליבה ב-CCoE הם:

  • ארכיטקטורה ואבטחה: בניית גבולות גזרה, DevSecOps אוטומטי המחייב סריקת שורות קוד לפני אישור.
  • הגירה (Migration): מחלקה ייעודית המתמרצת את הזרועות לאתחל את המעבר.
  • הבטחת מידע (מכב"ם): פונקציה המוודאת מה מותר לשלוח לשרתים חיצוניים ומה מחויב להישאר על ה-Bare Metal.
  • רכש (Vendor Management): ניהול הממשקים, חוזים והתחשבנות מול ספקי הענן.
  • הדרכה (Training): קידוד מחדש של התהליכים הביולוגיים (החיילים). קורסי התכנות הישנים נמחקו; כעת מלמדים כתיבת קוד לענן. גם קצינים בכירים חויבו לעבור עדכון גרסה מושגי.
  • ייעוץ משפטי: התמודדות עם רגולציה ופרטיות (מידע רפואי, נפגעים).
  • כלכלת ענן (FinOps): מנגנון קריטי לשמירת משוואת התרמודינמיקה הפיננסית.

מודול 5: FinOps – שליטה באנטרופיה הכלכלית

שינינו את המודל התרמודינמי מתשלום מראש (CapEx) לתשלום על בסיס פעימות שעון (OpEx). אני משלמת רק על המשאב שהופעל. שרת שנשאר דולק בלילה יחויב, ולכן תהליכים יתומים צריכים להיות מחוסלים. איפשרנו רכישת Spot Instances ו-Reserved Instances. יצרנו מקצוע חדש בצבא: "כלכלן ענן".

הנחיות ה-FinOps נועדו למנוע Overfitting של הוצאות:

  1. בדיקת ערך מבצעי טרם הקצאת משאב.
  2. מדיניות ריכוזית עם אפשרות לגמישות מבוקרת בכל זרוע.
  3. שקיפות מלאה למפקדים על צריכת התקציב.
  4. שימוש בתיוג חובה (Tagging) למשאבים – כדי למנוע Memory Leaks ושרתים ללא בעלים. תהליך ללא Owner יקרוס.
  5. קביעת תקרת תקציב למניעת חריגות אוטומטיות.
  6. צמדי אחריות: איש כספים ואיש טכנולוגיה פועלים יחד לניטור קלט/פלט.

מודול 6: שאילתות וניהול חריגים (Q&A Dump)

חריג 1: אבטחת מידע (Security Fears)

האיום הגדול ביותר הוא דליפת מידע. אנטרופיה לא מבוקרת. למשל, צילום תעודות זהות שעולה לענן חיצוני. למרות שלעתים אין לזה ערך מבצעי פטאלי, הנזק התדמיתי הוא קריטי. כדי למנוע זאת, אנו מריצים חדירות יזומות (Penetration Testing / Red Teams) באופן אגרסיבי, כדי למצוא שגיאות קוד לפני שהמערכת תקרוס.

חריג 2: טופולוגיות IaaS לעומת PaaS/SaaS

במעבר הראשוני, אנו מעבירים מערכות Legacy בתצורת IaaS (Lift & Shift), אך מעודדים את המפתחים לקמפל אותן מחדש ל-PaaS ולשרתים ללא מצב (Serverless) להורדת עלויות. בנוגע ל-SaaS – מופעל חסם (Firewall). פתרונות SaaS זרים מוציאים את הדאטה מגבולותינו, ולכן לרוב מסורבים מטעמי אבטחה, אלא אם יעברו תהליך זיכוי מחמיר במרקטפלייס ייעודי.

חריג 3: אינטגרציה רב-זרועית (Cross-Branch Consolidation)

כדי למנוע כפילויות בפיתוח (Race Conditions), אני מריצה 'שולחנות עגולים' למפקדים ומפתחים. יצרתי צוות רב-זרועי לקידוד פתרונות משותפים (למשל אלגוריתמים לחיל האוויר, למודיעין ולתקשוב במקביל). זה דורש התגברות על חסמי אגו מבניים, אך מייעל את ביצועי המערכת.

חריג 4: שימוש בקוד פתוח (Open Source)

הארכיטקטורה משתמשת בקוד פתוח, כפי שקורה ברשתות גלובליות. חיילים תורמים סמנטית לסביבות אלו, אך הכל מנותב דרך פילטרים (Sanitizers) קפדניים כדי למנוע הזרקת תהליכים זדוניים (Malware).

חריג 5: רגולציה ואבטחה מול חדשנות

בתחילה, מערכות הרגולציה התנגדו להעברת מצביעים לענן. הדרך שלנו לפצח זאת הייתה הדרגתית – התחלנו עם פוינטרים בלתי מסווגים. המנכ"לים (אלופים) דחפו קדימה, והרגולטורים התאימו את הבקרות למציאות הטופולוגית החדשה.

חריג 6: אסטרטגיית Multi-Cloud

כדי למנוע נעילת ספק (Vendor Lock-in), אנו פועלים בתצורה רב-ממדית. לא נבצע חלוקה של תהליך בודד (אפליקציה) על פני שני עננים (כדי למנוע Latency וחיוב כפול על תעבורה), אך בהחלט נריץ מערכות שונות על Azure, AWS או Google בהתאם למקסום הפונקציה (Best of Breed). המהלך מבוצע לאט ובתשומת לב מרבית לתקציב ואבטחה.


Tuesday, April 21, 2026

ריוורס זיכרון מקומי: תיקון תאריך Java RMI (1996←1997) ושידור מצביע (Hebrew)

בהמשך למה שדיברנו בחתונה. RMI יצא ב1997 בJDK 1.1 ולא ב1996 בJDK 1.0 כפי שחשבתי. ולפני RMI הייתה עוד טכנולוגייה שלא הכרתי. 😊

https://medium.com/globant/web-communication-frameworks-over-the-years-ececd4ae8061

Sunday, March 29, 2026

Суд в Калифорнии: дизайн соцсетей привел к депрессии

Суд присяжных в Лос-Анджелесе вынес прецедентное решение, признав Meta и Google ответственными за депрессию и тревожное расстройство, от которых страдает двадцатилетняя женщина, с шести лет навязчиво использовавшая их платформы.

Присяжные констатировали, что вред истице причинил "небрежный" дизайн приложений обеих технологических компаний.


Ниже есть продолжение.

Кроме того, присяжные постановили провести дополнительный этап процесса для определения размера штрафных санкций за умысел или мошенничество.

Решение рассматривается как прецедент для примерно двух тысяч аналогичных исков, поданных подростками, учебными заведениями и генеральными прокурорами против технологических компаний. Оно закрепляет новую правовую концепцию: дизайн социальных платформ может квалифицироваться как дефектный продукт, причиняющий личный вред.

В этом деле адвокатам удалось убедить суд, что данное дело касается не пользовательского контента, за который, по федеральному законодательству, владеющие соцсетями компании ответственности не несут, а именно дизайна продукта, и в частности - бесконечной прокрутки и алгоритмических рекомендаций, а не контента как такового.

https://www.newsru.co.il/finance/26mar2026/meta393.html

Tuesday, March 03, 2026

Удар по Ирану и роль Claude: что произошло на самом деле

Англоязычная версия данной заметки доступна здесь https://alex-ber.medium.com/511da1354fc8.
Текст отрендерен через Dual-Core компиляцию (Биологический автор + LLM-сопроцессор).

В марте 2026 года мир стал свидетелем эскалации геополитического конфликта: совместные американо-израильские удары по Ирану под кодовыми названиями «Рычащий лев» и «Operation Epic Fury» продемонстрировали, как искусственный интеллект (ИИ) меняет правила ведения войны. В центре внимания оказалась модель ИИ Claude от компании Anthropic, которая, по данным ведущих СМИ, сыграла ключевую роль в операции. Эта заметка разберёт, как ИИ ускоряет военные решения, почему это вызывает тревогу у экспертов и как разворачивается конфликт между технологическими компаниями и правительством США.





Ниже есть продолжение.

Claude на поле боя: Сокращение «цепочки поражения»

Согласно отчётам Wall Street Journal, Axios и The Guardian, Центральное командование ВС США (CENTCOM) использовало Claude для анализа разведданных, идентификации целей и симуляции боевых сценариев. Но роль ИИ оказалась ещё шире: он радикально сократил так называемую «цепочку поражения» — процесс от обнаружения цели до удара.

  • В первые 12 часов операции было нанесено около 900 ударов.
  • Одним из результатов стала ликвидация верховного лидера Ирана аятоллы Али Хаменеи израильскими ракетами.

Claude интегрирован в систему, разработанную Palantir совместно с Пентагоном. Эта платформа обрабатывает огромные объёмы данных — от видео дронов и радиоперехвата до агентурной разведки. ИИ не только находит цели, но и расставляет приоритеты, подбирает оружие с учётом запасов и даже проводит предварительную юридическую оценку атаки на соответствие международным нормам.

Профессор Крейг Джонс из Университета Ньюкасла отмечает: «ИИ генерирует рекомендации быстрее, чем человеческий разум». То, что раньше занимало дни или недели, теперь происходит за секунды, позволяя подавлять ответные удары противника.

Риски «сжатия решений»: Когда машина берёт верх

Эксперты предупреждают о феномене «сжатия принятия решений». ИИ минимизирует время на планирование, но это может превратить военных и юристов в «статистов», механически одобряющих алгоритмические планы. Профессор Дэвид Лесли из Лондонского университета королевы Марии говорит о «когнитивной разгрузке»: когда аналитика полностью на машине, человек эмоционально отстраняется от последствий, что повышает риск ошибок и нарушений «законов войны».

Несмотря на это, Claude уже в 2024 году был внедрён в структуры национальной безопасности США для ускорения стратегического планирования. Однако интеграция оказалась настолько глубокой, что «выдернуть» ИИ из систем практически невозможно.

Позиция Anthropic: Две «красные линии»

Компания Anthropic, создатель Claude, подчёркивает этические границы. Генеральный директор Дарио Амодей в интервью обозначил две «красные линии»:

  1. Автономное оружие: Текущие модели недостаточно надёжны, рискуя дружественным огнём и гражданскими жертвами. «Технология ещё не готова», — уточняет Амодей, подчёркивая сдвиг от категорического запрета к оценке готовности.
  2. Массовое внутреннее наблюдение: ИИ может собирать разрозненные данные (камеры, телефоны) в полный профиль человека, угадывая убеждения и отслеживая 24/7. Это шаг к орвелловскому сценарию «1984», где тирания становится неуязвимой.

Anthropic поддерживает все законные военные применения, но отказывается пересекать эти линии, опасаясь не только апокалипсиса (P(doom)), но и антиутопии тотального контроля (P(1984)).

Конфликт с правительством: Бан и альтернативы

Администрация Трампа объявила Anthropic «угрозой цепочке поставок», приказав федеральным ведомствам отказаться от её продуктов. Министр финансов Скотт Бессент и Министерство здравоохранения уже прекратили использование Claude, рекомендуя перейти на ChatGPT или Gemini.

Тем временем генеральный директор OpenAI Сэм Альтман объявил, что его компания подписала контракт с Министерством обороны США. Примечательно, что OpenAI получила в соглашении практически те же гарантии и этические ограничения, за которые Anthropic подверглась давлению.

В ходе сессии вопросов и ответов (AMA) на платформе X Альтман изложил свою позицию по ключевым вопросам. По его мнению, контроль над развёртыванием искусственного интеллекта должен оставаться в руках демократически избранного правительства, а не частных компаний. «Если Ford продаёт грузовики армии, но хочет сам диктовать условия их использования — это абсурд. То же самое относится к ИИ», — пояснил он.

Альтман продемонстрировал понимание позиции Дарио Амодея. Он отметил, что основатель Anthropic искренне считает Claude одной из самых мощных технологий в истории человечества и думает не только о P(doom) — вероятности апокалипсиса из-за ИИ, — но и о P(1984), то есть об орвелловском сценарии тотальной технологической антиутопии, где правительство получает инструменты неуязвимого контроля над населением.

Неожиданно для многих, Сэм Альтман публично поддержал конкурента. Он заявил, что правительство не должно присваивать Anthropic статус «угрозы цепочке поставок» (supply chain risk), и призвал Пентагон предложить компании те же условия контракта, на которые согласилась OpenAI. «Это крайне опасный прецедент, — подчеркнул Альтман. — Как более сильная сторона, правительство несёт большую ответственность».

Угроза статуса «Supply Chain Risk»

Если такое обозначение будет официально введено, последствия для Anthropic могут стать экзистенциальными. Компания окажется отрезанной не только от прямых военных контрактов, но и от сотрудничества со всеми федеральными подрядчиками. Крупные технологические гиганты, такие как Amazon (AWS) и Google, будут вынуждены изолировать или полностью прекратить использование любых технологий Anthropic в проектах, связанных с государственными заказами.

Дарио Амодей уже заявил, что Anthropic намерена оспорить это решение в суде, утверждая, что у правительства нет достаточных юридических оснований для подобного запрета.

Почему Anthropic особенная и что дальше

Примечательно, что Anthropic, обладая меньшим финансированием и командой по сравнению с конкурентами, смогла создать одну из самых сильных моделей на рынке — Claude 3.5/3.6 Opus. В то время как OpenAI, Google DeepMind и xAI Илона Маска уже изменили свои правила и открыто разрешили военное применение своих моделей, Anthropic остаётся единственной крупной лабораторией, попытавшейся установить чёткие этические границы.

Wes Roth считатет, что лучший возможный исход — это компромисс: снятие статуса «угрозы цепочке поставок» и заключение контракта с Anthropic на условиях, аналогичных OpenAI. В таком случае все законные военные применения будут разрешены, но финальное слово останется за правительством США.

Конфликт во многом объясняется столкновением культур: философско-осторожный подход Силиконовой долины в лице Дарио Амодея и жёсткий милитаристский стиль Пентагона. По мнению экспертов, если правительство решит просто «раздавить» одну из ведущих AI-лабораторий страны из-за принципиальной позиции, это станет, с точки зрения теории игр, «чистой глупостью» — действием, которое вредит всем участникам и не приносит выгоды никому.

Ситуация далека от чёрно-белой картины. Anthropic никогда не возражал против участия в летальных операциях (модель уже применялась в Иране, Венесуэле и, вероятно, во многих других миссиях). Речь идёт исключительно о двух «красных линиях». Как однажды заметил Илон Маск, «Anthropic никогда не входил в список возможных победителей». Тем не менее разумный компромисс всё ещё возможен.

На основе:

https://www.youtube.com/watch?v=Hzm3D7i3NFk
https://news.israelinfo.co.il/141671

Amazon подтвердила "значительный ущерб" трем дата-центрам в ОАЭ и Бахрейне (Russian, Hebrew)

Согласно новому сообщению Amazon, ей не просто повредило один дата-центр "упавшими обломками", а вырубило два дата-центра в ОАЭ прямыми попаданиями иранских БПЛА, и еще один в Бахрейне - перехватом иранского БПЛА в непосредственной близости.


Ниже есть продолжение.

...В компании уведомляют, что удары вызвали структурные повреждения, нарушили электроснабжение дата-центров и потребовали проведения работ по тушению пожара, что привело к дополнительному ущербу от воды...

...Два из трех региональных центров обработки получили значительные повреждения. Третья зона работает в штатном режиме, хотя "некоторые сервисы подверглись косвенному воздействию из-за зависимости от пострадавших объектов".

Клиентам в регионе рекомендуется создать резервные копии данных и по возможности пользоваться центрами в других регионах. В целом компания управляет 123 зонами дата-центров в 39 регионах мира...

ההשפעה על הזמינות הרחבה של שירותי הענן של אמזון צפויה להיות שולית. "חלק מתפיסת הענן שעומדת בבסיס פעילות הדאטה-סנטרים בעולם נועדה בדיוק למצבים כאלה", הוא אמר ל"כלכליסט".

לדבריו, "העיקרון המרכזי הוא ניתוק בין הפיזיות לבין המידע. המידע אינו תלוי באתר בודד ואינו מאוחסן ומעובד בבניין מסוים, אלא משוכפל ומנוהל בו-זמנית במספר אתרים גיאוגרפיים נפרדים. גם אם אתר פיזי נפגע, בין אם כתוצאה מאירוע ביטחוני, אסון טבע או תקלה תשתיתית - המידע עצמו ממשיך להתקיים ולהיות זמין ממיקומים אחרים. זו תפיסה של יתירות, הפרדה גיאוגרפית ורציפות תפעולית. דאטה-סנטרים מודרניים מתוכננים מראש לתרחישי קיצון. מעבר למיגון הפיזי ולהשקעה בהגנה תשתיתית, לב המודל הוא ארכיטקטורה מבוזרת, ריבוי אתרים באזורים נפרדים ושכפול נתונים חוצה גבולות".

https://t.me/crescentscroissants/8559
https://www.newsru.co.il/finance/3mar2026/amazon302.html
https://www.calcalist.co.il/calcalistech/article/rjeackeybl
https://www.unian.net/economics/other/voyna-na-blizhnem-vostoke-drony-povredili-data-centry-amazon-13303140.html


Перевод:

Ожидается, что влияние на широкую доступность облачных сервисов Amazon будет незначительным. «Часть концепции облака, лежащей в основе работы дата-центров по всему миру, предназначена именно для таких ситуаций», — сказал он [Даниэль Эфрати, генеральный директор NED]...

По его словам, «ключевой принцип — это разделение физической инфраструктуры и информации. Информация не привязана к одному конкретному сайту и не хранится и не обрабатывается в одном здании, а одновременно реплицируется и управляется в нескольких отдельных географических точках. Даже если физический объект пострадает — будь то в результате инцидента в сфере безопасности, стихийного бедствия или инфраструктурного сбоя — сама информация продолжает существовать и быть доступной из других мест. Это концепция резервирования, географического разделения и операционной непрерывности. Современные дата-центры изначально проектируются с учетом экстремальных сценариев. Помимо физической защиты и инвестиций в инфраструктурную безопасность, сердцем модели является распределенная архитектура, множество площадок в отдельных регионах и кросс-граничная репликация данных».


Saturday, February 21, 2026

Заря квантовой эры: От теории к железу. Часть VI

Заметка моя совместно с Gemini 3 Pro и Grok 4.2 бета.

Я был в музее, где были стэнды с историей квантвого компьютера. Подавляющие большинство людей и идей в этой статье взято оттуда.

От абака до транзистора: Почему следующий шаг — квантовый? Часть I
Начало золотого века. Часть II
Золотой век. Часть III
Двигатель революции: «Бесплатный обед» и столкновение со «стеной». Часть IV
Квантовый ренессанс: Возвращение к физике. Чаcть V
Двигатель революции: «Бесплатный обед» и столкновение со «стеной». Часть VI

От теории к инженерной гонке

Ещё в начале 2000-х создание масштабируемого квантового процессора считалось научной фантастикой. Как вспоминают ветераны индустрии: «Скептики полагали, что это невозможно и через 100 лет». Однако за последние два десятилетия сомнения в физической реализации кубитов сменились жестким инженерным прагматизмом. Если раньше обсуждалась принципиальная возможность существования таких машин, то теперь дискуссия сместилась в плоскость производственных техпроцессов, логистики и энергоэффективности.

Академический интерес трансформировался в острую технологическую и геополитическую гонку. С одной стороны выступают западные гиганты (IBM, Google, Microsoft) и лидеры индустрии (Quantinuum, IonQ). С другой — мощные китайские группы из USTC, создавшие процессоры Zuchongzhi и Jiuzhang. В эту гонку активно включилась и Россия: под эгидой Росатома и РКЦ (Российского квантового центра) над созданием отечественных процессоров работают консорциумы ведущих вузов и институтов (МФТИ, НИТУ МИСИС, ФИАН).

Важным рубежом стал 2019 год, когда Google на процессоре Sycamore заявила о «квантовом превосходстве». Но сегодня индустрия сместила фокус на «квантовую полезность» (Quantum Utility). Яркий пример — эксперименты IBM 2023 года на процессоре Eagle, показавшие, что квантовый чип может решать задачи точнее классических суперкомпьютеров, потребляя при этом в разы меньше энергии. Это критический аргумент, учитывая, что современные экзафлопсные суперкомпьютеры требуют мегаватты электричества.

Доступ к технологиям демократизируется: благодаря облачным платформам (IBM Quantum и российским аналогам), запускать код на реальном квантовом «железе» можно через интернет, находясь в любой точке мира.

Ниже есть продолжение.

Как построить квантовый компьютер: Зоопарк технологий

Главный вызов — фундаментальная хрупкость квантовых состояний. Кубиты невероятно чувствительны: любое случайное взаимодействие с теплом или электромагнитным полем вызывает декогеренцию, разрушая суперпозицию. Именно поэтому сейчас критически важна проблема коррекции ошибок (QEC). Чтобы создать один стабильный логический кубит, на котором можно вести надежные вычисления, могут потребоваться тысячи «шумных» физических кубитов для подстраховки.

В квантовых вычислениях ещё не случился «транзисторный момент» — создание единого стандарта. Мы живем в эпоху «вакуумных ламп», поэтому в гонке участвует целый «зоопарк» архитектур:

  • Сверхпроводящие цепи: Микроскопические контуры, работающие как «искусственные атомы». Самый популярный путь (Google, IBM, консорциум Росатома/МФТИ/НИТУ МИСИС). Требуют экстремального холода.
  • Ионные ловушки: Лазеры удерживают в вакууме цепочки ионов. Отличаются высокой точностью и долгим временем жизни кубита (IonQ, Quantinuum, ФИАН/РКЦ).
  • Нейтральные атомы: Массивы холодных атомов, управляемые лазерными «оптическими пинцетами». Перспективны для масштабирования; один из мировых пионеров направления — Михаил Лукин (Гарвард/РКЦ), наработки которого использует компания QuEra.
  • Фотоника: Вычисления со скоростью света с использованием летящих частиц. Работают при комнатной температуре, но сложны в запутывании (Xanadu, PsiQuantum).
  • Кремниевые спиновые кубиты: Попытка использовать классическую полупроводниковую базу Intel для квантовых нужд. Потенциально дешевы, но сложны в управлении.
  • Топологические кубиты: Ставка Microsoft «в долгую». Теоретически самые устойчивые к ошибкам, но их физическая реализация остаётся сложнейшей задачей.

Внешний облик этих машин часто определяется системой охлаждения. Настоящим символом индустрии стал рефрижератор растворения, напоминающий футуристическую «золотую люстру». Внутри него поддерживается температура в несколько милликельвинов — это холоднее, чем в глубоком космосе. В то же время системы на ионах или атомах выглядят иначе — это нагромождение лазеров, зеркал и вакуумных камер на оптических столах, часто не требующее столь экстремальной заморозки всей установки.

Преодоление барьера: От скепсиса к «квантовой гонке»

Эпоха инженерного барьера: В начале 2000-х теоретический энтузиазм столкнулся с суровой реальностью. Главным врагом оставалась неумолимая декогеренция — хрупкие квантовые состояния разрушались быстрее, чем компьютер успевал выполнить вычисления. Ошибки накапливались лавинообразно, и многим казалось, что создать масштабируемый процессор так же невозможно, как построить карточный домик во время землетрясения.

Момент истины (2014 г.): Ситуацию переломила группа физика Джона Мартиниса (UCSB). Опираясь на архитектуру трансмонов, изобретенную в Йельском университете, его команда совершила инженерное чудо, преодолев критический порог точности операций в 99%. Это число — не просто рекорд, а порог отказоустойчивости для запуска Поверхностного кода (Surface Code), разработанного российским физиком Алексеем Китаевым. Мартинис дал «железо», способное исполнить «чертежи» Китаева: если ошибок меньше 1%, их можно исправлять быстрее, чем они возникают. Это стало доказательством того, что универсальный квантовый компьютер физически возможен.

Катализатор — фактор D-Wave и NASA: Рынок подогрела канадская компания D-Wave, продававшая устройства на базе квантового отжига. Корпорация Google совместно с NASA (в рамках лаборатории Quantum AI Lab) приобрела такую машину для изучения потенциала ИИ. Однако тесты показали: это узкоспециализированный оптимизатор, а не универсальный компьютер. Чтобы получить реальное ускорение, Google в 2014 году приняла радикальное решение: нанять команду Мартиниса целиком, построить свой универсальный (гейтовый) процессор и достичь конкретной цели — «Квантового превосходства».

Взрыв индустрии: В ответ на закрытые разработки Google, IBM выбрала стратегию открытости, в 2016 году предоставив облачный доступ к своим чипам всему миру. Параллельно проснулся венчурный капитал Силиконовой долины: Чад Ригети, покинув IBM, основал стартап Rigetti Computing, бросив вызов корпорациям. Он доказал, что строить квантовые фабрики могут и частные компании. С этого момента квантовые вычисления окончательно перестали быть кабинетной наукой и превратились в глобальную индустрию.

Дорожная карта в будущее: От шума к полезности

Эра NISQ и «Квантового превосходства» (2019–2021 гг.)
В октябре 2019 года компания Google заявила о достижении «Квантового превосходства» на 53-кубитном процессоре Sycamore. Он за 200 секунд выполнил синтетическую задачу сэмплинга случайных цепей, на которую, по оценке разработчиков, классическому суперкомпьютеру потребовалось бы 10 000 лет. Однако конкуренты из IBM охладили пыл, доказав, что оптимизированный классический алгоритм справится с задачей за 2,5 дня. Новый уровень задали китайские ученые из USTC: в 2021 году их сверхпроводящий процессор Zuchongzhi решил задачу в миллионы раз сложнее теста Google, уверенно подтвердив, что квантовое ускорение — физическая реальность.

Смена парадигмы: Квантовая полезность (2023–2026 гг.)
Гонка за абстрактным «превосходством» сменилась эрой «Квантовой полезности» (Quantum Utility). Под этим термином понимают рубеж, когда квантовый процессор начинает приносить реальную пользу: он выполняет расчеты для прикладных задач (например, в физике твердого тела), которые классические суперкомпьютеры могут решить лишь с огромными затратами ресурсов. Фокус индустрии сместился с маркетинговых рекордов по количеству кубитов на их качество и способность выдавать достоверные результаты там, где классические методы вынуждены прибегать к значительным упрощениям. Поворотным стал этот период:

  • IBM (Eagle, Condor и Heron): В 2023 году компания на 127-кубитном чипе Eagle доказала возможность обгонять суперкомпьютеры в моделировании физики за счет смягчения ошибок (Error Mitigation — алгоритмическое подавление шума без его полного исправления). Выпустив позже чип Condor (1121 кубит), IBM подтвердила потенциал масштабирования, но стратегическим приоритетом стало не количество, а качество — новая архитектура Heron и модульная система Quantum System Two.
  • QuEra и Гарвард (Нейтральные атомы): В конце 2023 года гарвардская группа совершила исторический прорыв, перейдя к полноценному исправлению ошибок (Error Correction). Ученые успешно создали 48 логических кубитов, выведя технологию нейтральных атомов в тройку мировых лидеров.
  • Microsoft и Quantinuum (Ионы): В 2024 году альянс продемонстрировал самые надежные на сегодняшний день логические кубиты, переведя индустрию на «Уровень 2» (Level 2 Resilient). Им удалось снизить уровень ошибок в 800 раз по сравнению с физическими кубитами. Команды создали 12 высоконадежных логических кубитов и впервые успешно применили их в гибридной связке с суперкомпьютером (HPC) для химической симуляции.
  • Google (Чип Willow): Представив в конце 2024 года процессор Willow, компания доказала фундаментальный принцип: увеличение размера логического кубита ведет к экспоненциальному снижению ошибок, подтвердив работоспособность поверхностного кода на практике. Чип за 5 минут выполнил бенчмарк, на который лучшим классическим суперкомпьютерам потребовалось бы 1025 лет (срок, несоизмеримо превышающий время жизни Вселенной).
  • Экзотика (Топологические кубиты): Параллельно продолжается охота за «Святым Граалем» физики — кубитами Майораны. Теоретически они защищены от ошибок самой своей геометрией (топологией), что сделало бы сложную коррекцию излишней, но их стабильная физическая реализация остаётся сложнейшим вызовом.

Ирония прогресса: Назад к размерам ENIAC
Если взглянуть на современные квантовые лаборатории, возникает стойкое дежавю. Как и на заре компьютерной эры в 1940-х, «новорожденные» технологии требуют колоссального пространства. Нынешние установки — это нагромождение «золотых» криостатов, лазерных столов и стоек управления, напоминающее эпоху гигантских шкафов ENIAC. Из-за фундаментальных требований к охлаждению (до долей градуса выше абсолютного нуля) и вакууму, эти машины останутся сложной инфраструктурой дата-центров, доступной пользователю исключительно через облако.

Архитектура будущего: Гибридные суперкомпьютеры
Квантовые компьютеры останутся сложной инфраструктурой дата-центров, доступной через облако. Будущее — за квантово-центрическими суперкомпьютерами, где QPU работает в тесной синергии с классическими CPU, GPU и системами искусственного интеллекта. «Клеем» для такой интеграции стала платформа NVIDIA CUDA-Q, фактически ставшая стандартом для объединения квантовых и классических процессоров в единый вычислительный конвейер.

Критический аргумент здесь — энергоэффективность. Квантовые вычисления и генеративный ИИ идеально дополняют друг друга. Квантовые сопроцессоры возьмут на себя специфические, самые тяжелые алгоритмы (например, моделирование молекул), потребляя на порядки меньше электричества, чем тысячи энергоемких видеокарт.

Горизонт 2030-ых: Эра FTQC и индустрия решений
Дорожные карты лидеров рынка нацелены на создание полностью отказоустойчивых систем (эра FTQC — Fault-Tolerant Quantum Computing) к началу 2030-х годов. Это откроет беспрецедентные возможности:

  • Экология (Процесс Габера-Боша): Поиск катализатора для фиксации азота при комнатной температуре (как это делают бактерии). Это позволит сэкономить 1–2% всей мировой энергии, которая сегодня уходит на производство удобрений.
  • Фармакология (Синергия с ИИ): Если современные нейросети (такие как AlphaFold 3) блестяще предсказывают структуру белка, то квантовый компьютер необходим для точной симуляции химической динамики и создания молекул de novo (с нуля). Это взаимодействие на уровне электронных облаков, где классическим методам не хватает вычислительной мощности.
  • Материаловедение: Разработка новых эффективных электролитов для батарей и поиск высокотемпературных сверхпроводников, способных перевернуть энергетику.
  • Логистика и финансы: Решение сложнейших оптимизационных задач — от маршрутизации глобальных цепочек поставок до управления портфелями. И хотя в отличие от гарантированного применения в химии, квантовые алгоритмы здесь пока находятся на стадии активного исследования, их развитие потенциально предлагает совершенно новые подходы к анализу данных.

Заключение: Замкнувшийся круг

Спираль истории
История вычислений совершила удивительный виток. В древности наши инструменты (вроде Антикитерского механизма) были аналоговыми — они напрямую моделировали движение небесных тел физикой шестеренок. В XX веке произошел «триумф абстракции»: благодаря идеям Тьюринга вычисления «сбежали» от материи в царство чистой логики и битов. Однако, столкнувшись с фундаментальным тепловым пределом (пределом Ландауэра) и запредельной сложностью симуляции реальных процессов, цифровая эра уперлась в потолок. Сегодня происходит триумфальное воссоединение: логика возвращается в физику, но уже на квантовом уровне.

Философский итог
Классическая вычислительная модель была «мозгом без тела» — идеальной логической конструкцией, максимально отделенной от материи. Квантовый компьютер — это вычислитель, неразрывно вплетённый в ткань реальности. Его операции опираются на те же фундаментальные законы, по которым живут молекулы и звезды. Как утверждал физик Рольф Ландауэр, «Информация физична», и теперь мы используем саму природу материи для обработки данных.

Финальный аккорд
Мы перестали пытаться имитировать реальность на чужеродном ей языке кремниевых чипов. Спустя почти полвека мы наконец исполняем завет нобелевского лауреата Ричарда Фейнмана: «Природа не классическая, чёрт возьми, и если вы хотите сделать её симуляцию, вам лучше использовать квантовую механику!». Мы учимся говорить с Вселенной на её родном диалекте.



Конец.