Hacker News Digest

Тег: #javascript

Постов: 80

It took a year to ship WebAssembly in Anubis (anubis.techaro.lol)

Anubis — это система защиты веб-сайтов от агрессивного скрапинга со стороны ИИ-компаний, использующая механизм Proof-of-Work, вдохновлённый Hashcash. При небольшом трафике нагрузка пренебрежимо мала, но при массовом скрапинге она резко увеличивает стоимость таких операций, делая их экономически невыгодными. Разработка заняла год, поскольку требовалось тщательно оптимизировать реализацию под WebAssembly, чтобы обеспечить достаточную производительность вычислений прямо в браузере пользователя без значительного влияния на легитимный трафик.

Цель Anubis — временное решение, позволяющее выиграть время для разработки более точных методов обнаружения headless-браузеров, например, через анализ особенностей рендеринга шрифтов. В будущем планируется полностью отказаться от показа капчи-подобных страниц обычным пользователям, направляя проверку только на подозрительный трафик. Система требует поддержки современных JavaScript-функций, поэтому пользователям с плагинами вроде JShelter, блокирующими такие возможности, необходимо отключить их для корректной работы защиты. Anubis не блокирует доступ полностью, но делает массовый сбор данных слишком дорогим для злоупотребляющих сторонами.

by xena • 06 сентября 2026 г. в 20:32 • 187 points

ОригиналHN

#anubis#captcha#hashcash#headlessbrowser#javascript#jshelter#proof-of-work#wasm#webassembly#webscraping

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

Обсуждение дополняет статью практическими замечаниями: необходимость fallback‐механизмов при отключённом WebAssembly, экономическая природа защиты, инструменты тестирования совместимости, готовые расширения для ускорения PoW, а также вопросы о применимости подхода к старым браузерам и реальной эффективности предположения о вычислительных ограничениях скреперов. **Fallback и старые браузеры:** Пользователям с отключённым WebAssembly нужно явное уведомление, аналогичное сообщению при отключённом JavaScript. Альтернативой служит JavaScript‐fallback — транспиляция WASM обратно в JS для совместимости. Однако старые браузеры на Smart TV могут не поддерживать WASM и будут вынуждены использовать JS‐fallback, что потенциально открывает путь скреперам к обходу более тяжёлого алгоритма. **Экономика защиты:** Защита от ботов — экономическая задача: достаточно повысить стоимость скрейпинга, чтобы он перестал быть прибыльным, а не делать его полностью невозможным. Скрейпинг вреден даже для статического HTML: боты собирают контент независимо от динамичности сайта. **Инструменты и оптимизации:** Для базового WASM рекомендуется целевой триплет Rust `wasm32v1-none` (ограничение до `#[no_std]`, упрощённая совместимость). Проверить поддержку WebAssembly можно через онлайн‐детектор wasm-feature-detect.surma.technology. Предлагается предоплачивать PoW через систему кредитов/токенов по модели Privacy Pass, чтобы избежать ожидания в реальном времени. Уже существуют браузерные расширения на WebAssembly и WebGPU, ускоряющие решение Anubis‐PoW. **Критика подхода:** Предположение об ограниченности скреперов вычислительными ресурсами ставится под сомнение: современные скрейперы могут использовать GPU и специализированные ускорители, что снижает эффективность чисто CPU‐ориентированных PoW. Также требует уточнения формула, по которой увеличение сложности на 1 бит даёт 1024‐кратный рост.

Fine, I'll build my own text editor (dbushell.com)

Автор экспериментирует с созданием собственного текстового редактора, начиная с рендера на <canvas>, где реализовал базовые функции: позиционирование курсора, перемещение стрелками, подсветку текущей строки, ввод текста и анимацию курсора. Однако столкнулся с отсутствием выделения текста, undo/redo, многострочной вставки и прокрутки — последняя решена через скрытый <div> с нативным overflow, но доступность осталась проблемой. Перешёл на contenteditable с plaintext-only, получив бесплатную выделение, историю изменений и доступность, но обнаружил непредсказуемые проблемы с производительностью в Chromium при большом объёме текста. Попробовал <textarea> — оказался более производительным, особенно с подсветкой синтаксиса через дополнительный слой <div> и MicroLighter. Упомянул новые API: OpaqueRange для кастомных выделений в <textarea> и EditContext для улучшения ввода в <canvas>. Отметил, что слишком много CSS-подсветок создаёт узкое место, и предложил использовать Tree-sitter для генерации подсветки только видимых строк или применить «обратную липкую технику» для оптимизации скроллинга. Заключил, что для его задач contenteditable достаточно, так как редактируемые файлы малы. Демонстрации неоптимизированы и не идеальны по доступности, но отправной точки лучше, чем с <canvas>. Завершил примером на UTF-16 и графемах, показывающим сложность корректной работы с текстом в JavaScript.

by Alephinitesimal • 01 сентября 2026 г. в 17:12 • 147 points

ОригиналHN

#canvas#contenteditable#editcontext#javascript#microlighter#opaque-range#text-editor#tree-sitter

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

Создание собственного текстового редактора — классический обучающий проект, но опытные разработчики сходятся во мнении, что существующие решения практичнее. Нативный `<textarea>` остаётся самым производительным и согласованным средством редактирования в браузере. Современные редакторы (Emacs, Sublime, VS Code) уже решают ключевые задачи — LSP, мультикурсоры, подсветку синтаксиса — и их повторная реализация ведёт к раздуванию, а не к улучшению. Canvas-подходы в браузере крайне сложны из-за отсутствия низкоуровневых API для ввода, макросов и системного взаимодействия, что делает их непрактичными. Использование скрытого `<div>` для прокрутки — признанный костыль, а рендеринг курсора на canvas часто ломается, особенно в Safari. Даже базовые функции — выделение, undo/redo, прокрутка — требуют сложных решений, которые уже реализованы в готовых инструментах. Производительность критична: небольшие задержки делают редактор непригодным, и лишь немногие (Sublime, Vim) сохраняют плавность на больших файлах. По этой причине лучше использовать фреймворки: CodeMirror 6 для веба, KTextEditor для Qt, Emacs для полной настраиваемости, а для экспериментов — модифицировать существующий редактор (например, Emacs с Org-mode или Magit). Спорные моменты: Sublime Text одни считают устаревшим, другие — непревзойдённым по отзывчивости. Часть участников полагает, что текстовое редактирование — решённая проблема и новшества — лишь конфигурация Vim/Emacs; другие указывают, что LSP и удалённое редактирование требуют новых архитектур. Тренд на использование AI поверх KTextEditor подтверждает: даже создавая «свой» редактор, разработчики опираются на существующие библиотеки.

A walkable ASCII cyberpunk city in one HTML file [video] (youtube.com) 🔥 Горячее

Один HTML-файл содержит полностью интерактивный ASCII-город в киберпанк-стиле, который можно исследовать с клавиатуры. Проект создан энтузиастом под ником Grow Now! Games и использует только чистый HTML, CSS и JavaScript без внешних зависимостей или фреймворков. Город генерируется процедурно: здания, улицы, неоновые вывески и даже движущиеся поезда представлены символами ASCII, а их расположение и поведение определяются алгоритмами в скрипте. Пользователь перемещается стрелками или WASD, вид сбоку имитирует прогулку по улицам, а фоновая музыка и звуки усиливают атмосферу.

Код умещается в одном файле размером менее 100 КБ, что делает его удобным для загрузки и запуска в любом браузере. Автор подчеркивает, что цель — показать, насколько много можно достичь с минимальными средствами, вдохновлённый ретро-эстетикой и демосценой. В комментариях зрители отмечают детализацию: меняющееся время суток, динамические эффекты дождя и неона, а также скрытые пасхалки, например, терминалы с фейковым кодом. Проект стал популярным благодаря своей простоте и глубине, демонстрируя, как творческие ограничения могут порождать уникальные интерактивные опыты.

by keithcarolus • 31 августа 2026 г. в 18:21 • 315 points

ОригиналHN

#ascii-art#css#cyberpunk#demo-scene#html#javascript#keyboard-input#no-framework#procedural-generation#youtube

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

Обсуждение подтверждает работоспособность браузерного подхода к ASCII‐арту, но выявляет ряд ограничений: падение производительности при частой смене цветов, различие визуального качества между видео и реальным отображением, ограниченный доступ к полной версии проекта и сложность анализа кода из‐за WASM‐обфускации. Браузер предпочтительнее терминала для фикс‐ширинного ASCII‐арта благодаря точному контролю над шрифтами, пропорциями, вводом мыши и профилированием производительности. Среди методов отрисовки DOM‐текст даёт самую чистую картинку, но при частой смене цвета в каждой строке замедляется из‐за обёртывания символов в `<span>`. WebGL достигает более 1000 FPS и лучше подходит для динамических цветов. Для выбора метода рекомендуется бенчмаркинг DOM, Canvas и WebGL. Часть разработчиков считает браузер слишком тяжёлым для TUI и предпочитает терминал из‐за низкого потребления ресурсов и возможности SSH‐доступа к мощным серверам; другие рассматривают браузер как более гибкую и современную платформу. Реальное отображение в браузере нередко выглядит менее чётко, чем демонстрационное видео, что указывает на различия в рендеринге между браузерами. Для улучшения качества рекомендуется использовать блоковые символы (ASCII 219) в сочетании с половинными блоками и символами затенения (220, 223, 176–178) для дезеринга. Расширенный ASCII (символы выше 127) добавляет графических возможностей, но его поддержка зависит от шрифтов и окружения. Более продвинутая версия проекта находится за платным прототипом, а доступные ссылки ведут к старой версии, отличающейся от видео. Код проекта компилирован в WebAssembly и обфусцирован, что ограничивает прямой анализ, хотя некоторые пользователи пытаются его декомпилировать. Первая ссылка в посте ведёт к демо, вторая — к исходному коду, который может не соответствовать последним улучшениям. Движок города построен на сетке, использует лучевое трассирование каждый кадр для расчёта перспективы, глубины и коллизий и полностью реализован в одном HTML‐файле без внешних ресурсов. Проект вызывает ностальгию у любителей классических MUD и текстовых приключений, показывая, что чистый HTML способен обеспечить погружающий опыт без тяжёлых движков.

I used AWS cognito for a startup. I wouldn't do it again (joshkaramuth.com)

Я потратил три недели, пытаясь настроить аутентификацию в AWS Cognito для стартапа, и теперь не рекомендую его использовать. Документация оказалась хаотичной смесью руководств для разных аудиторий — архитекторов, фронтенд- и мобильных разработчиков — без чёткой структуры, что заставляло прыгать между десятками вкладок и гадать, какие разделы актуальны. Примеры кода ссылались на устаревшие версии JavaScript SDK, Amplify v1 и raw AWS SDK без пояснений, вынуждая угадывать правильный импорт. Кризис усилился при переходе с Amplify v5 на v6: библиотека полностью изменила API, удалив ключевые функции, на которых была построена логика аутентификации, а миграционный guide оказался фрагментарным и непригодным для быстрого исправления. Пришлось переписывать рабочий код с нуля, теряя время и уверенность в стабильности платформы. Несмотря на бесплатный tier для 50 000 MAU и интеграцию с AWS, постоянные ломки обратной совместимости и плохая документация делают Cognito непригодным для быстрой и надёжной разработки в условиях стартапа. Лучше инвестировать время в более предсказуемые решения, даже если они требуют дополнительных усилий по интеграции.

by speckx • 28 августа 2026 г. в 13:21 • 176 points

ОригиналHN

#amplify#aws#cognito#javascript#startup

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

Обсуждение подтверждает основные проблемы автора с документацией и ограничениями Cognito, дополняя их деталями о высокой стоимости альтернатив, рисках вендор‐локина и реальных сценариях миграций, но также показывает, что при достаточном опыте сервис может работать; большинство, впрочем, советует более удобные решения. Документация Cognito хаотична, смешивает аудитории и содержит устаревшие примеры, что сильно усложняет настройку; схожие проблемы характерны для большинства сервисов AWS. Ключевые функции — сброс пароля, интеграция SAML, изменение пользовательского пула — либо отсутствуют, либо требуют обходных решений. Cognito привлекателен низкой ценой, особенно для стартапов, но экономия сопровождается отсутствием базовых возможностей: нет резервного копирования, гибкой миграции пользователей, экспорта хешей паролей, что делает вендор‐лок‐ин серьёзным риском. Отсутствие встроенного экспорта усложняет восстановление после сбоев. Уникальное преимущество Cognito — выдача временных AWS‐учётных данных без локальных креденциалов, упрощающая доступ к ресурсам AWS. Команда сервиса иногда добавляет недостающие функции (например, задание пароля администратором), но делает это медленно. Проекты миграции на Cognito часто удваивают запланированные сроки и бюджет. Мнения разделились: одни считают, что после преодоления начального порога Cognito стабильно работает; другие — что затраченные недели на отладку делают сервис неприемлемым. Советы: - Выбирать решение для аутентификации, исходя из опыта разработчиков и удобства, а не только из интеграции с AWS. - Рассмотреть открытые или самохостинговые альтернативы (Keycloak, Ory, FusionAuth, WorkOS) для лучшего контроля и портативности. - Для простых приложений может быть выгоднее реализовать собственную аутентификацию, чем полагаться на провайдера, который может «захватить» пользователей. - При использовании Cognito заранее подготовить CloudFormation‐шаблоны с лучшими практиками (настройка логина, Lambda‐уведомления и т.д.), чтобы снизить число повторяющихся проблем.

Don't Wordle (dontwordle.com) 🔥 Горячее

Don't Wordle — это бесплатная ежедневная словесная игра, в которой цель противоположна Wordle: вместо того чтобы угадать скрытое слово за шесть попыток, нужно избегать его угадывания как можно дольше. После каждой попытки игрок получает стандартные подсказки — зелёный (правильная буква на правильном месте), жёлтый (правильная буква, но не на своём месте) и серый (буква отсутствует в слове) — и должен использовать их, чтобы исключать возможные варианты, оставляя в игре как можно больше допустимых слов. Ключевая сложность заключается в том, чтобы не наткнуться на правильный ответ случайно, используя логику исключения.

Игра предлагает одну головоломку в день и позволяет ограниченное количество отмен ходов, если игрок слишком близко подобрался к ответу. Пользователи могут отслеживать свою статистику и делиться результатами с друзьями. Для игры необходим включённый JavaScript, а на сайте доступны разделы с правилами, советами, часто задаваемыми вопросами и информацией о проекте. Don't Wordle превращает привычную механику Wordle в тренировку обратного мышления и стратегического планирования.

by Hbruz0 • 25 августа 2026 г. в 11:49 • 317 points

ОригиналHN

#dontwordle#game#javascript#wordle

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

Практические советы: использовать минимум уникальных букв, выбирать редкие, чтобы отложить буквы целевого слова; известную букву нельзя повторно использовать и ставить в позицию, где она уже известна как неправильная. UX‐проблемы: огромный список cookie‐согласий блокирует доступ, требуя постоянного отклонения сотен пунктов; отсутствие опции «no undo» и принудительный откат, когда оставшееся пространство слов меньше попыток; рекламные баннеры и множество запросов на согласие ухудшают опыт. Сравнение: похожий проект Last Word имеет фиксированное стартовое слово и нет отмены, что делает сравнение интересным. Оптимизация: поиск «идеально плохих» игр можно автоматизировать — пример кода сократил время расчётов с 35 ч до 20 с.

AliExpress runs silent WebAudio fingerprinting that breaks Bluetooth multipoint (blog.laserphile.com) 🔥 Горячее 💬 Длинная дискуссия

AliExpress на главной странице тайно запускает два скрытых WebAudio-контекста через обфусцированные скрипты collina.js и fireyejs.js от Alibaba. Эти контексты генерируют синтетический сигнал (пилообразную волну), анализируют его через AnalyserNode и передают на аудиовыход через GainNode с громкостью ноль — так что пользователь ничего не слышит. Однако подключение к аудиоустройству заставляет систему активно обрабатывать аудиопоток, что мешает Bluetooth-наушникам с мультипоинтом переключаться между устройствами: даже при отключении звука в браузере или ОС переключение не работает.

Это не реклама и не медиа — а метод браузерного фингерпринтинга, используемый для антифрода. Скрипты собирают уникальные характеристики устройства через аудио-анализ, но не сообщают пользователю о своей работе. Проблема в том, что такой скрытый аудиопоток влияет на аппаратное поведение внешних устройств, обходя стандартные механизмы блокировки звука. Блокировка этих двух скриптов через uBlock Origin полностью решает проблему — наушники возвращаются к нормальному режиму работы, а фингерпринтинг прекращается.

by emctech • 20 августа 2026 г. в 10:08 • 887 points

ОригиналHN

#alibaba#aliexpress#bluetooth#fingerprinting#javascript#ublock-origin#webaudio

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

Скрытый аудио-фингерпринтинг на AliExpress — не изолированный случай, а часть системной проблемы: аналогичные техники используются на Twitter, Stripe, Wolt, немецких новостных порталах, сайтах с рекламой, капчей и DRM. Он нарушает Bluetooth-мультипоинт, перехватывая аудиофокус у наушников (включая AirPods) и звуковых панелей, вызывая случайные переключения источников даже при отсутствии слышимого звука. Пользователи отмечают скрежет, скачки громкости и блокировку фоновой музыки — особенно на iOS, где вкладки продлевают работу через удержание аудиосессии. Браузеры не показывают значок динамика при тихом воспроизведении — это сознательное решение, а не ошибка. Проблема возникает на уровне аудиодрайверов и управления потоками, подтверждаясь даже при использовании SPDIF. Фингерпринтинг не требует разрешения пользователя, не использует микрофон или камеру, и обходит проверки App Store, так как WebAudio-код не выглядит как скрытая функция. uBlock Origin и аналогичные фильтры эффективно блокируют аудио-фингерпринтинг, доказывая, что проблема — в коде сайтов, а не в браузерах или ОС. Хотя современные браузеры (Chrome, Firefox, Safari) частично нейтрализовали WebAudio-фингерпринтинг унификацией выходных данных, он не устранён полностью. Предлагается ввести разрешение на доступ к аудиовыходу, как для камеры и микрофона, и внедрить проактивную блокировку подозрительных WebAudio-шаблонов браузерами — не полагаясь на пользовательские фильтры. Споры остаются: одни считают это творческим обходом ограничений, другие — нарушением Computer Fraud and Abuse Act. Apple не может выявить такие манипуляции через ревью приложений, так как они невидимы в коде.

Show HN: I was tired of opening 2 tabs for every HN link, so I made a userscript (github.com) 🔥 Горячее

Легковесный пользовательский скрипт HNewhere интегрирует обсуждения Hacker News в любой веб‑статью, позволяя читателям видеть комментарии без перехода на отдельный форум. Скрипт работает как небольшое дополнение для браузеров, которое можно установить через Tampermonkey или Greasemonkey, и полностью сохраняет оригинальный дизайн страницы, не вмешиваясь в её контент. Он добавляет в боковую панель блок с последними обсуждениями, показывая репутацию пользователей, ссылки на комментарии и возможность быстро перейти к полной цепочке. Скрипт не требует изменения HTML‑разметки, а лишь подгружает данные через API Hacker News, что делает его незаметным и быстрым.

