
Ненормальное программирование *
Извращения с кодом
Index-based programming или зачем нам все эти if, switch, тернарный оператор?
if (typeof a ! == "undefined"
&& typeof b ! == "undefined"
&& typeof c === "string")
{
call_function(a, b, c);
// ...
}
Задумался над самими условиями: они немного странные, хотя и часто встречаются. Внутри «call_function» будет проверяться тип «a» и тип «b», но не тип «с». С другой стороны, количество поддерживаемых сочетаний типов «a» и «b», поддерживаемых функцией конечно, и, скорее всего, фиксировано, а, значит, было бы полезно эти сочетания увидеть. А этот пост натолкнул на мысль, что можно вообще обойтись без условных операторов. Так и зародилась идея отказаться от условных операторов в пользу индексов. Несмотря на то, подход рассматривается в рамках Javascript, он с успехом может быть применен во многих других языках после учета их синтаксических особенностей.Не надейтесь увидеть тут картины Рембранта мира программирования. Код в статье — произведение Дали. Впрочем, как и сама статья.
Управление неуправляемым и мониторинг критичного
Наследуем тип .NET от JavaScript объекта с перегрузками и приватными методами
Формируем тетради для книги в автоматическом режиме
С чего всё началось
Началось всё с лени. Лень бывает продуктивная и не очень, в моём случае, похоже — первое.
Недавно прикупил на «Литресе» книжку Нассима Талеба «Антихрупкость». Скачал, закинул на читалку, да так до неё и не добрался, то жена утащит своё почитать, то ребёнок… А тут в рассылке прилетела вот эта статья «Лучший подарок – книга. Делаем красивый переплет». Посмотрел, всё вроде красиво, только вот под рукой не оказалось машины с «Форточками», ну не пользуемся мы ими, а запускать эти WordPage-ы через прокладку типа Wine или в Qemu как-то некомильфо. Однако у меня имеется возможность распечатать книженцию и нормально обрезать (мини-типография на первом этаже дома, в котором я живу) в нужный формат. Сие значит, что следует использовать возможности подручных средств.
Поиск-фильтр по сообщениям скайпа
Сегодня посмотрел хабру, нашел тему, посвященную описанию самой базы — тема, а также по восстановлению этой самой базы — тема и упоминание программки SkypeLogViewer. Замечательно, подумал я, пора писать очередной упоротый велосипед.
Идея проста: выборка и фильтрация чатов через lua — для тех, кто желает немножко попрактиковаться в использовании lua, sql-запросах и lua-аналога linq, а также тем, кого не устраивает стандартный поиск скайпа. Само приложение написано на C#(WPF).
Что получилось — смотрите под катом.
Emojli: как мы случайно сделали приложение и почему мы больше не хотим этим заниматься
В стиле ретро: J2ME на TCL

