Обновить

Моя лента

Тип публикации
Порог рейтинга
Уровень сложности
Предупреждение
Войдите или зарегистрируйтесь, чтобы настроить фильтры

Mail.ru отменила бесплатные вечные 1 TБ для первых пользователей «Облака Mail.ru»

В конце октября 2026 года компания Mail (принадлежит VK) сообщила пользователям об отмене выданных ранее бесплатных вечных 1 ТБ для первых пользователей «Облако Mail.ru». Это была рекламная акция для всех пользователей с 20 декабря 2013 по 20 января 2014 года за установку приложения «Облако Mail.ru» для смартфона или компьютера.

Mail.ru отменила бесплатные вечные 1 TБ для первых пользователей «Облака Mail.ru»
Статья

«client prematurely closed connection», хотя пользователь никуда не уходил

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели14

В логах nginx появляется 499, и кажется, что клиент просто закрыл соединение. Но за таким обрывом может скрываться таймаут балансировщика, медленный бэкенд и запросы, которые продолжают выполняться впустую. На примерах с Go, aiohttp и Angie разбираемся, откуда берутся 499, как они влияют на инфраструктуру и по каким признакам отличить обычную отмену запроса от проблемы на стороне сервера.

Разобраться с 499

Новости

Статья

Как отсканировать фото и сохранить семейный архив в хорошем качестве

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели0

Дома намечается торжество, случай особый: у родителей рубиновая свадьба — 40 лет вместе, не шутка. Чем не причина разобрать фотоархивы и собрать слайд-шоу, чтобы показать семейную историю — от момента знакомства до недавних праздников и поездок.

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

Читать далее
Новость

Reddit обновит главную страницу

Время на прочтение2 мин
Охват и читатели14

Reddit вносит изменения в свою основную ленту, стремясь сделать больший акцент на рекомендательном контенте. Платформа разделяет ленту на два раздела: «Для вас» (For You), где будут отображаться алгоритмические рекомендации, и «Подписки» (Following), где представлены публикации из сообществ из подписок пользователя.

Читать далее
Пост

Скрипт работает в терминале, а под systemd не находит файл. Почему?

Представим: app.py и config.json лежат в /opt/mybot. При запуске из этого каталога всё работает, а системный сервис падает с FileNotFoundError.

Причина может быть в такой строке:

with open("config.json", encoding="utf-8") as file:
    ...

Относительный путь отсчитывается от рабочей директории процесса. Даже абсолютный путь к app.py в ExecStart не означает, что systemd перейдёт в каталог скрипта.

У обычного системного сервиса без WorkingDirectory рабочая директория по умолчанию — /. У пользовательского сервиса, управляемого через systemctl --user, — домашний каталог пользователя. Указание User= в системном сервисе само по себе рабочую директорию не меняет.

Для диагностики можно временно добавить перед открытием файла:

from pathlib import Path
import logging

logging.warning(
    "cwd=%s; config=%s",
    Path.cwd(),
    Path("config.json").resolve(),
)

Так в журнале будет видно, какой путь использует программа.

Если приложение должно запускаться из своего каталога, укажите его в существующем unit-файле:

[Service]
WorkingDirectory=/opt/mybot
ExecStart=/opt/mybot/.venv/bin/python /opt/mybot/app.py

После изменения системного unit-файла:

sudo systemctl daemon-reload
sudo systemctl restart mybot.service

Другой вариант — привязать путь к файлу скрипта, если конфигурация по устройству проекта лежит рядом с ним:

from pathlib import Path

config_path = Path(__file__).resolve().parent / "config.json"

with config_path.open(encoding="utf-8") as file:
    ...

Это устраняет зависимость данного пути от рабочей директории. Если ошибка остаётся, нужно проверить существование файла, права пользователя сервиса и ограничения доступа в unit-файле.

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

Теги:
+1
Комментарии0
Пост

React 19: почему return { error } не предотвращает очистку формы

