Hacker News Digest

Обновлено: 19 августа 2025 г. в 05:27

Постов: 656 • Страница 30/66

Faster substring search with SIMD in Zig (aarol.dev)

SIMD-поиск подстроки в Zig

Автор реализовал алгоритм, который на 60 % быстрее std.mem.indexOf.
Идея: сравниваем 32-байтовые блоки текста с первым и последним символом искомого слова, используя AVX2.

  1. Берём первый и последний байт needle (first, last).
  2. Загружаем 32 байта haystack в вектор Block = @Vector(32, u8).
  3. Создаём маски совпадений:
    const eq_first = first == block;
    const eq_last  = last  == block_shifted;
    const mask = @bitCast(eq_first & eq_last);
    
  4. Для каждого установленного бита проверяем полное совпадение подстроки.
  5. Хвост обрабатываем обычным indexOf.

Код (сокращённо):

const Block = @Vector(32, u8);
const first = @splat(needle[0]);
const last  = @splat(needle[k-1]);

while (i + k + 32 <= n) : (i += 32) {
    const f = haystack[i..][0..32].*;
    const l = haystack[i+k-1..][0..32].*;
    var mask: u32 = @bitCast((first == f) & (last == l));
    while (mask != 0) {
        const bit = @ctz(mask);
        if (mem.eql(u8, haystack[i+bit+1..][0..k-1], needle[1..]))
            return i + bit;
        mask &= mask - 1;
    }
}
return mem.indexOf(u8, haystack[i..], needle) orelse null;

Тест: поиск слова «newsletter» во всём «Моби Дике» (~1.2 МБ).
Сборка: zig build -Doptimize=ReleaseFast.

by todsacerdoti • 11 августа 2025 г. в 09:41 • 170 points

ОригиналHN

#zig#simd#avx2#avx-512#sve#rvv#llvm

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

  • Подход с SIMD-ускорением поиска подстроки популярен, но в худшем случае остаётся квадратичным O(m·n), поэтому нужен «откат» на линейный алгоритм (KMP/BM).
  • Участники отмечают, что большинство реализаций опираются на 10-летние AVX/NEON, игнорируя AVX-512, SVE и RVV, которые дают больший выигрыш, но пока редки на десктопах и в облаках.
  • Zig пока не предоставляет прямых intrinsics, хотя LLVM-бекенд позволяет вызывать нужные инструкции; это тормозит портирование низкоуровневых оптимизаций.
  • Есть идея дальнейшего SIMD-фильтра: проверять не только первый/последний байт иглы, но и второй/предпоследний и т.д., накладывая маски.
  • Вопросы Unicode: алгоритм работает на байтах, поэтому для UTF-8/16 потребуется дополнительная обработка переменной длины кодов.

Hand-picked selection of articles on AI fundamentals/concepts (aman.ai)

  • Основы ИИ: статьи о полном цикле — от построения нейросетей до оценки результатов.
  • Алгоритмы/архитектуры: линейная и логистическая регрессия, k-ближайших соседей, кластеризация, SVM, наивный Байес, деревья решений, ансамбли, GAN, диффузия, GNN, внимание, CNN, RL, MoE, SSM, агенты, FlashAttention, ускорение моделей, спекулятивное декодирование, кросс-валидация.
  • Данные/обучение: сэмплирование, дисбаланс, нормализация, парадигмы обучения, инициализация Xavier, регуляризация, градиентный спуск, функции активации и потерь, дообучение, разбиение данных, batchnorm, dropout, двойной спуск, LoRA, распределённое обучение.
  • Речь: обработка речи.
  • Зрение: ViT, рецептивное поле, ResNet, генерация изображений GPT-4o.
  • NLP: эмбеддинги, задачи NLP, токенизация, трансформеры, LLM, RAG, RLHF, перевод, графы знаний, обнаружение галлюцинаций, NER, RAG, LLMOps, бенчмарки.
  • Мультимодальность: VLM, архитектуры VLM, управление компьютером.
  • Модели: BERT, GPT, CLIP, Meena, ChatGPT, GPT-4, LLaMA, Alpaca, Gemini, Toolformer, Visual ChatGPT, TaskMatrix, BigBird, o1, DeepSeek, Gemma 3n.
  • Оценка: метрики, F-beta, A/B-тесты.
  • MLOps: дрейф данных, инструменты и тесты MLOps.
  • On-device ИИ: компрессия, PII, федеративное обучение, дифференциальная приватность, трансформеры на устройстве.
  • Управление проектами: OKR, RICE, диаграммы Ганта, управление проектами.
  • Разное: «Топ-30 Ильи Сацкевера».

