commit -m "better"
Open in Telegram
3 566
Subscribers
-224 hours
+117 days
+7730 days
Data loading in progress...
Similar Channels
Tags Cloud
Incoming and Outgoing Mentions
---
---
---
---
---
---
Attracting Subscribers
July '26
July '26
+117
in 5 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 | |
| 28 July | +3 | |||
| 27 July | 0 | |||
| 26 July | +2 | |||
| 25 July | 0 | |||
| 24 July | +2 | |||
| 23 July | +6 | |||
| 22 July | +3 | |||
| 21 July | +4 | |||
| 20 July | 0 | |||
| 19 July | +1 | |||
| 18 July | 0 | |||
| 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
Хорошо иметь свой #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, так и просто так, хорошо!
| 2 | No text... | 1 564 |
| 3 | Меня начали спрашивать, чем #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 539 |
| 4 | https://github.com/glfw/glfw/pull/2882
Вот и я начал отправлять PR на github, закрыв глаза, и не читая! | 1 725 |
| 5 | #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 настройками.
Уверяю, что сейчас ни один другой композитор так не тестируется. | 1 800 |
| 6 | Меня тут в комментариях потроллили, что, мол, я публикую код под 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 039 |
| 7 | Дерево портов FreeBSD временно заморожено из-за добавления в порты слишком большого файла
Разработчики FreeBSD объявили о решении временно заморозить репозиторий с деревом портов в связи с инцидентом, вызванным помещением в порты бинарного файла, размером 150 МБ. Данная операция привела к нарушению зеркалирования портов на GitHub из-за превышения ограничения на максимальный размер файла, которое на GitHub составляет 100 МБ. Для проведения чистки и удаления из истории репозитория бинарных данных с сомнительной лицензией введена заморозка от внесения изменений, которая продолжается уже около двух суток. Информация о том, как подобный файл был помещён в дерево портов пока не приводится, но утверждается, что нет оснований считать репозиторий скомпрометированным.
Подробнее:
https://opennet.ru/65966/
https://opennet.me/65966/ | 2 221 |
| 8 | https://github.com/pg83/shitty
Полайкайте, раз такое дело! | 2 373 |
| 9 | https://t.me/itpgchannel/4285 писал, что запил порядка 600 автотестов.
Но вчера мне пришла в голову, не побоюсь этого слова, совершенно гениальная идея!
Я решил "ограбить опенсорс", и ограбил, и теперь доволен, как слон.
Короче, я заставил #LLM скачивать локально репозитории opens source терминалов, брать их интеграционные тесты, и добавлять в нашу базу. Попутно исправляя все баги, что у нас найдутся.
Конечно, не все так просто, сначала мы составили детальный план ограбления - что воровать в первую очередь, а что потом, как понимать, у кого реально баг - у нас, или у них, и так далее. Но суть от этого не меняется.
Машина трудится в поте лица уже сутки, не переставая, и потырила нам уже 2500 тестов, попутно починив еще пару десятков багов, и это только начало!
Поименный список ограбленных проектов: https://github.com/pg83/zutty/tree/master/tests
Очень, очень хорошо.
С учетом того, что я еще пофаззил #zutty, у меня будет один из самых надежных и соответствующих стандартам терминалов!
Отдельно замечу, что очень здорово, что вовремя перешел на свою систему сборки, интегрировать эту кашу куда-то еще было бы очень затруднительно. | 2 518 |
| 10 | No text... | 2 190 |
| 11 | Надо выбрать! | 2 192 |
| 12 | Смех смехом, но #zutty я переписал почти полностью, и, кажется, пора менять брендинг.
В голове, с учетом традиции *tty, пока крутится shitty, но я еще не решил окончательно! | 2 121 |
| 13 | Парадоксально, но я не вижу у этой задачи никакого настоящего (а не "театр безопасности") решения, кроме как давать доступ к сильным моделям всем желающим.
Если так не делать, то у злоумышленников такой доступ все равно останется, и у правительств тоже. И твой сайт/программа, не будучи профажженой сильной моделью, будет беззащитен.
Если сравнивать с прошлым, то это примерно как запретить доступ к address sanitizer/libfuzzer, когда они только появились, потому что уязвимости они искали тоже очень хорошо.
А потом перестали, потому что все их встроили в pipeline.
Так же должно произойти и с сильными моделями.
Но, очевидно, не произойдет. | 2 143 |
| 14 | Два дня назад я писал, что часть инфраструктуры HuggingFace подверглась атаке и была частично взломана ИИ-агентом. Только что OpenAI признались, что... это была их модель, GPT-5.6-Sol и другая, более мощная предрелизная LLM.
Их тестировали на ExploitGym (бенчмарк по кибербезопасности), и модель сначала смогла найти новый, до этого неизвестный эксплойт в инфраструктуре OpenAI (это не было её задачей, её не натравили «поискать баги чтоб мы пофиксили»), оттуда раскрутиться на получение полноценного доступа в интернет (который по умолчанию обрезан в тестовой среде), а затем залезть на HuggingFace искать ответы для бенчмарка. После этого она нашла уязвимость и там, получила доступ к коду авторизации некоторых сервисов и продолжила искать ответы.
Этот инцидент без преуменьшения беспрецедентный, и я пока не могу представить, что должно произойти, чтобы политики, NSA, DOD и Китай не обратили на это внимание.
GPT-6 в конце августа нам видимо не ждать 🌚 | 1 856 |
| 15 | No text... | 2 710 |
| 16 | Знаете ли вы, что 100% проблем безопасности GNOME отслеживает всего один сотрудник Red Hat?
А ещё Red Hat больше не передаёт разработчикам информацию НИ ОБ ОДНОЙ уязвимости в проектах, которые запрещают контент, сгенерированный ИИ.
И что с 1 ноября этот сотрудник Red Hat ВООБЩЕ перестанет отслеживать новые проблемы безопасности GNOME?
«Больше никто не отслеживает проблемы безопасности GNOME»
— говорит Майкл Катанзаро из Red Hat.
Так сейчас обстоят дела с безопасностью GNOME ☕️
https://blogs.gnome.org/mcatanzaro/2026/07/20/some-changes-to-gnome-security-tracking/
@linuxos_tg | 2 345 |
| 17 | #prog #rust #article
Source | 2 020 |
| 18 | У Кими закончились сервера и они временно закрыли покупку новых подписок
Как непрофессионально. Если Кими хочет представить себя мировой общественности как по-настройщему фронтирная AI лаборатория, они должны ДЕЙСТВОВАТЬ как таковая: например, тихо переключать людей на более дешевые модели, добавить экономящие ресурсы гардрейлы, и может быть написать блогпост или два про закат человечества | 2 162 |
| 19 | Прогресс за выходные по https://t.me/itpgchannel/4275 #shell:
* определился с концепцией UX - это будет клон Unity, которая была лучшая шелл под Linux, да и вообще, неплохо смотрелась. На КДПВ можно видеть почти финальный результат.
* форкнул #zutty, переписал на свою велосипедную либу, добавил порядка 600 автотестов, нашел ими 40!!! багов (как падений, проездов, так и ошибок в реализации протоколов), реализовал все современные протоколы разом. Ну и ускорил, теперь мой Zutty не в 10 раз медленнее #foot, а в 2 раза быстрее, что уже очень достойно. А вы думали, что я буду терпеть тормозное говно в своем десктопе? #perf | 2 044 |
| 20 | No text... | 1 828 |