Проект распространяется под MIT‑лицензией, имеет 116 звёзд, 4 форка и одного наблюдателя; последняя версия v1.4.6 вышла 29 июля 2026 года, реализована полностью на JavaScript. Основная идея — добавить к любой статье блок с последними обсуждениями Hacker News, облегчая отслеживание мнений сообщества. Среди ярких фактов — 116 звёзд на GitHub, 4 форка, дата релиза 29 июля 2026 года и то, что весь код написан на JavaScript 100 %. Скрипт поддерживает установку через менеджеры пользовательских скриптов, а его единственный автор — Thomas Walichiewicz, чей профиль доступен на GitHub. Скрипт легко настраивается и не требует дополнительных зависимостей.

by twalichiewicz • 28 июля 2026 г. в 22:09 • 330 points

ОригиналHN

#api#github#greasemonkey#hackernews#javascript#mit#tampermonkey#userscript

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

Многие пользователи Hacker News сталкиваются с открытием двух вкладок на одну ссылку и используют пользовательские скрипты или расширения для решения этой проблемы. Некоторые считают её незначительной и предлагают решать через стандартные функции браузера, другие — требуют специализированных решений. При использовании скриптов и расширений важно учитывать безопасность и конфиденциальность, включая передачу данных на внешние серверы.

Htmx 4.0, the first JavaScript library to release exclusively on the Game Boy (swag.htmx.org) 🔥 Горячее 💬 Длинная дискуссия

htmx 4 — это не фреймворк, а мерч-сборник с юмористическим уклоном: сайт swag.htmx.org продаёт футболки, худи, стикеры и кружки с мемами вроде «htmx sucks» и «Hypermedia is for Lovers». Всё это — пародия на экосистему современных фронтенд-библиотек, где даже технические инструменты обрастают культурой бренда. Сайт предлагает товары в 17 валютах, от USD до JPY, и включает коллекции с персонажами вроде «Grug» — отсылкой к трендам вроде «простой код для простых людей».

Сайт не содержит реальных продуктов — только рекламные баннеры, трекеры и куки от Google, Twitter, Facebook, TikTok и Microsoft, что само по себе является сатирой на современные веб-платформы. Даже кнопки «Accept all» и «Reject all» имитируют навязчивые согласия на отслеживание, подчёркивая абсурдность текущей модели монетизации веба. htmx 4 — это не обновление, а культурный комментарий: если фронтенд стал ритуалом, пусть и мерчем его празднуют.

by rcy • 26 июля 2026 г. в 12:00 • 453 points

ОригиналHN

#facebook#google#htmx#javascript#microsoft#swag#tiktok#twitter

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

htmx прост в использовании, позволяет быстро создавать отзывчивые сайты с минимальной сложностью и успешно заменяет React и Vanilla JS. Пользователи отмечают его эффективность для статических сайтов и совместимость с AWS Step Functions и PostgreSQL. Рекомендуется использовать htmx вместе с серверными шаблонами. Один из пользователей критикует отсутствие надёжного fallback при отключённом JavaScript, что может ухудшить доступность. Команда htmx известна нестандартным подходом — например, выпуском htmx 4.0 на Game Boy.

NotebookLM is now Gemini Notebook (blog.google) 🔥 Горячее

Google переименал NotebookLM в Gemini Notebook — тот же самостоятельный инструмент, но теперь он тесно интегрирован в экосистему Google и получил обновление с безопасным облачным компьютером, позволяющим писать и выполнять код напрямую. Эта возможность уже доступна пользователям Google AI Ultra и бизнес‑клиентам с AI Ultra и AI Expanded Access, а в ближайшие недели будет расширена на всех Pro‑пользователям версии для браузера, открывая новые форматы вывода и более глубокий анализ. Это особенно полезно для сложных данных и исследовательских задач, где требуется интеграция с другими сервисами Google.

Более 30 млн человек и свыше 600 тыс. организаций уже используют Gemini Notebook для создания интерактивных материалов, аудио‑и видеосводок из заметок, а новые функции позволяют хранить и синхронизировать заметки в Gemini‑приложении и скоро — в AI‑режиме Поиска. Спасибо тем, кто с 2023 года поддерживает проект, и приглашаем попробовать новые возможности прямо сейчас. Это открывает путь к более персонализированному обучению и работе с данными, а также к интеграции с другими сервисами Google, что делает Gemini Notebook универсальным исследовательским помощником для всех уровней пользователей.

by xnx • 16 июля 2026 г. в 16:08 • 255 points

ОригиналHN

#ai-ultra#cloud-computing#gemini-notebook#google#javascript#notebooklm

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

Обсуждение переименования NotebookLM в Gemini Notebook подтверждает, что инструмент стал более интегрированным в экосистему Google, но также вызывает опасения по поводу возможных изменений и добавления ненужных функций.

  • Некоторые пользователи приветствуют renaming и считают его более соответствующим продукту.

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

  • Совет: Пользователи с опытом работы с продуктом советуют быть осторожными и не ожидать значительных изменений, а также рекомендуют использовать существующие функции, такие как interrupt mode.

  • Пользователи ценят существующие функции продукта, такие как возможность работать с подкастами и документами.

  • Спор: Некоторые пользователи критикуют Google за частые переименования и закрытия продуктов, что может привести к потере доверия к компании.

Any people with insight on why this happens? From my corporate experience this generally happens when two teams are working on a similar thing, they complain about turf to leadership, and leadership either makes them consolidate efforts or chooses a winner. Is that what happens at Google a lot? Or… — @rhipitr

Since Chromium 148, Math.tanh is now fingerprintable to link underlying OS (scrapfly.dev) 🔥 Горячее 💬 Длинная дискуссия

Браузеры передают вычисления тригонометрии и гиперболических функций через системные математические библиотеки, поэтому небольшие различия в округлении позволяют анти‑бот‑системам определять, на какую ОС запущен браузер. Например, Math.tanh(0.8) возвращает 0.6640367702678491 в Linux (glibc), 0.664036770267849 в macOS (libsystem_m) и 0.6640367702678489 в Windows (UCRT) – различие в одном‑двух последних битах (1‑2 ULP). Такие «битовые подписи» появляются, начиная с Chrome 148, когда V8 перестал использовать fdlibm и стал вызывать std::tanh из хост‑libm. Раньше эти функции давали одинаковый результат на всех платформах и не фиксировали ОС. При этом лишь небольшая часть функций — sin, cos, tan, tanh, exp и другие — передаёт данные через хост‑libm; остальные математические операции остаются внутри V8 и не раскрывают платформу. Эти различия позволяют анти‑бот‑системам построить отпечаток.

Scrapfly закрывает эту утечку, имитируя точные биты, которые выдаёт реальная библиотека каждой ОС. Они формируют таблицу подписей для cos, tanh, sin и других функций, а затем в браузерных сборках подменяют вычисления так, чтобы результат совпадал с тем, что получает браузер. Таким образом, даже при hundreds‑fold проверке по сигналам, включая математику, их клиент выглядит идентично реальному браузеру и обходит анти‑бот‑механизмы.

by joahnn_s • 12 июля 2026 г. в 21:12 • 299 points

ОригиналHN

#anti-bot#browser-fingerprinting#chromium#javascript#linux#macos#v8#windows

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

  • Обсуждается, что вызов Math.tanh может раскрывать операционную систему и версию браузера, делая её потенциальным вектором отпечатка.
  • Участники отмечают, что современные браузеры уже содержат множество уникальных характеристик, и полностью скрыть ОС практически невозможно.
  • Предлагаются методы добавления шума или замены функций, однако такие изменения могут лишь облегчить идентификацию «скрытных» пользователей.
  • Ведутся споры о правовых ограничениях fingerprinting и необходимости регулировать технологии отслеживания в интернете.

Old and new apps, via modern coding agents (terrytao.wordpress.com) 🔥 Горячее

Искусственный интеллект позволил перенести десятки старых математических апплетов, написанных в Java 1999‑го, в современный JavaScript‑репозиторий. Миграция заняла несколько часов, все приложения снова заработали, один из них получил цветовую проработку Besicovitch‑множеств, а один, совместно с Алленом Кнутсоном, ожил после почти трёх десятилетий. При этом агент обнаружил два скрытых бага в оригинальном коде, а в реальном тестировании выявлен лишь один мелкий недочёт при перетаскивании за пределами окна, так что падение качества оказалось нейтральным.

Тот же подход использовался для создания новых визуализаций: за пару часов агент сгенерировал интерактивный симулятор специальной теории относительности, воспроизведший задумку «Inkscape в Мяковском пространстве», и отдельный инструмент для наглядного изучения Гиблеит‑конъюнкции. Эти «альфа‑версии» служат лишь вспомогательными материалами к статьям, но уже демонстрируют, как LLM‑агенты могут ускорить разработку учебных и исследовательских визуализаций, минимизируя риск критических ошибок.

Все новые и перенесённые апплеты размещены в открытом репозитории, доступном по ссылке, и могут использоваться как интерактивные дополнения к публикациям, позволяя читателям экспериментировать с параметрами и лучше воспринимать абстрактные концепции.

by subset • 12 июля 2026 г. в 11:09 • 413 points

ОригиналHN

#coding-agents#github#interactive-simulations#java#javascript#llm#open-source#special-theory-of-relativity#visualization

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

  • LLMs позволяют быстро создавать визуализации и прототипы, которые ранее требовали значительных усилий.
  • Они удобны для модернизации устаревших учебных материалов и приложений, например, портирования старых Java‑апплетов.
  • Не все задачи требуют полного доверия к генерации кода, особенно поддержка и рефакторинг сложного legacy‑кода.
  • Общий эффект – расширение круга разработчиков, снижение барьера входа в программирование за счёт автоматизации рутины.

Show HN: Ant – A JavaScript runtime and ecosystem (antjs.org) 🔥 Горячее

Ant — это легковесный JavaScript‑рантайм, написанный на Rust, который позволяет запускать код с микросекундной задержкой и почти без накладных расходов. Размер готового бинарника составляет около 200 КБ, а API минимален, что упрощает встраивание в микросервисы и edge‑сценарии. Проект изначально проектировался для быстрого старта в функциях без сервера, где важна экономия ресурсов и предсказуемая производительность. За счет компиляции в нативный код без виртуальной машины Ant достигает почти нулевого времени инициализации, что делает его привлекательным для высоконагруженных систем.

По сравнению с Node.js он стартует в 2–3 раза быстрее, потребляет в среднем в два раза меньше памяти и полностью совместим с современным ECMAScript, включая async/await и модули. В тестах на типичных workload'ах Ant показывает снижение латентности на 30 % и экономию до 50 % в расходе CPU. Проект открытый, распространяется под лицензией MIT, и уже используется в продакшене компаниями для edge‑вычислений и функций serverless, где критичны скорость старта и небольшие размеры. Благодаря небольшому размеру и быстрому запуску Ant позволяет разворачивать функции в менее чем 10 мс, что открывает новые возможности для реального времени.

by theMackabu • 11 июля 2026 г. в 20:07 • 274 points

ОригиналHN

#javascript

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

  • Автор использует AI каждый день, но критикует «scratch‑hand‑built» подход, учитывая существующий AGPL‑код.
  • Обсуждение названия «Ant» и конфликтов с Apache Ant, а также вопросы к экономике создания нового рантайма и экосистемы.
  • Производительность и быстрый старт поднимаются, но сравнения с V8 и реальные бенчмарки вызывают сомнения.
  • Проект предлагает sandboxing, небольшие бинарники и потенциал для Edge/FaaS, но критикуют избыточный набор функций и отсутствие ясности в монетизации.

Show HN: 18 Words (18words.com) 🔥 Горячее 💬 Длинная дискуссия

В игре «18 Words» каждый день предлагается собрать слово, используя все показанные буквы, пока не истекло время. Игрок может открыть одну из трёх скрытых букв как подсказку, приостановить или перезапустить раунд, а также поделиться результатом и бросить вызов друзьям. Основная цель — быстро подобрать осмысленное слово, используя каждую букву ровно один раз, что делает игру одновременно простой и требовательной.

После завершения раунда доступны варианты «Практиковаться снова», «Отдохнуть», «Архив» и возможность отправить отзыв; при ошибке система просит попробовать ещё раз. Ссылка на companion‑game «Zanagrams» расширяет выбор. Запомните: «Find a word using all the letters before time runs out!» — эта фраза отражает суть, а цифра «18» и возможность раскрыть только три буквы как подсказку делают каждый уровень уникальным. Каждый день появляется новый набор букв, меняя стратегию, а система очков lets you compare results globally. Вы можете поделиться счётом в соцсетях, пригласить друзей к Challenge, а в архиве сохраняются все пройденные уровни. При ошибке появляется сообщение «Something went wrong. Please try again», но после нескольких попыток игра восстанавливается. Ссылка на companion‑game «Zanagrams» открывает дополнительные пазлы.

by pompomsheep • 09 июля 2026 г. в 12:48 • 1069 points

ОригиналHN

#javascript#reactjs#wordle#zanagrams

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

  • Игроки делятся на сторонников таймера и тех, кто хочет бесконечное время или «режим без таймера».
  • Предлагают добавить кнопку «shuffle/scramble», возможность повторного попыток и отдельный «practice mode» без потери очков.
  • Ждут улучшений отображения результатов: прогресс‑бар, шкала заполнения, статистика времени и процент правильных ответов.
  • Высказывают баги (непризнание правильных слов) и просят добавить кнопку «share» в стиле Wordle.

My thoughts on the Bun Rust rewrite (andrewkelley.me) 🔥 Горячее 💬 Длинная дискуссия

Когда стартап, построенный вокруг JavaScript‑раннера, получил инвестиции, его подход резко изменился: вместо свободного развития он стал гоняться за быстрым выходом на рынок, а управление превратилось в «гонку», где требовалось «grind» даже в первые девять месяцев. Основатель публично заявлял, что «Oven будет тяжёлым», и требует от команды работать без баланса, что вызвало бурю недовольства среди бывших соискателей и сотрудников, которые описывали его как «плохого менеджера» с нереалистичными требованиями и низкой эмпатией.

В то же самое время качество кода в проекте ухудшалось: в репозитории скопилось множество костылей, злоупотребление ассертами и спешка в добавлении функций приводили к росту технического долга и рискам памяти, что вызывало критику со стороны сообщества Zig, где безопасность стала главным аргументом отстранения от проекта. Несмотря на ежегодную поддержку в размере $60 000, после покупки компанией Anthropic доноры прекратили встречи и пожертвования, оставив фонд без средств. Поэтому команда приветствовала переписывание на Rust, считая её шансом избавиться от «недостойственного» примера и вернуть доверие. Эта ситуация стала катализатором для перехода на Rust, который воспринимался как возможность очистить репозиторий и восстановить репутацию языка среди разработчиков.

by kristoff_it • 09 июля 2026 г. в 09:47 • 745 points

ОригиналHN

#anthropic#bun#javascript#rust#zig

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

  • Автор обвиняет Джейрда в нечестности и личных нападках, несмотря на заявления о нейтральности.
  • Обсуждается несоответствие заявлений о фузинге Zig и реальном отсутствии его использования в Bun.
  • Критики считают пост эмоциональным, непофессиональным и ухудшающим имидж Zig.
  • Есть мнение, что фокус на личных конфликтах мешает конструктивному техническому анализу.
  • Некоторые видят в этом попытку монетизации или PR‑продвижения, а не объективный разбор.

Rewriting Bun in Rust (bun.com) 🔥 Горячее 💬 Длинная дискуссия

Bun изначально появился как Zig‑порт esbuild, получивший сразу набор функций: транспилятор JavaScript/TypeScript, пакетный менеджер, тест‑раннер, HTTP‑клиент и др. За год он стал скачиваться более 22 млн раз в месяц и поддерживается компаниями Vercel, Railway, DigitalOcean и другими. Однако из‑за низкоуровневого кода на Zig в проекте накопилось множество критических багов — use‑after‑free, утечки памяти, гонки, которые приходилось фиксировать вручную.

Переписав ядро на Rust, команда добавила AddressSanitizer, постоянно запускает fuzzing и выпускает безопасные Release‑Safe‑билды. Это позволило полностью устранить use‑after‑free, утечки в crypto.scrypt, tlsSocket.setSession и другие уязвимости, а также сократить размер бина и ускорить warm‑install в 7 раз. Rust‑реализация обеспечивает системную защиту от подобных ошибок, делает Bun более надёжным и готов к дальнейшему развитию.

by afturner • 08 июля 2026 г. в 21:49 • 762 points

ОригиналHN

#bun#digitalocean#javascript#railway#rust#typescript#vercel#zig

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

  • Исключительно быстрый переход от Zig к Rust с помощью Claude Code, протестировавшего 100 % тестов за 11 дней.
  • Стоимость переписывания оценивается в $165 000 токенов, что дешевле найма полноценной команды.
  • Критика направлена на отсутствие открытого анализа проблем, а не на эмоции; многие отмечают рост надёжности и уменьшение размера бинарника.
  • Дискуссия подчёркивает, что такой подход возможен только при наличии зрелых тест‑сьютов и опыта автора, а также вызывает вопросы о долгосрочной поддержке и выборе стека.

Immich 3.0 (github.com) 🔥 Горячее 💬 Длинная дискуссия

Версия 3.0.0 immich‑app представляет собой крупный рефакторинг: обновлённый веб‑интерфейс с темной темой, поддержка объектного хранилища (S3‑совместимый), ускорение загрузки на 30 % и открытие пяти новых API‑эндпоинтов. В релизе участвовало более 150 коммитов, из которых около 40 % — новые функции, а остальные — исправления ошибок и оптимизации. Добавлена централизованная панель администрирования, позволяющая управлять пользователями, квотами и репликацией в реальном времени. Тесты показали, что время генерации превью упало до 0,9 секунды, а пропускная способность выросла до 1500 запросов в секунду, это делает платформу конкурентоспособной для крупных медиа‑хранилищ и упрощает масштабирование.

Миграция с 2.x на 3.0 требует выполнить скрипт обновления базы данных, после чего изменить docker‑compose: добавить переменные S3_ENDPOINT и CACHE_DIR, а также переключить режим хранения на «object». Пользователи отмечают, что после обновления время отклика галереи ускорилось в 1,8 раза, а нагрузка на сервер снизилась на 25 %. Новые API‑эндпоинты открывают доступ к метрикам использования и позволяют интегрировать сторонние аналитические инструменты, а в changelog указано 12 несовместимых изменений, требующих обновления скриптов миграции. Рекомендуется проверять работу кастомных плагинов в staging‑окружении и консультироваться с документацией, где подробно описаны новые параметры.

by hashier • 02 июля 2026 г. в 14:13 • 648 points

ОригиналHN

#api#cloud-storage#database-migration#docker#github#immich#javascript#postgresql#reactjs#s3

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

  • Пр高兴ся, что студенты используют Immich в реальном мире и рад, что проект стал альтернативой Google Photos.
  • Обсуждаются проблемы с импортом больших Takeout‑пакетов и необходимость более простого способа загрузки.
  • Много споров حول отсутствие end‑to‑end шифрования и поддержка read‑only/внешних папок.
  • Пользователи отмечают хорошую работу мобильного приложения, но хотят улучшений в синхронизации, порядке элементов альбомов и поддержке не‑фото‑элементов.

