• Что такое DRY?
Если по-русски, то “Don’t Repeat Yourself”
(Не поворяйся!)
Вкратце - это значит, что нужно стараться не допускать дублирования кода, и, выносить повторяющуюся логику по мере необходимости.
К примеру для этого во многих проектах и фреймворках есть Helpers, да и в целом сами библиотеки и фремворки не только ускоряют работу, но и решают множество других задач, в том числе DRY
• Зачем он нужен?
Дублирование кода усложняет поддержку и доработку проекта.
Если изменить логику такого блока - придется вспомнить и изменить все остальные дубли, где эта логика исопльзовалась.
• Как его применять?
Выше я уже описал пример с хелперами - можно писать свои. Это у нас - создание функций, содержащих повторяющуюся логику, не влияющую на окружение.
А еще это может быть использование циклов или других структур, например - классов и их наследования.
• Пример
Функции на скринах взаимодействуют с апи, а соблюдая DRY - еще и создают удобный интерфейс апи.
На первом и втором узображении функции созданы в целях соблюдения DRY.
Но внутри самой функции на первом скрине - этот же принцип и нарушен, так как если в проекте есть другие запросы - придется дублировать логику самого запроса в новые функции.
На втором скрине абсолютно тот же запрос, но логика запроса вынесена в отдельную функцию.
А на третьем скрине - та самая логика, которая покрывает POST и GET запросы, внутри которых снова используется принцип DRY, и они служат лишь интерфейсом для запроса, который исоплняется только в функции request.
• Исключения
Важно помнить, что это не панацея и не строгое правило.
Иногда дублирование кода может быть оправдано, если это делает код более понятным или упрощает его.
Главное не переусердствовать и четко понимать, почему сейчас нужно применить или нарушить этот принцип.
Не, ну посмотрите, какая маленькая, аккуратная и понятная функция на втором скрине)
Да post и get функции тоже приятные.
Главное не найти дублирования в request - это предел, дальше все резко ухудшится
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Тестирование Tinkoff кассы
Недавно потребовалось протестировать тинькофф кассу, и вспомнил, что у меня есть простенький скрипт!
Но в репозитории осталась ошибка, он не отправлял токен кассы.
Я исправил ее, но мне этого оказалось мало, и я переписал пол проекта (как всегда... 😆)
Теперь он выглядит так (глядеть скрин)
🖼️ GitHub
🖱 GH Pages
Недавно потребовалось протестировать тинькофф кассу, и вспомнил, что у меня есть простенький скрипт!
Но в репозитории осталась ошибка, он не отправлял токен кассы.
Я исправил ее, но мне этого оказалось мало, и я переписал пол проекта (как всегда... 😆)
Теперь он выглядит так (глядеть скрин)
Please open Telegram to view this post
VIEW IN TELEGRAM
Хочу просто чтобы вы увидели, как нужно писать запрос нейросети, чтобы получить качественный ответ.
• Задача
Расчитать заранее уровень цены и размер позиции для усреднения покупки по мартингейлу в трейдинге.
При этом заранее определяется:
— Рабочий бюджет (сколько готов потратить на покупку актива)
— Процент коррекции (на сколько должна упасть цена, когда пора докупать)
— Множитель (на соклько должна быть умножена предыдущая покупка)
— Количество усреднений (максимльное количество докупок)
— Текущая стоимость (от нее расчитывается падения)
• Смотрим скрины
На них запрос, и ответ от GPT-4 от Bing (с включенным поиском по сети)
+ бонусом объяснение полученного скрипта от нейросети
+ бонусом от меня применение данного скрипта в Google Sheet (Написал в AppsScript логику, которая автоматически все расчитывает на лету)
• Важно
Главное быть последовательным и дать максимально подробную задачу, с как можно меньшим количеством неизветсных.
В целом точно так же как и джуну
Только в случае с нейросетью - она с большей вероятностью выдаст лакончиное решение без вложенных цикллов, а значит более качественное
• Минусы
Ну а с другой стороны - тут чуть ли не синьор должен составить ТЗ
А так же только разработчик высокого ранга сможет оценить эффективность рещения.
Но это все равное ускорит ему работу, если нужно продумать формулу или алгоритм.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Я решил с нейросетями ознакомиться
Поигрался немного с YOLO тут
Подробнее о моем способе обучения:
• Выбираю интересующую тематику
• В режиме песочницы пробую технологию
• Придумываю под нее проект
• Реализую
• Иду на фриланс решать задачу другим людям
Текущая цель: Нейросеть для решения цифровой капчи
Шаги:
• Начал с того, что посмотрел несколько простейших видосов по нейросетям на широкую аудиторию
Раз, Два, Три, Четыре
• Затем создал Google Collaborotory документ, в котором по Usage из документации попробовал обучить сетку на стандартном датасете и скормить подходящие под мою задачу входные данные, для чего наскринил несколько окон ReСaptchaV2 с официального DEMO
• Когда получилось завести это дело - попробовал поиграться с предренированными моделями разных размеров, посмотрел как оно работает, используя OpenCV для наложения боксов на распознанные сущности в изображении при помощи rectangle и putText методов, которые подсмотрел в Google Gemini (GPT)
• Наигравшись чуть поискал более удобные способы разметки, и нашел на HuggingFace пример современного решения с использованием SuperVision, что сильно сократило и упростило реализацию визуальной разметки определенных сущностей на изображении.
• С этого момента ключевая логика работы с нейросетями по классификации, отслеживанию и детектингу, так что следующим этапом - выбрал ресурс, для которого, в теории, получится применить разрабатываемую нейросеть, и приступил к написанию парсера и сбора датасета изображений капчи.
Спускаемся в комментарии за продолжением
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжаем тему с нейронками?
Там приличный лонгрид накопился🤓
Немного оффтоп, по этому в комментах
Там приличный лонгрид накопился
Немного оффтоп, по этому в комментах
Anonymous Poll
86%
Поехали 🖥
0%
Предложу другую тему в комментах
14%
Гляну результаты
Нашел баг в FilamentPHP
Сегодня будет уже третий день ресерча 😃
Проблема в несогласованности логики валидации файлов на фронтенде и бекенде
Уже пообщался с опытным разработчиком одного из медиа плагинов в дискорде [ENG]
Он сомневается, что это баг
Но все указывает именно на это
В том числе он говорит что расширение файла никак не связано с его mime type, но мне удалось выяснить обратное, в случае с тем как браузер определяет mime type
Так что ещё подумаю, может сделаю пулл реквест, я уже придумал более менее адекватное решение
А там расскажу детальнее
🖼️ Дискуссия на GitHub
Сегодня будет уже третий день ресерча 😃
Проблема в несогласованности логики валидации файлов на фронтенде и бекенде
Уже пообщался с опытным разработчиком одного из медиа плагинов в дискорде [ENG]
Он сомневается, что это баг
Но все указывает именно на это
В том числе он говорит что расширение файла никак не связано с его mime type, но мне удалось выяснить обратное, в случае с тем как браузер определяет mime type
Так что ещё подумаю, может сделаю пулл реквест, я уже придумал более менее адекватное решение
А там расскажу детальнее
Please open Telegram to view this post
VIEW IN TELEGRAM
Если кто занимается 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