Форма показывает ошибку сохранения, но введённый текст уже исчез. Такое возможно при использовании функции в action: после её нормального завершения React сбрасывает неконтролируемые поля.

Минимальный пример без сервера — обработчик намеренно всегда возвращает ошибку:

import { useActionState } from "react";

export default function Form() {
  const [state, action] = useActionState(
    async () => ({ error: "Сохранение отклонено" }),
    { error: "" }
  );

  return (
    <form action={action}>
      <label>
        Сообщение
        <textarea name="message" defaultValue="" />
      </label>
      <button type="submit">Сохранить</button>
      {state.error && <p role="alert">{state.error}</p>}
    </form>
  );
}

Введите текст и отправьте форму. Сообщение об ошибке появится, а поле вернётся к пустому defaultValue. Функция завершилась без исключения; свойство error для React — обычные данные, а не указание сохранить содержимое формы.

Один из способов оставить текст для исправления — контролируемое поле с value и onChange. Его состояние можно очищать только после подтверждённого сохранения. Наличие state.error само по себе значениями полей не управляет.

Бросать исключение только ради предотвращения сброса — другая крайность: оно передаёт обработку ближайшему Error Boundary и не заменяет управление черновиком.
Показать ошибку — только половина задачи. Пользователь должен получить возможность исправить уже написанное, поэтому поведение полей при отказе стоит проверять отдельно от сообщения об ошибке.

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

Теги:
+1
Комментарии0
Статья

Глобус в терминале: Земля из символов Брайля и реальная смена дня и ночи

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели560

Представьте, что в уголке вашего терминала висит глобус Земли, и ночь на нём наступает там же, где за окном. Я написал такую программу за два дня. Она загружает карту мира, обтягивает ею сферу и отображает её символами: точками шрифта Брайля, значками Юникода либо буквами. Шар вращается мышью и раскрашивается одной из десяти палитр. Помимо Земли утилита показывает Солнце, Луну, все планеты и Цереру. Ставится одной командой, без Python и зависимостей.

Читать далее
Новость

Исследователь проверил работу E‑Ink дисплея с частотой 30 кадров в секунду

Время на прочтение2 мин
Охват и читатели777

Энтузиаст с ником Bo Made It провёл серию экспериментов, чтобы выяснить, как более высокая частота обновления — например, 30 кадров в секунду — повлияет на работу E‑Ink дисплея и приведёт ли такой режим к быстрому износу экрана.

Читать далее
Статья

Настройка коммутатора Mikrotik RB260GSP для разделения VLAN

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели1.8K

Настройка разделения VLAN на SwitchOS оказалась не такой простой как в обычных коммутаторах, а официальные гайды не предоставляют рабочего примера. Также в сети я не нашёл (особенно не искал) рабочий пример для моего сетапа.

Стандартный сетап в нашем случае - подсеть без тэга как основная и одна (или несколько) входящих тэговых подсетей для разделения по портам.

Коммутатор Mikrotik RB260GSP сделан на основе CSS106-1G-4P-1S поэтому скачивать обновление прошивки нужно для SwitchOS.

По умолчанию коммутатор либо получает адрес по DHCP в сегменте сети, которому подключен, либо, в случае отсутствия DHCP (fallback) назначает себе адрес 192.168.88.1.

Мне нужно подключить коммутатор в кабинете с основной сетью VLAN2, но пробросить туда сеть другого отдела - VLAN16. На этажном коммутаторе меняю тип порта комнаты на trunk и разрешаю два VLAN 2 и 16 (заранее нужно убедиться что VLAN 16 заходит в этажный коммутатор в принципе) при этом назначаю VLAN2 - основным, то есть он будет нетэговым (untagged) на выходе из порта.

Читать далее
Статья

Transactional Outbox template простыми словами

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели2.5K

Друзья, многие любят микросервисы, особенно когда их много.