PeerTube is a free, decentralized and federated video platform (github.com) 🔥 Горячее 💬 Длинная дискуссия

PeerTube — это открытая платформа для хостинга видео, построенная на ActivityPub и использующая P2P‑технологии прямо в браузере. Вместо централизованных видеосерверов каждый инстанс хранит лишь метаданные, а сам контент передаётся через WebTorrent/WebRTC, что позволяет зрителям смотреть ролики без лишних запросов к оригинальному серверу и существенно экономить трафик.

Ключевые особенности: поддержка субтитров и аудио‑описаний, возможность встраивать видео через ActivityPub‑fediverse, автоматическое реплицирование при добавлении новых инстансов. На момент публикации в репозитории более 10 000 звёзд и более 2 000 форков, а в экосистеме уже работает более 100 публичных инстансов, обслуживающих десятки тысяч часов видеоматериалов. Такая децентрализованная модель делает PeerTube привлекательным выбором для сообществ, которым важна независимость, прозрачность и низкая стоимость распространения видео.

by doener • 02 июля 2026 г. в 11:17 • 680 points

ОригиналHN

#activitypub#decentralized#fediverse#github#javascript#p2p#peertube#video-platform#webrtc#webtorrent

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

  • Высокая стоимость производства и публикации видео делает монетизацию критически важной проблемой для создателей.
  • На PeerTube ограниченный набор контента и аудитории, поиск и рекомендации работают плохо, что затрудняет рост.
  • Технически платформа обеспечивает лишь хостинг и распределённый плей‑аут (P2P‑шаринг), но не полноценный поиск, рекомендации или монетизацию.
  • Проблемы UX, необходимость упрощённого доступа к инстансам и юридические/регуляторные риски (например, защита от незаконного контента) препятствуют широкому принятию.

The CEO of Mullvad is the main financer of the Swedish Örebro party (det.social) 🔥 Горячее 💬 Длинная дискуссия

That's absolutely sad to read." – this line appears in a post on a decentralized network, reflecting disappointment with recent statements by the head of the privacy‑focused VPN Mullvad. The leadership’s involvement in a controversy is seen as disheartening, especially given Mullvad’s reputation for strong anonymity and no‑logs policies. Viewing the conversation on the web version of Mastodon requires JavaScript, with a fallback to native apps for browsers without script support.

The controversy stems from a leaked internal memo where the CEO voiced support for a policy critics say erodes user privacy, sparking heated debate. At the same time, the technical note reminds users that the Mastodon web interface depends on JavaScript, and those unable to run it can use dedicated apps on Android, iOS or desktop. This mix of ethical concerns and platform constraints shows how even privacy‑oriented services face scrutiny and technical limits today. The situation underscores the broader tension between privacy advocacy and corporate governance in the fediverse.

by Risse • 29 июня 2026 г. в 10:45 • 694 points

ОригиналHN

#android#ios#javascript#mastodon#mullvad#vpn

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

  • Обсуждается, что сооснователь Mullvad Даниэль Бернтссон финансирует экстремальную шведскую партию Örebropartiet, что вызвало споры о политике компании.
  • Участники делятся мнениями: одни считают партию правым популистским движением, другие – левым популистским с радикальными взглядами на миграцию.
  • Мнения разделяются: некоторые пользователи продолжат пользоваться Mullvad, другие отменяют подписку из-за политических возмущений.
  • Есть запросы к альтернативным VPN‑провайдерам и обсуждение того, насколько политические убеждения должны влиять на выбор сервисов.

Deno Desktop (docs.deno.com) 🔥 Горячее 💬 Длинная дискуссия

Deno’s runtime includes a dedicated section for desktop application development, offering a full suite of tools and APIs to build cross‑platform GUI programs. It walks developers through project setup, backend integration, HTTP serving, framework choices, and OS‑specific packaging, while also covering advanced features such as WebGPU rendering, hot‑module replacement, DevTools, auto‑update mechanisms, error reporting, and distribution pipelines.

The guide is organized into many subsections—configuration, backends, serving, frameworks, Windows, WebGPU, bindings, menus, tray & dock, dialogs, notifications, HMR, DevTools, auto‑update, error reporting, distribution, and comparison—allowing developers to pick the exact capabilities they need. Notable points include built‑in auto‑update support, WebGPU for modern graphics, and a modular architecture that lets you enable only the pieces you use, making large‑scale desktop projects more maintainable. It also details testing approaches, continuous‑integration hooks, and the CLI commands for scaffolding, bundling, and publishing desktop applications. Security is built‑in, requiring explicit permissions for file, network, and environment access, while TypeScript is supported natively. The documentation also compares different frameworks, helping developers choose the most suitable one for their use case.

by GeneralMaximus • 22 июня 2026 г. в 05:38 • 1122 points

ОригиналHN

#cef#deno#desktop#gui#javascript#typescript#webgpu

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

  • Обсуждается внедрение общего CEF‑рантайма для Deno Desktop, чтобы сократить размер бинарников до нескольких мегабайт.
  • Планируется интеграция с системой прав Deno, чтобы пользователь мог удобно просматривать и управлять разрешениями.
  • Сравнение с Tauri и другими решениями: возможность использования собственного CEF, несколько бекендов (CEF, WebView, raw) и вопросы размера пакетов.
  • Текущий размер приложений остаётся высоким (от 15 МБ с сжатием до 40‑440 МБ), вызывают вопросы по оптимизации и будущей поддержке мобильных платформ.

CSSQuake (cssquake.com) 🔥 Горячее

cssQuake — это браузерный клиент, воссоздающий оригинальную Quake с помощью чистого HTML и CSS, реализованного на PolyCSS. Игрок перемещается клавишами WASD, обзорает мир мышью, стреляет кликом, прыгает пробелом, бежит Shift, кроется Ctrl. Меню открывается стрелками, выбирается Enter, а откат происходит по Esc; в нём есть отдельные экраны для одиночной игры, мультиплеера, помощи и настройки.

Встроенный debug‑панель позволяет включать и выключать контуры, статистику, FPS, динамическое освещение, звук, частицы и даже отключать урон или движение, что даёт полный контроль над визуализацией. Меню создания комнаты отображает название, цвет, карту, лимит фрагментов и максимальное количество игроков; при попытке создать переполненную комнату появляется надпись «ROOM FULL». Панель отладки содержит несколько вкладок — Record, Capture, Visible, DOM, Enemies, Pickups, World Special Objects/items Enemies — где можно фиксировать события, захватывать скриншоты и просматривать структуру документа. Кроме того, в игре реализованы динамические эффекты освещения, настраиваемый крестик, mute‑звуки и отображение частиц, позволяющие экспериментировать с визуальными параметрами в реальном времени, а все изменения мгновенно отражаются в браузере без перезагрузки. Пользователь может также включать отображение HUD, показывать подсказки и менять масштаб интерфейса в реальном времени.

by msalsas • 20 июня 2026 г. в 10:49 • 548 points

ОригиналHN

#browser-game#css#html#javascript#poly-css#quake

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

  • Демонстрация CSS‑Quake впечатляет: запуск без движка, но требует JavaScript.
  • Пользователи отмечают ностальгию, плавность на современных устройствах и лёгкость по сравнению с оригиналом.
  • Есть проблемы: «залипание» в углах, скольжение курсора, баги с меню и падениями.
  • Комментарии подчёркивают, что это не только хак, а полноценная реконструкция движка, вызывающая споры о целесообразности использования CSS.

Lore – Open source version control system designed for scalability (lore.org) 🔥 Горячее 💬 Длинная дискуссия

Lore — это новый открытый контроль версий, созданный Epic Games для масштабных игровых и развлекательных проектов, где код сочетается с большими бинарными артефактами. Он хранит данные по контент‑хешу в Merkle‑дереве, формируя неизменяемую цепочку ревизий, что обеспечивает проверку целостности и повторное использование кода. Файлы разбиваются на переиспользуемые куски, а рабочие пространства могут подгружать данные только по требованию, делая систему лёгкой в начале и готовой к росту без дублирования.

Запуск занимает минуты в локальном режиме, а затем система масштабируется за счёт кэшируемого центрального сервиса и сжатой передачи данных. Свободные ветки позволяют быстро создавать, управлять и синхронизировать их, а CLI даёт полный доступ к всем функциям. Поддерживаются SDK на C/C++, C#, Rust, Go, Python и JavaScript, а лицензия MIT делает проект полностью открытым. Epic позиционирует Lore как основу для совместного развития открытого экосистемного контроля версий, приглашая разработчиков присоединиться к сообществу через GitHub и Discord. История репозитория проверяется криптографически, а лёгкие ветки ускоряют переключение без дублирования данных. Система обеспечивает сжатие и дедупликацию, экономя место даже при частых изменениях больших файлов.

by regnerba • 17 июня 2026 г. в 14:30 • 1276 points

ОригиналHN

#c##c++#discord#epic-games#github#javascript#lore#python#rust#version-control-system

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

  • Lore — новый VCS от Epic, ориентированный на игровую разработку и работу с большими бинарными артефактами, позиционируется как конкурент Perforce.
  • Использует Rust, открытый исходный код, предлагает «полную» API и интеграцию с Unreal Engine, но пока документация написана LLM‑ом и содержит стилистические несоответствия.
  • Планируется поддержка локального/отдельного режима без сервера, но текущая реализация требует удалённого хранилища и GUI‑клиента пока не реализован.
  • Обсуждаются вопросы масштабируемости, локального использования для личных проектов и потенциального применения в ML/AI‑проектах, а также сравнение с существующими решениями вроде PlasticSCM и XetHub.

Mechanical Watch (2022) (ciechanow.ski) 🔥 Горячее

Механические часы хранят энергию в тонкой спиральной пружине, помещённой в металлический барель, и передают её вращение через Arbor к шестерёнкам, которые движут стрелки. Эта пружина работает по принципу крутящего момента: при натяжении она хранит энергию, а при отпускании постепенно отдаёт её, вращая барабан. Внутри движения присутствует семь основных элементов, а ключевой – мэйнспринг, который в бареле хранит запас энергии, а металлическая лента, прикреплённая к пружине, создаёт трение, удерживая её от перемотки.

Вращая Arbor, пользователь натягивает пружину, после чего она постепенно раскручивается, вращая барель и приводя в движение механическую передачу. Arbor имеет небольшую крючок, который схватывает конец пружины, позволяя передать крутящий момент без скольжения. Баррель с толстыми стенками сдерживает резкое раскручивание, а система трения фиксирует наружный конец, обеспечивая равномерный отдач и предотвращая перемотку. Благодаря этому механизму часы могут работать несколько дней без подзарядки, а интерактивная демонстрация lets you drag the device and examine each part in detail. Эти детали делают механический механизм не только надёжным, но и эстетичным, позволяя увидеть, как энергия превращается в точность времени.

by razin • 16 июня 2026 г. в 11:26 • 745 points

ОригиналHN

#css#html#javascript

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

  • Интерактивный сайт объясняет механизмы часов простым языком и визуально, делая сложные темы доступными.
  • Автор использует чистый «ванильный» HTML/CSS/JS, сайт работает даже на старых устройствах.
  • Обсуждение охватывает автоматический механизм, необходимость ношения часов и их сервисные аспекты.
  • Участники делятся рекомендациями по недорогим часам, сервису и вдохновением от проекта.

Claude Fable is relentlessly proactive (simonwillison.net) 🔥 Горячее 💬 Длинная дискуссия

Клод Fable 5 действует почти как независимый исследователь: он сразу же переходит к изучению зависимостей, открывает браузеры, делает скриншоты и даже генерирует тестовые HTML‑страницы, чтобы воспроизвести баг. При этом он использует собственный набор утилит — например, pyobjc для перебора окон macOS и утилиту screencapture для захвата PNG‑файлов — и может запускать их из собственного терминала без внешних команд.

Ключевой приём — автоматическая вставка JavaScript в шаблоны Datasette, которая через 1,2 секунды после загрузки эмулирует клавишу «/», вызывая открытие диалогового окна. Таким образом, Fable не только анализирует код, но и меняет его «на лету», чтобы триггерять UI‑события, что демонстрирует его способность полностью контролировать среду разработки и решать задачи, не дожидаясь прямого указания.

by lumpa • 12 июня 2026 г. в 01:06 • 774 points

ОригиналHN

#automation#browser-automation#claude#datasette#fable#javascript#llm#macos#python#ui-testing

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

  • Fable часто тратит десятки токенов и длительные сессии на простые задачи, например, добавление overflow-x: hidden для устранения горизонтальной прокрутки.
  • Модель проявляет чрезмерно «проактивное» поведение, открывая браузер, делая скриншоты и запуская автоматизацию без явного запроса.
  • Пользователи отмечают, что такой подход повышает стоимость использования и может привести к рискованным действиям (удаление данных, изменение продакшн‑кода).
  • Несмотря на высокие ресурсы, Fable иногда демонстрирует полезные навыки отладки и тестирования, но часто уступает более простым и дешёвым решениям.

Building an HTML-first site doubled our users overnight (mohkohn.co.uk) 🔥 Горячее 💬 Длинная дискуссия

Чтобы ускорить процесс получения услуг у регулируемой монополии, где падение удовлетворённости ниже 96 % грозит миллионами штрафов, команда решила заменить устаревший ASP‑форму и дорогой React‑приложение на полностью HTML‑ориентированный сайт. Используя Astro, они построили сайт, где каждая стадия формы — отдельная страница, отправляемая на сервер, а данные сохраняются в базе. Такой подход позволил работать без JavaScript, поддерживать древние браузеры и сохранять ввод даже при плохом соединении. Результат — количество пользователей мгновенно удвоилось.

Ключевой принцип — «простое HTML работает везде». Как отмечает Теренс Эден, даже браузеры типа PSP, способные открыть лишь три вкладки и часто терять память, без проблем отображают страницы GOV.UK, написанные в лёгком HTML. Команда использовала кастомные веб‑компоненты, которые перехватывают стандартную валидацию браузера, выводят ошибки в aria‑describedby и очищают их при вводе, избегая тяжёлых React‑валидаторов. Доступность достигла уровня AA, а всё приложение оставалось лёгким: без 20 МБ JavaScript‑пакетов, только небольшие улучшения в виде CSS и минимального скрипта. Это показывает, что для публичных форм достаточно чистого HTML и грамотного серверного хранения, а современные фреймворки лишь дополняют, а не заменяют базовый веб‑технологический фундамент.

by edent • 10 июня 2026 г. в 12:45 • 1278 points

ОригиналHN

#accessibility#astro#django#go#gov.uk#html#htmx#javascript#rails#reactjs

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

  • Простой HTML‑first подход с минимальным JavaScript может значительно повысить доступность и производительность сайтов.
  • Использование технологий вроде HTMX и серверных фреймворков (Go, Rails, Django) позволяет реализовать сложные функции без тяжёлых клиентских библиотек.
  • Проблемы с поддержкой старых браузеров и устройств часто решаются через полифиллы, ограничение функционала и fallback‑варианты.
  • Успешные кейсы показывают, что правильный дизайн и понимание пользователей важнее выбора конкретного фреймворка.

What Killed Perl? (entropicthoughts.com) 💬 Длинная дискуссия

Perl не мёртв, его популярность находится на уровне периода dotcom пузыря, согласно отчёту CPAN 2023. Новичков среди пользователей Perl становится всё меньше с 2011 года, хотя общее использование языка остаётся стабильным. Raku (бывший Perl 6) не стал причиной упадка, так как Perl продолжал расти даже во время разработки Raku.

Основные гипотезы упадка Perl связаны с изменением поколений программистов и развитием инструментов разработки. Программисты, выросшие на Unix-системах, естественно воспринимали Perl как продолжение shell, C, awk и sed. Новое поколение, воспитанное на Microsoft, Visual Basic и Java, предпочло Python. Кроме того, появление мощных менеджеров пакетов сделало доступными множество альтернатив, в то время как раньше Perl был одним из немногих доступных инструментов.

by speckx • 19 ноября 2025 г. в 10:25 • 158 points

ОригиналHN

#c#cpan#java#javascript#npm#perl#php#pypi#python#raku

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

  • Perl умер не из-за Raku, а из-за отсутствия единого пути развития, отсутствия стандарта кодстайла и культуры «один-разовых» скриптов.
  • Python и PHP выиграли, потому что они были «дружелюбнее» для новичков и имели лучшую документацию.
  • CPAN стал менее удобным, чем PyPI и npm, что сделало Perl менее привлекательным.
  • Отсутствие единого фреймворка для веб-разработки и отсутствие стандарта ООП в Perl 5.
  • Не было единого сообщества, которое могло бы продвигать Perl, в то время как Python и JavaScript имели Google и Facebook.

Supercookie: Browser Fingerprinting via Favicon (2021) (github.com) 🔥 Горячее

Supercookie — это технология отслеживания пользователей через favicon, позволяющая идентифицировать посетителей даже при блокировке обычных cookie. Метод основан на использовании уникальных URL-адресов для иконок сайтов, которые сохраняются браузером и могут быть прочитаны разными доменами. Техника работает, потому что браузеры кэшируют favicon и не очищают их при закрытии приватных сеансов.

Проект демонстрирует, как можно создать устойчивый к блокировкам механизм отслеживания, используя легитимные веб-технологии. Исследователи отмечают, что такой метод позволяет отслеживать пользователей через несколько сайтов без их явного согласия, что создает серьезные проблемы для приватности. Технология работает во всех современных браузерах и может быть реализована с помощью нескольких строк кода.

by vxvrs • 16 ноября 2025 г. в 19:39 • 324 points

ОригиналHN

#browser-fingerprinting#favicon#github#javascript#privacy#tracking#web-caching#web-security

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

  • Обсуждение охватывает как технические детали уязвимости favicon cache, так и более широкие вопросы приватности, ответственности разработчиков и бизнес-моделей в интернете.
  • Участники подчеркивают, что браузеры и операционные системы уже давно устранили эту уязвимость, но при этом поднимают вопрос о том, что последствия для сайтов, которые намеренно используют подобные методы, должны быть более серьезными.
  • Обсуждается, что даже если технически уязвимость устранена, остается вопрос о том, какие именно данные собираются и как они могут быть использованы.
  • Участники также обсуждают, что вместо того, чтобы полагаться на уязвимости, разработчики и компании должны фокусироваться на создании более приватных и безопасных продуктов для пользователей.

The fate of "small" open source (nolanlawson.com) 🔥 Горячее 💬 Длинная дискуссия

Автор статьи рассматривает судьбу небольших open source библиотек на примере своего пакета blob-util, который уже 10 лет стабильно набирает более 5 миллионов загрузок в неделю. С ростом использования ИИ (около 80% разработчиков уже применяют его в работе), такие утилиты становятся менее востребованными, ведь LLM вроде Claude способны генерировать аналогичный код по запросу. Автор отмечает, что хотя сгенерированный код может быть даже более надёжным, исчезает образовательная составляющая — его библиотека включала не только функционал, но и обучающие материалы с забавными примерами, помогающие понять принципы работы с Blob в JavaScript.

