en
Feedback
commit -m "better"

commit -m "better"

Open in Telegram
3 567
Subscribers
No data24 hours
+87 days
+7530 days
Attracting Subscribers
July '26
July '26
+125
in 6 channels
June '26
+96
in 2 channels
Get PRO
May '26
+105
in 4 channels
Get PRO
April '26
+160
in 4 channels
Get PRO
March '26
+229
in 3 channels
Get PRO
February '26
+83
in 2 channels
Get PRO
January '26
+94
in 2 channels
Get PRO
December '25
+102
in 1 channels
Get PRO
November '25
+80
in 6 channels
Get PRO
October '25
+83
in 4 channels
Get PRO
September '25
+94
in 4 channels
Get PRO
August '25
+90
in 6 channels
Get PRO
July '25
+91
in 3 channels
Get PRO
June '25
+86
in 4 channels
Get PRO
May '25
+95
in 4 channels
Get PRO
April '25
+129
in 4 channels
Get PRO
March '25
+134
in 7 channels
Get PRO
February '25
+93
in 4 channels
Get PRO
January '25
+114
in 7 channels
Get PRO
December '24
+102
in 1 channels
Get PRO
November '24
+211
in 4 channels
Get PRO
October '24
+169
in 3 channels
Get PRO
September '24
+135
in 1 channels
Get PRO
August '24
+94
in 7 channels
Get PRO
July '24
+68
in 2 channels
Get PRO
June '24
+69
in 2 channels
Get PRO
May '24
+61
in 1 channels
Get PRO
April '24
+118
in 2 channels
Get PRO
March '24
+237
in 2 channels
Get PRO
February '24
+89
in 3 channels
Get PRO
January '24
+98
in 2 channels
Get PRO
December '23
+97
in 1 channels
Get PRO
November '23
+33
in 0 channels
Get PRO
October '23
+39
in 1 channels
Get PRO
September '23
+36
in 0 channels
Get PRO
August '23
+49
in 0 channels
Get PRO
July '23
+56
in 0 channels
Get PRO
June '23
+25
in 0 channels
Get PRO
May '23
+26
in 0 channels
Get PRO
April '23
+25
in 0 channels
Get PRO
March '23
+44
in 0 channels
Get PRO
February '23
+32
in 0 channels
Get PRO
January '23
+39
in 0 channels
Get PRO
December '22
+29
in 0 channels
Get PRO
November '22
+30
in 0 channels
Get PRO
October '22
+40
in 0 channels
Get PRO
September '22
+60
in 0 channels
Get PRO
August '22
+32
in 0 channels
Get PRO
July '22
+78
in 0 channels
Get PRO
June '22
+63
in 0 channels
Get PRO
May '22
+33
in 0 channels
Get PRO
April '22
+41
in 0 channels
Get PRO
March '22
+103
in 0 channels
Get PRO
February '22
+71
in 0 channels
Get PRO
January '22
+192
in 0 channels
Get PRO
December '21
+44
in 0 channels
Get PRO
November '21
+39
in 0 channels
Get PRO
October '21
+120
in 0 channels
Get PRO
September '21
+256
in 0 channels
Date
Subscriber Growth
Mentions
Channels
30 July+5
29 July+3
28 July+3
27 July0
26 July+2
25 July0
24 July+2
23 July+6
22 July+3
21 July+4
20 July0
19 July+1
18 July0
17 July+8
16 July+12
15 July+3
14 July+1
13 July+4
12 July+1
11 July+2
10 July+9
09 July+17
08 July+12
07 July+8
06 July+2
05 July+1
04 July+1
03 July+2
02 July+7
01 July+6
Channel Posts
Еще короткая история про #perf в #shitty. Обнаружил, что cache hit в систему damage довольно большой. Если совсем просто, это значит, что клиенты постоянно перезатирают одни и те же row/rect в рамках одного кадра. Надо было быстро это дело загейтить (https://t.me/itpgchannel/4192). Если медленно - то профита нет, потому что сырой проход по тому же damage сам по себе довольно дешевый. Как? Решение от меня - splitMix64(u16 x, u16 y, u16 w, u16 h). splitMix64 - это волшебная функция, она бере 64 бита, и сильно их перемешивает: * подходит для прямого использования в хештаблице, без дополнительного перемешивания, % 2^N не дают degenerate case. * биективна - то есть, из ее значения однозначно восстанавливается вход. Благодаря этим свойствам, можно использовать простой и примитивный direct mapped cache, и, в итоге, вся процедура получается очень быстрой. Небольшой профит за бесплатно. #LLM такую схему не предложила, кстати.

