Кодерская мастерская
142 subscribers
1 photo
14 files
46 links
Блог Данила Пылаева
Download Telegram
История одного вайбкода

CTO подключил к рабочему чату агента на базе OpenClaw, и выдал ему кучу доступов.
OpenClaw - это платформа, на которой можно собирать ии-агентов на любой вкус и цвет, можно дать ему доступ к телеграму, к гитхабу, можно дать ему соцсете и т.п.
В нашем случае у него есть доступ к трекеру задач, которыми можно управлять прямо из тг (менять статусы, создавать, назначать исполнителей).
А также у него есть доступ к к приватным репозиториям на gh, и даже к почте кажется есть доступ.
Невероятно безопасненько (нет), но во-первых это всё добро не под моей ответственностью, а во-вторых пост немного о другом.
К этому агенту подключен и клод-код, которого он запускает где-то там в контейнере, и мне показалось интересной идеей завайбкодить довольно крупную фичу.
Как и полагается вайбкодеру, я прямо в тг-чат скинул задачу, описал более-менее подробно требования и ушёл пить чай.
Сделать нужно было регистрацию через платёж, т.е. юзер приходит в сервис, первым делом оплачивает, при оплате вводит email, по факту успешного платежа мы создаём юзеру аккаунт и добавляем преобретённый цифровой продукт.
Когда юзер возвращается из платёжной системы, мы сразу его авторизовываем, и показываем информацию о купленной услуге. Всё бесшовно, быстро, красиво и приятно.
У такого подхода есть пара узких мест, но маркетологам виднее, сказали, что надо, значит надо.
В общем пока я отдыхал, шайтан-машина минут за 20 накидала функционал, и я полез ревьюить.
Довольно быстро обнаружился маленький нюанс, который мог обернуться большими неприятностями для компании.
Гостевая оплата работает через лендинг, т.е. юзер переходит по особой ссылке с лендинга, попадает в основной продукт, и оттуда сразу в платёжную систему.
Звучит просто, но есть один интересный инвариант: что если пользователь ранее уже бывал в продукте?
В таком случае мы просто добавим ему в аккаунт ещё одну услугу, бизнес-правила это позволяют, но нужно кое-что учесть.
Допустим проектом воспользовался юзер Вася, а у Васи есть друг Петя, которому очень хочется попасть в аккаунт Васи.
Петя заходит на лендинг и переходит в продукт, ему известна Васина почта, он вводит её, оплачивает услугу, и о ужас, попадает в аккаунт Васи!
Происходит это потому, что великолепный клодкод на бэкенде не учёл этот инвариант, и выдаёт токен как новым, так и уже существовавшим пользователям.
Причём код, который учитывает, что юзер мог существовать есть, и фикс встраивается туда парой строчек, но этих самых важных строчек как раз и не хватило.
Тривиальная это уязвимость? Нет. Легко её заметить? Думаю не очень легко, но и не сложно. Вся разница только в том, что программист с несколькими годами опыта заметил, а машина - нет.

Вайбкодьте с осторожностью.
👍2
Сегодня мне приснилось, что все люди — это продукт мышления искусственного интеллекта, который пытается понять, как он был создан, и прокручивает всевозможные сценарии со всеми деталями, ну а человечество, стало быть, живёт в таком сценарии.
👍1
Сломался docker desktop, чинил-чинил, вроде починил, зашёл в трей чтобы найти его иконку, попал на иконку конфиденциальности, и в этот момент меня отвлекли, отошёл буквально секунд на 40, фокус в это время стоял на всё той же иконке, (там было написано про teamtalk), и что же я вдруг услышал?
"Конфиденциальность Кем используется местонахождение:
Windows Web Experience Pack: Widgets provide local weather, news, and more"
То есть висело там уведомление про использование микрофона программой teamtalk, окей, тут вопросов нет, и вдруг на доли секунды появляется какая-то там погода, которой разрешений я не давал никогда.
Причём исчезло очень быстро, если туда не смотреть, никогда не заметишь.
В последней версии дополнения Weather_Plus был обнаружен троян.

По крайней мере версия 10.7 содержит вредоносный код, почитать подробнее можно тут: https://github.com/nvaccess/addon-datastore/issues/9360

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

