Hacker News Digest

Обновлено: 28 ноября 2025 г. в 08:55

Постов: 4635 • Страница 300/464

Advanced Scheme Techniques (2004) [pdf] (people.csail.mit.edu)

- PDF-файл повреждён: вместо текста — поток сжатых байтов.  
- Содержимое невозможно прочитать без распаковки и декодирования.  
- Перевод и сокращение не применимы: исходных данных нет.  

by mooreds • 12 сентября 2025 г. в 15:44 • 92 points

ОригиналHN

#scheme#continuations#closures#cps#macros

Комментарии (15)

  • Scheme обманчиво прост, но сложен для компиляции: гигиеничные макросы и продолжения первого класса требуют особых подходов.
  • CPS-преобразование — популярный, но не единственный способ реализовать continuations; подходят и байт-код/виртуальные машины, и другие схемы.
  • Реализация closures и правильная работа с пустым списком (не «ложь» в Scheme) добавляют сложности.
  • Полезны материалы: диссертация Dybviga, доклад Олега Киселёва, статья о секвентном исчислении как IR.

A beginner's guide to extending Emacs (blog.tjll.net)

Краткий путь от Spacemacs к своему конфигу: как за 200 строк Elisp добавить автодополнение ref-ов в reStructuredText

Проблема: в Sphinx-доке сотни .. _code_example: и я не помню ни одного. Нужно M-. → список → выбрал → вставил.

0. Emacs готов быть поломан

  • Всё документировано, встроенный C-h f/C-h v покажет исходники.
  • advice-add, define-derived-mode, completion-at-point-functions — ядерные кнопки; нажал — получил power.

1. Берём нужные куски

  • rst-mode уже есть.
  • completion-at-point уже умеет списки.
  • Осталось написать backend, который возвращает список всех .. _xxx: из *.rst проекта.

2. Одна функция — один пулл

(defun rst-collect-refs ()
  "Возвращает alist (ref . file) для всех *.rst ниже `project-root'."
  (let ((refs nil))
    (projectile-map-project-files
     (lambda (f)
       (when (string-suffix-p ".rst" f)
         (with-temp-buffer
           (insert-file-contents f)
           (while (re-search-forward "^\\.\\. _\\([^:]+\\):" nil t)
             (push (cons (match-string-no-properties 1) f) refs))))))
    refs))

3. Подсовываем в CAPF