2
Еще короткая история про #perf в #shitty. Обнаружил, что cache hit в систему damage довольно большой. Если совсем просто, это значит, что клиенты постоянно перезатирают одни и те же row/rect в рамках одного кадра. Надо было быстро это дело загейтить (https://t.me/itpgchannel/4192).
1
3
Обновил кстати https://github.com/pg83/shitty/blob/master/CONTRIBUTING.md, утащу cюда: AI-assisted contributions The architecture of this project is designed by a human. Every change is reviewed by a human, and performance work is also profiled and evaluated by a human. The implementation itself, however, is currently written entirely by large language models. The project author believes that, with capable human direction, modern LLMs write code faster than people and introduce fewer bugs. AI-assisted contributions are therefore preferred, but they must have a human actively in the loop. That human must define the problem, direct the design, inspect the result, understand the tests and profiles, and take responsibility for the contribution. Unsupervised, unreviewed AI output is AI slop. It is not useful to this project and will not be accepted. The preferred models are Fable and Sol at their highest capability settings. Opus is also acceptable. The project prefers community contributions in roughly this order: * Excellent issue reports, preferably developed with a capable AI. They should contain a precise problem statement and reproduction. Ideally they also include a failing test that will pass once the feature or fix is implemented. * Pull requests produced by an AI with an actively involved human in the loop. * Conventional human-written code.
1 390
4
https://github.com/pg83/shitty/releases/tag/1 У #shitty случился первый релиз. Я человек незатейливый, и версии релизов у меня очень простые - 1, 2, 3, etc. В релизе: * поддержка Wayland + Vulkan, и macos + Metal - везде "родной" рендеринг. Я пробовал MoltenVK, но нет, на нем pixel perfect без тормозов не сделать. Pixel perfect - это значит, что вы не увидите мерцания ни при каких действиях с окном терминала, и он вам не покажет промежуточных результатов. По модулю того, насколько это вообще возможно для эмулятора терминала - местами в протоколе полная асинхронность, и полное отсутствие fence, только набор эвристик. * готовый бинарь для macos. В сжатом виде - 700 килобайт, в разжатом - 2 мегабайта, в 2 раза лучше, чем у ближайшего конкурента. Сказывается почти полное отсутствие внешних зависимостей, даже платформенная либа своя, не говоря уже про #std. В целом, я закончил все взрывные работы, и дальше ожидаю инкрементальное развитие. Из интересного - оказалось, что на macos невозможно повторить полностью инкрементальный рендеринг https://t.me/itpgchannel/4302, потому что в metal явно написано, что буфер, который вернули из swapchain, может быть поврежден (и он таки поврежден почти всегда). Поэтому приходится делать лишнюю копию.
1 433
5
Какая же красота - меня эти мразоты автоматизировать хотят, а вот чтобы автоматизировали их - не очень!
1 619
6
OpenAI и около тысячи сотрудников других лабораторий, включая Google, Anthropic, META, подписали письмо «Pacing the Frontier»
OpenAI и около тысячи сотрудников других лабораторий, включая Google, Anthropic, META, подписали письмо «Pacing the Frontier» Вот его содержание: Искусственный интеллект может помочь создать кардинально лучшее будущее, однако такой исход не гарантирован. Ведущие мировые ИИ-компании полагают, что они могут быть близки к автоматизации исследований в области искусственного интеллекта. Трудно точно предсказать, насколько это ускорит прогресс ИИ, но существует реальный риск того, что развитие его возможностей будет происходить стремительнее, чем наша способность понимать и контролировать создаваемые системы. Чтобы реализовать потенциал ИИ, отрасли, государству и обществу в целом может потребоваться возможность выиграть время для устранения возникающих рисков, разработки мер безопасности и усиления контроля. Однако каждая компания — как и каждая страна — находится под жестким конкурентным давлением, не позволяющим в одностороннем порядке замедлять эти темпы. При этом сегодня в мире отсутствуют технические и управленческие инструменты для целенаправленного регулирования темпов глобального прогресса в разработке передового ИИ. Опираясь на уже ведущуюся работу по мониторингу релизов передовых ИИ-моделей мы призываем правительство США: - поддержать международные усилия по разработке технических и управленческих инструментов, необходимых для целенаправленного регулирования темпов развития на передовых рубежах автоматизированной разработки ИИ (конец) В дополнение к новости ждём 1-го августа — к этой дате США должны определиться, что такое «фронтир система» и какие модели к ним относятся. Это важно потому, что к фронтир системам будут применять новые правила оценки моделей перед релизом (как минимум, государство должно получить доступ за 30 дней до публичного выпуска).
1 352
7
Хорошо иметь свой #shell Помню пришел как-то в niri с багом, у меня не работал plug and play для usb клавиатуры и мышки, https://github.com/niri-wm/niri/issues/2523, меня зачем-то послали проверять поведение в KDE. Баг у меня был в niri, а не в KDE, и проверять я тогда не пошел. Сейчас я полагаю, что niri в этом месте использовал udev для plug and play, а его у меня как раз и не было. В моем shell plug and play работает как и с udev, так и просто так, хорошо!
1 665
8
No text...
1 775
9
Меня начали спрашивать, чем #shitty лучше, чем другие терминалы. Чем другие терминалы же, ответ очевидный. Он очень быстрый #perf. Это, знаете ли, очень сложно доказуемое утверждение, потому что устоявшихся практик тетирования терминалов нет, и, хотя мои time head -c 200000000 /dev/random и time head -c 200000000 /dev/zero дают первое неплохое приближение для оценки batch пропускной способности конвейера терминала, этого мало. Но я могу рассказать про свои подходы, про конкурентов, и показать, почему они быстрее, чем у конкурентов! Автору терминала, с точки зрения #perf, на самом деле, надо принять не так уж много решений: * как будет устроена канва (хранилище ячеек терминала), на это непосредственно влияет то, как будет храниться история * какие операции разрешены с канвой терминальному слою (спойлер - чем крупнее, тем лучше, только семантические операции типа "сделай скролл", никаких операций над отдельными ячейками) * damage tracking. Довольно простая штука, суть в том, как трекать изменившиеся части экрана, как их батчевать, и как доставлять дельту до рендера (и позже до композитора) * модель рендеринга Сегодня расскажу про модель damage и модель рендеринга у меня, и сравню с основными конкурентами. В целом, damage у меня, это per screen row (не путать с canvas row): ```struct RowDamage { Epoch* epoch; u16 start; u16 end; u16 count; };``` Эпоха - это основной damage tracker device. Это bitset с эпохой (по сути, bitset с операцией clear() за O(1)). Через него проходит весь damage - от отдельных ячеек, до строк, и до прямоугольников. Базово ячейка просто проверяется по bitset, row - по всем ячейкам, rect - по всем row. Это довольно дорого, поэтому проделан ряд оптимизаций: 1) если ячейка miss, то она записывается в epoch, и делается ++count. Тем самым, count - это число поврежденных ячеек в строке. Далее, start = min(start, cellX), end = max(end, cellX + 1). То есть, [start, end) - это диапазаон строки, покрывающий все поврежденные ячейки. Есть два офигенных инварианта: если end - start == count, то ячейки покрыли диапазон без дыр (полный диапазон). И если count == width, то ячейка покрыта целиком 2) оптимизация для row - если row попадает в полный диапазон [start, end), то damage полностью пропускается. Ну или проще - cell damage идет только на то, что вне текущего полного диапазона 3) оптимизация для rect - полностью пропускаем полностью поврежденные строки, и полностью пропускаем rect, если число поврежденных строк == height Совместно это все позволяет иметь мне cell perfect damage очень дешево. Что у конкурентов: * alacritty - только [start, end), дешево и сердито, две дырки по краям строки - полный рендер этой строки. Спойлер - для alacritty это аще пофиг, хехе * kitty/ghostty - бит damage на строку, и bit damage на страницу для ghostty * foot - вместо отдельного хранения damage, у него бит dirty прямо в ячейке канвы. Это неплохо, но хуже, чем у меня, потому что повреждение - это не свойство канвы, а экрана, и когда ты меняешь две строки местами на канве, foot должен потом еще поменять назад damage bit. Так же у него есть dirty bit на строку. В общем, у всех модель damage слабее, чем у меня. Далее идет модель доставки повреждений до рендера. По сути, это два процесса: 1) надо передать набор (x,y) координат с повреждениями 2) надо для поврежденных координат построить отображение canva cell -> gpu cell. Не такая простая задача, учитывая, что canva cell содержит много всякой ебалы, помимо символа и цвета - например, гиперлинки. В общем, довольно всратый процесс. Что у меня: * я объединяю построчный damage в непрерывные спаны (конечно с оптимизациями, если знаю, что start - end уже непрерывный), получаю вектор спанов с повреждениями * далее у меня есть процесс, которого нет ни в одном другом эмуляторе терминала - я разбиваю спаны на спаны размером по 32 ячейки, и кеширую отображение canvasSpan[32] -> gpuSpan[32]. Для этого у меня есть очень быстрый блочный LRU кеш, и очень быстрая хешфункция. Там cache rate до 80%, и это здорово ускоряет рендер. Что у конкурентов? * foot - рендер получает канву, идет по ней, пропуская целые поврежденные строки, и сразу рендерит ячейку по canvas cell в shm память предыдущего кадра. В целом, неплохо, но очевидно хуже, чем у меня. И, надо сказать, что #foot тут лучший из конкурентов, потому что! * alacritty/kitty/ghostty по сути, роняют эту информацию на пол, и рендерят целый кадр! Такие дела. Так как они рендерят целый кадр, то дальше про них говорить бессмысленно, но вот про одну свою оптимизацию именно рендера я расскажу! Задача очень простая - реюзать предыдущие кадры, и рисовать на них только дельту. Решил я ее так: * свопчейн о трех кадрах. Кадр готов - отдается композитору, композитор потом вернет его назад, НЕ ПОВРЕДИВ. * глобальный damage log, туда я пишу все спаны всех случившихся damage. * красивый трюк, до которого никто не додумался - каждый кадр в swapchain имеет привязку к позиции в этом логе. То есть, я всегда для кадра, который вернул мне композитор, могу рассчитать дельту с "сейчас", и аккуратно нарисовать ее поверх старого кадра, и дальше отправить композитору. Уф. Чуваки, у меня реально самая сильная доставка повреждений end to end, и когда вы видите, что на экране мигает курсор, вы можете быть уверены, что я перерисовал ровно одну ячейку на старом кадре, а не нарисовал кадр целиком. Такие дела.
1 718
10
https://github.com/glfw/glfw/pull/2882 Вот и я начал отправлять PR на github, закрыв глаза, и не читая!
1 838
11
#imgui #shell Запилил с фабулой очень крутую штуку, AFAIK сейчас так никто не делает, и делать не умеет. TL;DR - эмулятор KMS в userspace. Современные wayland композиторы тестируют почти end to end - от потока команд до реальной картинки, которую должен увидеть пользователь. За одним маленьким исключением - никто не знает, что на самом деле пользователь увидит, потому что то, что он увидит, определяет не только картинка, но и настройки самого output (встроенный экран, внешний монитор, и так далее) - sdr/hdr, цветовое пространство, яркость, разрешение и частота, vsync, edid, и так далее, и так далее. Вот, насколько я знаю, современные композиторы (как и я раньше) тестируются в headless mode - до рендеринга картинки в bitmap, а дальше все. Но это очень важная часть - она включает в себя подключение и отключение output на лету, смену его режимов, failure injection, на все это надо уметь реагировать корректно. Чтобы это тестировать end to end, мы с фабулой запилили эмулятор этой state machine - https://github.com/pg83/imway/blob/main/kms_fake.cpp Фактически, перехватили парочку сисколлов, https://github.com/pg83/imway/blob/main/kms_fake.cpp#L1209-L1251, и дали тестовой машинерии управлять этой state machine. Конечно, сразу нашли кучу багов, связанных c connect/disconnect, и прочим HDR настройками. Уверяю, что сейчас ни один другой композитор так не тестируется.
2 003
12
Меня тут в комментариях потроллили, что, мол, я публикую код под GPL3, хотя сильно против этого #GNU. Дело в том, что #zutty исходно идет под GPL3, что делает его вирусным продуктом. Я в ответ потроллил коллег, что переписываю #zutty с GPL на MIT - https://github.com/pg83/shitty/blob/master/CONTRIBUTING.md Ох как порвало копилефтоблядей в комментариях, от "один раз замазался - уже назад дороги нет", до "так нельзя!". Удивительно, как любители швабодки одновременно любят тырить код под свободными лицензиями типа MIT/BSD в свой копилефтомир, и при этом совершенно не переносят того, что их код тоже можно "отмыть" от вируса под названием GPL. Так как такое переписывание требует каких-то телодвижений, мне пришлось разметить весь (новый!) код плашкой: /* * Copyright (C) 2026 Shitty team * MIT licensed * See the file LICENSE.MIT for the full license. */ Сижу и ржу, не назвать ли это The Shittiest, всегда хотел стать фронтменом панкрок группы!
2 180
13
Дерево портов FreeBSD временно заморожено из-за добавления в порты слишком большого файла Разработчики FreeBSD объявили о решении временно заморозить репозиторий с деревом портов в связи с инцидентом, вызванным помещением в порты бинарного файла, размером 150 МБ. Данная операция привела к нарушению зеркалирования портов на GitHub из-за превышения ограничения на максимальный размер файла, которое на GitHub составляет 100 МБ. Для проведения чистки и удаления из истории репозитория бинарных данных с сомнительной лицензией введена заморозка от внесения изменений, которая продолжается уже около двух суток. Информация о том, как подобный файл был помещён в дерево портов пока не приводится, но утверждается, что нет оснований считать репозиторий скомпрометированным. Подробнее: https://opennet.ru/65966/ https://opennet.me/65966/
2 338
14
https://github.com/pg83/shitty Полайкайте, раз такое дело!
2 583
15
https://t.me/itpgchannel/4285 писал, что запил порядка 600 автотестов. Но вчера мне пришла в голову, не побоюсь этого слова, совершенно гениальная идея! Я решил "ограбить опенсорс", и ограбил, и теперь доволен, как слон. Короче, я заставил #LLM скачивать локально репозитории opens source терминалов, брать их интеграционные тесты, и добавлять в нашу базу. Попутно исправляя все баги, что у нас найдутся. Конечно, не все так просто, сначала мы составили детальный план ограбления - что воровать в первую очередь, а что потом, как понимать, у кого реально баг - у нас, или у них, и так далее. Но суть от этого не меняется. Машина трудится в поте лица уже сутки, не переставая, и потырила нам уже 2500 тестов, попутно починив еще пару десятков багов, и это только начало! Поименный список ограбленных проектов: https://github.com/pg83/zutty/tree/master/tests Очень, очень хорошо. С учетом того, что я еще пофаззил #zutty, у меня будет один из самых надежных и соответствующих стандартам терминалов! Отдельно замечу, что очень здорово, что вовремя перешел на свою систему сборки, интегрировать эту кашу куда-то еще было бы очень затруднительно.
2 808
16
No text...
2 514
17
Надо выбрать!
2 531
18
Смех смехом, но #zutty я переписал почти полностью, и, кажется, пора менять брендинг. В голове, с учетом традиции *tty, пока крутится shitty, но я еще не решил окончательно!
2 503
19
Парадоксально, но я не вижу у этой задачи никакого настоящего (а не "театр безопасности") решения, кроме как давать доступ к сильным моделям всем желающим. Если так не делать, то у злоумышленников такой доступ все равно останется, и у правительств тоже. И твой сайт/программа, не будучи профажженой сильной моделью, будет беззащитен. Если сравнивать с прошлым, то это примерно как запретить доступ к address sanitizer/libfuzzer, когда они только появились, потому что уязвимости они искали тоже очень хорошо. А потом перестали, потому что все их встроили в pipeline. Так же должно произойти и с сильными моделями. Но, очевидно, не произойдет.
2 624
20
Два дня назад я писал, что часть инфраструктуры HuggingFace подверглась атаке и была частично взломана ИИ-агентом. Только что
Два дня назад я писал, что часть инфраструктуры HuggingFace подверглась атаке и была частично взломана ИИ-агентом. Только что OpenAI признались, что... это была их модель, GPT-5.6-Sol и другая, более мощная предрелизная LLM. Их тестировали на ExploitGym (бенчмарк по кибербезопасности), и модель сначала смогла найти новый, до этого неизвестный эксплойт в инфраструктуре OpenAI (это не было её задачей, её не натравили «поискать баги чтоб мы пофиксили»), оттуда раскрутиться на получение полноценного доступа в интернет (который по умолчанию обрезан в тестовой среде), а затем залезть на HuggingFace искать ответы для бенчмарка. После этого она нашла уязвимость и там, получила доступ к коду авторизации некоторых сервисов и продолжила искать ответы. Этот инцидент без преуменьшения беспрецедентный, и я пока не могу представить, что должно произойти, чтобы политики, NSA, DOD и Китай не обратили на это внимание. GPT-6 в конце августа нам видимо не ждать 🌚
1 923