Что касается именно трояна: Weather_Plus, зачем-то, использует для проигрывания звуков библиотеку bass, хотя проиграть wav можно и средствами nvda, и именно в bass был найден вредонос.
В nvaccess почему-то уверены, что вирус в аддон попал случайно, вот только есть 1 нюанс.
Компания Un4seen, которая разрабатывает bass, подписывает dll-файлы, подпись эту можно легко увидеть и убедиться, что файл легитимный.
Как можно догадаться, bass.dll из wp не подписан, но не подписан он не только в версии 10.7, но и в версии 9.5, которая завалялась у меня на компе.
А ещё я на nvda.ru нашёл версию 6.2 (круто, что они хранят старые версии), и разумеется там bass тоже не оригинальный.
То есть разработчик, преднамеренно или нет, использовал палёный непонятно откуда добытый bass, и было ли в тех версиях второе дно, большой вопрос.
Ну и напоследок: если кому-то показалось, что я чрезмерно субъективен, вот вам строчка из кодовой базы данного поделия, можете сделать вывод сами:
n, n, n, zipCodesList, define_dic, details_dic, defaultZipCode, n, modifiedList, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n = _mainSettingsDialog.GetValue()
👍1
Как-то писал о том, что меня преследуют приколы и баги, связанные со временем, вот ещё один.
import asyncio
import time
async def main():
start_time = time.time()
await asyncio.sleep(10)
print(round(time.time()-start_time, 3))
if __name__ == '__main__':
asyncio.run(main())

Запускаю внутри wsl, и выводится 8.195, иногда чуть больше 10, как положено, а иногда 8 с хвостом.
И пока даже не могу нагуглить, что это вообще такое.
То есть я понимаю, что расходится monotonic с часами реального времени, но какого хрена?
Любители преодоления цифровой недоступности могут попробовать пройти данный увлекательный квест
https://xn--80aatrqejgjg.xn--p1ai/
апкшку не ставил, хз что там, но вряд ли что-то опасное, создано шутки ради всё же.
Подробная история в данных постах и комментах под ними
https://t.me/ntr1_0/2792
https://t.me/ntr1_0/2793
Forwarded from Gozaltech blog (Beqa Gozalishvili)
Всем привет

Много лет я использовал TortoiseGit как основной инструмент для просмотра логов и diff’ов в Git. Во многом это была просто привычка, от которой сложно отказаться.

Но со временем появилась одна проблема - TortoiseGit начал очень сильно тормозить проводник Windows. Открытие контекстного меню могло занимать по 5-10 секунд, и это продолжалось годами. Вчера мне окончательно надоело, и я решил написать собственное решение.

Так появился gittools - небольшой набор инструментов для быстрого и удобного взаимодействия с Git.

Что уже есть:

просмотр логов;
просмотр diff’ов;
список веток;
git-алиасы для быстрого вызова команд.

Команды:

pull-log
log
branches
install-alias
uninstall-alias

После установки алиасов можно использовать:

git pl
git lg
git br

Например:
git pl
сделает pull, а если всё прошло успешно - откроет окно со списком коммитов и изменённых файлов. Нажатие Enter по файлу открывает diff viewer.

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

Решение получилось довольно нишевым и в первую очередь делалось под мои собственные привычки и workflow. Но если оно окажется полезным кому-то ещё - буду только рад.

Пост пишу немного в спешке, так что сильно за ошибки не ругайте :)
Ну что ж, за недельку использования могу с уверенностью сказать, что тулза зачётная, мне очень помогает.
Ранее я делал дополнение dev box, которое проверяло строчку при навигации с помощью нампада, и при обнаружении diff-индикатора, т.е. плюса или минуса в начале строки, издавало звук.
Решение это меня устраивало, и дифы с ним читать стало гораздо удобнее.
Решение же от Беки предоставляет тот же функционал, но с некоторыми удобствами (хотя кому как, но мне удобно).
Во-первых это отдельное окно, и после его открытия терминал не блокируется, т.е. можно продолжать работать с проектом не открывая новую вкладку.
Во-вторых управление курсорными стрелками, не нужно тянуться к нампаду, проще говоря в программе используются обычные нативные списки и текстовые поля.