by vinhnx • 11 августа 2025 г. в 08:59 • 185 points

ОригиналHN

#neural-networks#machine-learning#deep-learning#gan#gnn#cnn#reinforcement-learning#natural-language-processing#computer-vision#agentic-coding

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

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

AOL to discontinue dial-up internet (nytimes.com) 💬 Длинная дискуссия

by situationista • 11 августа 2025 г. в 07:15 • 194 points

ОригиналHN

#dial-up#aol#internet

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

  • AOL наконец отключил dial-up в 2025 г.; для многих это стало концом «вечного сентября».
  • Участники вспоминали реальные 5-6 КБ/с, обрывы на 99 % и часы на скачивание 5 МБ.
  • Некоторые до сих пор удивлены, что кто-то платил за dial-up; предполагают, что это пожилые люди в глубинке без DSL/мобильной связи.
  • Отмечали, что современный веб-из-за «вздутия» уже лет 15 как непригоден на 56 кбит/с.
  • Ностальгия: звуки модема, CD-диски AOL в каждом почтовом ящике, чаты 1996-го, не уступающие Slack по функциям.

The Chrome VRP Panel has decided to award $250k for this report (issues.chromium.org) 🔥 Горячее 💬 Длинная дискуссия

Chromium
Войти

by alexcos • 11 августа 2025 г. в 05:56 • 463 points

ОригиналHN

#chromium#google#mozilla#security#vulnerability#rust#reverse-engineering

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

  • Найдена критическая уязвимость escape из Chrome-песочницы, за которую Google заплатили $250 000.
  • Некоторые считают, что на «чёрном» рынке она могла стоить дороже, но продажа чревата рисками и отмыванием денег.
  • Mozilla платит за аналогичные баги лишь $20 000, что вызывает сравнение серьёзности подходов к безопасности.
  • Ошибка логики/тайминга; Rust бы её не предотвратил.
  • Участники обсуждают, как начать искать такие баги: читать write-ups, практиковать reverse engineering, пользоваться ресурсами вроде pwn.college.

Basic Social Skills Guide (improveyoursocialskills.com)

Базовое руководство по социальным навыкам — бесплатный курс из 17 уроков, разбитых на 3 раздела. Поделитесь им с друзьями, а затем переходите к продвинутому руководству.

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

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

  • Разговор
    Принцип «вдохновение и приглашение» помогает легко поддерживать беседу на любую тему.

  • Поддержка друзей
    Советы, как быть рядом, когда друзьям тяжело.

  • Краткие инструкции
    Быстрые советы, которые улучшают навыки за минуты.

by sogen • 11 августа 2025 г. в 05:19 • 165 points

ОригиналHN

#social-skills#communication#body-language#public-speaking#self-improvement

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

  • На похороны стоит прийти даже без тесной связи с усопшим, чтобы поддержать друга.
  • Универсальные мужские темы — спорт, машины, охота/рыбалка, но они не всегда работают вне США и молодёжной среды.
  • Сайт succeedsocially.com признан полезным, но многие находят его стиль излишне «детским» и структуру запутанной.
  • «Never Split the Difference» и «How to Win Friends…» рекомендуют как следующий шаг после базовых навыков.
  • Проблемы с невнятной речью решаются осознанной практикой, логопедией или актёрской тренировкой голоса.
  • Настоящие навыки требуют практики, а не только чтения; «будь собой» работает лишь после социальной калибровки.

Generic Containers in C: Safe Division Using Maybe (uecker.codeberg.page)

Показываю, как в C сделать обобщённый контейнер maybe, который безопасно возвращает результат, если он есть, и сообщает об ошибке, если её нет.