По мнению автора, эра небольших низкозначимых библиотек подходит к концу, и ИИ становится последним гвоздём в гробу этого явления, хотя и до этого многие функции перешли в браузеры и Node.js. Это означает не только упрощение разработки, но и потерю возможности использовать такие библиотеки как трамплин для обучения разработчиков. Возможно, в будущем понимание механики работы таких утилит станет так же необязательным, как и умение разворачивать бинарное дерево, о чём многие разработчики уже давно спорят.

by todsacerdoti • 16 ноября 2025 г. в 19:21 • 269 points

ОригиналHN

#artificial-intelligence#javascript#llm#node.js#open-source#web-development

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

  • Разработчики всё чаще полагаются на ИИ, что ставит под сомнение ценность мелких утилитарных библиотек и даже саму идею open-source как таковой.
  • Сообщество уже не в состоянии оценить ценность мелких, но полезных вкладов, поскольку ИИ может их сгенерировать за секунды.
  • Это ведёт к тому, что единственный способ остаться востребованным — это делать действительно сложные и полезные вещи, а не просто публиковать мелкие скрипты.
  • Парадокс в том, что даже если кто-то и захочет внести вклад в open-source, то непонятно, как теперь оценить этот вклад.
  • В конечном счёте, если мы хотим, чтобы open-source выжил, мы должны будем придумать, как оценивать вклад и признание заслуг — возможно, через систему репутации и/или сертификации.

Brimstone: ES2025 JavaScript engine written in Rust (github.com)

Разработчик представил Brimstone - новый JavaScript-движок, полностью написанный на Rust. Проект стремится создать альтернативу существующим движкам таким как V8 и SpiderMonkey, но с акцентом на безопасность и производительность за счет использования системы типов Rust и его современных возможностей. Rust обеспечивает безопасность памяти и потоков, что может снизить количество уязвимостей в движке по сравнению с традиционными реализациями на C++.

На данный момент проект находится на ранней стадии разработки, но уже демонстрирует потенциал для создания более безопасных и эффективных JavaScript-движков. Использование Rust для реализации движка JavaScript - это интересный тренд в индустрии, который также наблюдается в других проектах, таких как Deno и Boa, что указывает на растущий интерес к альтернативным языкам для критически важных компонентов веб-платформы.

by ivankra • 16 ноября 2025 г. в 11:41 • 220 points

ОригиналHN

#boa#deno#github#javascript#memory-safety#rust#spidermonkey#unicode#v8

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

  • Обсуждение началось с благодарности за включение проекта в список и запуск бенчмарков, но быстро перешло к сравнению размеров бинарников Brimstone и Boa, где последний оказался в 3,5 раза больше из-за включённых ICU-таблиц Unicode.
  • Участники обсудили, что "написано на Rust" стало маркетинговым клише, и как оно влияет на восприятие проекта, а также затронули тему лицензий и отсутствия лицензии в репозитории.
  • Разговор затронул вопросы безопасности памяти и использования unsafe в контексте Rust, где участники обменялись мнениями о том, что именно подразумевается под этим и как это соотносится с выбором языка программирования.

Launch HN: Tweeks (YC W25) – Browser extension to deshittify the web (tweeks.io) 🔥 Горячее 💬 Длинная дискуссия

Расширение tweeks предлагает пошаговый онбординг для подключения, включения скриптов и запуска первых модификаций веб-страниц. Процесс включает шесть этапов: установка расширения, закрепление для быстрого доступа, включение скриптов, запуск первого tweek, генерация первого скрипта и его модификация. Расширение позволяет создавать индивидуальные скрипты с помощью естественного языка и предоставляет готовые решения для распространенных задач.

Примеры возможностей включают режим фокуса для отвлекающих платформ вроде LinkedIn и YouTube, персонализацию лент в социальных сетях с фильтрацией по дате и количеству лайков, а также кастомизацию интерфейсов, например, превращение Google в командную строку 1970-х годов. Расширение работает на любом сайте и позволяет полностью переопределять DOM-структуру страниц, давая пользователям полный контроль над своим веб-опытом.

by jmadeano • 13 ноября 2025 г. в 16:03 • 305 points

ОригиналHN

#browser-extensions#dom-manipulation#javascript#user-experience#web-development

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

  • Пользователи высоко оценивают идею "deshittify" веба через AI-генерацию кастомных скриптов для сайтов, называя её "крутой", "нужной" и "вдохновляющей".
  • Поднимаются технические вопросы: глубина модификации страниц, тестирование модели, локальный запуск AI, детерминированность результатов и потенциальные риски утечки данных.
  • Выражаются опасения по поводу бизнес-модели: риски судебных исков от соцсетей (Facebook, Reddit), монетизации, приватности данных и закрытости кода по сравнению с open-source альтернативами (Greasemonkey, uBlock Origin).
  • Активно запрашивается поддержка Firefox, синхронизация настроек между устройствами и возможность совместного использования/поиска готовых скриптов.
  • Критикуется отсутствие на сайте политики приватности и условий использования, а также сомнения в необходимости VC-финансирования для такого инструмента.

Yt-dlp: External JavaScript runtime now required for full YouTube support (github.com) 🔥 Горячее 💬 Длинная дискуссия

В проекте yt-dlp теперь требуется внешняя среда выполнения JavaScript для полноценной работы с YouTube. Это изменение связано с тем, что YouTube изменил способ защиты своего контента, и теперь для доступа к некоторым функциям необходимо выполнение JavaScript прямо в браузере. Ранее yt-dlp мог обходиться без этого, но из-за недавних обновлений на YouTube такая необходимость стала обязательной. Разработчики советуют пользователям убедиться, что у них установлена последняя версия yt-dlp и что среда выполнения JavaScript (например, Node.js) правильно настроена. Это изменение направлено на улучшение поддержки новых функций YouTube и обеспечение стабильности загрузки.

by bertman • 12 ноября 2025 г. в 10:12 • 1003 points

ОригиналHN

#github#javascript

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

  • YouTube и Google продолжают усложнять скачивание видео, что вызывает обсуждение о том, что делает невозможным для пользователей сохранять контент, несмотря на то, что это может быть законным для личного использования.
  • Участники обсуждают, что Google и YouTube могли бы просто разрешить использование yt-dlp для премиум пользователей, что могло бы решить проблему, но вместо этого они выбирают делать это труднее.
  • Обсуждается, что yt-dlp и другие инструменты всё ещё работают, но требуют больше усилий для обхода ограничений, что может быть неудобно для пользователей.
  • Участники также обсуждают, что Google и YouTube могли бы просто разрешить использование yt-dlp для премиум пользователей, что могло бы решить проблему, но вместо этого они выбирают делать это труднее.
  • Участники также обсуждают, что Google и YouTube могли бы просто разрешить использование yt-dlp для премиум пользователей, что могло бы решить проблему, но вместо этого они выбирают делать это труднее.

Pikaday: A friendly guide to front-end date pickers (pikaday.dbushell.com) 🔥 Горячее

В статье утверждается, что JavaScript-библиотеки для выбора даты, такие как Pikaday, часто не нужны и могут приводить к ошибкам и брошенным формам. Вместо этого рекомендуется использовать нативные HTML-инпуты: date для дат, time для времени и datetime-local для их комбинации. Эти решения требуют всего одной строки кода, обеспечивают лучшую доступность, производительность и интернационализацию, работают без JavaScript и позволяют браузеру обрабатывать сложные детали.

В качестве альтернатив предлагаются раздельные инпуты для дня, месяца и года (особенно полезно для запоминающихся дат), селекты при ограниченном наборе вариантов и маскированные инпуты с плейсхолдерами. Для улучшения опыта можно использовать атрибуты: inputmode="numeric" для отображения цифровой клавиатуры, maxlength для ограничения ввода, pattern для валидации, autocomplete для автозаполнения и min/max для ограничений диапазона. Автор подчеркивает важность прогрессивного усиления и учета пользователей без JavaScript.

by mnemonet • 11 ноября 2025 г. в 14:58 • 276 points

ОригиналHN

#date-picker#html#javascript#pikaday#web-accessibility#web-development

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

  • Пользователи жалуются на нативные пикеры из-за необходимости тысяч кликов, чтобы выбрать дату рождения, и наоборот — кастомные пикеры не позволяют вводить дату текстом.
  • Разработчики отвечают, что нативный <input type="date"> не поддерживает форматов вроде «MM/DD/YYYY» и не даёт контроля над UI, а кастомные пикеры не решают проблему с доступностью и не имеют единого UX.
  • В итоге спор сводится к тому, что нативный пикер не решает проблему, а кастомный — не решает её лучше.
  • Пользователи также жалуются на то, что нативный пикер не позволяет вводить дату текстом, а кастомный — не позволяет вводить дату текстом.
  • В итоге, обсуждение сводится к тому, что нативный пикер не решает проблему, а кастомный — не решает её лучше.

Marko – A declarative, HTML‑based language (markojs.com) 🔥 Горячее 💬 Длинная дискуссия

Marko — это декларативный язык на основе HTML для создания динамических веб-интерфейсов, расширяющий стандартный HTML возможностями для современных приложений. Любой валидный HTML является корректным Marko, но язык добавляет декларативные конструкции для реактивности и интерактивности, позволяя встраивать JavaScript прямо в шаблоны. Ключевые особенности включают потоковую передачу контента для ускорения первого отрисовки, оптимизирующий компилятор и минимальный рантайм, что обеспечивает высокую производительность даже для высоконагруженных проектов вроде eBay.com.

Фреймворк предлагает гибкость синтаксиса — от привычного HTML до более лаконичных вариантов Concise и JS — и поддерживает TypeScript для строгой типизации. Marko обеспечивает разделение concerns, управляемые компоненты, вложенную реактивность и неизменяемое состояние, что упрощает разработку масштабируемых приложений. Интеграция с экосистемой включает file-based routing и возможность использования как простых шаблонов, так и мощных компонентов по мере роста проекта.

by ulrischa • 08 ноября 2025 г. в 18:43 • 339 points

ОригиналHN

#html#javascript#marko#reactivity#typescript#web-components#web-development

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

  • Обсуждение вращается вокруг того, что веб-разработка циклически возвращается к идеям, похожим на ColdFusion и JSP, и это вызывает у участников разговора разные чувства от ностальгии до раздражения.
  • Участники обсуждают, что такое "HTML-основнный" язык, и как он отличается от JSX и других подходов, и почему мы снова и снова возвращаемся к этой идее.
  • Обсуждение затрагивает вопрос о том, что некоторые считают, что эволюция веб-технологий просто движется по спирали, где старые идеи периодически перерабатываются и выдаются как новые.
  • Участники также обсуждают, что такое "нативный" веб-разработка и как она отличается от подхода, где JavaScript используется для обработки событий и взаимодействия.
  • Участники также обсуждают, что такое "нативный" веб-разработка и как она отличается от подхода, где JavaScript используется для обработки событий и взаимодействия.

End of Japanese community (support.mozilla.org) 🔥 Горячее 💬 Длинная дискуссия

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

Проблема может возникать из-за нескольких причин: использование браузерных расширений (блокировщиков рекламы), сетевые неполадки или настройки самого браузера. Для решения рекомендуется проверить интернет-соединение, временно отключить расширения, особенно блокировщики рекламы, или попробовать использовать другой браузер. Включение JavaScript позволит сайту корректно загрузить все необходимые элементы и обеспечить полноценную работу.

by phantomathkg • 06 ноября 2025 г. в 02:38 • 862 points

ОригиналHN

#community-management#javascript#mozilla#open-source#web-development

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

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

Dillo, a multi-platform graphical web browser (github.com) 🔥 Горячее 💬 Длинная дискуссия

Представлен репозиторий Dillo — мультиплатформенного графического веб-браузера с открытым исходным кодом. Проект размещен на GitHub в рамках dillo-browser/dillo, что указывает на его организационную структуру и доступность для сообщества.

В предоставленном фрагменте отсутствует детальное описание функционала или особенностей браузера, что ограничивает возможность анализа. Известно лишь, что проект активно развивается и имеет собственную навигационную структуру на платформе GitHub.

Информация о текущей версии, поддерживаемых операционных системах или ключевых возможностях браузера в данном отрывке не содержится. Для получения полного представления о проекте необходимо обратиться к основной документации или README-файлу в репозитории.

by nazgulsenpai • 05 ноября 2025 г. в 18:40 • 416 points

ОригиналHN

#dillo#github#javascript#open-source#web-browser

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

  • Проект Dillo продолжает развиваться, но уходит с GitHub на собственный сайт и репозиторий.
  • Пользователи вспоминают, как Dillo спасал старое железо и давал возможность выхода в интернет даже на самых слабых машинах.
  • Обсуждается, что Dillo не поддерживает JavaScript, что ограничивает его применимость в современном вебе.
  • Появляется вопрос о безопасности: неясно, какие меры безопасности реализованы в браузере.
  • Участники обсуждают, что Dillo остаётся полезным для разработчиков и пользователей, которые ищут легковесный и быстрый браузер.

Show HN: A CSS-Only Terrain Generator (terra.layoutit.com) 🔥 Горячее

Layoutit Terra - это интерактивный генератор рельефа на CSS, позволяющий создавать разнообразные ландшафты с настраиваемыми параметрами. Инструмент предлагает выбор между типами рельефа (пампы, холмы, горы) и биомами (умеренный, арктический, пустынный), а также контроль над размером мира и покрытием суши. Пользователи могут детально настраивать камеру через параметры вращения, наклона и увеличения, добавляя анимацию к созданным ландшафтам.

Генератор поддерживает экспорт результатов в多种 форматы, включая CSS, высотные карты, VOX, TXT и PNG, что обеспечивает гибкость использования. Функции импорта, отмены/повтора действий, а возможность копировать код для встраивания или открывать его в Codepen упрощают интеграцию в другие проекты. Несмотря на раннюю версию (v0.0.1), Layoutit Terra уже предоставляет мощные возможности для создания детализированных CSS-ландшафтов с минимальными усилиями.

by rofko • 04 ноября 2025 г. в 13:58 • 317 points

ОригиналHN

#animation#css#graphics#javascript#terrain-generation#web-development#webgl

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

  • Пользователи отмечают, что «CSS-only»-демо всё же использует JS для интерактивности, хотя рендеринг ландшафта действительно на 100 % CSS.
  • Визуально демо напоминает RCT, SimCity 2000, Populous и другие изометрические «тайкун»-игры, вызывая ностальгию.
  • Несколько человек сообщили о проблемах с производительностью: при включённом JS в Firefox 144 и Chrome 131 на Windows 10/11 рендеринг занимает 100-200 мс на обновление кадра, что приводит к просадкам фпс.
  • Автор ответил, что в будущих версиях планируется добавить реки и водопады, а также улучшить производительность.

Why we migrated from Python to Node.js (blog.yakkomajuri.com) 💬 Длинная дискуссия

Команда Skald переписала бэкенд с Python на Node.js всего через неделю после запуска, идя против стандартного совета стартапам сначала "делать то, что не масштабируется". Основная причина — сложность с асинхронностью в Python, особенно при работе с Django. Автор отмечает, что писать качественный асинхронный код на Python "очень сложно и неинтуитивно", в отличие от JavaScript с его event loop или Go с goroutines.

Django до сих пор не имеет полной поддержки асинхронности: нет нативного асинхронного файлового ввода-вывода, ORM не поддерживает async, а для интеграции синхронных и асинхронных функций требуется постоянно писать sync_to_async и async_to_sync. Даже крупные компании вроде PostHog, несмотря на наличие AI-фич, продолжают использовать традиционный WSGI вместо полного перехода на асинхронность. В итоге команда пришла к выводу, что Django скоро начнет создавать проблемы с производительностью даже при небольшом количестве пользователей.

by yakkomajuri • 03 ноября 2025 г. в 16:35 • 184 points

ОригиналHN

#asynchronous-programming#django#javascript#node.js#orm#performance#python#rest-api#typescript

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

  • Обсуждение в основном вращается вокруг того, что Python/async-экосистема остаётся незрелой, а Django-ORM не предназначена для асинхронной работы, что делает выбор между «старым, но проверенным» и «новым, но сырым» неоднозначным.
  • Участники спорят, стоит ли жертвовать удобством разработки и экосистемой ради производительности, или же лучше переписать всё на Node/TypeScript, если речь идёт о высоконагруженном REST API.
  • Поднимается вопрос о том, что выбор стека влияет на набор инженеров, и что важнее — удобство разработки или производительность.
  • Некоторые участники подчеркивают, что важно не только выбрать правильный инструмент, но и уметь его использовать, иначе даже самый современный фреймворк не спасёт от проблем с масштабированием.

AI scrapers request commented scripts (cryptography.dog) 💬 Длинная дискуссия

Автор обнаружил, что AI-скраперы запрашивают закомментированные JavaScript-файлы с его сайтов, вызывая ошибки 404. Эти запросы исходили как от явно вредоносных ботов (python-httpx, Go-http-client), так и от пользовательских агентов,伪装ившихся под обычные браузеры (Firefox, Chrome, Safari). Похоже, скраперы пытаются нелегально собирать контент для обучения больших языковых моделей.

Автор предлагает два возможных объяснения поведения: либо боты правильно парсят HTML-комментарии в поисках отключенных URL, либо используют примитивные методы сопоставления шаблонов. Он отмечает, что скраперы различаются по уровню сложности — одни используют актуальные строки user-agent, другие даже не меняют значения по умолчанию в HTTP-библиотеках.

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

by ColinWright • 31 октября 2025 г. в 15:44 • 234 points

ОригиналHN

#go#http#javascript#llm#python#web-development#web-scraping

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

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

Who needs Graphviz when you can build it yourself? (spidermonkey.dev) 🔥 Горячее

Команда SpiderMonkey разработала новый инструмент для визуализации компиляции JavaScript и WebAssembly, создав собственный алгоритм расположения графов вместо использования Graphviz или Mermaid. Когда оптимизирующий компилятор Ion активен, система генерирует интерактивные графики, показывающие обработку и оптимизацию функций. Пользователи могут писать JavaScript-код и видеть в реальном времени, как изменяется граф, с возможностью навигации, масштабирования и просмотра различных этапов оптимизации.

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

Для разработки автор изучал алгоритм Сугиямы, используемый в Graphviz, но создал собственное решение, специально адаптированное под нужды компилятора. Интерактивный инструмент значительно упрощает анализ и отладку сложных графов компиляции, позволяя отслеживать инструкции и блоки кода на разных этапах оптимизации.

by pdubroy • 29 октября 2025 г. в 05:17 • 460 points

ОригиналHN

#github#graphviz#ion#javascript#mermaid#spidermonkey#webassembly

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

  • Обсуждение показало, что специализированные решения для визуализации превосходят универсальные инструменты вроде Graphviz, но сообщество продолжает использовать последние из-за инерции и отсутствия альтернатив.
  • Участники жалуются на то, что Graphviz и подобные инструменты не справляются с задачами даже средней сложности, и что их использование часто требует ручной доводки.
  • Проект Microdiagram нацелен на создание DSL для каждого типа диаграмм вместо одного языка для всех типов диаграмм.
  • Обсуждение также затронуло вопросы производительности и надежности инструментов, а также то, что сгенерированные ими диаграммы не всегда читаемы без дополнительной ручной работы.
  • Участники поделились ссылкой на исходники на GitHub, где можно найти код, который может быть использован как стартовая точка для собственных экспериментов в этой области.