Ну и самое на мой взгляд прикольное: можно читать километровый диф, бросить на середине, уйти в другое окно, вернуться в инструмент, и курсор останется на том же месте.
Конечно ниша для dev box всё равно остаётся, на серваках что-нибудь быстренько посмотреть или в браузере, но при локальной разработке gittools - топ.
Кстати звуки диф-индикаторов были взяты мной из vscode, слегка обрезаны в начале и в конце, помещены в dev box, затем были взяты Бекой из dev box и зашиты в gittools, так что если я вдруг что-то нарушил, то теперь я не один 🙂
Утилита тут, но лучше брать не из поста, а из комментов к нему, в комментах свежее: https://t.me/gozaltech_blog/87
Делаю себе флешку на все случаи жизни, собираю комплект из nvda, 2023 для семёрки, 2024 для 8.1 и 2026 для всего более свежего.
Портабельная 2023 весит 160 мегабайт, 2024 250 мегабайт, 2026 300 мегабайт.
Боюсь представить, сколько бы весила 2026, если бы фичу распознавания картинок с помощью нейронок не откатили, ещё бы мб 100 было бы сверху.
🔥1
Решил перейти с magisk на kernel su, просетапился успешно, и совершенно неожиданно для себя выяснил, что основные разделы приложения, в которых выдаются root права и настраиваются модули, недоступны, совсем, полностью.
И казалось бы всё, провал, нужно вернуться на magisk, открыть issue и ждать 5 лет, но напоследок, на всякий случай, я сменил стиль ui с miuix на material, и доступность отросла!
Как я понял, miuix это некий фреймворк для создания miui-образных интерфейсов, и конечно круто, что разработчики предоставили альтернативу.
❤1
Вспомнилась давняя история: сижу на физике, решаю задачку, оригинал сейчас не найду, но что-то очень похожее нагуглил:
На расстоянии 1060 м от наблюдателя ударяют молотком по железнодорожному рельсу. Наблюдатель, приложив ухо к рельсу, услышал звук на 3 с раньше, чем звук дошел до него по воздуху. Чему равна скорость звука в стали?
Решение довольно простое, считаем сначала время, которое звук шёл по воздуху, 1060 / 330 = примерно 3.212.
Теперь можем найти время, которое звук шёл по рельсу, 3.212 - 3 = 0.212.
Ну а зная время и расстояние можем найти скорость: 1060 / 0.212 = 5000.
5 км в секунду, и всё замечательно, вот только был 1 нюанс: почему-то, у меня с раннего детства сидит в голове скорость звука в воздухе 340 метров в секунду, а по нашему учебнику было принято брать 330.
Разумеется я взял 340 вместо 330, и казалось бы, что может пойти не так?
1060 / 340 = 3.118
3.118 - 3 = 0.118
1060 / 0.118 = 8983
9 километров в секунду! Вот такая вот математическая приколюха.
Занимаюсь тут вайбкодингом немножко, и могу с гордостью сказать, что сегодня 1:0 в пользу русского языка.
"... падение воркера поднимает исключение вместо дедлока. Убедлюсь, что удалённый send_result больше нигде не используется, и что нет прочих висящих ссылок."
Скрытая опасность git reset --hard
Понял, что самый последний коммит мне не нужен, ну и как уже делал сотни раз, пишу git reset --hard @~1
Казалось бы, что всё окей, но только маленький промах превратил 1 в 21, и сбросил я не 1 коммит а 21 коммит!
В моём случае всё обошлось, но ведь это могла быть не запушенная работа всего рабочего дня.
Конечно можно каким-то хитрым образом найти эти коммиты в глубинах репозитория, ибо git сразу их не удаляет, но в первую секунду факапа об этом не думаешь...
❤1👍1🔥1
С братом от нехрен делать мучаем нейронку на предмет установить апп для симулирования локации на айфон.
Ну то есть я мучаю, копирую или зачитываю инструкции, а он делает.
Я за айфоны не шарю абсолютно, он что-то умеет конечно, но как пользователь, ни как разраб.
Так вот на 15 минуте беседа с иишкой приходит вот к такому ответу: "Извиняюсь — я ошибся: idevice_pair — это десктопная программа (Mac/Windows/Linux, через USB-кабель), а не iOS-приложение. Для вашей задачи «без
компьютера» она не подходит. Забудьте про неё."
Так вот я не понимаю, как у людей с нулевым опытом получается решать хоть сколько-нибудь сложные задачи с помощью ии? Ну он же тупит в свободном плавании, ему капитан нужен, без капитана он неэффективен и опасен.
Да, капитаном может быть другая иишка, но сдаётся мне, что большинство вайбкодеров-самоучек про оркестрацию может и слышали, но сами юзают вряд ли. Даже я пока не погружался в эту тему лол.
В общем ещё раз для себя подтвердил правдивость утверждения, что ии - это множитель скила, и если ты не шаришь, выхлоп будет хорошо если около нулевой, а то может и хуже станет.
Под хуже я понимаю окирпичить телефон например, или открыть бизнес с навайбкоженной инфраструктурой, которую хакнут, сольют данные, и тебя, как владельца, затаскают по судам.
PS: А мои посты про ллм не надоели ещё?
PPS: Я не обсираю ии, ии-агентов, ии-индустрию, вайбкодеров, вайбкодинг и т.п. Я только описываю свои впечатления и свой опыт.
👍2❤1🔥1
На днях навайбкодил расширение для youtube, которое вылечивает кое-какие a11y проблемы, а именно:
1. Невозможность открыть видео из ленты в новой вкладки.
2. Спамные заголовки глав, которые выводятся через aria-live, и скринридер перебивает блогера.
3. Невизуальный вид кнопки паузы, иначе говоря, убирает многословность.
Каждая фича управляется в настройках, по дефолту включено только исправление видео в ленте.
К сожалению не нашёл простого способа распространить расширение, чтобы его можно было легко добавить в браузер, поэтому могу только предложить ставить распакованное в режиме разработчика.