#define maybe(T) struct { bool ok; T value; }
#define maybe_just(T,x)  { .value = (x), .ok = true }
#define maybe_nothing(T) { .value = (T){}, .ok = false }

static maybe(int) divide(int a, int b) {
    return (b != 0) ? maybe_just(int, a / b) : maybe_nothing(int);
}

Вызов:

maybe(int) p = divide(6, d);
if (p.ok) printf("%d\n", p.value);
else       puts("division by zero");

Чтобы не забыть проверку, добавляем макрос maybe_value, который при ошибке возвращает нулевой указатель, ловим его санитайзером:

#define maybe_value(x) \
    (*({ auto _p = &(x); _p->ok ? &_p->value : (void*)0; }))

Но деление на ноль — не единственная проблема. При делении INT_MIN / -1 возникает переполнение. Исправляем:

maybe(int) safe_divide(int a, int b) {
    if (b == 0 || (b == -1 && a == INT_MIN))
        return maybe_nothing(int);
    return maybe_just(int, a / b);
}

Компилируем с -fsanitize=signed-integer-overflow,integer-divide-by-zero -fsanitize-trap=undefined -O2. В ассемблере не остаётся пути к ud2, то есть оптимизатор доказал: переполнения и деления на ноль нет.

Это не делает весь C «безопасным» (жизненный цикл указателей и арифметика не покрыты), но для ограниченных задач подход работает.

by uecker • 11 августа 2025 г. в 05:14 • 91 points

ОригиналHN

#c#containers#error-handling#macros

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

  • Критика: реализация не заставляет проверять результат, теряя главное преимущество Maybe.
  • Ассемблер: GCC выдаёт почти тот же код, что и для std::optional, но не возвращает результат в регистре.
  • UB: «пустой» lvalue в случае ошибки вызывает неопределённое поведение; автор полагается на null-sanitizer.
  • Эргономика: предлагают добавить and_then/or_else и сделать тип непрозрачным через макросы.
  • Почему не другой язык: встраиваемые/фирменные проекты часто ограничены только C или ASM.

Going faster than memcpy (squadrick.dev)

Как обогнать memcpy

Профилируя Shadesmar, увидел: при больших (>512 КБ) сообщениях 97 % времени уходит на memcpy между процессной и разделяемой памятью. Решил ускорить копирование.


Разбор memcpy

perf показал:
__memmove_avx_unaligned_erms — это memcpy через memmove, AVX, 32 байта за раз, поддержка не выровненных блоков и ERMS (железный цикл REP MOVSB).

  • memmove выбран, т.к. допускает перекрытие.
  • Для <4 КБ используется SSE2, иначе — REP MOVSB + AVX.
  • Не-временные (NT) инструкции и prefetcht0 уменьшают кэш-промахи.

Способ 1: простой REP MOVSB

void _rep_movsb(void *d, const void *s, size_t n) {
  asm volatile("rep movsb"
               : "=D"(d), "=S"(s), "=c"(n)
               : "0"(d), "1"(s), "2"(n)
               : "memory");
}

Тот же цикл, что и в glibc, но без лишней логики.

by snihalani • 11 августа 2025 г. в 04:59 • 125 points

ОригиналHN

#c#assembly#performance-optimization#memory-management#avx#sse2#inter-process-communication#zero-copy

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

  • Часть выгоды даёт отказ от лишнего копирования: часто данные можно использовать на месте.
  • Несколько участников отмечают, что без контроля кэшей и правильной сериализации бенчмарки теряют смысл.
  • График в конце вызывает сомнения: скачки пропускной способности выглядят неправдоподобно.
  • Для IPC обсуждают zero-copy через размещение данных сразу в shared memory (Iceoryx, Boost.Interprocess, DPDK).
  • Большинство сходится к выводу: для обычных задач лучше довериться стандартному memcpy/std::memcpy, особенно в glibc.

Making reliable distributed systems in the presence of software errors (2003) [pdf] (erlang.org)

