Advanced Scheme Techniques (2004) [pdf]
- PDF-файл повреждён: вместо текста — поток сжатых байтов.
- Содержимое невозможно прочитать без распаковки и декодирования.
- Перевод и сокращение не применимы: исходных данных нет.
Комментарии (15)
- Scheme обманчиво прост, но сложен для компиляции: гигиеничные макросы и продолжения первого класса требуют особых подходов.
- CPS-преобразование — популярный, но не единственный способ реализовать continuations; подходят и байт-код/виртуальные машины, и другие схемы.
- Реализация closures и правильная работа с пустым списком (не «ложь» в Scheme) добавляют сложности.
- Полезны материалы: диссертация Dybviga, доклад Олега Киселёва, статья о секвентном исчислении как IR.
A beginner's guide to extending Emacs
Краткий путь от 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 под себя.
Комментарии (13)
- В Emacs всё — вызов функции: даже нажатие клавиши вызывает elisp-функцию, которую можно переопределить.
- Встроенные
describe,apropos,infoи пакетhelpfulпозволяют быстро понять, «что под капотом», и начать не только конфигурировать, но и расширять редактор. - Пользователи активно интегрируют LLM: через gptel просят Claude 4.1 отвечать в org-файл, версионируют диалоги и думают над собственным chat-mode.
- Doom/Spacemacs дают «готовое мнение» для переходящих с Vim, но рано или поздно приходится дорабатывать конфиг самостоятельно.
- Главный совет: не бояться экспериментировать — в Emacs конфигурация и полноценное программирование различаются только глубиной погружения.
Oq: Terminal OpenAPI Spec Viewer
oq — консольный просмотрщик OpenAPI-спецификаций.
Быстро открывает swagger.json|yaml в терминале, показывает эндпоинты, параметры, примеры ответов.
Установка: go install github.com/plutov/oq@latest.
Использование: oq spec.yaml.
Комментарии (12)
- Утилита «oq» — терминальный просмотрщик OpenAPI-спецификаций, упрощающий навигацию по большим YAML/JSON.
- Пользователи практикуют spec-driven development: спецификация = единый источник правды, из неё генерируют типизированный клиент и сервер.
- Название «oq» уже занято другим проектом (homebrew-установка ставит не тот пакет); автор пока не переименовывает, предлагает брать бинарь с GitHub-релизов.
- Поддержка OpenAPI 3.1 заявлена, но реализована поверх библиотеки kin-openapi, которая 3.1 пока не умеет; для простого листинга маршрутов и компонентов это работает.
- В планах — добавить возможность делать реальные HTTP-запросы прямо из viewer.
Crates.io phishing attempt
- На этой неделе после атаки на npm целью стал crates.io.
- Рассылается письмо «Инцидент безопасности: взлом инфраструктуры».
- Просят перейти по ссылке и войти через «внутренний SSO» — это фейк.
- Сайт копирует GitHub-авторизацию, крадёт токены.
- Подделка заметна по домену, отсутствию HTTPS и странному URL.
- Настоящий crates.io никогда не просит войти через сторонние формы.
- Получили письмо — удалите, не кликайте; включите 2FA и проверьте токены.
Комментарии (62)
- Фишинг снова в тренде: мошенники массово атакуют разработчиков через «сломанные» пакеты (npm, crates.io), подделывают e-mail от PayPal и GitHub.
- Самые опасные письма подписываются реальным доменом (paypal.com, github.rustfoundation.dev) и ведут на поддельный «внутренний» логин; звонки «от банка» тоже подменяют номер.
- Правило «ноль доверия»: не кликайте, не звоните по указанным ссылкам/номерам; заходите на сайт вручную или набираете официальный номер из надежного источника.
- Даже опытные разработчики чуть не ведутся: письмо выглядит срочным, без опечаток, с корректным логотипом и SSL, но просит «подтвердить» учётку на стороннем домене.
- Защита: включайте passkey / 2FA, не вводите пароль на незнакомых доменах, после любого изменения безопасности временно блокируйте публикацию пакетов.
Many hard LeetCode problems are easy constraint problems 🔥 Горячее 💬 Длинная дискуссия
Сложные 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);
Запускаем онлайн, получаем ответы за секунды.
Другие «сложные» задачи
-
Максимальная прибыль на акциях
Дано: цены за день.
Решение: купить до продать, максимизироватьprices[sell]-prices[buy].array[int] of int: prices; var int: buy; var int: sell; constraint sell > buy; solve maximize prices[sell]-prices[buy]; -
Три числа дают 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; -
Самый большой прямоугольник в гистограмме
Ширина столбцов = 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 строк, добавление новых ограничений бесплатно.
- – Сложность работы непредсказуема, медленнее «идеального» алгоритма.
- – На собеседовании спросят «а сложность?» — ответа нет.
Вывод: если нужен рабочий код быстро — бери солвер; если нужна гарантированная скорость — пиши алгоритм вручную.
Комментарии (498)
- Кто-то предлагает решать «задачи на подбор монет» и прочие LeetCode-загадки не вручную, а вызывать готовый constraint-/SAT-/SMT-солвер — быстро и универсально.
- Интервьюеры возражают: «мы хотим увидеть, как ты сам пишешь алгоритм, а не вызываешь библиотеку; иначе как проверить сложность и масштабируемость?»
- Сторонники солверов отвечают: в продакшене важен рабочий результат, а не «олимпиадная остроумность»; к тому же солвер легко добавляет новые ограничения.
- Часть комментаторов считает, что LC-интервью вообще плохо предсказывают рабочие навыки и дискриминируют тех, кто не зубрит шаблоны.
- Итог: constraint-solvers — мощный инструмент, но на типовом собеседовании их использование чаще всего «вне правил», поэтому приходится писать ручное решение, даже если в реальной жизни ты бы просто вызвал OR-Tools.
3D modeling with paper 🔥 Горячее
Паперовое 3D-моделирование
Сокращённый перевод
Плюсы хобби:
- Дёшево: бумага, ножницы, клей.
- Техника + творчество: проектируешь как инженер.
- Без ограничений: лишь бы хватило терпения.
Мой пример: модель самолёта SR-71 Blackbird.
Самоограничения
- Только бумага, без принтованных текстур.
- Однотонные детали.
- Простые многогранники: без дыр, скруглений, «лишних» соприкосновений.
Зачем? Проще собирать, прочнее держится, легко повторить.
Цели
- Сборка без мучений – главное.
- Похоже на оригинал.
- Минимум бумаги и времени.
Цикл проектирования
- 3D-сетка – строим полиэдр.
- Развёртка – раскладываем на лист.
- Сборка – проверяем, улучшаем.
Комментарии (45)
- Участники вспомнили детство: кто-то складывал оригами SR-71, кто-то собирал шлемы Halo из бумаги.
- Популярность бумажных моделей в Восточной Европе (Польша, Чехия, Словакия, СССР) отмечена как региональная особенность.
- Обсуждали инструменты: Pepakura, Blender с экспортом в развёртки, PythonSCAD, плоттеры Cricut.
- Автор статьи сам ограничил себя: только плоские полигоны, без цилиндров и текстур, чтобы упростить сборку.
- Некоторые предлагали автоматизировать подбор «развёртываемых» поверхностей (developable surfaces) и использовать станки для резки.
Ships are sailing with fake insurance from the Norwegian Ro Marine
- 100+ судов вышли в море с поддельными полисами норвежской «Ro Marine», не имевшей лицензии.
- Основной груз — российская нефть, документы помогали обходить санкции и проверки НАТО.
- За схемой стоит россиянин Андрей Мочалин (экс-сотрудник норвежского страховщика), двое норвежцев и болгарин; им предъявлены обвинения в подлоге и нелегальной страховой деятельности.
- Подпись на полисах взята с сайта, где её выдают как «докторскую».
- Клиенты знали: полисы фальшивые, но нужны для «западного прохода».
- Норвежские власти: масштаб мошенничества угрожает репутации всего флота страны.
Комментарии (105)
- Участники сомневаются в эффективности финансовых санкций: их легко обойти через подставные компании и «фальшивое» страхование.
- Норвежская Ro Marine продавала полисы без лицензии, прикрывая более 100 судов, в том числе из «теневого флота» России.
- Сложные юридические схемы и регистры «удобных флагов» делают практически невозможным быстрое преследование мошенников.
- Пока регуляторы расследуют одну схему, мошенники уже создают три новые компании, перегружая бюрократию.
- Обсуждение сводится к выводу: без ускоренных процедур и жёсткого наказания санкции превращаются в игру «кот и мышь».
Chat Control faces blocking minority in the EU 🔥 Горячее
JavaScript отключён
Включите его или смените браузер. Расширения, блокирующие трекинг, могут мешать.
Комментарии (112)
- Участники обсуждают, как лоббисты снова и снова выводят на голосование «Chat Control», пока не пройдёт, и предлагают ввести «экспоненциальный откат» или запрет на повторное внесение одного и того же.
- Сомневаются, что такое правило сработает: тексты закона легко слегка изменить, а определение «похожести» станет новым полем для манипуляций.
- Отмечают, что ЕС уже практикует «голосуй до нужного результата» (конституция, Лиссабон, Ницца).
- Подчёркивают: политики стремятся исключить себя из-под сканирования «по служебной тайне», а реальные преступники обойдут слежку.
- Считают, что единственный надёжный тормоз — отсутствие большинства в Совете, но Брюссель может давить через фонды и другие рычаги.
Learn x86-64 assembly by writing a GUI from scratch (2023)
Изучение 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, но мы сделаем всё сами. Сервер может быть хоть на другом конце света — это не важно для клиента.
Комментарии (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 🔥 Горячее 💬 Длинная дискуссия
- FinCEN и Казначейство США готовят правила, расширяющие «Патриотский акт» на цифровые активы: под запретом CoinJoin, атомарные свопы, повторное использование адресов и задержки при трансляции транзакций.
- Использование этих инструментов приравняют к «подозрительному поведению»: монеты, прошедшие через них, заблокируют на регулируемых площадках, а пользователей будут преследовать вплоть до тюрьмы.
- Ведомства фактически запрещают передовые практики самокастодиального хранения, ухудшая приватность и безопасность законопослушных граждан.
- Загрузка множества UTXO на один адрес снижает энтропию ключей и облегчает брут-форс; новые правила делают биткоин менее безопасным и экономически неэффективным.
- Вместо расширения надзора «Патриотский акт» следует отменить, а конфиденциальность — защищать, а не уничтожать.
- Борьба с преступностью должна вестись профессиональными методами, а не ограничениями для всего населения.
Дополнительно:
- Биткоин-фьючерсы стали менее волатильны, чем платина: появление ETF, опционов и других инструментов подавляет колебания, снижая и риски, и потенциал роста.
Комментарии (534)
- Пользователи спорят, действительно ли новое руководство Казначейства США запрещает самостоятельное хранение криптовалюты: большинство считает, что заголовок статьи — кликбейт и подмена понятий.
- Под «подозрительной активностью» перечислены стандартные AML-признаки (структурирование, микширование, задержка транзакций), а не сам факт владения приватными ключами.
- Критика сводится к тому, что правительство расширяет полномочия по отслеживанию всех денежных потоков, превращая финансовую конфиденциальность в преступление по умолчанию.
- Участники отмечают: публичный блокчейн Bitcoin делает приватность технически сложной, а попытки скрыть следы выглядят как отмывание, что усиливает регуляторное давление.