Cododel.dev | Александр
98 subscribers
472 photos
62 videos
7 files
200 links
Alexander Cododel. Full Stack Web Dev since 2019.

📍 Канал: мысли и проекты
📍 Чат: @cododel_chat
📍 Связь: @cododel

🔗 https://cododel.dev
Download Telegram
Я веду не новостной канал, а скорее личный блог, пишу что нравится
Новости мне ненравятся естественно)

Но вот этот комментарий забавный 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
💔1
Cododel.dev | Александр
Кстати нейросети хоть и прижились уже, делают классные иллюстрации Но такие простые ошибки, в основном в тексте - приходится править руками в фотошопе) Пример до и после прикрепляю.
Пока в Photoshop не работает генеративное заполнение (Generative fill) в РФ, в opensource редакторе Krita есть неплохое решение на базе Stable Diffusion

Даже превью функционала есть

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

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

До смотрим в прикрпленном сообщении, результат в прикрепленном изображении
1
Cododel.dev | Александр
Пока в Photoshop не работает генеративное заполнение (Generative fill) в РФ, в opensource редакторе Krita есть неплохое решение на базе Stable Diffusion Даже превью функционала есть При этом не обязательно иметь мощную видеокарту. Можно воспользоваться онлайн…
Кстати если видеокарта есть - легко настраивается всё (но можно и на процессоре)

Но на моем MacBook air с M1 - генерация дико медленная,о все же работает если чай сходить попить пока инференс проиходит 😁
За то без лимитов и без интернета
Forwarded from (НЕ)Экономист! | Cododel Crypto | Alexander
Я нашел условия дропа HamsterCombat

Сейчас во вкладке дропа только подключения кошелька

Но в исходниках бота, которые легко посмотреть в консоли разработчиков, есть уже еще 4 задачки:
· Пригласить не менее 5 друзей
· Достигнуть профита в час не менее 10к
· Достигнуть не менее 4 уровня (Platinum)
· Подписаться на телеграм канал

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

На данный момент это файл
https://hamsterkombatgame.io/_nuxt/airdrop.C16j_n93.js
👍1
🔗 Chainable async Python Queue Runner

Честно - мне сложно по-русски коротко назвать утилити)
Это инструмент очень сильной абстракции, использовать только в редких случаях!

Если в проекте удобно сначала собрать очередь задач, а только затем их последовательно запустить, а у меня такая ситуация и случилась, то предлагаю этот Gist

• Создаем объект QueueRunner
• Затем через метод .task - передаем в него аасинхронную функцию
• Если нужны аргументы, то чейним, как в некоторых конструкциях JavaScript следующий метод .args, и в него передаем требуемые аргменты для функции "Как есть".
Этот метод запишет в класс QueueTask аргументы для последней добавленной задачи
• Чтобы добавить новую задачу - достаточно так же чейном вызвать снова ту же последовательность, либо на объекте, сохраненном в переменной

Так к примеру - можно вынести крупные части логики, которая должна исполняться последовательно в разные файлы, у меня в проекте это Actions
Потом их собрать в нужном порядке в QueueRunner, при этом, между каждым вызовом метода можно выполнить доп логику основного потока логики.

И под конец вызвать асинхронный метод .run, который выполнит все сохраненные задачи последовательно.

Это позволяет построить достаточно сильную абстракцию, пихать где попало не стоит)
Но если у вас более 500 строк кода, в котором можно выделить явные последовательные блоки логики, при том некоторые из них условные (выполняются при соблюдении условий в операторе if), то вполне может пригодиться данная фишка)

🖼️ Gist
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Media is too big
VIEW IN TELEGRAM
Попробую для начала себя в переводах, прежде чем делать свои ролики
Нужно поработать с голосом, привыкнуть, сложно с нуля и без опыта делать качественно 🤫
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1
Умеете работать с CORS?
Anonymous Poll
43%
Да
57%
Не сталкивался
0%
Не работаю с WEB
Типизированные Датаклассы-модели данных в TypeScript

Появились сложности в работе с Playwright на Python
А в JS api - есть подходящие экспериментальные функции для работы с запросами
Да и с аснихронностью работать мне гораздо приятнее в JS

И первое же, с чем я столкнулся - в Python есть шикарнейшая библиотека Pydantic, а на крайний случай, для работы с данным - предустановленные dataclasses
В JS же такого счастья нет, в виде удобного определения моделей данных, с возможностью добавить к ним методы и вычисляемые значения