(defun rst-ref-capf ()
  (when (looking-back ":ref:`\\([^`]*\\)?" (line-beginning-position))
    (let ((refs (rst-collect-refs))
          (beg (match-beginning 1)))
      (list beg (point)
            (mapcar #'car refs)
            :annotation-function
            (lambda (s) (format "  (%s)" (cdr (assoc s refs))))))))
(add-hook 'rst-mode-hook
          (lambda ()
            (add-hook 'completion-at-point-functions
                      #'rst-ref-capf nil t)))

4. Украшательства (по желанию)

  • company-mode + company-capf → всплывающее меню.
  • marginalia → красивые аннотации.
  • which-key → подсказки команд.

5. Итого

20 минут, 40 строк «моего» кода, 160 строк boilerplate.
Emacs живёт 40 лет, но всё ещё позволяет за вечер сделать IDE под себя.

by ibobev • 12 сентября 2025 г. в 15:32 • 113 points

ОригиналHN

#emacs#elisp#sphinx#restructuredtext#projectile#company-mode#marginalia#which-key

Комментарии (13)

  • В Emacs всё — вызов функции: даже нажатие клавиши вызывает elisp-функцию, которую можно переопределить.
  • Встроенные describe, apropos, info и пакет helpful позволяют быстро понять, «что под капотом», и начать не только конфигурировать, но и расширять редактор.
  • Пользователи активно интегрируют LLM: через gptel просят Claude 4.1 отвечать в org-файл, версионируют диалоги и думают над собственным chat-mode.
  • Doom/Spacemacs дают «готовое мнение» для переходящих с Vim, но рано или поздно приходится дорабатывать конфиг самостоятельно.
  • Главный совет: не бояться экспериментировать — в Emacs конфигурация и полноценное программирование различаются только глубиной погружения.

Oq: Terminal OpenAPI Spec Viewer (github.com)

oq — консольный просмотрщик OpenAPI-спецификаций.
Быстро открывает swagger.json|yaml в терминале, показывает эндпоинты, параметры, примеры ответов.
Установка: go install github.com/plutov/oq@latest.
Использование: oq spec.yaml.

by der_gopher • 12 сентября 2025 г. в 14:53 • 99 points

ОригиналHN

#openapi#swagger#yaml#json#go#terminal#api#spec-driven-development#http#github

Комментарии (12)

  • Утилита «oq» — терминальный просмотрщик OpenAPI-спецификаций, упрощающий навигацию по большим YAML/JSON.
  • Пользователи практикуют spec-driven development: спецификация = единый источник правды, из неё генерируют типизированный клиент и сервер.
  • Название «oq» уже занято другим проектом (homebrew-установка ставит не тот пакет); автор пока не переименовывает, предлагает брать бинарь с GitHub-релизов.
  • Поддержка OpenAPI 3.1 заявлена, но реализована поверх библиотеки kin-openapi, которая 3.1 пока не умеет; для простого листинга маршрутов и компонентов это работает.
  • В планах — добавить возможность делать реальные HTTP-запросы прямо из viewer.

Crates.io phishing attempt (fasterthanli.me)

  • На этой неделе после атаки на npm целью стал crates.io.
  • Рассылается письмо «Инцидент безопасности: взлом инфраструктуры».
  • Просят перейти по ссылке и войти через «внутренний SSO» — это фейк.
  • Сайт копирует GitHub-авторизацию, крадёт токены.
  • Подделка заметна по домену, отсутствию HTTPS и странному URL.
  • Настоящий crates.io никогда не просит войти через сторонние формы.
  • Получили письмо — удалите, не кликайте; включите 2FA и проверьте токены.

by dmarto • 12 сентября 2025 г. в 14:50 • 133 points

ОригиналHN

#crates.io#npm#phishing#github#sso#2fa#paypal#rust

Комментарии (62)

  • Фишинг снова в тренде: мошенники массово атакуют разработчиков через «сломанные» пакеты (npm, crates.io), подделывают e-mail от PayPal и GitHub.
  • Самые опасные письма подписываются реальным доменом (paypal.com, github.rustfoundation.dev) и ведут на поддельный «внутренний» логин; звонки «от банка» тоже подменяют номер.
  • Правило «ноль доверия»: не кликайте, не звоните по указанным ссылкам/номерам; заходите на сайт вручную или набираете официальный номер из надежного источника.
  • Даже опытные разработчики чуть не ведутся: письмо выглядит срочным, без опечаток, с корректным логотипом и SSL, но просит «подтвердить» учётку на стороннем домене.
  • Защита: включайте passkey / 2FA, не вводите пароль на незнакомых доменах, после любого изменения безопасности временно блокируйте публикацию пакетов.

Many hard LeetCode problems are easy constraint problems (buttondown.com) 🔥 Горячее 💬 Длинная дискуссия

Сложные LeetCode-задачи — простые задачи на ограничения

Интервьюер спросил: «Минимальное количество монет для сдачи 37¢ при номиналах [10, 9, 1]».
Жадный алгоритм даёт 10 монет, оптимум — 4. Ручное ДП сложно, а в MiniZinc — три строки:

int: total; array[int] of int: values = [10,9,1];
array[index_set(values)] of var 0..: coins;
constraint sum(c in index_set(coins)) (coins[c]*values[c]) == total;
solve minimize sum(coins);

Запускаем онлайн, получаем ответы за секунды.


Другие «сложные» задачи

  1. Максимальная прибыль на акциях
    Дано: цены за день.
    Решение: купить до продать, максимизировать prices[sell]-prices[buy].

    array[int] of int: prices;
    var int: buy; var int: sell;
    constraint sell > buy;
    solve maximize prices[sell]-prices[buy];
    
  2. Три числа дают 0 в сумме
    Нужно ли среди списка выбрать 3 числа со знаками ±1, чтобы сумма была 0?

    array[int] of int: nums;
    array[index_set(nums)] of var {-1,0,1}: coef;
    constraint sum(i in index_set(nums)) (nums[i]*coef[i]) = 0;
    constraint sum(i in index_set(nums)) (abs(coef[i])) = 3;
    solve satisfy;
    
  3. Самый большой прямоугольник в гистограмме
    Ширина столбцов = 1, высоты заданы.

    array[int] of int: h;
    var 1..length(h): x; var 1..length(h): dx; var 1..max(h): y;
    constraint x+dx <= length(h);
    constraint forall(i in x..x+dx) (y <= h[i]);
    solve maximize (dx+1)*y;
    

Плюсы и минусы солверов

  • + Код в 3–5 строк, добавление новых ограничений бесплатно.
  • Сложность работы непредсказуема, медленнее «идеального» алгоритма.
  • На собеседовании спросят «а сложность?» — ответа нет.

Вывод: если нужен рабочий код быстро — бери солвер; если нужна гарантированная скорость — пиши алгоритм вручную.

by mpweiher • 12 сентября 2025 г. в 14:44 • 624 points

ОригиналHN

#minizinc#constraint-programming#leetcode#algorithms#interview#optimization

Комментарии (498)

  • Кто-то предлагает решать «задачи на подбор монет» и прочие LeetCode-загадки не вручную, а вызывать готовый constraint-/SAT-/SMT-солвер — быстро и универсально.
  • Интервьюеры возражают: «мы хотим увидеть, как ты сам пишешь алгоритм, а не вызываешь библиотеку; иначе как проверить сложность и масштабируемость?»
  • Сторонники солверов отвечают: в продакшене важен рабочий результат, а не «олимпиадная остроумность»; к тому же солвер легко добавляет новые ограничения.
  • Часть комментаторов считает, что LC-интервью вообще плохо предсказывают рабочие навыки и дискриминируют тех, кто не зубрит шаблоны.
  • Итог: constraint-solvers — мощный инструмент, но на типовом собеседовании их использование чаще всего «вне правил», поэтому приходится писать ручное решение, даже если в реальной жизни ты бы просто вызвал OR-Tools.

3D modeling with paper (arvinpoddar.com) 🔥 Горячее

Паперовое 3D-моделирование
Сокращённый перевод


Плюсы хобби:

  • Дёшево: бумага, ножницы, клей.
  • Техника + творчество: проектируешь как инженер.
  • Без ограничений: лишь бы хватило терпения.

Мой пример: модель самолёта SR-71 Blackbird.


Самоограничения

  • Только бумага, без принтованных текстур.
  • Однотонные детали.
  • Простые многогранники: без дыр, скруглений, «лишних» соприкосновений.

Зачем? Проще собирать, прочнее держится, легко повторить.


Цели

  1. Сборка без мучений – главное.
  2. Похоже на оригинал.
  3. Минимум бумаги и времени.

Цикл проектирования

  1. 3D-сетка – строим полиэдр.
  2. Развёртка – раскладываем на лист.
  3. Сборка – проверяем, улучшаем.

by joshuawootonn • 12 сентября 2025 г. в 14:12 • 303 points

ОригиналHN

#3d-modeling#papercraft#origami#polygons#blender#pepakura#python#pythoncad

Комментарии (45)

  • Участники вспомнили детство: кто-то складывал оригами SR-71, кто-то собирал шлемы Halo из бумаги.
  • Популярность бумажных моделей в Восточной Европе (Польша, Чехия, Словакия, СССР) отмечена как региональная особенность.
  • Обсуждали инструменты: Pepakura, Blender с экспортом в развёртки, PythonSCAD, плоттеры Cricut.
  • Автор статьи сам ограничил себя: только плоские полигоны, без цилиндров и текстур, чтобы упростить сборку.
  • Некоторые предлагали автоматизировать подбор «развёртываемых» поверхностей (developable surfaces) и использовать станки для резки.

Ships are sailing with fake insurance from the Norwegian Ro Marine (nrk.no)

  • 100+ судов вышли в море с поддельными полисами норвежской «Ro Marine», не имевшей лицензии.
  • Основной груз — российская нефть, документы помогали обходить санкции и проверки НАТО.
  • За схемой стоит россиянин Андрей Мочалин (экс-сотрудник норвежского страховщика), двое норвежцев и болгарин; им предъявлены обвинения в подлоге и нелегальной страховой деятельности.
  • Подпись на полисах взята с сайта, где её выдают как «докторскую».
  • Клиенты знали: полисы фальшивые, но нужны для «западного прохода».
  • Норвежские власти: масштаб мошенничества угрожает репутации всего флота страны.

by aregue • 12 сентября 2025 г. в 13:36 • 213 points

ОригиналHN

#norway#sanctions#insurance#fraud#oil#nato

Комментарии (105)

  • Участники сомневаются в эффективности финансовых санкций: их легко обойти через подставные компании и «фальшивое» страхование.
  • Норвежская Ro Marine продавала полисы без лицензии, прикрывая более 100 судов, в том числе из «теневого флота» России.
  • Сложные юридические схемы и регистры «удобных флагов» делают практически невозможным быстрое преследование мошенников.
  • Пока регуляторы расследуют одну схему, мошенники уже создают три новые компании, перегружая бюрократию.
  • Обсуждение сводится к выводу: без ускоренных процедур и жёсткого наказания санкции превращаются в игру «кот и мышь».

Chat Control faces blocking minority in the EU (twitter.com) 🔥 Горячее

JavaScript отключён
Включите его или смените браузер. Расширения, блокирующие трекинг, могут мешать.

by miohtama • 12 сентября 2025 г. в 12:52 • 358 points

ОригиналHN

#javascript#privacy#eu#tracking#twitter

Комментарии (112)

  • Участники обсуждают, как лоббисты снова и снова выводят на голосование «Chat Control», пока не пройдёт, и предлагают ввести «экспоненциальный откат» или запрет на повторное внесение одного и того же.
  • Сомневаются, что такое правило сработает: тексты закона легко слегка изменить, а определение «похожести» станет новым полем для манипуляций.
  • Отмечают, что ЕС уже практикует «голосуй до нужного результата» (конституция, Лиссабон, Ницца).
  • Подчёркивают: политики стремятся исключить себя из-под сканирования «по служебной тайне», а реальные преступники обойдут слежку.
  • Считают, что единственный надёжный тормоз — отсутствие большинства в Совете, но Брюссель может давить через фонды и другие рычаги.

Learn x86-64 assembly by writing a GUI from scratch (2023) (gaultier.github.io)

Изучение x86-64 ассемблера через создание GUI с нуля

Филипп Гольтье

⏴ Назад ко всем статьям

Опубликовано 31.05.2023

Большинство считает ассемблер языком для учебных программ или оптимизации отдельных функций. Но что если написать на нём полноценную GUI-программу? Это будет «Hello World» для графического интерфейса, но всё же. Результат:

Меня вдохновила мысль: современные бинарные файлы часто весят 30+ МБ — а насколько маленьким может быть GUI? Оказалось, всего около 1 КБ!

Я не эксперт в ассемблере или X11, но надеюсь дать понятное руководство для начинающих. Ошибки? Сообщайте в Github.

Примечание: Аутентификация в X11 опциональна, но некоторые серверы (например XWayland) требуют её. Здесь она опущена.

Что потребуется?

Используем ассемблер nasm — простой, кроссплатформенный и быстрый. Для GUI возьмём X11, так как он работает без внешних библиотек. На Wayland должно работать через XWayland, на macOS — с XQuartz (но потребуется формат macho64 и иные значения системных вызовов).

Разница между ОС сводится к значениям системных вызовов. Для Linux укажем свои, для FreeBSD — другие, используя макросы nasm:

%ifdef linux
  %define SYSCALL_EXIT 60
%elifdef freebsd
  %define SYSCALL_EXIT 1
%endif

Компилируем на Linux, отправляем другу на FreeBSD — и оно работает!

Linux — единственная ОС со стабильным ABI. Другие могут его ломать, но для базовых вызовов это редкость.

Основы X11

X11 — это сервер, управляющий окнами и отрисовкой. Клиент подключается через сокет, отправляет команды на открытие окон, рисование и т.д., а сервер присылает события и ошибки.

Обычно используют libX11 или libxcb, но мы сделаем всё сами. Сервер может быть хоть на другом конце света — это не важно для клиента.

by ibobev • 12 сентября 2025 г. в 12:51 • 222 points

ОригиналHN

#x86-64#assembly#x11#nasm#linux#freebsd#gui

Комментарии (24)

  • Обсуждение началось с проекта по изучению ассемблера x86-64 через написание GUI "с нуля", но многие отметили, что использование X-сервера не является истинным "с нуля".
  • Несколько пользователей поделились личным опытом изучения ассемблера через различные проекты: написание приложения на GTK, работу с микроконтроллерами PIC и создание собственного виртуального процессора.
  • Было высказано мнение, что работа с "сырым" X-протоколом не сложна, но утомительна из-за его асинхронной природы и необходимости сериализации/десериализации запросов.
  • Участники дискутировали о том, что на самом деле означает термин "с нуля" (from scratch), от сравнительно простого использования API до создания всей системы самостоятельно.
  • В качестве сравнения был приведен пример с Win32, где создание GUI заключается в основном в заполнении структур и вызове функций.
  • Было отмечено, что проект, несмотря на спорное определение "с нуля", является более сложным и продвинутым, чем многие аналогичные попытки.
  • Один из комментаторов указал на проблему с поддержкой высокого разрешения в XQuartz для пользователей macOS.

The treasury is expanding the Patriot Act to attack Bitcoin self custody (tftc.io) 🔥 Горячее 💬 Длинная дискуссия

  • FinCEN и Казначейство США готовят правила, расширяющие «Патриотский акт» на цифровые активы: под запретом CoinJoin, атомарные свопы, повторное использование адресов и задержки при трансляции транзакций.
  • Использование этих инструментов приравняют к «подозрительному поведению»: монеты, прошедшие через них, заблокируют на регулируемых площадках, а пользователей будут преследовать вплоть до тюрьмы.
  • Ведомства фактически запрещают передовые практики самокастодиального хранения, ухудшая приватность и безопасность законопослушных граждан.
  • Загрузка множества UTXO на один адрес снижает энтропию ключей и облегчает брут-форс; новые правила делают биткоин менее безопасным и экономически неэффективным.
  • Вместо расширения надзора «Патриотский акт» следует отменить, а конфиденциальность — защищать, а не уничтожать.
  • Борьба с преступностью должна вестись профессиональными методами, а не ограничениями для всего населения.

Дополнительно:

  • Биткоин-фьючерсы стали менее волатильны, чем платина: появление ETF, опционов и других инструментов подавляет колебания, снижая и риски, и потенциал роста.

by bilsbie • 12 сентября 2025 г. в 12:10 • 748 points

ОригиналHN

#bitcoin#patriot-act#coinjoin#atomic-swaps#fincen#aml

Комментарии (534)

  • Пользователи спорят, действительно ли новое руководство Казначейства США запрещает самостоятельное хранение криптовалюты: большинство считает, что заголовок статьи — кликбейт и подмена понятий.
  • Под «подозрительной активностью» перечислены стандартные AML-признаки (структурирование, микширование, задержка транзакций), а не сам факт владения приватными ключами.
  • Критика сводится к тому, что правительство расширяет полномочия по отслеживанию всех денежных потоков, превращая финансовую конфиденциальность в преступление по умолчанию.
  • Участники отмечают: публичный блокчейн Bitcoin делает приватность технически сложной, а попытки скрыть следы выглядят как отмывание, что усиливает регуляторное давление.