После того, как я не смог ответить на звонок в дочкином телефоне, я решил что что-то надо сделать. Специалисты утверждают, что еще не все потеряно и с помощью специальных технологий можно не отстать от подрастающего поколения. Одним из таких средств является N-Back. Так как с сотовым телефоном с точскрином я не справлюсь (замкнутый круг получается), я попытался найти такое приложение под J2ME. Не нашел и решил написать сам. Но вот проблема — Scala и Clojure не поддерживают J2ME, а выучить Java не потренировавшись на еще не написанной программе мне будет тяжело. После некоторого гугуления решение было найдено — Hecl, слегка переработанный Tcl.
Почем оптимизация или «бесплатных завтраков не бывает»
Today's software engineering word is «farpotshket.» This is a Yiddish word meaning, «broken, because someone tried to fix it.»
(с) Andr Zerozero
Схлеснулись мы тут на днях на работе по вопросу «А хорошо бы закешировать регулярку», в совершенно банальной функции
uncached = function(data_in) {
return /_(\d)+(?:#(\d)+)?$/.exec(data_in);
};
сделав как-то так
cached = (function() {
var pattern = /_(\d)+(?:#(\d)+)?$/;
return function(data_in) {
return pattern.exec(data_in);
};
})();
Идея популярная, но многие ли задумывались о реальном профите и накладных расходах?
Возможности NTFS для хранения настроек вашей программы
В Windows существует несколько способов хранить настройки программы. Реестр, ini файлы, другие типы файлов (по усмотрению разработчика). Порой удобнее одно, порой другое… У каждого подхода есть свои преимущества и свои недостатки. Предлагаю разобраться что лучше и предложить альтернативу, сочетающую в себе преимущества нескольких подходов.О некоторых особенностях написания дистрибутивных пакетов на NSIS для х64 систем
Речь идет об обращении к реестру Windows. Долгое время не мог понять почему некоторые значения из реестра я могу получить стандартными инструментами NSIS, а некоторые другие — не могу.
~~Две тильды
var a = ~~b;Сразу вспомнил, что ~ — это битовое дополнение, показалось, что написано просто
var a = b;Однако битовые операции применимы только к целым числам, поэтому тут ещё неявное приведение типа. Самый короткий способ написать
var a = Math.floor(b);?Но не ведитесь на короткую крутую запись:
Math.floor() работает вдвое быстрее (проверил в FF3.6).~~$x для округления работает и в Перле, причём по времени столько же, сколько int($x). Интересно, что в других языках? В Питоне, наверно, тоже сработает? Upd: не сработало.Хакатоны: не пора ли их переизобрести?

Дорогие читатели, сегодня — статья о хакатонах. Нет — не о том, что их нужно проводить в поездах. Хотя, полюбуйтесь: сотрудники Авито не смогли найти другого места для хакатона, чем поезд дальнего следования. И забронировали для этого целый вагон! Одно слово — хипстеры!
Но эта статья — о том, как хакатоны можно изменить и переосмыслить. Нужно, конечно, оставить всё веселье. Также, нужно добавить свободы участникам: когда хакатоны проводят компании, они обычно делают это со своими конкретными целями. И третье — нужно сделать их более длительными. Я предлагаю делать хакатоны длительностью где‑то в спринт (2 недели), но так, чтобы время активной работы было по‑прежнему около нескольких суток. Другими словами, нужен хакатон, доступный работающему и, возможно, семейному человеку. Возможно ли это? Нужно ваше мнение.
Ближайшие события
NE-Executable | Разбор деталей часть 1

Формат "Новых исполняемых" файлов называют сегментным. Даже в официальной документации Microsoft её заголовок это "Сегментный Новый Исполняемый формат" (ориг. "Segmented NEW Executable Format").
Этот сегментный формат программ поддерживал
Сегментную модель памяти;
Защищенный режим Intel 286+
Динамичкую компановку (Dynamic Linking);
Управление ресурсами;
Возможность экспорта и импорта определенных процедур.
Переводим fb2 книжки, с нейронками, для себя

Хотел написать классическую статью, ни разу не писал, ради интереса попросил ChatGPT и она все написала, стало скучно до жути, эта «классическая » статья будет под спойлером, она реально по теме, написана с двух запросов, а далее будет кратенько и технически что и зачем, со ссылками на примеры. Для технической части нужны знания python, llm, cuda и что такое OpenAI API.
Надежное программирование — часть 3. Финал (2019)
Немного рассуждений о языках программирования (ЯП) с уклоном на надежное и безопасное программирование.
Статья не публиковалась ранее, хотя была написана в 2019г, теперь можно смотреть как некую ретроспективу. Чем и воспользуюсь, вставляя замечания о былом по тексту (тег Upd).
Но тормозит развитие серии, ибо вышли уже 3 части и несколько переводов в тему:
Как не-программист спас дедлайн и защитил тайны компании: История Веры и GPT для проверки договоров

Привет, Хабр! Меня зовут Александр, я лидер команды DevSup (это как DevOps, только с функцией поддержки больших клиентов которым Saas не подходит) в IT-компании ПравоТех.
Мы создаем решения (например, case.one для ведения дел и doc.one для документооборота), чтобы юристы, менеджеры и все кто рядом с юриспруденцией могли работать быстрее, умнее и спокойнее. Наша миссия – «Помогаем людям получать удовольствие от работы».
Сейчас у нас активно внедряются ИИ-инструменты. Создаются боты для консультаций и опросов, часто обращаемся к большим моделям чтобы «обстучать» какую-то идею.
В этой статье поделюсь историей о том, как эффективно и безопасно использовать ИИ, превратив рутину в решенную задачу.
Итак, представьте: вам в руки попадает договор поставки ПО. Не просто договор, а целая книжечка на 50-70 страниц А4. Нужно срочно – за 2-3 дня! – проанализировать его вдоль и поперек: проверить сроки, штрафы, бонусы, риски для вашей компании. Знакомая ситуация для менеджеров, юристов, закупщиков?
Дилемма: Выкроить время и вычитать всё дотошно, рискуя не успеть? Или пробежаться по диагонали, надеясь, что глаз «зацепит» опасную формулировку? Соблазн велик: закинуть текст в публичный ИИ-чат (типа ChatGPT или DeepSeek) и спросить: «Эй, ИИ, моя компания ООО «Рога и копыта» – найди всё, что нам невыгодно!»
Цена такого «упрощения» может быть огромной. Давайте разберемся, почему это крайне опасно:
1. Конфиденциальность — прощай! Условия договора (а они почти всегда секретны!) отправляются владельцу ИИ-сервиса. Нарушение пункта о неразглашении – гарантировано.
«Натягивая сову лингвистики на глобус архитектуры ПО: Что я нашел на стыке»

Давно думаю над моделью, в которой есть всего две формулы:
State = Static + Dynamic
и
State = Fact + Delay.
Казалось бы – пора звонить в Спортлото, не стыковались они у меня, хотя по отдельности каждая формула вроде работает. Но заявить, что на все вопросы я готов ответить по этим формулам – такого ощущения не было.
И вот... Сидел я как-то над пиццей, подумал, что прикольно раскидали начинки. «Четыре вкуса» и всё такое. И как бы мысленно (а потом и физически) ее ни резал – всё равно что-то влезет на соседний кусок. Итогом стало это...
Смерть разработки продукта как мы её знали

(перевод с комментариями "The Death of Product Development as We Know it" - Julie Zhuo, 25 марта 2025)
Прощай, трёхногий стул, команды на две пиццы и "менеджеры"
О возможностях ИИ в разработке, дизайне и документации написано уже много. Но мне кажется, не менее интересные изменения происходят в том, как команды строят продукты в эпоху ИИ.
Этот пост создан при участии Хенри Модиссета, руководителя дизайна в Perplexity. Я восхищаюсь Perplexity по многим причинам, и одна из них - это то, как они как компания применяют ИИ на практике и находятся на передовой нового подхода к работе.
LLM: Практика «выращивания кода»

Дискуссии об ИИ и больших языковых моделях (LLM) в разработке часто скатываются в бинарные споры: «замена», «выживание», «деградация». LLM — не против нас, а с нами. Не угроза, а помощь в рутине. Не замена, а инструмент. При умелом использовании ИИ освобождает от рутины и ускоряет реализацию, но не отменяет глубокое понимание предметной области. Без навыка писать код и ясности, что и зачем ты делаешь — ИИ бесполезен. Важнее понять, как LLM усиливают нас, трансформируют работу и рождают новые практики.