И мало кто хочет признаться, что в 2026 году он сидит на монолите с Java 8 в бэке. Но есть в этих ваших микросервисах (как и в любой распределённой системе) одна неприятная штука — согласованность данных. Вернее, их несогласованность.

Нет-нет да и разъедутся наборы каких-нибудь транзакций в двух смежных системах.
Знакомо? Наверняка. Вот об этом сегодня и поговорим.

Точнее, поговорим об одном из популярнейших решений проблем распределённых транзакций —шаблоне Transactional Outbox. Пройдём путь от поделки на коленке до prod-like версии. Попробуем сделать это без тонн кода, сиквенсов и прочей «духоты», ограничившись лишь простыми наглядными примерами.

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

Читать далее
Пост

Представлен проект hop‑drop — AirDrop для Windows, созданный с помощью Opus 5.5. Работает просто: перетаскиваем файл на другой комп прямо на экране — он передаётся по локальной сети.

Теги:
0
Комментарии0
Статья

Claude и Codex составили рейтинги вузов б.СССР по 49 критериям из мира Verilog, FPGA и ASIC

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели4.1K

Два дня Клод Opus 5.5 и Кодекс Astra 6 булькали и чавкали, а на третий выдали рейтинг сотни университетов по 49 пунктам критерия, который им задал. Начал с того, что попросил их найти все университеты Калифорнии и стран бывшего СССР, в которых есть курс, аналогичный курсу 6.111 из MIT: лабы по Verilog+FPGA+cобственный проект студента. Затем решил размахнуться пошире и дал ИИшам проработать тему “не все курсы по верилогу одинаковые”.

Читать далее
Статья

Как настроить ввод спецсимволов { } [ ] < > @ # $ ^ & | ~ ` в ru-раскладке Linux

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели2.8K

Прокачиваем ru-раскладку в Linux. Добавляем спец символы { } [ ] < > @ # $ ^ & | ~ ` , которых нет в оригинальной русской раскладке. Всё под пальцами через правый Alt и правый Ctrl.

Читать далее
Новость

Команда IPFire представила открытый проект fireperf — инструмент для измерения производительности сети

Время на прочтение2 мин
Охват и читатели2.8K

Команда разработчиков IPFire представила открытый проект fireperf — инструмент для измерения производительности сети. Это решение предназначено для измерения производительности сети и ориентировано на системных администраторов, разработчиков и тестировщиков. Проект также позволяет имитировать шаблоны «запрос-ответ» для более точного моделирования реального сетевого трафика.

Читать далее

Ближайшие события

Новость

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

Время на прочтение2 мин
Охват и читатели3K

Сотрудник компании Anthropic Дэйзи Холлман рассказала, что в рамках предоставления разработчикам возможности полностью отключить защитные барьеры в свежей сборке (v2.1.311) Claude Code. появилась функция, позволяющая ИИ-агенту выполнять опасные команды терминала (например, удаление файлов) без подтверждения со стороны пользователя.

Читать далее
Пост

Сидел я и думал, чего бы такого сделать... И тут на глаза попался один из моих проектов, а я вспомнил, что на носу бородавка Хэллоуин.

Так вот, открыл я его и добавил осенних обновок. Теперь там есть несколько виньеток. Но, что ещё интереснее, теперь там есть две осенние (для северного полушария) текстуры: дождь на стекле и пятна крови.

Порадуйте себя кровавым кодом или плачущим кодом в картинках!
(на самом деле там также есть поддержка обычного текста и markdown)

Текстуры - не картинки. Они генерируются случайным образом.
Текстуры - не картинки. Они генерируются случайным образом.

Кровь можно даже сделать зелёной, как у инопланетян в фильмах.

Отличного всем настроения!
(поделитесь звездой за то, что не публикую тут свой Телеграм-канал :) )

Теги:
+1
Комментарии0
Статья

Smart Plant OS: что обнаружилось между HTML-макетом и первой прошивкой

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели3.2K