Я перепробовал около 10 вариантов, привлек ChatGPT 4o
Ничего не вышло, но я вынес из этого много мыслей и с небольшим перерывом смог реализовать довольно неплохой интерфейс
Самая главная проблема во всех, даже самых крутых интерфейсах - наршуение принципа DRY, так как приходилось определять и properties у модели, и задавать еще дополнительно схему входных данных.

Сейчас достаточно только properties указать и конструктор, в typescript это можно сделать без повторений, через shorthand constructor. (см скрин)
Реализовано это через реверс метода конструктора, чтобы получить список именованных аргументов, а вторая функция извлекает из объекта значения в нужном порядке и переает их в конструктор.
Решение довольно неплохое, ведь нужна имплементация **kwargs из python, чтобы пробросить объект как именованные аргументы функции, но такого в JS нет, хотя решение все же нашлось)

Например, получая данные по api - мы просто передаем их в fromJSON или fromObject метод:

async function getRandomProxy() {
const res = await this._api.get(`/proxy/random`);
return Proxy.fromObject(res.data);
}


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

Реализовал систему кеширования, пока не универсальную, под мой проект.
Для разработки ботов для сайтов - пушка!

В моем кейсе кол-во запросов к реальному серверу сократилось с 80 до 10
А скорость загрузки с 8 сек до 0.8 сек (в 10 раз!) 🤫

Кроме ускорения загрузки страниц, как и скорости работы бота - еще более мощный бенефит в следующем:
Если сайт жестко ограничивает кол-во запросов, то мы их и не будем отправлять.
Так в моем кейсе на одну загрузку страницы тратится 50 запросов через playwright, тк часть кеширования урезана.
При работе через обычный браузер - это 16 запросов.
Сайт же ограничивает кол-во запросов до 200шт за 5 минут, после чего блокирует до окончания этого периода.
В таком режиме бот будет работать медленнее человека...

А с такой системой кеширования, бот не то-что просто будет работать быстрее, за счет мгновенного выполнения всех действий на странице, так еще и в 1.5 раза больше действий имеет право делать, не выходя из лимитов!

Я рад, мне нравится, надеюсь я правильно определил bottleneck, и теперь работа попрёт 😈

Подключается она всего в две строки сейчас, в будущем интерфейс будет изменен, естественно:

const browser = await chromium.launch(launchOptions);
const context = await browser.newContext();
const page = await context.newPage();

const cache = new PWCache(page);
await cache.run();

await page.goto('https://example.com');
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Cododel.dev | Александр
Самописная система кеширования запросов Playwright и ее польза Реализовал систему кеширования, пока не универсальную, под мой проект. Для разработки ботов для сайтов - пушка! В моем кейсе кол-во запросов к реальному серверу сократилось с 80 до 10 А скорость…
Получилось портировать на Python, возможно переписывать на TypeScript буду потом проект, вся логика на Python уже готова, быстрее портировать было.

Плюс для решения капчи буду подключать мою, обученную выше, нейросеть.
Сейчас просто ставлю на паузу и вручную ее решаю)
А делать это точно на python нужно, сейчас это будет сделать проще, чем с nodejs

Как у Python - куча приятных фишек, так и под TS...
👍1
Начал еще один проект 💻

На скрине промежуточный этап с таблицей, а в ней данные, с которыми будет вестись работа.

Кстати стек для меня полностью новый (FullStack Typescript):
• NextJS (React) + PrimeReact
• Drizzle (Для работы с базой данных)
• CCXT (Для работы с крипто биржами)
Интерпретатор и пакетный менеджер сейчас использую bun, с ним оказалось в таких проектах не всё гладко, но легко решаемо
А для работы с базой данных перебрал вручную около 5 библиотек, полноценно их развернув и опробовав в работе.
Среди которых запомнил были Knex, Prisma, MicroORM, TypeORM, но остановился на Drizzle, его концепция мне зашла больше всего, но могу отметить еще интересное решение Kysely

Если наберем 15 реакций на посте - расскажу подробнее о каждой, их отличиях и нюансах.
(Будет сложно, но можно привлечь друзей) 🤫

Угадает кто-то, что запланировано?
Подсказка: рабочее название "CArbitr"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31💩1
🔴 Прошел стрим по Python, где я сделал форк библиотеки MailTm

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

В форке улучшил функционал, добавил типизацию, опубликовал его в PyPi и подключил к реальному проекту!

Для самых любопытных в конце поста ссылка на запись стрима 🫡
В целом получилось неплохо, если будет время нарежу его в видос (но это не точно, тк неплохо бы переозвучить)

