Если кто занимается frontend разработкой, или как-то с ней связан - накидал простой старткит для NuxtJs с Radix-Vue и TailwindCSS на борту, с Bun
И написал bash скрипт, который самостоятельно создает ветку gh-pages, копирует в нее все зависимости, вносит нужные изменения в nuxt.config.ts, билдит проект, удаляет из ветки все лишнее и пушит ветку.
При этом используя существующую директорию node_modules между ветками, не делая с ней никаких операций, что сильно ускоряет процесс, исключая работу с десятками тысяч файлов в ней.
Но если она отсутствует, то автоматом установит все зависимости в master ветке и переиспользует ее в в новой ветке.
После деплоя вернет все как было и переключится обратно на master ветку.
Штука удобная для демо в разработке продукта или деплоя статического сайта)
Подойдет так же для лендингов, так как для Github Pages можно установить собственный домен, хостинг в таком случае будет бесплатным.
Плюс это бесшовное обновление со сбросом кешей
На самом деле это просто делается, не на каждом проекте пригодится, но ознакомиться рекомендую
После запуска скрипта потребуется только единоразово указать ветку gh-pages в настройках репозитория, во вкладке Pages
И при желании можно автоматизировать деплой и отказаться от ветки gh-pages
Нужно лишь немного переписать скрипт, убрав работу с ветками, а затем добавить конфиг Github Actions с bun образом
Тогда при пуше в ветку master - через 40 секунд деплой будет окончен
🔗 Репозиторий
🔗 Github Pages DEMO
🔗 Github Gist со скриптом
Как работает скрипт деплоя рассказал в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1
Media is too big
VIEW IN TELEGRAM
Взлом Hamster Kombat 🐹
Что ещё поковырять?👽
Что ещё поковырять?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Рубрика «Колхоз» 👨🌾
Роутер старенький, но из топ сегмента, с 5GHz WiFi
А ещё стал перегреваться, жарковато в +30°C
Так что пришлось заменить термоинтерфейс (термопрокладки) и пассивное охлаждение сделать активным
Через понижающий модуль подцепил 12в кулер на вход 19в после кнопки включения.
В корпус не вместилось, но стоит он у меня далеко, да и хрен с ним, главное чтобы не вырубался от перегрева🤡
Роутер старенький, но из топ сегмента, с 5GHz WiFi
А ещё стал перегреваться, жарковато в +30°C
Так что пришлось заменить термоинтерфейс (термопрокладки) и пассивное охлаждение сделать активным
Через понижающий модуль подцепил 12в кулер на вход 19в после кнопки включения.
В корпус не вместилось, но стоит он у меня далеко, да и хрен с ним, главное чтобы не вырубался от перегрева
Кайф когда в городе есть магазин радиодеталей, съездил, купил
Раньше жил в небольшом городе, нудно было ждать минимум две недели с Китая, либо час в одну сторону в соседний город
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Cododel.dev | Александр
YOLOv10 обучена на 705 изображениях, аугментированных до 1701 изображений, размером в 640x640
На скрине результат ее работы с моего скрипта
Изображения выборкой из собранного датасета более чем в 75 000 штук
Для теста выбраны рандомные
На инференс одного изображения уходит 0.3-1ms прямо на процессоре ноута с M1, без подключения тензорных ядер и графических вычислений
Есть препроцессинг еще 90-130ms, пока разбираюсь
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Cododel.dev | Александр
А еще провел тест, который пока мало чего значит
Модель была обучена на изображениях 640x640
И естественно на них она отрабатывает гораздо лучше
Осталось обучить на датасете с оригинальными размерами, и провести такой же тест
Меня интересует вопрос - влияет ли разрешение изображения при обучении и инференсе на точность инференса?
Апскейл со 150x60 до 640x640 думаю точно дает выигрыш в точности, но лишь из-за большего масштаба, думаю
Информации, условно, больше в картинке
Хз пока...
Но именно на 150x60 результаты были точно такие же и до апскейла и увеличения датасета почти в 3 раза)
Модель была обучена на изображениях 640x640
И естественно на них она отрабатывает гораздо лучше
Осталось обучить на датасете с оригинальными размерами, и провести такой же тест
Меня интересует вопрос - влияет ли разрешение изображения при обучении и инференсе на точность инференса?
Апскейл со 150x60 до 640x640 думаю точно дает выигрыш в точности, но лишь из-за большего масштаба, думаю
Информации, условно, больше в картинке
Хз пока...
Но именно на 150x60 результаты были точно такие же и до апскейла и увеличения датасета почти в 3 раза)
Cododel.dev | Александр
Я там ещё реакт подучил немного 🤫
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Cododel.dev | Александр
А еще провел тест, который пока мало чего значит Модель была обучена на изображениях 640x640 И естественно на них она отрабатывает гораздо лучше Осталось обучить на датасете с оригинальными размерами, и провести такой же тест Меня интересует вопрос - влияет…
Тесты проводить оказалось ненужно
Достаточно было почитать документацию)
Там явно сказано, что есть параметр
И все изображения, при обучении модели, будут приведены к указанным размерам
Так же в документации к predict - есть аналогичный пункт
Хотя в примере выше - точность инференса страдает, если не отресайзить предварительно изображение
Думаю имеет место быть кейс, когда из cv2 объекта изображения вытягиваются и используются реальные размеры изображения
Тогда на инференсе будут расхождения
Благо в этом случае соотношение сторон не играет роли
Достаточно получить на выходе максимально точно определенные классы с их координатами, чтобы по x координате отсортировать
И считай готово, значение распознано, дальше используем по назначению 😀
UPD:
Хотя, судя по всему не совсем то, что я подумал происходит:
With respect to YOLOv8, the 'imgsz' parameter during model training allows for flexible input sizes. When set to a specific size, such as 640, the model will resize input images so their largest dimension is 640 pixels while maintaining the original aspect ratio.
Он ресайз делает по большей стороне, сохраняя соотношение сторон изображения,
Так что закончу обучение balanced модели, на ней проведу тесты, и уже вернусь с ответом на вопрос "На сколько сильно влияет на точность инференса ресайз изображения до 640x640"
Достаточно было почитать документацию)
Там явно сказано, что есть параметр
imgsz, по дефолту имеющее значение 640И все изображения, при обучении модели, будут приведены к указанным размерам
Argument | Default | Description
imgsz | 640 | Target image size for training. All images are resized to this dimension before being fed into the model. Affects model accuracy and computational complexity.
Так же в документации к predict - есть аналогичный пункт
Argument | Type | Default | Description
imgsz | int or tuple | 640 | Defines the image size for inference. Can be a single integer 640 for square resizing or a (height, width) tuple. Proper sizing can improve detection accuracy and processing speed.
Хотя в примере выше - точность инференса страдает, если не отресайзить предварительно изображение
Думаю имеет место быть кейс, когда из cv2 объекта изображения вытягиваются и используются реальные размеры изображения
Тогда на инференсе будут расхождения
Благо в этом случае соотношение сторон не играет роли
Достаточно получить на выходе максимально точно определенные классы с их координатами, чтобы по x координате отсортировать
И считай готово, значение распознано, дальше используем по назначению 😀
UPD:
Хотя, судя по всему не совсем то, что я подумал происходит:
With respect to YOLOv8, the 'imgsz' parameter during model training allows for flexible input sizes. When set to a specific size, such as 640, the model will resize input images so their largest dimension is 640 pixels while maintaining the original aspect ratio.
Он ресайз делает по большей стороне, сохраняя соотношение сторон изображения,
Так что закончу обучение balanced модели, на ней проведу тесты, и уже вернусь с ответом на вопрос "На сколько сильно влияет на точность инференса ресайз изображения до 640x640"
Media is too big
VIEW IN TELEGRAM
Делать такие скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Знакомы со Stable Diffusion?
Anonymous Poll
45%
Не-а
9%
Видел в Youtube
18%
Сидел рядом
9%
Пробовал установить
18%
Устанавливал и игрался
0%
Использую в работе
Я тут gpt4all скачал, сделал выгрузку всех постов из @WSCryptal (мой второй канал), загрузил в LocalDocs
И попросил модель LLama 3 сделать компиляцию всех мной допущенных ошибок в торговле
Так как второй канал - по большей части дневник, в нем более 500 постов, с кучей откровенных мыслей, в целом он неплохо справился)
Ответ тут
У меня есть некоторый интерес к нейросетям сейчас, и могу писать о них подробнее, и если будут реакции и просмотры - перевести это дело в видео формат
Все в ваших руках!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🤯1👌1
Всю ночь пилил проект на Python, понадобилась база данных с админкой
Естественно, не думая, я выбрал Django, который я всегда споминал с теплотой
В целом задачу свою он выполняет, но UX из него выходит дико деревянный
А DjangoRestFramework - не менее дервянен
И вообще у меня ощущение, что популярность его сильно упала, и развитие замедлилось
И документация не модная 😝
Сравнивать мне есть с чем: Laravel, PhilamentPHP, Directus, Strapi, Appwrite, Supabase, ApiPlatform
И это только в бэкенде, в плюс минус схожих проектах по назначению, про фронт, и другие библиотеки молчу вообще...
Походу решу прикрутить laravel в python проект...
(Хотя идея неплохая, вполне адекватная, если делать сервисную архитекутуру)
Но сначала гляну, не вышел ли очередной "Убивец Django"
На reddit нашел совет, что стоит рассмотреть связку FastAPI + NiceGUI или react
А вот связку моделей с админ панелью пока не вижу, как Django, FilamentPHP, ApiPlatform, Strapi, Directus или хотя бы Supabase, Appwrite
Please open Telegram to view this post
VIEW IN TELEGRAM
Еще один Баг в FilamentPHP: Не обновляется значение поля DateTimeField
Если потребуется подтянуть данные в форму, без перезагрузки страницы - пользуемся примером:
Этот пример показывает, что можно у поля добавить кнопку, при нажатии на которую оно будет изменено и сразу подтянется из базы данных, отобразится в форме и автоматом сохранится.
Но!
В случае с DateTime - должна происходить сериализация объекта в строку нужного формата.
Этого не происходит, данные в базе сохраняются, с ними можно работать, но само значение в поле становится пустым, это баг.
Я за реверсил логику refreshFormData, разобрался, как форматируется этот тип данных при классической работе с формой.
Пока не пофиксят, после изменения данных достаточно вручную отформатировать значение и подставить в форму, используя инъекцию компонента формы.
В данном случае нужно заменить:
На следующую конструкцию:
Таким образом мы вручную заменяем значение в форме на акуальное, с корректным форматированием, при этом учитываем, что значение может быть null, чтобы избежать непредвиденных ошибок.
Готово!
А еще записал подробное видео, с рзабором этой фишки на реальном проекте!
▶️ YouTube
Если потребуется подтянуть данные в форму, без перезагрузки страницы - пользуемся примером:
Forms\Components\DateTimePicker::make('broken_at')
->prefixAction(
Action::make('updateLocation')
->icon('heroicon-c-arrow-path')
->action(function (Proxy $record, EditProxy $livewire, DateTimePicker $component) {
$record->recheck(update: true);
$livewire->refreshFormData(['broken_at']);
})
)
Этот пример показывает, что можно у поля добавить кнопку, при нажатии на которую оно будет изменено и сразу подтянется из базы данных, отобразится в форме и автоматом сохранится.
Но!
В случае с DateTime - должна происходить сериализация объекта в строку нужного формата.
Этого не происходит, данные в базе сохраняются, с ними можно работать, но само значение в поле становится пустым, это баг.
Я за реверсил логику refreshFormData, разобрался, как форматируется этот тип данных при классической работе с формой.
Пока не пофиксят, после изменения данных достаточно вручную отформатировать значение и подставить в форму, используя инъекцию компонента формы.
В данном случае нужно заменить:
$livewire->refreshFormData(['broken_at']);
На следующую конструкцию:
if ($record->broken_at == null) {
$livewire->data['broken_at'] = null;
} else {
$livewire->data['broken_at'] = $record->broken_at->format($component->getFormat());
}
Таким образом мы вручную заменяем значение в форме на акуальное, с корректным форматированием, при этом учитываем, что значение может быть null, чтобы избежать непредвиденных ошибок.
Готово!
А еще записал подробное видео, с рзабором этой фишки на реальном проекте!
▶️ YouTube
👍1
Cododel.dev | Александр
Я собрался, сел, и записал видео отличиями Django от FilamentPHP, на который я в итоге переписал все что было, и даже больше.
Ушло 17 минут, одним дублем, и при этом поживее, менее скомканно чем в прошлом видосе.
Сделал превью для видоса, написал вступительный пост с описанием, загрузил на YouTube
Но не покажу!!
А дело в том, что я не успел добавить всплывашку с ссылкой на прошлый видос, чтобы не рассказывать заново про то, как сделать поля с action, который обновляет информацию в базе, и сразу отображает в форме
Как обнаружилпроебавшийся поврежденный звук!
В итоге видос почти без звука, стабильно, на протяжении всего хронометража...
Мне лень снова все вспоминать, презаписывать, эмоции уже не те будут.
Так что я еще раз собрал себя в кулак, и...
Написал сценарий и текст!🤣
Видос откладывается на несколько дней точно теперь.
Я доработаю сценарий с текстом, подготовлюсь, подстригусь, запишу видос, возможно переозвучу на монтаже.
Попробую выдать качество. И со звуком не подведу.
Чем больше будет тут реакций, тем быстрее и качественнее выпущу сравнение Django и Laravel + FilamentPHP
Фреймворков на "Модном Python" и "Мертвом PHP"...
Когда увидите - прошу еще раз задать себе вопрос: "чем плох PHP, за исключением работы на потоках"?
(Работу на потоках кстати исправляет FrankenPHP, позволяя даже компилировать проект в бинарник, но пока не стабилен)
И комменты пишем, хватит прохлаждаться, высказываем мнение
Ушло 17 минут, одним дублем, и при этом поживее, менее скомканно чем в прошлом видосе.
Сделал превью для видоса, написал вступительный пост с описанием, загрузил на YouTube
Но не покажу!!
А дело в том, что я не успел добавить всплывашку с ссылкой на прошлый видос, чтобы не рассказывать заново про то, как сделать поля с action, который обновляет информацию в базе, и сразу отображает в форме
Как обнаружил
В итоге видос почти без звука, стабильно, на протяжении всего хронометража...
Мне лень снова все вспоминать, презаписывать, эмоции уже не те будут.
Так что я еще раз собрал себя в кулак, и...
Написал сценарий и текст!
Видос откладывается на несколько дней точно теперь.
Я доработаю сценарий с текстом, подготовлюсь, подстригусь, запишу видос, возможно переозвучу на монтаже.
Попробую выдать качество. И со звуком не подведу.
Честно - я зачем-то по воздуху подцепил iPhone для записи звука в видос, так как мне не понравился звук с AirPods, хотя и прошки, а звук на записи говно😒
И какого-то черта забыл о проводных EarPods, с шикарнейшим микрофоном! Подцепил и поехали, казалось бы...
Но нет, надо было айфон подцепить, находясь в городе, где стоят глушилки на BlueTooth👍
Чем больше будет тут реакций, тем быстрее и качественнее выпущу сравнение Django и Laravel + FilamentPHP
Фреймворков на "Модном Python" и "Мертвом PHP"...
Когда увидите - прошу еще раз задать себе вопрос: "чем плох PHP, за исключением работы на потоках"?
(Работу на потоках кстати исправляет FrankenPHP, позволяя даже компилировать проект в бинарник, но пока не стабилен)
И комменты пишем, хватит прохлаждаться, высказываем мнение
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Cododel.dev | Александр
Я собрался, сел, и записал видео отличиями Django от FilamentPHP, на который я в итоге переписал все что было, и даже больше. Ушло 17 минут, одним дублем, и при этом поживее, менее скомканно чем в прошлом видосе. Сделал превью для видоса, написал вступительный…
Я немного поработал еще, и сценарий уже не актуален 😆
Теперь различий в два раза больше с джанго, в том числе по удобству и скорости поднятия новых сервисов, и работы с ними (Очереди, Веб сокеты, Импорты, и тп)
Плюс LiveWire подвспомнить пришлось, пока настраивал вебсокеты, спасибо индусу🙏
А LiveWire это пушка, из которой легко можно застрелить Django😊
Не только по причине удобства самого LW, а потому что в Filament любой компонент можно сделать за пару минут.
Да еще и вебсокеты дико удобно интегрированы сюда, по мимо серверных функций, что само по себе очень удобно
Хоть и в плане разработки полноценного фронтенда - сомнительно на сервере весь клиентский код исполнять, а для админки вполне сойдет)
Теперь различий в два раза больше с джанго, в том числе по удобству и скорости поднятия новых сервисов, и работы с ними (Очереди, Веб сокеты, Импорты, и тп)
Плюс LiveWire подвспомнить пришлось, пока настраивал вебсокеты, спасибо индусу
А LiveWire это пушка, из которой легко можно застрелить Django
Не только по причине удобства самого LW, а потому что в Filament любой компонент можно сделать за пару минут.
Да еще и вебсокеты дико удобно интегрированы сюда, по мимо серверных функций, что само по себе очень удобно
Хоть и в плане разработки полноценного фронтенда - сомнительно на сервере весь клиентский код исполнять, а для админки вполне сойдет)
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Learn how to Implement Real-Time Database Notifications In FilamentPHP | A Practical Guide
Hey everyone, in this tutorial, we'll implement Real-time Database Notifications in FilamentPHP with Laravel Reverb.
GitHub Repo of this Tutorial: https://github.com/tapan288/filament-reverb
GitHub Repo of this Tutorial: https://github.com/tapan288/filament-reverb
❤1
Я веду не новостной канал, а скорее личный блог, пишу что нравится
Новости мне ненравятся естественно)
Но вот этот комментарий забавный😅
Новости мне ненравятся естественно)
Но вот этот комментарий забавный
Please open Telegram to view this post
VIEW IN TELEGRAM
💔1
Cododel.dev | Александр
Кстати нейросети хоть и прижились уже, делают классные иллюстрации Но такие простые ошибки, в основном в тексте - приходится править руками в фотошопе) Пример до и после прикрепляю.
Пока в Photoshop не работает генеративное заполнение (Generative fill) в РФ, в opensource редакторе Krita есть неплохое решение на базе Stable Diffusion
Даже превью функционала есть
При этом не обязательно иметь мощную видеокарту.
Можно воспользоваться онлайн сервисом от самого разработчика, с бесплатными токенами на генерацию, или дешево взять в аренду видеокарту на vast.ai, и самостоятельно поднять Stable Diffusion со своей моделью, и просто указать в настройках адрес сервера.
Я поиграться чисто поставил, и покреативил на последнем изображении: почистил от мусора, убрал сигарету и немного увеличил холст, но получилось только с рамками, пока не стал разбираться.
До смотрим в прикрпленном сообщении, результат в прикрепленном изображении
Даже превью функционала есть
При этом не обязательно иметь мощную видеокарту.
Можно воспользоваться онлайн сервисом от самого разработчика, с бесплатными токенами на генерацию, или дешево взять в аренду видеокарту на vast.ai, и самостоятельно поднять Stable Diffusion со своей моделью, и просто указать в настройках адрес сервера.
Я поиграться чисто поставил, и покреативил на последнем изображении: почистил от мусора, убрал сигарету и немного увеличил холст, но получилось только с рамками, пока не стал разбираться.
До смотрим в прикрпленном сообщении, результат в прикрепленном изображении
❤1