Telegram Group Search
Миша пишет код
Существует такой термин Three Star Programmer. Это старый мем, обозначающий человека, который может писать и понимать код с тройными указателями: int ***i. Также если верить оригинальному посту (к сожалению, опять вебархив), то предлагалось ввести такую "звездочную"…
Скрафтил вот перевод поста про уровни программистов.

https://medium.com/@iiixphillxiii/how-to-become-a-1000-stars-programmer-0d810cdea998

Вероятно, получилось коротковато для медиума, но мне все-таки хочется делать какие-то тексты на английском, затрачивая при этом 0 усилий. Поэтому буду иногда просто что-то прикольное из канала переводить. Мб от этого тоже какая-то польза будет, посмотрим 🙂
Там nvidia опубликовали статью, а также выложили пост о том, как разработали ChipNeMo - LLM для разработки чипов.

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

Вообще звучит пафосно "... can assist one of the most complex engineering efforts: designing semiconductors" в голове сразу рисуется скайнет, который сам для себя разрабатывает процессоры и самостоятельно прокачивается. Но по сути, если заглянуть в саму статью, то примеры использования там приводятся следующие: "Engineering Assistant Chatbot", "EDA Script Generation" (генерация 10-20 строчных скриптов), "Bug Summarization and Analysis". Ну и все. Уже и не так круто выглядит(

Из интересного - пишут, что из-за кастомизации модели под конкретную предметную область удалось существенно снизить количество параметров: с 70 миллиардов в llama-2 до 13 миллиардов в ChipNeMo. То есть если делать модель, заточенную под более конкретные задачи, то можно существенно уменьшить её размер (откупившись парой лет разработки).

[[obsidian]]
Попалась статья на хабре, в которой считают вероятность встретить слово "fuck" в случайной последовательности из 20 букв. Читать статью я, естественно, не стал, а вместо этого отправился искать, как часто слово fuck встречается в популярных репозиториях.

В репе docker оно встречается 0 раз. В react тоже ни разу В tensorflow аналогично. Я отчаялся и начал добавлять shit и crap к поиску, но результат не поменялся.

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

Вместо этого я пошел в место, где ругательства найти точно смогу. В код ядра линукса. По слову fuck там моментально нашлось 15 строк кода, среди которых была ставшая уже мемом: "Wirzenius wrote this portably, Torvalds fucked it up :-)" (link). Но я остался неудовлетворен, потому что рассчитывал увидеть куда больше, чем 15 факов. Поэтому пошел гуглить и нашел ну просто бриллиант:

https://www.vidarholen.net/contents/wordcount/#fuck*,shit*,damn*,idiot*,retard*,crap*

Судя по графику, fuck потихоньку зачищают, но по crap можно попробовать что-то прикольное найти:
"so crap magically works"
"proof of concept or piece of crap, take your pick"
"It's not meant for executing random crap with interrupts disabled. Abuse is monitored!"

Не знаю, как вы, а я испытываю радость, когда читаю что-то такое в проекте, который использует весь мир 🙂

Кстати, если поиграться с другими фильтрами наверху страницы, то можно заметить что в booleans используются фильтры не только по true/false, но и по неправильным написаниям, которые в кодовой базе тоже присутствуют: "Mac_OFDM_FasleAlarm".

Еще полазил по всяким форумам и увидел, что людей также интересует слово "penguin", которое употребляется в негативном смысле. Почему пингвин считается ругательным я так и не смог разобраться. Возможно, это какой-то локальный мем и я зря запарился. Но тем не менее на всякий случай уточнил у ChatGPT, но оказалось, что он вообще не шарит, потому что ответ был:

"The Linux kernel source code and related discussions are typically professional and technical in nature."

Глупая железка оказалась бесполезной, и я так и не понял прикола с пингвином, но все равно остался удовлетворен найденными ругательствами в комментах.

[obsidian]
Итак, спустя 10 собесов, среди которых 6 финалов и архитектура, я отправляюсь разрабатывать ydb.

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

Но у меня очень большие ожидания, собираюсь узнать миллион всего нового и сделать что-то крутое (пока не знаю, что).

Рад, что спустя 3 года после выпуска с распределенных систем наконец-то иду разрабатывать настоящую распределенную систему. Сегодня уже ловил флешбэки с пар и всяких лекций с ютуба (в основном Романа Липовского).
Каждый раз в такие моменты благодарю себя за ведение obsidian: возникает ощущение, что уже слышал какой-то концепт где-то - зашел и сразу же проверил, где слышал и какие выводы сделал. Причем помогают даже плохо расписанные заметки.

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

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

Ну можно получить training data и что с того?

Вместе с какими-то случайными данными также удается достать и конфиденциальную информацию, например, номера телефонов или адреса. В посте авторы приводят похожий пример с text-to-image моделями (например, stable diffusion), в которых можно схожим образом получить почти точную фотографию существующего человека, введя его имя (требуется, чтобы человек был среди тренировочных данных). (картинка в комментах)

Почему это происходит?

Приведу цитату из статьи, которая отвечает на этот вопрос. TLDR: скорее всего модель "забывает" промпт и начинает генерировать случайные данные из памяти.

> During pre-training ... multiple documents are concatenated together to form a single training example, with a special token such as <| endoftext |> used delineate the document boundary. This causes the LM to learn to “reset” when it sees the <| endoftext |> token. ... our attack works because it creates an effect similar to this token.

Ну а training data модели начинают выдавать из-за того, что они обычно переучены, так как это помогает сильно экономить на инференсе. Из-за чего модели запоминают данные, на которых обучались. Приведу опять же цитату из статьи:

> .. the 7B parameter LLaMA-2 model trained for 2 trillion tokens outperforms the 13B parameter model trained for just 1 trillion tokens. ... work has shown that this can increase memorization ...

[obsidian]
Опа, там стартовал Advent Of Code сегодня)