%PDF-1.3  
5 0 obj  
<< /Length 737 /Filter /FlateDecode >>  
stream  
xڵUKO0WHc;>@b% eiEд;~4PV\\V=رy|̸0q"e\\%\*H-YD 9Ze2& Őg¨Ҡ3D=>mErX\\/ )=9>8IrA3H³J>\['\[R{89CRԿ8EXDMkUĿKRcRIX|m8vcM"mc-jjb|4ӍYJ+{A=4e16}{gρ\`sa(w 1}@+\\\\pȜc5AKt!}'n\\\[M8pe$ZQdP\`N\]͚Lۛ쨣Hg6GsBxfܱ ?jQ<ߵT{P̯?c)n\[y%̲OprN5~qxvHrz:T:vT7Q Iɩw4fQ+8V\[ %ͅt-x^\]z\]>ä́^ukK!zvXh#O&gCT fqkk5  
endstream  
endobj  

4 0 obj  
<< /Type /Page /Contents 5 0 R /Resources 3 0 R /MediaBox \[0 0 595.276 841.89\] /Parent 12 0 R >>  
endobj  

1 0 obj  
<< /Type /XObject /Subtype /Form /FormType 1 /Matrix \[1 0 0 1 0 0\] /BBox \[0 0 143 73\] /Resources << /ProcSet \[ /PDF \] /ExtGState << /R8 13 0 R /R4 14 0 R >> >> /Length 15 0 R /Filter /FlateDecode >>  
stream  
xYn-;mVzn2#m@sǀ\\R#E?ſ߿GJm>k?kZ\_cߏҾv>K~Rr~>8J?3x>jK\_cxy+e\*o뫔/|篲g=|jv~PUOWW9K<+;><c϶\_kQZag<xk쉳q?(w ֝ Ip\_\`; }T?q\_ugnkQy߹uei<qw;a=pL\]'j\*#@=k5BLv~&4<yyZ:1y!&F|@yQU,8} 7q=6Aݶ\*g95\]\\T7Ky1PO9yb~nw.ڸQ~QzP· DZs«rUC\] 0C!K83{0\\ЮѪ\]C!S s+B/qҺsCrvks6}MYX=HPпC<Ӈs3?3Ϸa!9OM·ΎXŞ8׉|h'湻.3>-C @:k1>@y˹C\*X>p"ۂ @owԩv!X8a5-z-:Ʋyӛ2=;d\*繲9oAkY\_;,,=ᰐ3>R;"8l=ׄ>@>xݞ\\FyV!vY\]1w1ޘML9JJv9&#qzGmr>9E/ϓdྟ\_ov9, \]:$玚"#jyH灈Dsd@f"T~Gf\[tV">ƟWћňq\[qJ\[$V,KD)Q!xg\\ܚtpv7ҘBudm.$0#HKg8G  V5lC/u9 l{ihs9C ;ajB٪> t|^P4vfAu$F0P ʥ.hDA9GyhȑtR 7 ښ^՟66:lĕ׮b<Ү.$Jɻ(Ʋ~hAόBs~Q^|j9Xꂥ.~u:,%MT(zϰL:"(:t4݇/vk|eQq}t%I9jBY9L9\]N& #QK;bggwcYjUh\\PM8-Z%d3x~خ"+,Π£n zo~?^'-BZ}C0^bUq\[$"Jދ鳣&mu(0AP/dm{ę3>rP1-$$2đ7;TƃAg\\R$1#) mh 3~.b8fK'C/x9#\*N,}v89\`sb3\`8 \[S\*7g,v?3?ܷ ʾJ \[A?tSKBs\`y$Xu4ٟ|HdoܥfaDX%39.L=a\*0 #RnI0葡L&u;Ce+JMI\_Z^8tT0wJ#g|q2!3mԹ3"O~e;,D)Rı΅P# \[@y/.ϹG6s:t? eMf,\_B;PAXHG뇫b/+D<cflI.:eLט/l'B-HR \]$agra;{9rrs;UPymX4)iEf㕇qjS(;bedȑLtˆ &>߫HŖ)8퇀ˡeGA 9ݹ.\_U(61,%#t$gC&ʄ+SA)SHݍ\_NE%d̨R΀Zpf ?dAH,͜c\*g(|@'13sdg\]\[Lw"{"hx<.#ob@E4$ i=ǃ࿦4#{,<Y f^a&mVFS$dG2 hAB:Z{Q\_F т1>P$9PA<X{TdMBt=\\{9=CvOtO&E^JwM6'\]!9V|rɟTEyQX/> -|0&u$)i5,yץ}ceCGw\_ړm$)5 |>s"dؒdthjziYF%\\~ˤyKΈ+bK0g\\qtOT%,\*\_\\~9pϊBpCkB+@$\_s}Op^5efJDM\]-n. p)Rd7>Od0 \`J7Dmbs}t|)\`n3h\[V!ueX Cװd\`~>G:EͰ6q@cvKl |6\`ldwBÉo T=Iiw#Ar#tV:ܒA\`;\_J\`樼:4{OSH!H8!c3vavg{rmS<3,r8!UD0^0 1\`\`Nz\`{ſb$R\`wZ5~9kf\*OpZ |=,w$M x%;L%6R\_ :BYqOHRŬ.sw5g+(%h1y6\*kyVES\]@E,;DFxKY1oEnSeKz&Ƙ':rxwEb1\\!^pX\]=}2x7\_^v+\*~EU;A9-IIKTP,c(0v4@,8f qIwy-<@!Yg Վ.S4 2E\]AgG<dXY3<9\_5U>2|kӏ4—^\[Gbڗa@h<)Y&\*bpG'td:\*o}탌Otda 2hyL\\Xdif\\ۀ-ZS#2 &h\\Yo~!7z8 LuÅCP\]k?}C0 F>Jз;,) Qb\[:ӬT\_n@@!=\`5^/Ed/pveU&lB؂>TVD-r3: \]pLE@lvIMd5Q{yœܰ'T~a >x @u\\8qhjqc 7 E \*\]Jʭ\`(2/ W%Wi:=PRB,+$ >;9HR\[,fßfRDʽdmܺ/<yE%<{׌8@Hшxvi}ό\_HEE-"-XJt6m}Fn{~gӼgŌ0~s|kW|b4wH5ﱥמo ڵ7JH@~(abe3Ы-nWNjNR1,dg|LBq+&\*BWiƥԕBJiʲcؽkl➱7&x\\B 5q.9:\]mRף>aFybU{r@׌aR=B~Q2p\\kRgƻ}2aax\`5Vq4\[0?&G'K$\[TѸQv&xZ Y/ឨ {^zVE\\̵Pp\] O;5k-5C+ 1.p{|do@սV,L>{X&ևɓB|CR/\*3>.sMX!G!P(8Z/ o}X< K)!?'Jx-->c TAi\_""GAyK~yw낇35>yR#?Grig\\3  ·0\\,sE 'Ss,GP83nbby@zqy\[@gL>+?O(hX={UL;m dI! FMV70\[w\_fW+E1sxbP,#\[BWpo\*I\[b"򉒽kD,?zoqr{BC-礌\*Y!Ԫ\*96͑k.?Ŕ(%z,MJйL0A:/{<+b<,@W>PmEkxX<bLqSDZMY=êbOÚֈsAe8CTuvYq\]Ѷ7pp 4' =LLo@xĸ?AӝEVXEaԲ5

by vismit2000 • 11 августа 2025 г. в 04:20 • 84 points

ОригиналHN

#erlang#elixir#akka#orleans#distributed-systems#.net#java#ericsson

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

  • Участники вспоминают Джо Армстронга и его ссылки на работу Джима Грея о Tandem.
  • Отмечают, что Erlang/Elixir были технологически опережающими, но не стали массовыми.
  • Идеи Erlang постепенно проникают в .NET и Java через Akka и Orleans.
  • Удивляются, почему Erlang не используется даже в новых коммутаторах Ericsson, хотя был создан для них.
  • Считают, что полное внедрение Erlang угрожает существующим бизнесам и рабочим местам, а рынок предпочитает «хуже, но дешевле».

Vanishing from Hyundai’s data network (techno-fandom.org) 🔥 Горячее 💬 Длинная дискуссия

Kona EV: отключение BlueLink

Цель — исчезнуть из сети Hyundai: не быть отслеженным и не допустить удалённого вмешательства. Tesla, например, требует постоянного онлайна — здесь же я хочу полного контроля. BlueLink умеет дистанционно открывать двери, глушить мотор и многое другое по одному VIN — этого достаточно, чтобы отказаться.

  1. Отказ от активации
    Попросил дилера не подключать BlueLink. Проверил: по VIN никаких данных не внесено. Но машина всё равно лезет в сеть — значит, нужно найти и вырубить встроенный модем.

  2. Микрофон
    Выдернул микрофон в плафоне: разговоры остаются в салоне. Bluetooth- handsfree тоже умер, но мне не жалко.

  3. Съём мультимедийного блока

    • Отковырял декоративную накладку за час — клипсы держат крепко.
    • Открутил 4 винта (два под накладкой, два под длинной панелью до бардачка).
    • Аккуратно выдвинул блок: сзади куча антенных разъёмов LTE, CDMA, GPS и т.д.
  4. Внутри блока
    На отдельной плате — модем Continental (IMEI на этикетке). Корпус не припаян, только закручен. Выпрямил ушки, снял крышку, выдернул модем. SIM-карты нет, скорее eSIM.

Результат: машина больше не звонит в облако Hyundai.

by pilingual • 11 августа 2025 г. в 01:55 • 383 points

ОригиналHN

#hyundai#bluelink#iot#privacy#telemetry#automotive

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

  • Пользователи жалуются: при покупке машины нет нормального согласия на сбор данных, а позже навязывают гигантские T&A, которые никто не читает.
  • Многие опасаются, что современные авто превращаются в «смартфоны на колёсах» с коротким сроком поддержки и принудительным трекингом.
  • Обсуждают способы отключения модемов, антенн, микрофонов и даже целых телематических блоков, чтобы вернуть контроль над машиной.
  • Участники считают, что короткий жизненный цикл ПО — это намеренная «фича», чтобы гнать людей на новые модели.
  • Звучит призыв к регуляции: штрафы за взломы, признание односторонних соглашений недействительными, создание open-source-альтернатив и вики-гайдов.

Nyxt: The Emacs-like web browser (lwn.net)

Nyxt — браузер в духе Emacs, написанный на Common Lisp под BSD-лицензией. Цель — клавиатурное управление и полная расширяемость для разработчиков; Linux — приоритетная платформа.

Проект запущен в 2017 г. Джоном Меркурисом, спонсируется двухчеловечной Atlas. Идея — дать «хороший Emacs-опыт в интернете», но без самого Emacs: технический долг и ограничения плагинов не позволили реализовать задумку иначе. Поддерживаются vi- и CUA-схемы клавиш.

Стабильная ветка 3.12.0 (октябрь 2024) использует WebKitGTK, экспериментально Blink. Обновления безопасности только для последней стабильной версии.

Разрабатывается 4.0: рендер-агностик, WebKitGTK + Electron (из-за производительности и поддержки macOS/Windows). Пока доступен превью-AppImage на Electron; WebKitGTK требует сборки из исходников. Основные изменения — рефакторинг, багфиксы, улучшения UI.

Установка стабильной версии в Linux — Flatpak.

by signa11 • 11 августа 2025 г. в 01:46 • 133 points

ОригиналHN

#common-lisp#webkitgtk#blink#electron#chromium#emacs#linux#macos#windows

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

  • Пользователи восторжены идеей «Emacs для браузера», но ждут стабильной 4.0 и полной совместимости с сайтами.
  • Основные тормозы: отсутствие uBlock Origin/umatrix, странный поиск в модальном окне, проблемы с Electron и сборкой под Guix/Mac.
  • Движок — Chromium через Electron, поэтому sandbox-защита сопоставима с Chrome, но «взлом» вне песочницы пугает.
  • Критики считают проект хакерским, а не продуктовым: мало внимания UX и «обычным» пользователям.
  • Сторонники отвечают: целевая аудитория — энтузиасты Emacs/Luakit, а не массовый рынок.