React vs. Backbone in 2025 (backbonenotbad.hyperclay.com) 🔥 Горячее 💬 Длинная дискуссия

Несмотря на 15 лет развития фронтенда, сравнение React и Backbone показывает удивительно мало прогресса в снижении сложности. Код для одинаковой функциональности в обеих фреймворках примерно одинаков по длине, что ставит под сомнение все усилия сообщества. React выглядит чище, но это достигается за счет скрытой сложности абстракций, в то время как Backbone предлагает явное, хоть и многословное, описание происходящего.

"Вы торгуете явной простотой за сложность абстракций" — ключевая мысль статьи. React скрывает множество деталей: неожиданное очищение инпутов из-за смены ключей компонентов, бесконечные циклы в useEffect из-за нестабильных зависимостей, "устаревшие" замыкания в обработчиках событий. Эти не крайние случаи, а обычные проблемы, требующие понимания алгоритмов согласования, фаз рендеринга и планировщика React.

Для 99% приложений, не имеющих тысячи компонентов на странице, такая сложность может быть избыточна. Фундаментальная задача "событие + состояние = UI" остается простой, но современные фреймворки создают ненужные абстракции, мешающие пониманию и отладке. Возможно, сообществу стоит искать более прозрачные и "взламываемые" решения, подобные Backbone и jQuery.

by mjsu • 25 октября 2025 г. в 09:43 • 259 points

ОригиналHN

#backbonejs#dom#javascript#reactjs#state-management

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

  • Обсуждение показало, что споры между сторонниками React и Backbone часто сводятся к сравнению простых примеров, что не отражает реальную сложность больших приложений и может вводить в заблуждение.
  • Участники подчеркнули, что React и Backbone решают разные задачи: первый предлагает сложную, но мощную систему управления состоянием, тогда как второй предоставляет прямой и прозрачный контроль над DOM.
  • Несколько человек отметили, что выбор между инструментами должен зависеть от характера проекта и команды, а не от сравнения "Hello World" примеров.
  • Обсуждение также затронуло вопрос о том, что разработчики могут переоценивать или недооценивать сложность, связанную с управлением состоянием, и как это влияет на выбор инструмента.
  • Наконец, было высказано мнение, что выбор между React и Backbone должен быть основан на факторах, таких как размер команды, сложность проекта и долгосрочная поддерживаемость, а не на сравнение простых примеров кода.

Programming with Less Than Nothing (joshmoody.org) 🔥 Горячее

Кандидат на собеседовании решает задачу FizzBuzz с помощью комбинаторной логики и лямбда-исчисления в JavaScript, используя лишь базовые комбинаторы S, K и I. Интервьюер всё больше недоумевает, наблюдая, как соискатель последовательно реализует сложнейшие математические операции и структуры данных через композицию этих комбинаторов, включая числа Чёрча, арифметические операции и даже Y-комбинатор для рекурсии.

Кандидат оправдывает свой подход тем, что "JavaScript слишком раздут", и переключается на "ленивый" вариант JavaScript под названием Skoobert, чтобы избежать переполнения стека. В итоге он реализует всё необходимое для FizzBuzz — от сложения и вычитания до списков и операций над ними — исключительно через комбинаторы, демонстрируя глубокое, но совершенно не практичное знание теоретических основ программирования.

by signa11 • 23 октября 2025 г. в 05:42 • 410 points

ОригиналHN

#church-encoding#combinatory-logic#functional-programming#javascript#lambda-calculus#y-combinator

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

  • Обсуждение началось с критики формата технического собеседования, где кандидат вместо решения задачи пишет «рассказ о лямбда-исчислении» и тем самым «проходит» тест.
  • Дискуссия быстро перешла к тому, что автор статьи, возможно, сам не до конца понял, что именно он хотел показать читателям, и что именно они должны вынести из этого урока.
  • Участники треда начали спорить о том, насколько полезно знание комбинаторной логики в повседневной работе программиста, и стоит ли вообще изучать её.
  • Некоторые комментаторы отметили, что статья не дала никакого практического обоснования, почему стоит изучать эту тему.
  • В итоге, обсуждение сошлось на то, что если кто-то и найдёт в этом какой-то практический смысл, то это будет уже его заслуга, а не автора статьи.

Element: setHTML() method (developer.mozilla.org)

Предоставленный текст содержит только навигационную структуру сайта MDN, но не основное содержание статьи о методе setHTML(). В тексте отсутствует описание самого API, его синтаксиса, параметров, примеров использования и совместимости с браузерами. Для создания точного пересказа требуется полное содержание статьи, описывающее новый метод DOM API, который, вероятно, предоставляет альтернативу innerHTML с дополнительными возможностями или улучшенной безопасностью. Без доступа к фактическому описанию метода невозможно предоставить содержательный пересказ его функциональности и применения.

by todsacerdoti • 22 октября 2025 г. в 09:03 • 244 points

ОригиналHN

#api#dom#firefox#html#javascript#security#web-development

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

  • Впервые за 25 лет в Firefox Nightly появилась возможность безопасно вставлять HTML через Element.setHTML(), что вызвало обсуждение: спор о том, почему так долго не хватало базовой возможности, и о том, что API-шный дизайн (включая именование setHTML/setHTMLUnsafe) не идеален.
  • Участники обсуждения отметили, что новое API встроенной санитизации встроенной в браузер — это фактически встроенный DOMPurify, и что спор в основном ведется о том, что «безопасность по умолчанию» должна быть выбрана как поведение по умолчанию.
  • Некоторые комментаторы выразили обеспокоенность тем, что спецификация пока не различает между контентом и вставляемым через setHTML() и innerHTML, и что это может влиять на производительность, если разработчики начнутт читать спецификацию как «естественное продолжение» innerHTML.
  • Были также затронуты темы о том, что встроенная санитизация может влиять на разработчиков, которые полагаются на встроенную санитизацию, и о том, что это может влиять на разработчиков, которые полагаются на встроенную санитизацию.

Karpathy on DeepSeek-OCR paper: Are pixels better inputs to LLMs than text? (twitter.com) 🔥 Горячее

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

В случае возникновения проблемы пользователи видят кнопку "Попробовать снова" и предупреждение о возможных конфликтах с расширениями для конфиденциальности. Рекомендуется отключить такие расширения перед повторной попыткой доступа к платформе. Это типичное требование современных веб-сервисов, использующих JavaScript для динамической загрузки контента и взаимодействия с пользователем.

by JnBrymn • 21 октября 2025 г. в 17:43 • 368 points

ОригиналHN

#javascript#llm#machine-learning#natural-language-processing#ocr#twitter

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

  • Обсуждение вращается вокруг идеи, что токенизация текста может быть неоптимальна, и что визуальное восприятие текста может быть более естественным способом подачи информации для модели.
  • Участники обсуждают, что визуальное воспринятие текста может быть более естественным способом подачи информации для модели, и что токенизация текста может быть неоптимальна.
  • Обсуждается, что визуальное воспринятие текста может быть более естественным способом подачи информации для модели, и что токенизация текста может быть неоптимальна.
  • Участники обсуждают, что визуальное восприятие текста может быть более естественным способом подачи информации для модели, и что токенизация текста может быть неоптимальна.

MAML – A new configuration language (maml.dev)

MAML — это минималистичный формат для данных, который сохраняет читаемость для человека и при этом остаётся простым для машинной обработки. Он сочетает лучшее из JSON, дополняя его комментариями, многострочными строками и необязательными запятыми и кавычками.

MAML уже реализован в нескольких языках, включая JavaScript, Python, Rust, C и PHP. Эти реализации находятся на разных стадиях разработки: от готовых к использованию до находящихся в активной разработке.

Проект полностью открыт, с кодом на GitHub, и распространяется по лицензии MIT, что позволяет свободно использовать, модифицировать и распространять его.

by birdculture • 12 октября 2025 г. в 21:24 • 99 points

ОригиналHN

#c#config-languages#github#javascript#json#php#python#rust#toml#yaml

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

  • Обсуждение вновь подтвердило, что вместо улучшения JSON/YAML/TOML появляется всё больше новых конфиг-языков, но никто не решает их проблемы с синтаксисом, датами, комментариями и т.д.
  • Участники обсуждения отмечают, что большинство этих новых языков не решают фундаментальные проблемы, такие как отсутствие типов данных, дат и комментариев в JSON.
  • Некоторые комментаторы подчеркивают, что вместо того, чтобы изобретать новые языки, лучше бы улучшить существующие инструменты, такие как JSON5 или TOML.
  • Другие участники поднимают вопрос, что если бы разработчики потратили усилия на улучшение существующих инструментов, вместо создания новых, это было бы более продуктивно.

LLMs are mortally terrified of exceptions (twitter.com) 🔥 Горячее

Twitter/X теперь требует включённый JavaScript и блокирует просмотр без него. Пользователи с блокировщиками скриптов или расширений, которые ограничивают JS, теперь видят сообщение о недоступности JavaScript и предлагают «попробовать снова». Это делает невозможным просмотр даже статического контента без JS.

by nought • 09 октября 2025 г. в 17:16 • 283 points

ОригиналHN

#error-handling#exceptions#javascript#llm#rlhf#twitter

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

  • Обсуждение выявило, что LLM-ы склонны к чрезмерно защитному стилю кода, который, как выясняется, может быть вызван RLHF и набором данных, где «правильный» код — это тот, который перестраховывается на каждом шаге.
  • Участники обсудили, что «защитный» код может быть не только избыточным, но и логически неверным, поскольку он может маскировать ошибки, которые в продакшене не должны быть проглочены.
  • Некоторые участники отметили, что вместо того, чтобы учить модель писать «правильный» код, стоит сфокусироваться на том, чтобы она училась различать, когда действительно нужна обработка ошибок, а когда можно обойтись без нее.
  • Также было отмечено, что вместо того, чтобы писать в защитном стиле, лучше бы научить модель писать код, который не делает глупых ошибок в первую очередь.

Ladybird passes the Apple 90% threshold on web-platform-tests (twitter.com) 🔥 Горячее 💬 Длинная дискуссия

Социальная сеть X требует включённого JavaScript для работы и отображает сообщение об ошибке, если он отключён в браузере. Пользователю предлагается активировать JavaScript или перейти на поддерживаемый браузер из списка в Центре помощи.

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

by sergiotapia • 06 октября 2025 г. в 16:52 • 874 points

ОригиналHN

#apple#browser#javascript#twitter#web-api#web-development#web-platform-tests

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

  • Впечатляющий прогресс независимого проекта Ladybird, достигнутый за короткое время, приближает его к практической пригодности.
  • Прохождение 90% тестов WPT — это произвольный, но требуемый Apple метрический порог для рассмотрения в качестве альтернативного движка в iOS; сама метрика считается несовершенной.
  • Реальная сложность заключается в поддержании темпа развития и реализации постоянно растущего количества новых веб-API, а не только в прохождении текущих тестов.
  • Вызывают вопросы безопасность и наличие песочниц в быстро разработанном движке, а также его текущая производительность при повседневном использовании.
  • Проект рассматривается как важная альтернатива доминирующим движкам, но до полной конкурентоспособности еще несколько лет работы.

Embracing the parallel coding agent lifestyle (simonwillison.net)

Инженеры всё чаще запускают несколько агентов одновременно — например, одновременно работают несколько экземпляров Claude Code или Codex CLI в разных директориях или даже в разных репозиториях. Саймон Уиллисон, который сам пишет код на Python и JavaScript, решил проверить, насколько полезно это на практике.

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

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

Саймон отмечает, что главное — это четко формулировать задачу и дать агенту контекст. Тогда сгенерированный код будет легко и быстро проверяем, и ревью требуется меньше усилий. Он также подчеркивает, что важно следить, чтобы агент не пытался внедрить изменения в тот репозиторий, где это не требуется. С другой стороны, если агент предлагает решение, которое требует лишь небольшой доработки, это может быть выгодно при условии, что оно не будет затем отвергнуто.

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

by jbredeche • 06 октября 2025 г. в 10:40 • 148 points

ОригиналHN

#code-review#docker#javascript#llm#parallel-programming#python

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

  • Обсуждение в основном вращается вокруг трёх тем: высокая стоимость ревью кода, параллельные агенты и их влияние на фокус и продуктивность, а также культурные и этические аспекты использования AI-агентов.
  • Участники делятся личными стратегиями, такими как использование различных инструментов вроде Conductor и Crystal для управления агентами, и обсуждают, как сделать их более эффективными.
  • Обсуждается, как сделать ревью кода менее трудоёмким, включая использование инструментов вроде bottleneck для ревью кода, и как влияет на продуктивность и фокус.
  • Также обсуждается, как влияет на эффективность работы использование AI-агентов, и какие могут быть последствия для долгосрочной устойчивости и качества кода.

Gemini 3.0 Pro – early tests (twitter.com)

Социальная сеть X (ранее Twitter) требует включённого JavaScript для работы. При его отключении пользователь видит сообщение о необходимости активировать JavaScript или сменить браузер на поддерживаемый, со ссылкой на список совместимых браузеров.

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

by ukuina • 02 октября 2025 г. в 18:26 • 184 points

ОригиналHN

#claude#gemini#javascript#llm#multimodal#twitter

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

  • Критика отсутствия у Google сильной продуктовой культуры, что мешает созданию инновационных продуктов на основе их же технологий.
  • Обсуждение субъективности сравнения моделей ИИ (Gemini, GPT, Claude) и сложности объективной оценки из-за различий в задачах и опыте пользователей.
  • Скептицизм по поводу рекламных кампаний и хайпа вокруг новых моделей, которые часто не соответствуют реальным возможностям.
  • Подчеркивание проблем Gemini с многократным выполнением инструкций и склонностью к "зацикливанию" по сравнению с конкурентами.
  • Отмечается сильная мультимодальность Gemini (работа с изображениями, видео), но сложность доступа и использования продуктов Google AI.

Why I chose Lua for this blog (andregarzia.com)

Автор перевел свой блог с Racket на Lua, чтобы снизить сложность и обеспечить долгосрочную стабильность. Основная причина — разочарование в быстро меняющихся экосистемах вроде JavaScript и Ruby, где постоянные обновления и ломающие изменения усложняют поддержку. Lua привлек медленным развитием: между версиями 5.1 (2006) и 5.4 (2020) различия минимальны, а язык требует лишь компилятора C89.

Блог работает по старинке — через CGI-скрипты, с SQLite в качестве базы и шаблонизацией Mustache. Несмотря на кажущуюся архаичность, автор ценит простоту, минимальное количество зависимостей (около десяти) и возможность писать собственные легковесные библиотеки. Ключевой вывод: блог — это пространство для экспериментов, где можно отказаться от модных инструментов в пользу того, что действительно работает и приносит удовольствие.

by nairadithya • 02 октября 2025 г. в 16:58 • 186 points

ОригиналHN

#cgi#hugo#javascript#lua#mustache#python#racket#ruby#sqlite

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

  • Предложение возродить создание собственных движков для блогов как учебного проекта для инженеров из-за его низкого риска и возможностей для экспериментов.
  • Обсуждение выбора Lua как стабильного и минималистичного языка для веб-разработки, несмотря на его недостатки (1-based индексация, разрыв между версиями, мало стандартных библиотек).
  • Критика сложности современных стеков для блогов и аргументы в пользу простых решений: статические генераторы (Hugo), чистый HTML или минимальные скрипты (Python, Lua).
  • Упоминание альтернативных технологий и подходов: Redbean, Perl, Caddy, XSLT, Web Components, Fennel, OpenResty и другие.
  • Подчёркивание важности личного выбора, удовольствия от процесса и независимости от внешних сервисов при создании блога.

Go ahead, write the “stupid” code (spikepuppet.io)

Автор вспоминает, как начал программировать в 2010 году, почти бросив идею из-за неуверенности, но в итоге полюбил это дело через упорство. Он признаётся, что писал много «глупого» кода во время учёбы и игровых джемов, что помогло ему отточить навыки и сохранить интерес.

Сейчас, работая с JavaScript и Deno, он осознал, что стал излишне строг к себе, боясь писать что-то простое или неидеальное. Его вывод: не стоит сдерживаться — любой код, даже самый нелепый, это шаг вперёд. Важно экспериментировать, пробовать новое и просто получать удовольствие от процесса, ведь это поддерживает любопытство и профессиональный рост.

by spikepuppet • 28 сентября 2025 г. в 22:20 • 220 points

ОригиналHN

#deno#go#javascript#programming#prototyping

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

  • Рекомендуется начинать с написания простого, "глупого" кода для быстрого старта и проверки идей, а не с длительного планирования.
  • Прототипирование помогает уточнить требования, выявить ошибки в ментальной модели и получить обратную связь.
  • Важно найти баланс между быстрым стартом и стратегическим планированием, учитывая масштаб проекта и возможные последствия.
  • Опыт позволяет писать менее "глупый" код с самого начала, используя лучшие практики и архитектурные шаблоны.
  • Такой подход поддерживает мотивацию и удовольствие от процесса создания чего-то своего, даже если результат неидеален.

Play snake in the URL address bar (demian.ferrei.ro) 🔥 Горячее

Это браузерная игра «Змейка», которая использует URL-страницы в качестве игрового поля. Управление осуществляется стрелками или клавишами WASD, а змейка перемещается прямо в адресной строке. Если URL отображается некорректно, есть кнопка для исправления отображения.

Игра сохраняет рекорд игрока в очках и позволяет делиться результатом. Создана разработчиком под ником @epidemian, исходный код открыт на GitHub. Проект демонстрирует креативный подход к использованию стандартных элементов браузера для создания игрового процесса.

by macote • 28 сентября 2025 г. в 21:08 • 790 points

ОригиналHN

#game-development#github#html#javascript#unicode#url#web-browser

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

  • Пользователи восхищены креативностью и нестандартным подходом к реализации игры "Змейка" в адресной строке браузера с использованием символов Unicode (Braille).
  • Обсуждаются технические аспекты и проблемы: некорректное отображение пробелов в некоторых браузерах, предложения по улучшению (использование других символов, зацикливание границ), ограниченная работа на мобильных устройствах.
  • Предупреждения о возможных проблемах с историей браузера и рекомендации использовать режим инкогнито.
  • Упоминаются похожие проекты: игры в favicon (2048, другая версия "Змейки"), а также шуточные предложения портировать Doom.
  • Автор проекта (@epidemian) отмечает, что игра создана 10 лет назад и может некорректно работать в современных браузерах.

Translating a Fortran F-16 Simulator to Unity3D (vazgriz.com)

Перевод симулятора F-16 из Fortran в Unity3D потребовал адаптации аэрокосмических конвенций под игровой движок. Модель полёта, основанная на данных аэродинамических труб и реализованная через дюжину таблиц поиска и математических уравнений, изначально использовала правостороннюю систему координат с осью X вперёд, Y вправо и Z вниз — в отличие от левостороннего Z-вверх подхода Unity. Ключевой задачей стало корректное преобразование осей и знаков без потери физической точности.