В чем суть библиотеки?
Бывают проекты по автоматизации работы с сайтами, где требуется регистрировать новые аккаунты.
В таком случае супер удобно использовать временную почту. Для этого можно просто взять существующую библиотеку MailTm.
Но сервис, с которым она работает, дает возможность повторного использования почт, которые мы регистрируем. А бибиотека НЕТ!
Я был конечно удивлен... Особенно тем, что она лежит на официальном сайт, рядом с библиотекой для TypeScript, в которой весь этот функционал, внимание... ЕСТЬ!
Думал уже переписать свой проект с python на typescript, и даже начал это, как можно было заметить в предыдущих постах.
Сегодня же я принял решение переписать саму библиотеку, сделав форк и опубликовав её в официальные репозитории PyPi, чтобы можно было легко подключить и использовать в любом проекте. Ну и поделиться ей со всеми, естественно)

Что вышло
Теперь после регистрации аккаунта - можно сохранить не только адрес почты, но и пароль. Функция регистрации сама выдает pydantic модель Credentials с полями address и password
А затем, можно переиспользовать полученные данные без регистрации, сразу на новом методе login, вместо register
Плюс меня бесило отсутствие хоть каких подсказок при работе с библиотекой, например получая message в хэндлере для listener, который передается в start - мы получаем просто, какой-то dict...
Сейчас это pydantic модель Message, с довольно конкретным набором полей. Ну и плюсом будет, что ее можно обратно конвертировать в dict, просто вызвав message.model_dump() (из функционала pydantic)
Второе, чего мне не хватало, это остановка выполнения кода, пока не придет новое письмо, например с кодом подтверждения почты.
Приходилось реализовать класс-обертку для прошлой библиотеки, где все же реализовать удалось такой функционал, но в каждом проекте делать это не особо хотелось бы)
Теперь просто на нашем объекте класса Email достаточно вызвать wait_for_new_message(), и он будет ждать, пока не придет новое письмо, после чего вернет как результат модель Message и продолжится выполнение скрипта)

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

📹YouTube
🖼️ PyPi
🖼️ Github
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Forwarded from (НЕ)Экономист! | Cododel Crypto | Alexander
Media is too big
VIEW IN TELEGRAM
🗳️ WSCarbitr - мой новый проект мониторинга для межбиржевого арбитража

Я закончил первый MVP этап проекта, и залил в продакшн
Сейчас он непрерывно обновляет в базе данных курсы всех доступных торговых пар с 18 бирж
После каждого обновления проверяет, есть ли положительные спреды
Если есть спреды, то телеграм бот вышлет мне в чат эти пары, со ссылкой на веб интерфейс, который на видео

На проект ушло три рабочих дня, с учетом изучения полностью нового стека.
FullStack Typescript - Nextjs + Nestjs + DrizzleORM

Из плюсов могу выделить жирнющий - ну очень легко разворачиватся продакшн 🤩
Использовал pm2 для запуска nest и next, а для базы данных PostgreSQL - DockerCompose
Please open Telegram to view this post
VIEW IN TELEGRAM
1
В этот раз подход серьёзный, лично столкнулся пока лишь с замедлением YouTube
😢1
Forwarded from ВИЛСАКОМ РЕД / WYLSACOM RED (Matvey Filkin)
Media is too big
VIEW IN TELEGRAM
NVIDIA обучает человекоподобных роботов с помощью Apple Vision Pro

На выставке по компьютерной графике SIGGRAPH NVIDIA показала эталонный процесс тренировки ИИ роботов-гуманоидов с помощью телеопераций. В этом методе обучения нейросети машина копирует движения оператора в режиме реального времени, а оцифровка движений происходит именно за счёт Apple Vision Pro.

Полученные данные разработчики переносят в приложение NVIDIA Isaac Sim, где моделируют движения в виртуальной среде. Затем в микросервисе MimicGen NIM они генерируют синтетические данные о движениях на основе записанных телеопераций с Apple Vision Pro. Полученные синтетические наборы используют для расширения базы данных ИИ робота-гуманоида.

Для обучения ИИ человекоподобного робота требуется колоссальное количество данных и внушительные финансы. Собственно гарнитура Apple необходима NVIDIA, так как решает сразу две больших проблемы: во-первых, шлем позволяет генерировать много данных с помощью телеопераций, а во-вторых, делает это относительно дёшево.
Все таки нашли нормальное применение для Apple Vision PRO 😃

До этого все что придумали было довольно сомнительным
Please open Telegram to view this post
VIEW IN TELEGRAM