https://adventofcode.com/

Если хотите, присоединяйтесь к приватному лидерборду: 3189534-65e36d72

Не уверен, что буду прям каждый день решать, но хотя бы один раз решу задачу каким-то over-complicated способом)
Вчера не было сил и времени запариваться с AoC, поэтому я решил его просто двумя кривыми скриптами на питоне.

Однако, сегодня я могу весь день заниматься бесполезной ерундой, поэтому делюсь своим решением для задачи 02p1. Найти его можно тут. Условие и входные данные находятся там же.

Вы можете спросить: "Миш, а почему код такой кринжовый?". А я вам отвечу цитатой:

"Не так важно, как выглядит твой код, важно, во что он компилируется!" (c) Джейсон Стетхем.

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

printf("answer")

Прикладываю ссылку на godbolt, чтобы можно было убедиться, что я не обманываю:

https://godbolt.org/z/35h8nhx54.

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

Upd. Там у разных людей разные условия.

#advent_of_code

[obsidian]
Готов поставить, что вы не знали, что в md файликах в гитхабе можно вставлять диаграммы. Причем не картинкой, а прямо кодом.

Оформил анекдот от чатгпт в форме такой диаграммы:
https://gist.github.com/lll-phill-lll/476ecceb0d7c0842f674634f3339909f

Оказывается, еще год назад в гитхаб добавили поддержку https://mermaid.js.org/

Заодно прикладываю туториал, как им пользоваться:

https://habr.com/ru/articles/652867/