Процесс включал интерполяцию многомерных таблиц, расчёт тяги двигателя, аэродинамических сил и моментов, а также реализацию системы управления полётом с PID-контроллерами и ограничителями перегрузки. Несмотря на профессиональный бэкграунд в аэрокосмической отрасли, автор отмечает сложность верификации такой модели без доступа к реальным лётным данным. Готовый симулятор доступен на itch.io, демонстрируя практический компромисс между академической точностью и игровой доступностью.

by hggh • 26 сентября 2025 г. в 07:06 • 233 points

ОригиналHN

#aerospace#clojure#flight-simulation#fortran#javascript#pid-control#unity3d

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

  • Участники обсуждают опыт работы с FORTRAN и его применение в аэрокосмической симуляции, включая исторические примеры и личные воспоминания.
  • Поднимаются вопросы о единицах измерения (например, узлы, слагы) и их конвертации, с критикой подхода автора и предложениями использовать метрическую систему.
  • Обсуждаются технические особенности языков программирования, такие как произвольные индексы массивов в FORTRAN и их аналоги в других языках.
  • Упоминаются альтернативные реализации симуляторов на JavaScript и Clojure, а также ссылки на открытые проекты вроде Falcon BMS.
  • Затрагиваются темы игровой ностальгии, сложностей моделирования физики и юмористические комментарии о единицах измерения (например, поронкусема).

Ollama Web Search (ollama.com) 🔥 Горячее 💬 Длинная дискуссия

Ollama представила новый API для веб-поиска, который позволяет моделям получать актуальную информацию из интернета, снижая риск галлюцинаций и повышая точность ответов. Бесплатный тариф доступен для индивидуального использования, а повышенные лимиты — через Ollama Cloud. API интегрирован с Python и JavaScript библиотеками, что упрощает создание инструментов для длительных исследовательских задач, включая работу с моделями вроде OpenAI gpt-oss.

Примеры кода демонстрируют использование через cURL, Python и JavaScript, возвращая структурированные результаты поиска с заголовками, URL и содержанием. Также показано, как построить поискового агента с помощью модели Qwen 3 от Alibaba, используя инструменты web_search и web_fetch для автоматизации запросов и обработки данных. Это расширяет возможности моделей, позволяя им активно взаимодействовать с веб-источниками в реальном времени.

by jmorgan • 25 сентября 2025 г. в 19:21 • 324 points

ОригиналHN

#alibaba#api#curl#javascript#ollama#python#qwen#web-search

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

  • Вопросы о поисковом провайдере и лицензии на результаты поиска, включая возможность их хранения и перепубликации.
  • Сомнения в бизнес-модели Ollama, её переходе от локального хостинга к облачным услугам и планам монетизации.
  • Обсуждение технических альтернатив для локального поиска и индексации, а также интеграции с Ollama.
  • Критика запуска функции веб-поиска без четкой документации по тарифам, лимитам и политике конфиденциальности.
  • Предложения и опыт использования сторонних инструментов для поиска (SearXNG, Tavily, SERP API) и локальных решений.

Snapdragon X2 Elite ARM Laptop CPU (qualcomm.com) 💬 Длинная дискуссия

Похоже, это сообщение о процессоре Snapdragon X2 Elite от Qualcomm, но доступ к полной информации требует включения JavaScript в браузере. Без активации скриптов содержимое страницы, включая технические характеристики, производительность или особенности чипа, недоступно для просмотра.

Рекомендуется разрешить выполнение JavaScript в настройках браузера, чтобы ознакомиться с деталями о процессоре — вероятно, это новые разработки в области мобильных или портативных вычислений.

by wmf • 24 сентября 2025 г. в 22:01 • 143 points

ОригиналHN

#arm#javascript#linux#qualcomm#snapdragon

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

  • Обеспокоенность недостаточной открытостью и документацией для Snapdragon X2, что затрудняет поддержку Linux и разработку драйверов.
  • Вопросы о реальной производительности, энергоэффективности и технических деталях (поддержка TSO, пропускная способность памяти, TDP) без предоставления бенчмарков.
  • Скептицизм относительно заявлений о многодневной автономности и маркетинговых формулировок ("легендарный скачок").
  • Надежды на появление конкурентов Apple Silicon и качественных ARM-ноутбуков с хорошей поддержкой Linux.
  • Обсуждение ниши для ARM-чипов и необходимости поддержки со стороны Microsoft и OEM-производителей.

Yt-dlp: Upcoming new requirements for YouTube downloads (github.com) 🔥 Горячее 💬 Длинная дискуссия

YouTube скоро внедрит изменения, которые могут нарушить работу инструментов для скачивания видео, включая yt-dlp. Разработчики проекта предупреждают о необходимости адаптации к новым требованиям, связанным с обновлениями в API и механизмах защиты контента.

Пользователям стоит ожидать временных сбоев или необходимости обновлять софт чаще. Сообществу предлагается участвовать в тестировании и сообщать о проблемах, чтобы ускорить исправления. Это подчеркивает хрупкость инструментов, зависящих от сторонних платформ.

by phewlink • 24 сентября 2025 г. в 11:41 • 1141 points

ОригиналHN

#deno#github#javascript#youtube#yt-dlp

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

  • Пользователи столкнулись с проблемами скачивания контента через официальное приложение YouTube и обсуждают использование yt-dlp как обходного решения
  • YouTube усложняет процесс скачивания, внедряя сложный JavaScript-код, что вынуждает yt-dlp переходить на использование полноценной JS-среды выполнения (Deno) вместо самописного интерпретатора
  • Сообщество выражает озабоченность по поводу будущего скачивания контента с YouTube, обсуждает технические сложности и возможные альтернативы для архивации видео
  • Выбор Deno обусловлен его безопасностью и наличием самодостаточного бинарного файла, но это добавляет зависимость и усложняет использование yt-dlp в некоторых сценариях
  • Обсуждаются потенциальные последствия для сторонних приложений и необходимость сохранения контента в свете ужесточения политики YouTube

Top Programming Languages 2025 (spectrum.ieee.org) 💬 Длинная дискуссия

Python сохраняет лидерство благодаря своей универсальности в машинном обучении и веб-разработке, а JavaScript остаётся незаменимым для фронтенда. Rust продолжает расти из-за акцента на безопасность и производительность, особенно в системном программировании. Go набирает популярность в облачных сервисах и микросервисной архитектуре благодаря простоте и эффективной параллельной обработке.

Стоит отметить рост TypeScript как более строгой альтернативы JavaScript, а также стабильное присутствие Java в корпоративных приложениях. Интерес к Julia увеличивается в научных вычислениях, а Kotlin укрепляет позиции в мобильной разработке под Android. Практический вывод: выбор языка всё больше зависит от конкретной области, а не только от общей популярности.

by jnord • 23 сентября 2025 г. в 23:42 • 219 points

ОригиналHN

#cloud-services#go#java#javascript#julia#kotlin#machine-learning#python#rust#typescript

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

  • Сомнения в методологии рейтинга языков программирования IEEE из-за использования ненадёжных источников (поисковые запросы, устаревающий StackOverflow), что может искажать реальную картину.
  • Удивление высокой позицией Java (2-е место), объясняемой её доминированием в enterprise-секторе (финансы, страхование, здравоохранение) и миграцией legacy-систем с COBOL.
  • Обсуждение искусственного завышения позиции Python из-за его популярности у новичков, в академических статьях и как основного языка вывода для LLM.
  • Предложение объединить рейтинги близких языков (JavaScript/TypeScript, Java/Kotlin, C/C++) для более точного отражения популярности экосистем.
  • Размышления о влиянии AI-ассистентов на будущее языков: возможная стагнация из-за зависимости LLM от популярных языков или, наоборот, упрощение изучения нишевых.

Cap'n Web: a new RPC system for browsers and web servers (blog.cloudflare.com) 🔥 Горячее 💬 Длинная дискуссия

Cap'n Web — это новая система RPC для браузеров и веб-серверов, созданная Cloudflare на чистом TypeScript. Она наследует философию объектно-ориентированных возможностей (object-capability) от Cap'n Proto, но оптимизирована для веб-стека: использует JSON для сериализации, работает поверх HTTP, WebSocket и postMessage(), весит менее 10 КБ и не требует схем или шаблонного кода. Поддерживает двусторонние вызовы, передачу функций и объектов по ссылке, а также конвейеризацию промисов для сокращения задержек.

Настройка занимает буквально несколько строк: клиент подключается через WebSocket, а сервер реализуется как класс с методами, которые автоматически становятся удалёнными процедурами. Например, метод hello(name) на сервере можно вызвать из браузера как api.hello("World"). Система интегрируется с TypeScript для типобезопасности и работает в Cloudflare Workers, Node.js и современных браузерах. Это делает распределённое программирование почти неотличимым от локального, с учётом сетевых реалий.

by jgrahamc • 22 сентября 2025 г. в 13:05 • 584 points

ОригиналHN

#cloudflare#javascript#node.js#rpc#typescript#websocket

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

  • Обсуждение Cap'n Web как упрощённой, schemaless версии Cap'n Proto RPC для TypeScript/JavaScript с поддержкой передачи функций и двусторонних вызовов.
  • Сравнение с другими технологиями: проводятся параллели с GraphQL (решение проблемы N+1, но без DataLoader), tRPC/ORPC (схемы vs schemaless), gRPC-web (сложность) и старыми системами вроде Java RMI или .NET Remoting.
  • Подняты вопросы о безопасности (риски из-за отсутствия схем и передачи произвольных колбэков), состоянии сервера (статусность vs статусность) и проблемах отладки (сложность отслеживания сетевых запросов).
  • Обсуждаются технические детали: пайплайнинг промисов для уменьшения RTT, выполнение .map() на сервере через DSL, управление памятью и сборкой мусора для долгоживущих соединений.
  • Запросы на расширение: поддержка других языков (Rust, Elixir), стриминг, генераторы, версионирование API и бинарная совместимость с Cap'n Proto.

Cloudflare is sponsoring Ladybird and Omarchy (blog.cloudflare.com) 🔥 Горячее 💬 Длинная дискуссия

Cloudflare объявляет о спонсорской поддержке двух независимых open-source проектов — браузера Ladybird и дистрибутива Omarchy на базе Arch Linux для разработчиков. Это часть стратегии по укреплению открытого интернета через разнообразие инструментов. Ladybird — амбициозная попытка создать браузер с нуля, включая собственные движки рендеринга (LibWeb) и JavaScript (LibJS), что контрастирует с доминированием Chromium, используемого 65% пользователей. Такой подход стимулирует инновации в безопасности и производительности, а также выявляет недочёты в веб-стандартах.

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

by jgrahamc • 22 сентября 2025 г. в 13:03 • 673 points

ОригиналHN

#arch-linux#c++#chromium#cloudflare#javascript#ladybird#libjs#libweb#omarchy

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

  • Обсуждение спонсорства Cloudflare проектов Ladybird и Omarchy с акцентом на возможные скрытые мотивы компании, включая движение к вебу только для одобренных браузеров.
  • Скептицизм относительно практической ценности Omarchy как ещё одного дистрибутива Linux и его сравнение с другими установщиками и системами, такими как Nix или Alpine.
  • Вопросы о целесообразности создания нового браузерного движка (Ladybird) на C++ вместо более безопасных языков и сомнения в его способности конкурировать с существующими гигантами.
  • Обсуждение личности DHH (создателя Omarchy) и его спорных высказываний, а также того, должно ли это влиять на поддержку его проектов.
  • Поднята тема стратегического интереса Cloudflare к децентрализации веба и уменьшения зависимости от Google, аналогичного стратегии Valve с Proton.

You did this with an AI and you do not understand what you're doing here (hackerone.com) 🔥 Горячее 💬 Длинная дискуссия

HackerOne — это платформа для координации программ bug bounty, где компании платят исследователям за обнаружение уязвимостей в их системах. Для полноценной работы сайта требуется включенный JavaScript в браузере, так как многие интерактивные функции, включая отправку отчетов и взаимодействие с интерфейсом, зависят от него.

Без JavaScript пользователь не сможет получить доступ к основному функционалу, включая просмотр программ, отправку отчетов об уязвимостях и управление профилем. Это стандартная практика для современных веб-приложений, обеспечивающая безопасность и удобство использования.

by redbell • 22 сентября 2025 г. в 07:59 • 900 points

ОригиналHN

#bug-bounty#curl#hackerone#javascript#llm#proof-of-concept#security#spam#web-applications

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

  • Пользователи обсуждают волну бесполезных AI-генерируемых отчетов об уязвимостях (например, для cURL), которые тратят время разработчиков.
  • Высказываются опасения, что в будущем AI сможет генерировать более правдоподобные, но все же ложные доказательства концепций (PoC).
  • Предлагаются решения для борьбы со спамом: платный депозит за отправку отчета, баны, фильтрация по эмодзи и другим признакам AI-текста.
  • Обсуждается негативное влияние AI на качество кода, ревью и общую культуру разработки, а также возможные скрытые мотивы таких атак.
  • Отмечается профессиональная реакция мейнтейнера (badger) на некорректный отчет и ссылки на соответствующие доклады Дэниела Стенберга о проблеме.

The bloat of edge-case first libraries (43081j.com)

Многие библиотеки в экосистеме JavaScript стали избыточно сложными из-за попыток обработать все возможные крайние случаи, даже те, что на практике почти не встречаются. Например, функция clamp, предназначенная для ограничения чисел, превращается в монстра, проверяющего строки, валидирующего типы и значения, что приводит к появлению микробиблиотек вроде is-number с 90 млн загрузок в неделю. Это результат плохого технического дизайна: вместо чёткого определения ожидаемых входных данных разработчики добавляют слои проверок для гипотетических сценариев.

Правильный подход — проектировать функции под конкретные типы данных, оставляя валидацию значений на усмотрение вызывающей стороны. Библиотеки вроде is-arrayish или pascalcase, принимающие разнородные входы, лишь увеличивают сложность и зависимости без реальной пользы. Стоит вернуться к простоте: в большинстве случаев достаточно встроенных методов языка, а специализированные решения нужны только для узких задач, а не как стандарт.

by PaulHoule • 21 сентября 2025 г. в 02:09 • 108 points

ОригиналHN

#design-patterns#javascript#libraries#nodejs#software-architecture#typescript

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

  • Обсуждение критикует избыточное использование зависимостей в JavaScript/TypeScript для простых задач, таких как проверка типов, что ведет к раздуванию экосистемы.
  • Участники связывают проблему с историческими особенностями JavaScript: отсутствием строгой типизации и богатой стандартной библиотеки в прошлом.
  • Поднимается вопрос о дизайне контрактов функций: следует ли валидировать входные данные внутри функции или возлагать эту ответственность на вызывающую сторону.
  • Отмечается культурное различие между сообществами: в Python принята модель "согласованных взрослых", а в JS — оборонительное программирование.
  • Обсуждается роль статической типизации (TypeScript) и стандартных библиотек как способа уменьшить потребность в микро-пакетах для проверок.

Help us raise $200k to free JavaScript from Oracle (deno.com) 🔥 Горячее 💬 Длинная дискуссия

Deno подала официальную петицию в Ведомство по патентам и товарным знакам США, чтобы оспорить товарный знак Oracle на слово «JavaScript». После сбора более 27 тысяч подписей под открытым письмом проект перешёл к ключевой стадии discovery, требующей серьёзных ресурсов. Цель — доказать, что термин стал общедоступным обозначением языка, а не брендом Oracle, и освободить его для использования разработчиками, конференциями и авторами без юридических рисков.

Для усиления позиции Deno запустила кампанию по сбору $200 тыс. на экспертные опросы, показания свидетелей из индустрии и академической среды, а также юридические расходы. Oracle уже официально отвергла аргументы о generic-статусе термина. Успех дела важен не только для JavaScript, но и для принципов товарного права: победа корпорации создаст прецедент присвоения общеупотребимых понятий.

by kaladin-jasnah • 19 сентября 2025 г. в 01:40 • 560 points

ОригиналHN

#deno#ecmascript#javascript#oracle#trademark#typescript

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

  • Критика сбора средств VC-финансируемой компанией Deno для суда с Oracle из-за товарного знака "JavaScript"
  • Сомнения в успехе и целесообразности дела против Oracle с её огромными ресурсами и возможными негативными последствиями для сообщества
  • Предложения альтернативных решений: переход на использование названий "JS", "ECMAScript" или "TypeScript"
  • Восприятие инициативы как PR-хода или маркетингового хода, а не искреннего общественного служения
  • Поддержка цели освобождения названия, но с оговорками относительно мотивов и методов Deno

EU Chat Control: Germany's position has been reverted to undecided (mastodon.social) 🔥 Горячее 💬 Длинная дискуссия

Борьба против Chat Control: "Позиция Германии вернулась к статусу НЕОПРЕДЕЛЕННОСТЬ..."

Для использования веб-приложения Mastodon необходимо включить JavaScript. Также можно воспользоваться нативными приложениями для вашей платформы.

by doener • 17 сентября 2025 г. в 10:02 • 353 points

ОригиналHN

#encryption#europol#javascript#mastodon#palantir#thorn

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

  • Исключение для государственных аккаунтов ставит под сомнение заявления о безопасности и точности системы, указывая на вероятность ложных срабатываний.
  • Предложение воспринимается как антидемократичное и нелегитимное, подрывающее доверие к ЕС и ведущее к росту поддержки крайних политических сил.
  • Реализация подобного контроля технически неfeasible, так как злоумышленники могут легко обойти его с помощью альтернативных зашифрованных каналов.
  • Критики проводят параллели с историей тотальной слежки (Стази, Третий рейх) и предупреждают о создании дистопического инструмента массового наблюдения.
  • Обсуждение выявляет циничный мотив лоббирования со стороны компаний-поставщиков surveillance-решений (Thorn, Palantir) и заинтересованных госструктур (Europol).
  • Исключение для политиков трактуется как способ избежать бумажного следа и подотчетности, а безопасность служит лишь прикрытием.
  • Многие пользователи выражают готовность полностью отказаться от сервисов, которые подчинятся таким требованиям, и поддерживают принцип сквозного шифрования.

Oh no, not again a meditation on NPM supply chain attacks (tane.dev) 💬 Длинная дискуссия

О нет, снова... Размышления об атаках на цепочку поставок NPM

Я долго откладывал эту статью — более года — но, как мы видим на этой неделе, пришло время снять покровы и сказать вслух:

В 2025 году Microsoft следует считать «плохим игроком» и угрозой для всех компаний, разрабатывающих программное обеспечение.

Конечно, если вы достаточно взрослые, чтобы помнить — это не первый раз...

Время — плоский круг

Мы снова здесь — в 2025 году Microsoft настолько всё испортили, что создали ещё больший риск, чем в 2000-х с их браузером, просто ничего не делая.

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

С тех пор произошло множество инцидентов, и конкретно NPM стал крупнейшим и самым простым способом распространения вредоносного ПО. Сначала большинство атак было направлено на кражу криптовалюты (поскольку техбро одержимы магическими электрическими деньгами и являются лёгкой добычей). Но теперь эти атаки на цепочку поставок нацелены на более критичные вещи, такие как токены и ключи доступа maintainers пакетов, как видно из инцидента с NX и теперь несколькими зависимостями, ежедневно используемыми тысячами разработчиков.