https://github.com/Danstiv/a11yt
👍2❤1🔥1
И так на этой неделе случилось следующее:
1. Сломался wsl.
2. Сломался docker desktop.
3. Сломался несколькими способами claude code.
4. Сломался только что настроенный docker sandbox (штука для изоляции ии-агентов (aka обезьяны с гранатой), хотите пост про неё?)
5. Закончилось место на c, и в edge побились данные некоторых сайтов.
6. Сломался пайплайн резервного копирования в двух местах.
7. Прямо сейчас упал security.ubuntu.com, из-за чего не могу доделать задачку по работе, дедлайн по которой вышел ещё на той неделе )не по моей вине, но так или иначе сроки горят).

И это ведь только среда...
❤2👍1🔥1🐳1
Кодерская мастерская
И так на этой неделе случилось следующее: 1. Сломался wsl. 2. Сломался docker desktop. 3. Сломался несколькими способами claude code. 4. Сломался только что настроенный docker sandbox (штука для изоляции ии-агентов (aka обезьяны с гранатой), хотите пост про…
Шёл третий день допиливания инструментария для изоляции обезьяны с гранатой.
Заканчивается он на следующем: в процессе работы песочницы поднялась куча процессов containerd-shim-nerdbox-v1.exe, которые сожрали почти всю оперативу, в последствии некоторые из процессов завершились, а несколько штук осталось видимо навсегда.
Они существуют в ядре, удерживают за собой около шести гигов оперативы, а при попытки их выбить получаю.
Ошибка: Не удается завершить процесс "containerd-shim-nerdbox-v1.exe" с идентификатором 5820.                                                               
Причина: Ни один из экземпляров этого задания не запущен.

Я решил на них забить, но в какой-то момент демон docker sandbox посчитал файлы этих процессов устаревшими, попытался их удалить и споткнулся о процессы, которые по прежнему существуют и блокируют удаление файла. А из-за этого я не могу запустить песочницу, потому что демон не удалив старые контейнеры не хочет создавать новые.
И может показаться, что ну что-то там в цифровой среде посыпалось, ничего страшного, но во-первых слишком уж много приколов на единицу времени, а во-вторых их слишком много и в мире реальном со мной произошло в этот же период.
На этой неделе:
1. Я встал ногами на диван, чтобы закрыть окно (делал так сотни раз), поскользнулся на подушке, ударился ногой об стол и поцарапал колено.
2. Решил выпить тёплой водички, и обжёг рот кипятком.
3. Пошёл куда-то зачем-то, запнулся левой ногой за поддон с кирпичами, хотя множество раз там ходил, и хоть и не сильно, но отбил большой палец, и тут же через 15 минут полез на второй этаж (там очень крутая лестница), и ударился о последнюю ступеньку большим пальцем уже правой ноги.
4. Набирал воды в бак, он закреплён наверху, а конец шланга надевается на кран внизу, т.е. при подачи воды получается заметное давление. Так вот этот самый шланг немного съехал, и прорвавшаяся струя прилетела прямиком в глаз.
5. Выполнял дачную рутину, а точнее закрывал огурцы на ночь, каким-то образом со всего размаха сел задницей на пластиковое ведро с водой, по итогу отбитая ягодица, полные калоши воды и разломленное нахрен почти на две половины ведро, нормальное такое, литров на 7 наверное.
🤯2❤1👍1🔥1