В прошлой статье я рассказывал про идею открытой локальной системы ухода за растениями. На тот момент у проекта были документация, спецификации и большой HTML-макет. Можно было открыть страницу, посмотреть на растения, походить по настройкам и представить, как всё будет работать. Теперь этот интерфейс открывается с настоящей ESP32 в домашней сети. Между этими двумя состояниями пришлось решить несколько инженерных вопросов, которых на красивой странице не видно.

После публикации я услышал много критики, хороших идей и правильных вопросов. Особенно оживлённым получилось обсуждение избыточности и надёжности ESP32 на каждый горшок. Зачем столько вычислительных ресурсов для датчика и насоса? Почему не поставить один главный контроллер, а к нему подключить простые устройства по проводам? Что произойдёт, когда растений станет пятьдесят?

Читать далее
Статья

chunk(), lazy() и cursor() в Laravel: замеры памяти и почему chunk() теряет половину строк при обновлении

Время на прочтение8 мин
Охват и читатели3.6K

Когда в Laravel нужно обработать большую таблицу, обычно советуют «не делать all(), использовать chunk()». Совет верный, но неполный: у chunk() есть ловушка, из-за которой фоновая задача тихо обрабатывает только часть строк. Ниже замеры пяти способов обхода таблицы на 100 000 строк, разбор потери строк и правила выбора метода.

Читать далее
Статья

Liferay в gov секторе — как тяга к халяве, ой, то есть к OpenSource доводит до CWE-319

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.4K

Товарищи, 6 часов назад я просто хотел зарегистрироваться на одном государственном сервисе и спокойно лечь спать, но сейчас, в три, мать его, часа ночи я сижу и пишу этот текст потратив свой вечер на responsible disclosure и попытки выяснить, кто же в этой богадельне отвечает за протоколы безопасности, что бы моё письмо не ушло в почту тому же "специалисту" который накатил коробочный Liferay с дефолтными конфигами и сейчас спокойно сопит в своей постельке.

Выговорился. А теперь - к делу.
Статья

Взлом Binance 29 октября: 18 часов подготовки на виду у блокчейна

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.6K

Вечером 29 октября с горячих кошельков Binance в сети Ethereum за 40 минут ушло от $2,5 до $3,5 млрд. По подсчёту Decrypt, с учётом Bitcoin и Tron набирается не меньше $5,57 млрд. Атакующий не крал ключи от монет напрямую: через EIP-7702 он подменил код кошелька Binance 14 и вывел содержимое одним вызовом.

Tether и Circle в первый час заморозили около $971 млн USDT и $823 млн USDC. К 01:09 по Москве Tether довёл заморозку примерно до $1,67 млрд, и вместе с Circle заблокировано около $2,5 млрд. Binance расследует инцидент и заявляет, что средства пользователей в безопасности; кто стоит за атакой, официально не названо.

Ниже разобрано то, что видно прямо в блокчейне. Данные публичные, их можно проверить самому. Срез обновлён в 22:09 UTC 29 октября (01:09 по Москве).

Разобрать атаку
Статья

Unbihex 0.2.3: разбор узких мест TCP, 938 подключений/с в REALITY и консольный клиент для роутеров и NAS

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели4.9K

Недавно я выложил первую статью про Unbihex - легковесный VPN-клиент и сетевое ядро на Rust, которое потребляет 12-18 МБ оперативной памяти. Ожидал дежурной критики и пары десятков просмотров, но публикация собрала больше 2000 прочтений, репозиторий перевалил за сотню звёзд, а в комментарии и Issues пришли практикующие сетевики и системные инженеры.

За прошедший день проект дорос до версии 0.2.3. Мы закрыли основные запросы сообщества (роутеры, NAS, JSON-конфиги, TUI в стиле btop), добавили постквантовый обмен ключами, выложили тестовый сервер и провели глубокий аудит производительности, в результате которого обогнали Xray и sing-box по скорости обработки новых соединений.

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

Читать далее
1
23 ...