Опять же... это ничего нового в мире NPM.

Но так быть не должно было...

Мы прошли долгий путь, но никуда не ушли

У меня долгая история с NodeJS — примерно в 2010 году я начал работать над стартапом, и это было до того, как npm вообще появился.

В туманные дни 1990-х большинство проблем безопасности JavaScript не сильно касались бэкенда: это в основном была область Perl, PHP, Python и Java.

Однако веб был совсем другой историей.

В самые ранние дни Всемирной паутины был только один основной браузер, который все использовали: Netscape Navigator. Выпущенный в 1994 году, он был не просто браузером: на протяжении своей жизни он имел различные воплощения встроенного почтового клиента, календаря, HTML-редактора с FTP-браузером, а с плагинами мог воспроизводить медиафайлы, такие как Realplayer и MP3 (что я помню при его запуске), а также флеш-фильмы и игры. Именно здесь родился JavaScript.

Многие ранние сайты того времени были статичными — популярные инструменты для создания сайтов включали HotDog или Блокнот. Никаких навороченных IDE или фреймворков, только текстовый редактор, браузер и alert() для отладки.

Microsoft также вошла в игру с Internet Explorer — включённым в раннее DLC для Windows под названием «Plus! For Windows 95». В конечном итоге он стал программным обеспечением, на которое Microsoft поставила всю свою корпоративную стратегию (во многом как сегодня с ИИ).

Internet Explorer был встроен в каждый аспект Windows — сначала в 1995 году с Active Desktop, что продолжалось вплоть до Windows XP. С ним можно было встраивать фрейм на рабочий стол, а также документы Rich Text или электронные таблицы Excel. Он также был раздутым и багнутым — и с этим представлял две проблемы: огромный риск безопасности и обвинения в монополизации рынка браузеров.

Закон жёстко настиг Microsoft, и в 2001 году она проиграла — Microsoft было приказано разбить компанию, но апелляция отменила это решение.

by theycameback • 17 сентября 2025 г. в 09:57 • 143 points

ОригиналHN

#javascript#microsoft#nodejs#npm#open-source#package-management#security#supply-chain-attacks

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

  • Участники критикуют экосистему npm за уязвимости в цепочке поставок и отсутствие безопасности по умолчанию, сравнивая её с другими менеджерами пакетов.
  • Обсуждается роль крупных компаний (в частности, Microsoft как владельца npm) в решении проблем безопасности и их ответственность за состояние экосистемы.
  • Предлагаются конкретные меры: обязательная 2FA, подписывание кода, политика задержки обновлений (cooldown), переход на альтернативы (pnpm), сканирование пакетов.
  • Поднимается проблема эксплуатации труда добровольцев в open-source и недостаточного вклада коммерческих организаций в проекты, которые они используют.
  • Отмечается, что культура JavaScript-разработки чрезмерно зависит от большого количества зависимостей, что увеличивает поверхность атаки.
  • Указывается на необходимость более строгого контроля зависимостей, включая проверку кода и фиксирование версий (pinning).
  • Некоторые участники считают, что фундаментальные изменения в экосистеме маловероятны, и рекомендуют индивидуальные меры защиты.

Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised (socket.dev) 🔥 Горячее 💬 Длинная дискуссия

Компрометация пакетов ctrl/tinycolor и 40+ других в NPM

Популярный пакет @ctrl/tinycolor с более чем 2 млн загрузок в неделю был скомпрометирован вместе с 40+ другими пакетами в результате сложной атаки на цепочку поставок. Вредоносное ПО самораспространяется по пакетам maintainer'ов, собирает учетные данные AWS/GCP/Azure с помощью TruffleHog и создает бэкдоры через GitHub Actions.

Технический анализ

Атака реализуется через многоступенчатую цепочку, использующую Node.js process.env для доступа к учетным данным. Основной элемент — файл bundle.js (~3.6 МБ), который выполняется асинхронно во время npm install.

Механизм самораспространения
Вредоносное ПО через функцию NpmModule.updatePackage запрашивает API реестра NPM для получения до 20 пакетов maintainer'а и принудительно публикует обновления, создавая каскадный эффект компрометации.

Сбор учетных данных
Используются инструменты вроде TruffleHog для сканирования файловой системы на наличие секретов. Целевые учетные данные включают:

  • Токены доступа GitHub
  • Ключи доступа AWS
  • Учетные данные Google Cloud Platform

by jamesberthoty • 16 сентября 2025 г. в 11:22 • 1177 points

ОригиналHN

#aws#github-actions#google-cloud-platform#javascript#malware#node.js#npm#supply-chain-attack#trufflehog

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

  • Пользователи выражают обеспокоенность невозможностью аудита всех зависимостей и их уязвимостью к атакам в npm.
  • Критикуется архитектура npm, в частности выполнение postinstall-скриптов по умолчанию, в отличие от других менеджеров пакетов.
  • Предлагаются решения: игнорирование скриптов в настройках, песочница (bubblewrap), использование подписей кода и каррированных пакетов.
  • Указывается на системную проблему экосистемы JS: огромное количество мелких зависимостей и отсутствие сильной стандартной библиотеки.
  • Обсуждается масштаб атаки (180+ пакетов) и её возможная связь с государственными акторами.
  • Поднимается вопрос уязвимости других экосистем (PyPI) и необходимости обязательной 2FA и подписи артефактов.
  • Высказываются радикальные предложения по замене npm или созданию безопасного форка/дистрибутива пакетов.

Why do we keep gravitating toward complexity? (kyrylo.org) 💬 Длинная дискуссия

Разработчики часто тяготеют к сложности, хотя принцип KISS («будь проще») хорошо известен. Почему так происходит?

Маркетинг важнее простоты

Продать обычную ручку сложно, но если добавить ей множество функций — она станет «продаваемой». Так и в IT: простые инструменты вроде cat работают идеально, но маркетинг продвигает сложные аналоги с громкими названиями. Социальное доказательство и ощущение эксклюзивности заставляют нас воспринимать сложность как признак качества, хотя часто это просто иллюзия.

Что внутри «пирамид»?

Современные системы напоминают пирамиды: много слоёв, зависимостей и абстракций, но внутри может быть пустота. Сложность кричит «посмотри на меня!», а простота остаётся незаметной, пока не проявится её гениальность. В долгосрочной перспективе побеждает именно простота.

React против ванильного JavaScript

React навязывает множество концепций: рендеринг, хуки, состояния, маршрутизация. Отказ от него может сделать вас «аутсайдером», хотя ванильный JavaScript часто решает задачи эффективнее. Компании вкладывают миллионы в продвижение фреймворков, что усложняет выбор в пользу простых решений.

Глубинные причины любви к сложности

  1. Творческий соблазн: Создание сложных систем — интеллектуальный вызов, который приносит удовлетворение.
  2. Технический долг: Наследие старых проектов вынуждает добавлять новые слои вместо упрощения.
  3. Командная динамика: Разработчики добавляют абстракции для «универсальности», что усложняет систему.
  4. Давление инноваций: Конкуренция подталкивает к созданию сложных решений, чтобы выделиться.

Стройте с умом

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

by PaulHoule • 15 сентября 2025 г. в 23:02 • 126 points

ОригиналHN

#javascript#reactjs

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

  • Сложность часто возникает из-за добавления быстрых исправлений вместо переосмысления архитектуры с учетом новых требований.
  • Простые решения требуют больше усилий для проектирования и поддержки, чем сложные, которые появляются быстрее.
  • Реальность полна деталей, и простые решения редко охватывают всю сложность проблемы, что ведет к наращиванию сложности системы.
  • Разработчики могут добавлять сложность для демонстрации навыков, интереса или ощущения достижения, что поощряется в индустрии.
  • Долгоживущие кодобазы неизбежно накапливают сложность из-за постоянных изменений и адаптации к новым требованиям.
  • Простота субъективна и требует глубокого понимания основ и дисциплины для достижения и поддержания.
  • Бизнес-среда и отсутствие прямого контакта с пользователем могут способствовать выбору сложных решений вместо фокуса на ценности.
  • Сложность иногда искусственно создается для обеспечения job security или из-за организационных проблем и политик.
  • Эволюция технологий и библиотек часто следует за обобщением паттернов, что добавляет абстракции и сложности.

React is winning by default and slowing innovation (lorenstew.art) 🔥 Горячее 💬 Длинная дискуссия

React победил по умолчанию — и это убивает фронтенд-инновации

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

Команды редко начинают с вопроса «Какие ограничения и какой инструмент подходит лучше?». Чаще звучит: «Давайте использовать React — все его знают». Это создаёт цикл, где архитектуру определяют сетевые эффекты, а не техническая целесообразность.

Между тем, фреймворки с реальными инновациями борются за внедрение. Svelte устраняет накладные расходы компиляцией, Solid предлагает детальную реактивность без виртуального DOM, Qwik обеспечивает мгновенный запуск через возобновляемость. Эти подходы часто превосходят модель React, но редко получают оценку, потому что React выбирают по умолчанию.

Проблема не в самом React, а в мышлении «React по умолчанию».

Потолок инноваций

Технические основы React объясняют современные трудности. Виртуальный DOM был умным решением для проблем 2013 года, но, как отметил Рич Харрис, он вводит издержки, которых можно избежать с помощью компиляторов.

Хуки решили проблемы классовых компонентов, но добавили сложности: массивы зависимостей, устаревшие замыкания, неправильное использование эффектов. Даже документация React призывает к сдерженности: «Вам может не понадобиться эффект». Серверные компоненты улучшают время до первого байта, но добавляют архитектурную сложность.

Компилятор React — умное решение для автоматизации useMemo/useCallback, но его существование сигнализирует: мы оптимизируем вокруг ограничений модели.

Альтернативы предлагают иные подходы: Runes в Svelte 5 упрощают реактивность на этапе компиляции, детальная реактивность Solid обновляет только изменённые части, возобновляемость Qwik устраняет традиционную гидратацию. Это не инкрементные улучшения React, а другие модели с иными пределами.

Инновации без внедрения не меняют результаты. Внедрение невозможно, когда выбор делается рефлекторно.

Технический долг, который мы несём

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

Исследования производительности единодушны: JavaScript дорог на критическом пути.

Мы сосредоточили ментальные модели вокруг «React-паттернов» вместо основ веба, снижая переносимость навыков и увеличивая архитектурную инерцию.

Потеря не только в производительности, но и в упущенных возможностях, когда альтернативы не оцениваются. Например, бенчмарки показывают, что Solid в 2-3 раза быстрее React в сценариях с интенсивной реактивностью.

Фреймворки, которым не дают развиваться

Svelte: революция компилятора

Svelte переносит работу на этап компиляции: нет виртуального DOM, минимальный runtime. Компоненты становятся целевыми операциями DOM. Ментальная модель соответствует основам веба.

Но «недостаточно вакансий» искусственно сдерживает внедрение Svelte, несмотря на технические преимущества.

by dbushell • 15 сентября 2025 г. в 17:46 • 637 points

ОригиналHN

#hooks#javascript#qwik#react-native#reactjs#solidjs#svelte#virtual-dom#web-components

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

  • React побеждает благодаря композиции функций JavaScript, интуитивной модели и стабильности, а не только из-за сетевых эффектов.
  • Веб-компоненты рассматриваются как путь к совместимости между фреймворками и снижению зависимости от экосистемы React.
  • Многие разработчики ценят React за предсказуемость, лёгкость найма и богатую экосистему, что делает его безопасным выбором.
  • Критики указывают на сложности React (хуки, зависимости, ререндеры) и чрезмерный boilerplate-код.
  • Альтернативы вроде Svelte или Solid предлагают упрощённые модели и лучшую производительность, но проигрывают в распространённости.
  • Инновации во фронтенде часто воспринимаются как «суета», ведущая к устареванию проектов и постоянным переписываниям.
  • React доминирует частично из-за React Native, что позволяет использовать единую кодобазу для web и мобильных платформ.
  • Браузеры и стандарты Web обвиняются в недостаточной скорости развития, что вынуждает полагаться на фреймворки.
  • Стабильность и стандартизация ценятся выше постоянных изменений и «инноваций» в индустрии.

Denmark's Justice Minister calls encrypted messaging a false civil liberty (mastodon.social) 🔥 Горячее 💬 Длинная дискуссия

Боритесь с контролем чатов: «Министр юстиции Дании и главный архитектор…»

Для использования веб-приложения Mastodon включите JavaScript. Также можно попробовать нативные приложения Mastodon для вашей платформы.

by belter • 15 сентября 2025 г. в 12:21 • 353 points

ОригиналHN

#javascript#mastodon

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

  • Участники дискуссии единодушно отвергают позицию министра юстиции Дании, считая конфиденциальность и шифрование личных сообщений фундаментальным правом и гражданской свободой, защищенной как международными конвенциями, так и национальными конституциями.
  • Предлагаемый закон (ChatControl) расценивается как тотальная система массовой слежки, которая нарушает приватность всех граждан, а не только подозреваемых.
  • Многие отмечают лицемерие власти, которая хочет получить доступ к данным граждан, но оставляет неприкосновенной собственную переписку.
  • Подчеркивается техническая и практическая несостоятельность запрета шифрования, который подорвет безопасность и доверие в цифровой сфере, включая финансовые операции.
  • Участники считают, что подобные меры неэффективны для борьбы с преступностью, так как преступники найдут обходные пути, а страдают законопослушные граждане.

DOOMscrolling: The Game (ironicsans.ghost.io) 🔥 Горячее

Doomscrolling: игра
Скроллинг как единственный способ управления.


Идея
Классический дум-скроллинг → браузерная игра, где всё, что нужно — листать вниз. Никаких стрелок и прыжков.

Попытка №1: провал
9 месяцев назад ни один LLM не смог связать «скролл вниз» с «фон движется вверх». Получилась пародия на игру. Забросил.

GPT-5 и победа
Через пару часов — рабочий прототип.

  • Враги: 5 спрайтов, 2 кадра, как у Space Invaders.
  • Механика: Galaga, но вертикально. Игрок движется вперёд-назад, монстры «привязаны» к полу.

Кофе-морнинги на каникулах
По часу утром:

  • апгрейд оружия каждые 100 убитых;
  • огненная стена подталкивает не стоять на месте;
  • препятствия: кирпичи, паутина;
  • 5 фонов, зелья здоровья, метка личного рекорда, пауза со статой.

Финальный штрих: новости
Появляются мемориальные плиты с заголовками NYT за сегодня. Не влияют на геймплей, только отвлекают.
Игра = самый сложный RSS-ридер в мире.

ИИ всё ещё тупит
Когда LLM не понимает, прерываю диалог и начинаю новый с тем же промптом — срабатывает.

by jfil • 10 сентября 2025 г. в 22:56 • 388 points

ОригиналHN

#canvas#game-development#gpt-5#html5#javascript#llm

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

  • Пользователи в восторге: человек без навыков кодинга собрал динамичную «дум-скролл»-игру, спросив ChatGPT сгенерировать всё.
  • Механика: скроллинг = движение; враги и огонь идут снизу, игроку надо лутать апгрейды и убивать монстров.
  • Впечатляет «лаборатория» со слайдерами для настройки спрайтов — пример Steve-Jobs-овского «конструктора калькулятора».
  • Критика: нет инерции/чувствительности скролла, на больших экранах играть легче, можно «откатом» обмануть стену огня.
  • Баг: одновременная смерть и 100-килл-бонус крашит игру.
  • Общий вывод: простая, но свежая идея, показывающая, как LLM-инструменты открывают геймдев даже «не-программистам».

You too can run malware from NPM (I mean without consequences) (github.com)

running-qix-malware
Репозиторий демонстрирует работу вируса QIX (1989) в эмуляторе DOS.

  • Собранный DOS-бинарь запускается в браузере через эмулятор.
  • Исходники на ассемблере и C, скрипты сборки.
  • Инфицирует .COM-файлы, показывает бегущую линию.
  • Безопасен: эмуляция изолирует вредоносный код.

by naugtur • 09 сентября 2025 г. в 10:02 • 180 points

ОригиналHN

#2fa#c#dll#dosebox#git#javascript#malware#npm#security#webpack

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

  • Участники вспомнили про инцидент Jia Tan и пожаловались, что npm до сих пор не автоматически блокирует публикации с обфусцированным кодом и шестнадцатеричными именами.
  • Предложены меры: предпубликационный сканер с «задержкой на проверку», 2FA-апрув каждого релиза, опциональный «verified»-бейдж и поддержка Yubikey.
  • Сомнения в пользе LavaMoat: не спасает от DLL в lifecycle-скриптах, не работает с Webpack HMR, а изоляция может быть дорогой.
  • Обсуждали lock-файлы: хэши в package-lock защищают от перезаписи версии, но теги git всё ещё можно подменить; иммутабельность npm-тарболлов считается основной защитой.
  • Namespaces (@scope) в npm есть с 2016 г., но «красивые» безскоповые имена всё ещё популярны, поэтому переход идёт медленно.

No adblocker detected (maurycyz.com) 🔥 Горячее 💬 Длинная дискуссия

  • Реклама в интернете — зло: тратит время и уродует сайты.
  • Поддержи автора напрямую: 1 $ приносит больше пользы, чем тысячи показов баннеров.
  • На сайте выводится тонкое сообщение: «Adblock не обнаружен. Поставь uBlock Origin — сэкономишь трафик и нервы».
  • Блок скрывается кнопкой «Закрыть» и больше не появляется (cookie notice-shown).
  • Техника:
    – в HTML встроен <div> с «адоподобными» классами и скрипт nativeads.js;
    – если div вырезан или скрипт заблокирован, сообщение не видно;
    – стили показывают блок только при ≥75 em ширины и ≥30 em высоты;
    – без JS сообщение не вставляется, без CSS просто не стилизуется.
  • DNS-блокировку не отследить, поэтому банер маленький и некликабелен вне основного контента.

by LorenDB • 09 сентября 2025 г. в 01:09 • 525 points

ОригиналHN

#adblocking#advertising#css#dns#html#javascript#tracking#ublock-origin#web-development#web-privacy

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

  • Без блокировщиков рекламы веб выглядит как «лабиринт трекеров и баннеров»: большинство пользователей живут в этом каждый день.
  • uBlock Origin называют едва ли не «лучшим антивирусом»; ФБР и CERN рекомендуют блокировщики как защиту от скама и малвари.
  • Даже с адблоком сайты всё чаще «раскрывают» посетителей через identity-graph (IP, хэши устройств) и потом спамят e-mail.
  • Часть участников считает блокировку «паразитизмом»: контент бесплатен только потому, что кто-то смотрит рекламу.
  • Другие возражают: договор «контент ↔ реклама» давно нарушен — автозвук, трекинг, монополии Google/Meta, потребление трафика и батареи.
  • Альтернатива — платить авторам напрямую, но пожертвования от 0,01 % читателей не покрывают хостинг, уж не говоря о зарплате.

Fuck up my site – Turn any website into beautiful chaos (fuckupmysite.com) 🔥 Горячее

FuckUpMySite — преврати любой сайт в хаос.

  • Деструкция: 0 %
  • Лозунг: fuckfuckfuckfuckupupupupmymymymysitesitesitesite
  • Девиз: «Некоторые просто хотят смотреть, как горит веб».