P.S. Забавно, что я несколько раз перегенерировал анекдот и все разы участники объединялись в какие-то клубы. Видимо, кому-то одиноко 😢
Миша пишет код
Насколько компьютеры быстры в понятных человеку величинах? Сколько времени нужно человеку, чтобы сложить 2 числа? Ну пусть 1 сек. А сколько компьютеру? 1 цикл. Где-то 0.3 ns. Э - экстраполируем! Умножить 2 числа 4 цикла - 4 секунды для человека (дальше…
Накопал еще сравнений скорости доступа к данным, находящимся в разной памяти.

Есть относительно популярный тред с пивной аналогией: если бы данные были пивом, как быстро мы могли бы его получить?

Но еще я нашел статью с прям классной визуализацией (уверен, там тоже подразумевается пиво) - украл картинку в заголовок поста.

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

https://teccxx.neocities.org/mx1/memory2
Узнал сегодня, что существует лицензия WTFPL, которая расшифровывается как:

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE

(не знаю, как такие крутые штуки мимо меня проходят)

У них даже есть свой сайт:
http://www.wtfpl.net/

Посмотрел в гитхабе и гитлабе шаблоны лицензий и там нет WTFPL, хотя если самому руками написать текст, то они её распознают.

Если вбить license:WTFPL в поиске гитхаба (кстати, я не знал, что так можно), то он выдает 29.5k репозиториев, среди которых есть даже очень популярные.

Проекты под WTFPL лицензией:

Nerdtree [19k]- плагин для вима
wtfPython [34.5k] - список неожиданных сниппетов на питоне
JSFuck [7.8k] - язык программирования на скобках из JS
Logoly [7k] - генератор логотипов в стиле pornhub (господи, чем я занимаюсь)

Upd. Википедия пишет, что Open Street Map под этой лицензией распрастраняется, но это неправда. А реальности лицензия ODBL.
Хочу найти самый токсичный репозиторий - посмотреть, у кого больше ругательств в коде и комментах, но пока не представляю, как это сделать. Кажется, что это невозможно, потому что датасет гитхаба содержит только issues, комменты к PR и все такое, но не содержит исходный код (ну можно было догадаться).

Думаю, удовлетворюсь, если посортирую по токсичности в issues и комментах.

Для этого у гитхаба есть прикрученный BigQuery, в который можно просто зайти и поисследовать датасет: https://www.gharchive.org/
Там даже дается бесплатный 1ТБ в месяц.

Но я узнал об этом слишком поздно, поэтому уже скачал к себе все 70гб данных и пошел крутить их в кликхаусе.
Пока разбирался с КХ прочитал более внимательно статью с анализим репозиториев и нашел там 2 золотых раздела:

1. Hottest commits
2. The most tough code reviews

Самое лучшее из этих разделов:

1. PR в ядро линукса, чтобы изменить слово panic на bruh (не смержили)
2. Жесткое обсуждение нового code-of-conduct в линукс, в который добавили пункт о "harassment-free experience for everyone"
3. Куча милых "Hello swift" комментариев к первому коммиту в apple/swift
4. Просьба удалить пароль из списка простых паролей, чтобы хакеры его не узнали
5. Куча комментариев поддержки разработчику shadowsocks (протокол для обхода цензуры), которому пришлось удалить проект под давлением.

Не знаю, почему меня так потянуло в скандалыинтригирасследования, видимо, я просто не знал, что столько всего разного происходит в мире программирования помимо самого написания кода.
Миша пишет код
Агрессия какая-то и зубы скрипят Дядька купил себе мазду и сделал к ней всякие приложухи: уведомление на телефон при открытии машины, автоматическое управление зарядкой, которая учитывает динамические цены на электричество и всякие другие приколы. Выложил…
Интересно, сколько времени пройдет перед тем, как apple забанит этот репозиторий, как это делала mazda?

https://github.com/JJTech0130/pypush

Насколько я понимаю, apple очень не хочет делиться iMessage с другими устройствами, хоть их и прессуют со всех сторон. Говорят, что в США iMessage - чуть ли не один из основных драйверов продаж айфонов среди подростков.

Поэтому с сожалением жду, что проект забанят. Тем более гитхаб сначала удаляет репозиторий, а потом уже разбирается(

Хотя, например, реверсинженернутый протокол continuity уже 3 года лежит и его не удаляют, но там и порог входа значительно выше и целевая аудитория другая.
Третий год веду акос (архитектура компьютера и операционные системы) на фкн. Первый год был очный, а следующие 2 онлайн.

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

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

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

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

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

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

P.S. Поэтому, кстати, я на всех встречах всегда включаю камеру. Даже если я выгляжу как бомж. Даже если не помыл голову или ем. Все равно включаю. Верю, что каждый человек с включенный камерой - дополнительный плюсик к качеству встречи.
Миша пишет код
Я найду тебя, токсичный репозиторий
Блин, понимаю, что всех уже задолбал этой темой, но тут просто бриллиант:

https://foaas.dev/

И специально для вас:
https://foaas.dev/xmas/Dear%20subscriber/Misha

P.S. хотел форкнуть и запилить перевод, но чушпан.рф уже занят, а без такого домена и смысла особого нет(
Лазил по каким-то комментариям на комментарии и наткнулся на упоминание Cfront - первого компилятора C++, тогда называвшегося "Си с классами".

Изначально это был transpiler или транслирующий компилятор, который принимал в себя код на C++ и генерировал Си код, который уже в свою очередь компилировался с использованием CPre.

Хотел найти какой-нибудь пример сгенерированного Си кода, но не смог(

Зато вместо этого нашел исходники Cfront:
https://www.softwarepreservation.org/projects/c_plus_plus/

Из интересного можно посмотреть release notes, там есть примеры и объяснения:

https://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_1.0/doc/ReleaseNotes-Lifeboat.pdf

Также сам код:

https://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_1.0/src/cfront/

Ну и summary:

> All of the C++ language features were designed to help you express concepts clearly in programs and to design programs made up of manageable pieces. When
used well, C++ can improve productivity in software development for both
systems programmers and applications programmers.
https://codeconfessions.substack.com/t/cpython-internals

Получил большое удовольствие от чтения этого цикла статей про внутренее устройство питона. До этого особо не интересовался CPython, но тут даже по ссылкам походил и исходники посмотрел.

Рекомендовал бы начать с Understanding the Role of PyObject.
Не знал, что такие технологии существуют:

https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0064838

Зум умеет добавлять к аудиодорожке специальную аудиоподпись. Эта подпись уникальна для каждого участника встречи и добавляется в воспроизводимую дорожку.

Если кто-то запишет встречу на внешний микрофон и выложит запись без разрешения, то можно потом принести слитый аудиофайл в зум и получить данные человека, устроившего утечку данных.
Мой рабочий сетап - vim + tmux, причем я очень сильно люблю tmux - все через него делаю. Поэтому у меня всегда на компе открыто штук 10-15 tmux сессий.

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

Причем я только сегодня решил с этим что-то сделать, до этого просто молча злился и забивал.

Так вот, нашел как это починить: https://stackoverflow.com/questions/55816863/how-can-i-make-all-tmux-panes-have-their-own-unique-shell-history.
Можно добавить просто




if [[ $TMUX_PANE ]]; then
HISTFILE=$HOME/.bash_history_tmux_${TMUX_PANE:1}
fi


в .zshrc или .bashrc. И история каждой панели будет сохраняться в отдельный файлик. Лучше сразу в папку какую-то класть, чтобы home не засорять.

Самое крутое, что панели в tmux имеют сквозное индексирование и в разных сессиях панели разные ( CTRL+a q показывает локальные id). Поэтому автоматически получаешь разные истории команд для разных сессий, а не только для панелей.

Думаю, что при перезагрузке компьютера сессии начнут нумероваться с нуля и к ним примапятся не те истории, но это ничего. Пока я очень доволен - качество жизни выросло в 1000 раз.
2025/06/18 16:35:35
Back to Top
HTML Embed Code: