Борода бывшего программиста
183 subscribers
45 photos
2 files
111 links
Сейчас рук. отдела в Озоне, ранее директор по разработке idp.zyfra.com
leotsarev.ru
t.me/leotsarev
Много ссылок на статьи и нытья
Download Telegram
https://ruitunion.org/posts/2024-12-20-we-were-exposed/

Коллеги из "профсоюза" немного ущемились моими вопросами в комментариях и выложили пост. Вот и дальше получается, вот есть Синодов (или например я). У нас есть фамилия, имя, отчество, какие-то координаты, история.
И есть простой русский анонимный программист Мыкола, из которого состоит ИТ-профсоюз. Мы абсолютно прозрачное горизонтальное сообщество, в котором есть НОЛЬ людей, которые могут назвать свое ФИО, вступай в чат, борись за права народа!
В одной конторе ИБ отключило на праздники фаерволлом коннекты зарубеж, чтобы злые хацкеры ничего не сломали.

Жалко белорусские заказчики ничего не знали и продолжили слать письма, которые не доходили
https://github.com/dotnet/runtime/pull/111225

Три года обнаружил небольшую багу (подтвержденную) в .NET runtime. Вот сейчас робот решил ее закрыть за неактивность. Психанул, прислал двухстрочный фикс. Посмотрим что будет.
Борода бывшего программиста
Сегодня я узнал про существование dotnet nuget why. Раньше я копался в project.assets.json, а оказывается есть спецкоманда для этого. Впрочем, как оказалось, загадку уязвимости в System.Private.Uri она решить все-таки не помогает из-за бага https://githu…
Оказывается, в SDK 9.0.101 откатили NuGetAuditMode=all по умолчанию, и теперь опять варнинги случаются только из-за прямых зависимостей, а не из-за транзитивных.
Зачем, почему — официального объяснение выглядит как «что-то все взвыли» (UPD), говорят к NET 10 придумают план про включению опять.
Если вы успели зафанететь от этого изменения (а в промышленном программировании весьма полезно выглядит), то включите назад вручную.
Поиграть с друзьями с Factorio →
...
Документация кубера →
...
Исправляю свои скрипты →
...
Запрос в техподдержку Яндекс.Облака →
....
У Ашманова как обычно интересно, на этот раз про историю Лаборатории Касперского. В какой-то степени это могла быть история про войну «основателя-технаря» (Касперского) и «основателя-бизнесмена» (Касперской), но мне, конечно, интереснее тут эта часть: про эффективность и лояльность.

Полная статья увы под paywall
https://sponsr.ru/ashmanov/80813/Baiki_Prekrasnyi_chistyi_mir_IT_voorujennyi_zahvat_ofisa_iuristyvolshebniki/
https://borretti.me/article/composable-sql

Довольно интересная статья о том, каких абстракций не хватает в SQL.
Как обычно, в LINQ они уже есть (особенно с LinqKit).

В комментариях пишут, что проблемы в основном касаются того, что оптимизатор PostgreSQL в разы уступает основным коммерческим БД, и у PostgreSQL не кешируются планы запросов (что? Да).
Интересно, как фактически стала монокультурой база с очевидными архитектурными косяками (ну например process-per-connection).
И вот, у меня упал деплой пет-проекта. Миграции EF6 упали по таймауту (30 секунд). Странно, там ничего такого нет. Я тут же быстренько поправил таймаут на 900 секунд, запушил изменение и накатил заново. По здравому размышлению, это ОШИБКА.

Миграция с увеличенным таймаутом упала молча, без таймаута. :-) Прекрасно. Похоже, надо разбираться.

Мне пришла в голову светлая мысль. А что у нас с SQL сервером?
Мониторинга к нему нет, логи не собираются... Посмотрим логи в кубере:
Could not allocate a new page for database 'tempdb' because the 'PRIMARY' filegroup is full due to lack of storage space or database files reaching the maximum allowed size. Note that UNLIMITED files are still limited to 16TB. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
Version store is full. New version(s) could not be added. A transaction that needs to access the version store may be rolled back. Please refer to BOL on how to configure tempdb for versioning.

О, прекрасно. Что-то такое там про transaction log. PVC под него 1 гигабайт, увеличим до двух (ОШИБКА). Ииииииииии тот же самый результат:
Could not allocate a new page for database 'tempdb' because the 'PRIMARY' filegroup is full due to lack of storage space or database files reaching the maximum allowed size. Note that UNLIMITED files are still limited to 16TB. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
Version store is full. New version(s) could not be added. A transaction that needs to access the version store may be rolled back. Please refer to BOL on how to configure tempdb for versioning.


Хех. Пойдем посмотрим, сколько реально места на нашем PVC. Там занято меньше 20% (!), а после моего изменения — меньше 10%. Ого. Посмотрим на другие PVC, и на том PVC, который под БД master, занято 98%. Стало понятно, увеличиваем его в два раза. Запускаем деплой заново, он проходит за 16 секунд.

Какая ошибка тут была допущена? Я действовал по алгоритму «получение сведений — предположение причины — фикс причины — повторная проверка». Это кажется быстро, но это всегда неправильно. Алгоритм должен быть «получение сведений — предположение причины — проверка предположения — фикс причины — повторная проверка». Миграция на SQL сервере проходит долговато? Почему? С ним все в порядке?

Кончилось место на PV? Даже если мы логически знаем на каком, надо ПРОВЕРИТЬ, прежде чем что-то менять.
Простое правило: исправлять причины проблемы, которую мы не понимаем, запрещается.

Кстати, я допустил еще ошибку. Я так и не знаю, почему БД master сожрала 1 гигабайт. Надо бы узнать.
https://t.me/ruitunion/585

Судя по тому, что написано, один из программистов ЦЗ писал. Если уж решили вынести в СМИ (осуждаю, но понимаю), выбирайте что-нибудь не ЦИПСОное (осуждаю).

P.S. Правдивость или ложность фактов прокомментировать не могу, в том числе потому, что сейчас сам там не работаю и информацией не владею. Печально все это.
Факторио учат нас, как полезны (нет) комментарии в коде. Сверху табличка «не загораживать», снизу построенный друзьями ровно на отводе под жд форт
Философия разработчика. Перефразированы и раскрыты популярные поговорки.
https://news.ycombinator.com/item?id=42920285
Иван критикует людей, придумавших делить задачи на продуктовых и технические.

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

Но, к сожалению, в не зрелых командах у продуктового лидерства нет понимания, зачем продукту «не падать», у технического лидерства нет умения объяснить и обосновать свои задачи. В таких незрелых командах при едином беклоге все быстро скатывается в «фичи-фичи», а то и в «выполнение проектных обязательств» (а на самом деле просто не проработанных идей заказчика). В этих условиях разные беклоги, и знаменитое ЦИПовское 25% на техдолг это наименьшее из зол. Поэтому так и шли.
В техническом лидерстве очень хочется затягивать принятие решений. Это имеет много выгод, если честно.

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

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

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

Это и происходит сейчас с Rust for Linux. Торвальдс должен принять решение. Если ДА, то всем ментейнерам рано или поздно придется выучить второй язык. Если НЕТ, то пора начать сворачивать эксперимент.

https://news.ycombinator.com/item?id=42972062
В ту же степь: слышал как-то перл от большого руководителя в ЦИП (к счастью, соседнего подразделения) как то: зачем вы выносите на комитет несогласованное? Принесите мне параметры, полностью согласованные письменно с заказчиком.

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

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

Золотая середина в том, что на руководителя подлежат вынесению вопросы, проработанные, но не решённые. Мы обсудили вопрос, наши аргументы такие, вот предлагаемое решение (повезло). Мы обсудили вопрос, мои аргументы такие, его такие, контрагента такие, вот решения из которых надо выбрать (не повезло, приходится поработать).
Я: пет-проект это классно и здорово, развлекусь в свое удовольствие.

Dependabot: падает.
Yandex Managed k8s: рэндомные таймауты, когда пуллим с Github Container Registry
Все, больше не безработный. Впервые за свою жизнь работаю в бигтехе
https://opensource.microsoft.com/blog/2025/01/23/documentdb-open-source-announcement/

Microsoft зарелизила в опенсорс ЧАСТЬ своей реализации т.н. Azure Cosmos DB for Mongo (не путать с другими Azure Cosmos DB. Несмотря на то, что это все заявляется как API к одной БД, на самом деле это разные БД).

Это плагин к PostgreSQL, который расширяет поддержку BSON и позволяет читать и записывать в документном формате, полностью опенсорсный.

Этот плагин используется закрытой реализацией в Microsoft Azure, а также уже в опенсорсном клоне Монги FerretDB.

Обратите внимание, как компании выбирают, что опенсорсить. Периметр компании покидает технология, которая не является ноу-хау для компании (как ударная позиционируется полностью пропиеритарная CosmosDB), а компонент, призванный отвечать на вопрос «а монга у вас есть), причем такой кусок, который не позволяет сам по себе собрать готовое решение.