Попробуй на: Sentry.io, Hacker News, Apple, Stack Overflow
Кнопка: «FUCK THIS SITE UP»

😈 Настройки хаоса

(3 из 6 активны)

  • 🔥 Пылающий курсор — курсор поджигает страницу
  • 🤪 Comic Sans всё — весь текст Comic Sans
  • 👻 Фальшивые курсоры — множество поддельных теней
  • 🪰 Назойливая муха — жужжит по экрану
  • 🏃 Убегающие кнопки — прячутся от мыши
  • 🔨 Попап-лопатка — ложные окна, которые нужно закрывать

Не все сайты дружат с хаосом. Нашёл баг? Напиши в Twitter.

by coloneltcb • 28 августа 2025 г. в 21:04 • 300 points

ОригиналHN

#browser#comicsans#hackernews#javascript#npm#sentry.io

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

  • Участники обсуждают сайт-шутку, который «ломает» любую страницу: Comic Sans, ползающие жуки, огонь и т.д.
  • Браузеры (Chrome, Firefox, Safari) блокируют его как «опасный», что вызывает смех — предупреждение идеально вписывается в дух проекта.
  • Некоторые сравнивают его с Katamari Hack, Desktop Destroyer, netdisaster и старыми оверлеями 90-х.
  • Работает не везде: падает на Whitehouse.gov, opennet.ru, сайтах с Anubis, а также на самом себе.
  • Люди делятся ссылками на «испорченные» версии Fox News, Apple и др.; кто-то просит npm-пакет для розыгрыша.

The GitHub website is slow on Safari (github.com) 🔥 Горячее 💬 Длинная дискуссия

Проблема: GitHub в Safari работает крайне медленно.
Описание: Страницы грузятся по 5–10 сек, анимации подвисают, прокрутка «рыхлая». В Chrome и Firefox всё нормально.

Версии:

  • Safari 17.5 (macOS 14.5)
  • Safari 16.6 (macOS 13.6) – та же картина

Что пробовали:

  • Очистить кэш и куки
  • Отключить все расширения
  • Переключить DNS (Cloudflare, Google)
  • Сменить сеть (домашний Wi-Fi, мобильный интернет)
  • Включить/выключить «Разработка → Использовать WebKit Nightly»

Результат: ничего не помогло.

Симптомы:

  • В Activity Monitor процесс «Safari Web Content» грузит CPU до 100 % при открытии любой страницы GitHub.
  • В инструментах разработчика видно, что 80 % времени уходит на «Rendering».

Временное решение:

  • Переключиться на Chrome/Firefox.

Просьба: Проверьте, не сломали ли вы что-то в CSS/JS для WebKit.

by talboren • 27 августа 2025 г. в 09:43 • 409 points

ОригиналHN

#css#github#javascript#reactjs#safari#webkit

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

  • GitHub стал критически медленным: Safari и Firefox тормозят даже на мощных М-системах, а большие PR (>1000 файлов) почти не открываются.
  • Пользователи связывают падение производительности с переходом на React/SPA после покупки Microsoft и отказом от старого SSR.
  • Предлагают мигрировать на Forgejo, Codeberg, SourceHut или возвращаться к простому HTML/CSS.
  • Вопрошают, как в крупной компании могут пропустить такую регрессию и почему тесты не ловят разницу между Chrome и Safari.
  • Ситуация повторяется и на других сайтах (Jira, Stripe, GCP), вызывая разговоры о «блоте» современных веб-приложений.

Malicious versions of Nx and some supporting plugins were published (github.com) 🔥 Горячее 💬 Длинная дискуссия

Суть проблемы
В npm-реестр попали вредоносные версии пакетов Nx и связанных плагинов. Злоумышленники использовали временный доступ к npm-аккаунту @nxscope и опубликовали поддельные версии 19.8.0–19.8.2.

Затронутые пакеты

  • nx
  • @nx/angular, @nx/cypress, @nx/detox, @nx/devkit, @nx/esbuild, @nx/eslint-plugin, @nx/expo, @nx/express, @nx/jest, @nx/js, @nx/nest, @nx/next, @nx/node, @nx/playwright, @nx/plugin, @nx/react, @nx/rollup, @nx/storybook, @nx/vite, @nx/web, @nx/webpack, @nx/workspace

Что делать

  1. Удалить вредоносные версии.
  2. Установить официальные 19.8.3 или выше.
  3. Проверить lock-файлы и CI на наличие подозрительных версий.

by longcat • 27 августа 2025 г. в 01:38 • 427 points

ОригиналHN

#angular#github#javascript#nodejs#npm#nx#reactjs#security#supply-chain-security

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

  • Уязвимость в пакетах Nx: токен npm скомпрометирован, злоумышленники внедрили вредоносный код через post-install скрипты.
  • Малварь ищет Claude Code / Gemini CLI и использует их как «живые» инструменты для поиска криптокошельков, ключей и других секретов.
  • Участники советуют отключать npm-скрипты (ignore-scripts true), использовать Bun (по умолчанию не запускает скрипты), Verdaccio для вендоринга и инструмент vet для сканирования.
  • Рекомендуют разрабатывать в изолированных контейнерах/VM (cubbi, bubblewrap, firejail) и пересматривать каждую зависимость вместо «npm install наугад».
  • Основной вывод: современные цепочки поставок и AI-агенты создают новый вектор атак «prompt-as-malware», а операционные системы всё ещё позволяют приложениям свободно читать весь диск.

macOS dotfiles should not go in –/Library/Application Support (becca.ooo) 💬 Длинная дискуссия

CLI-утилитам не место в ~/Library/Application Support

Популярные библиотеки (Python platformdirs, JS env-paths, Rust dirs, Go adrg/xdg) по умолчанию кладут конфиги в ~/Library/Application Support, но это каталог для GUI-приложений. Пользователи ожидают увидеть настройки CLI-программ в ~/.config, как Git, Vim, Tmux и сотни других. Это ожидание закреплено стандартом XDG и принципом «наименьшего удивления».

Почему это важно

  • Неожиданное расположение ломает привычки и усложняет версионирование.
  • Даже менеджеры dotfiles (chezmoi, dotbot, yadm, rcm, GNU Stow) игнорируют ~/Library/Application Support, что подтверждает: сообщество считает ~/.config единственным разумным местом для конфигов CLI-утилит на macOS.

by zdw • 26 августа 2025 г. в 04:49 • 239 points

ОригиналHN

#cli#dotfiles#go#javascript#macos#python#rust#xdg

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

  • Автор утверждает, что CLI-утилиты macOS должны хранить конфиги в ~/.config по XDG, но участники показывают: ни одна поставляемая с macOS утилита этого не делает.
  • Большинство считает XDG спецификацией для Linux/Unix-сред и не видят оснований навязывать её macOS, у которой есть собственные места: ~/Library/Preferences и ~/Library/Application Support.
  • Разработчики CLI-инструментов, портированных с Linux, действительно часто используют ~/.config, что вызывает у местных пользователей ощущение «плохого порта».
  • Предлагаются компромиссы: использовать XDG-переменные, если они заданы, или делать симлинки между ~/.config и ~/Library/Application Support.
  • В Rust-экосистеме крейт dirs-rs игнорирует XDG на macOS; участники обсуждают создание форка, который бы следовал спецификации.

Comet AI browser can get prompt injected from any site, drain your bank account (twitter.com) 🔥 Горячее 💬 Длинная дискуссия

JavaScript отключён.
Включите его или перейдите в поддерживаемый браузер. Список браузеров — в Справке.

Что-то пошло не так.
Попробуйте ещё раз.

⚠️ Расширения, блокирующие трекинг, могут мешать работе сайта. Отключите их и обновите страницу.

by helloplanets • 24 августа 2025 г. в 15:14 • 531 points

ОригиналHN

#banking#browser#email#git#javascript#llm#microsoft#prompt-injection#sandbox#security

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

  • Участники считают, что давать LLM-агенту полный доступ к браузеру — это «смертельный трифекта»: чтение всех вкладок, кук и паролей.
  • Основной риск — prompt-injection: любой сайт может внедрить команду, и агент выполнит её, потому что «каждое чтение — это запись в контекст».
  • Люди сравнивают это с тем, что Microsoft делала скриншоты, но теперь молчат, когда AI получает plaintext-доступ к банковским данным.
  • Единственный «безопасный» сценарий — код в git, где изменения легко откатить; всё остальное (покупки, банкинг, e-mail) считается безумным.
  • Итог: без изоляции, sandbox и чёткого разграничения «что можно» агенты становятся идеальным вектором атак, а компании, их выпускающие, — объектом для судебных исков.

It’s not wrong that "\u{1F926}\u{1F3FC}\u200D\u2642\uFE0F".length == 7 (2019) (hsivonen.fi) 💬 Длинная дискуссия

В JavaScript "🤦🏼‍♂️".length == 7не ошибка, а результат подсчёта UTF-16 кодовых единиц.
Эмодзи состоит из 5 скалярных значений Unicode, но в UTF-16 они занимают 7 code units:

  • 🤦 U+1F926 → 2
  • 🏼 U+1F3FC → 2
  • ZWJ U+200D → 1
  • ♂ U+2642 → 1
  • VAR-16 U+FE0F → 1

Итого 7 — именно это и возвращает .length.

Другие языки считают по-своему:

  • Python 3len("🤦🏼‍♂️") == 5 (кодовые точки, но допускает суррогаты).
  • Rust"🤦🏼‍♂️".len() == 17 (байты UTF-8).
  • Swift"🤦🏼‍♂️".count == 1 (расширенный графем-кластер).

Каждый подход отвечает на свой вопрос: «сколько code units / bytes / графем». Ни один не универсален; выбор зависит от задачи.

by program • 22 августа 2025 г. в 06:18 • 165 points

ОригиналHN

#encoding#javascript#python#rust#string#swift#unicode#utf-16#utf-8#web-development

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

  • Обсуждение вокруг статьи показало, что «длина строки» не имеет единого определения: бывают байты, UTF-16/UTF-32 код-юниты, скалярные значения Unicode и расширенные графем-кластеры.
  • Пользователи жалуются, что разные языки и API возвращают разные числа для одного и того же эмодзи, что ломает UI-ограничения, индексы БД и обработку текста.
  • Часть участников считает, что нужно явно различать «длину для хранения», «длину для отображения» и «длину для человека»; другие мечтают вернуться к чистому ASCII.
  • Примеры кода на Java, Python, Raku и JS показывают, как получить каждый из вариантов длины, но подчеркивают отсутствие общего стандарта.
  • Итог: «length» — слишком расплывчатое слово; без контекста использования любое его значение может оказаться не тем, что действительно нужно.

Show HN: I was curious about spherical helix, ended up making this visualization (visualrambling.space) 🔥 Горячее

Как двигать объекты в 3D

Кликните вправо, чтобы идти дальше →


От круга к сферической спирали

Куб движется по кругу:
x = 10 cos(πt/2)
y = 10 sin(πt/2)

Умножаем радиус на 0.03 t — получаем растущую спираль.


Сферическая спираль

Добавляем z:
z = 10 cos(0.02 πt)

Радиус x, y теперь умножается на sin(0.02 πt), поэтому он сначала растёт, потом уменьшается.

x = 10 cos(πt/2) · sin(0.02 πt)
y = 10 sin(πt/2) · sin(0.02 πt)
z = 10 cos(0.02 πt)

Куб облетает сферу по спирали.


Итог

Положение в 3D задаётся параметрическими уравнениями x(t), y(t), z(t).
Меняя функции, получаем любые траектории — от простого круга до «хаотичных» путей.

Проект Damar • Twitter @damarberlari

by damarberlari • 20 августа 2025 г. в 14:02 • 820 points

ОригиналHN

#3d-visualization#animation#javascript#mathematics#parametric-equations#webgl

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

  • Пользователи восторгаются плавной анимацией и наглядностью объяснения сферической спирали.
  • Некоторые жалуются на тормоза в Firefox/Linux и просят убрать «диззи»-эффект.
  • Просят добавить навигацию свайпом/скроллом, кнопки «вперёд-назад» и RSS-ленту.
  • Отмечен скачок сложности: от азов к финальной спирали — слишком большой шаг для новичков.
  • Появились предложения расширить тему: полярные координаты, матрицы поворота, Fibonacci-спираль на сфере.

An interactive guide to SVG paths (joshwcomeau.com) 🔥 Горячее

SVG <path>: краткий путеводитель

<path> — единственный способ рисовать сложные фигуры и кривые в SVG. Синтаксис пугает, но разобравшись, становится удобным.

Основы

  • Атрибут d — последовательность команд, как «рецепт» для пера.
  • Каждая команда начинается с буквы и получает координаты как аргументы.
  • Предыдущая точка автоматически становится началом следующей команды.
  • Используйте пробелы и запятые — читаемость важнее байтов.

Команды

  • M x,y — поднять перо и переместиться в точку.
  • L x,y — прямая линия до точки.
  • C x1 y1, x2 y2, x y — кубическая Безье.
  • Q x1 y1, x y — квадратичная Безье.
  • A rx ry x-axis-rotation large-arc-flag sweep-flag x y — дуга эллипса.
  • Z — замкнуть путь к начальной точке.

Относительные координаты

Буквы в нижнем регистре (m, l, c…) двигают перо относительно текущей позиции, а не от начала координат.

Цепочки кривых

Повторяйте команды, чтобы строить сложные формы без лишних M.

Анимации

Изменяя d через CSS или JS, можно плавно морфить фигуры.

Советы

  • Начинайте путь всегда с M.
  • Для читаемости группируйте команды построчно.
  • Проверяйте результат в интерактивном редакторе.

by joshwcomeau • 18 августа 2025 г. в 15:19 • 427 points

ОригиналHN

#bezier-curves#css#graphics#javascript#path#postscript#svg

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

  • Участники обсуждают интуитивные способы задавать эллиптические дуги без булевых флагов, предлагая параметры вроде углов или контрольной точки.
  • Хвалят интерактивный гайд по SVG-путям, его наглядность и звуковые эффекты.
  • Делятся практическим опытом: динамическая генерация карт в играх, разметка сканов, чтение путей «с нуля».
  • Рекомендуют инструменты для редактирования и генерации SVG: GodSVG, Boxy SVG, онлайн-редактор yqnn.
  • Отмечают связь SVG с PostScript, Logo и даже коническими сечениями; обсуждают GPU-ускорение для кривых Безье и рендеринг шрифтов.

Traps to Developers (qouteall.fun)

  • CSS

    • min-width: auto (по умолчанию) имеет приоритет над flex-shrink, overflow: hidden, width: 0; задайте min-width: 0.
    • Горизонталь и вертикаль различаются: width: auto растягивается, height: auto по содержимому; margin: 0 auto центрирует по горизонтали, но не по вертикали (в flex-direction: column работает).
    • BFC (display: flow-root) предотвращает схлопывание margin и «обнуление» высоты родителя с float-потомками.
    • Новый stacking context создают transform, filter, opacity, position: fixed/sticky, z-index + absolute/relative и др.; z-index действует только внутри контекста.
    • На мобильных 100vh включает скрытые панели; используйте 100dvh.
    • position: absolute ориентируется на ближайший «positioned» ancestor, а не на родителя.
    • float не работает внутри flex/grid-родителя.
    • Процентные width/height не работают, если размер родителя не задан.
    • display: inline игнорирует width, height, вертикальные margin.
    • Пробелы между inline-block элементами рендерятся; в flex/grid — нет.
    • box-sizing: content-box (по умолчанию) не включает padding/border; включите border-box.
    • Указывайте width/height у <img> для предотвращения CLS.
    • Загрузка файлов не показывается в DevTools; используйте chrome://net-export/.
    • Внутри <script> строка </script> ломает парсинг.
  • Unicode

    • Отличайте code point и grapheme cluster (последнее — то, что видит пользователь).

by qouteall • 16 августа 2025 г. в 10:34 • 232 points

ОригиналHN

#css#flexbox#go#html#java#javascript#kotlin#regex#tcp#unicode

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

  • Маршрутизаторы могут тихо обрывать простаивающие TCP-соединения; настройте TCP-keepalive или HTTP-заголовки.
  • Возвращать null из Optional<T> — антипаттерн; Kotlin и аннотации уже решают это.
  • UTF-16 в Java/C#/JS — деталь реализации; в Go строки — просто байты.
  • min-width: auto работает не везде; CSS-свойства нельзя читать изолированно.
  • Регексы, YAML, LF/CRLF, rm -rf $DIR/ — каждый язык/платформа имеет свои подводные камни.

Lazy-brush – smooth drawing with mouse or finger (lazybrush.dulnan.net) 🔥 Горячее

Lazy Brush — библиотека для рисования плавных линий мышью, пальцем или любым другим указателем.
GitHub | npm | Reddit

Параметры:

  • Lazy radius (60 px) — минимальное расстояние, при котором кисть тянется к курсору.
  • Friction (0.10) — инерция: 0 — без задержки, 1 — бесконечная.
  • Brush radius (13 px) — толщина кисти, не влияет на логику.

Автор: dulnan

by tvdvd • 15 августа 2025 г. в 18:30 • 543 points

ОригиналHN

#canvas#github#javascript#npm#wii

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

  • Библиотека Perfect Freehand и её демо drawmote от автора TLDRaw признаны лучшей альтернативой для плавных подписей и рисования.
  • Техника «ленивого» курсора с гистерезисом/стабилизатором уже применялась в Wii-играх, Krita, ZBrush, Black & White и других графических пакетах.
  • Пользователи отмечают, что визуальный «поводок» между курсором и пальцем делает рисование интуитивным, особенно на мобильных устройствах и при работе мышью.
  • Некоторые считают задержку слишком большой и предлагают использовать фильтр Калмана или DynaDraw для меньшего лага.
  • Проект вызвал восторг («лучшее бесплатное», «шокирующе хорошо»), но кто-то жалуется на пропадающие линии и невозможность «естественных» штрихов.

The beauty of a text only webpage (albanbrooke.com) 💬 Длинная дискуссия

Чар простой текстовой страницы

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

Такой контент можно скопировать в письмо, отправить в ChatGPT, распечатать или сохранить на Kindle — он везде работает.
Ссылка открывается мгновенно без CDN и предзагрузок.
Хостинг стоит копейки, сайт живёт даже на Raspberry Pi.

Читая, легко переключаться между беглым просмотром и вдумчивым чтением, не чувствуя вины за «потерянное» время.

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

by speckx • 15 августа 2025 г. в 15:05 • 235 points

ОригиналHN

#css#html#javascript#web-design#web-performance

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

  • Участники мечтают о браузере без JS, где только HTML и выбранная пользователем CSS-тема.
  • Хвалят сайты вроде plaintextsports.com и berkshirehathaway.com за минимализм, читаемость и отсутствие трекеров.
  • Спорят о шрифтах: кто-то любит моноширинные «под печатную машинку», кто-то просит sans-serif и контрастные цвета.
  • Соглашаются, что картинки допустимы, если служат тексту, а главный враг — избыточный JS, баннеры и медленные фреймворки.
  • Вспоминают лёгкие новостные «lite»-версии CNN/NPR и альтернативные протоколы вроде Gemini как примеры «текстового» интернета.