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
👩‍💻 Что-то я пропал немного 😁
Выше я писал про PetiteVue, сегодня проясню.

Я в тот момент делал полноэкранный вижет обратной связи. И естественно встраиваемый.
До этого я еще почитал о ShadowDom, но не осмелился взять его в работу.
А вот опыт перескакивания между фреймворками у меня большой)

#web #frontend #javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👩‍💻 Хотел делать как всегда на AlpineJs, который мне полюбился сразу, как я начал делать что-то подобное. Но меня не покидала мысль сделать это на VueJs с компонентами и нормальной разбивкой на части.
Начал делать и понял, что целый Vue тянуть это оч плохая идея. Да и долго это всё, окружение еще настроить, сборку в единый бандл и т.п.

Почитал о SolidJs, понял что долго буду вливаться, и тут промелькнул PetiteVue, которого поддерживает сам Evan You. Почитал кучу хвалебных статей, с помаркой, мол "Для виджетов". И загорелся.
Сразу написал вам пост, и взял в работу.

И вылезли подводные камни...
Мне очень хотелось компоненты, биндинги и вынос логики в JS. А так нельзя 😂
Выходит очень перегруженно, что-то более менее сложное - сломает ногу(
Потерял день и переписал всё обратно на Alpine.

Мораль:
Почитал статью про новый "Супер мега инструмент" и планируешь внедрять - проверь на достоверность 😉

— P.S.
И кстати потом постфактум человек заказчика заявил, что нужен "Подключаемый виджет, в одном .js файле". И инициализцией через JS функцию.
Я подсуетился и за полдня при помощи EsBuild - собрал JavaScript, подключил Sass, Pug и запихнул в бандл все HTML сущности в <template> тегах.
А Alpine c CDN подтягивается, чтобы не плодить кучу разных виджетов с Alpine внутри бандла.
Делается очень просто) Потом расскажу.

#web #frontend #javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
А еще знаю, что есть новички в веб разработке, напишу Вам в чате.
Что-то хочется мне для вас устроить прямую трансляцию с разбором Canvas анимации на JavaScript.

Разберем и перепишем с использованием ООП очень простой пример, который у меня на гитхабе лежит. Чуть-чуть потрогаем и вспомним школьную геометрию 8-9 классов)

А кто совсем не "бум-бум" - посмотрит просто, одним глазком. 🙂

#web #frontend #javascript #canvas #animation
👩‍💻 Знает кто-то, как отсечь петли в кривой, имея ее точки? 😅

Могу немного упростить вводные:
Синие линии строятся по уже имеющимся точкам, но они имеют такие вот петли.

Как мы можем их задетектить, вырезать и на их место поставить точку первого пересечения?


--
А так - у нас имеются только точки зелёной линии, которую надо обвести с заданным радиусом.
И это тоже должны быть точки.
Сейчас - перебирая точки зелёной кривой, я беру точку на заданном радиусом расстоянии слева от текущего направления линии.
Потом обратно прохожусь.

Закрывает две линии вначале и в конце так-же линиями из точек.
Получаем из высчитывая из стартовой или конечной точки зелёной линии - точки на окружности с заданным радиусом и частотой.

Практическое применение - мы можем получить маршрут на карте и обвести область вокруг него с заданным радиусом.
А практическое применения практического применения - я не знаю 😂

#javascript #canvas #geometry #issue #question
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
👩‍💻 Как создать проект на Angular без его установки в систему

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

😉 Глядеть


#frontend
#angular #guide #troubleshooting #nodejs #javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Скрипт для кинопоиска

Как вам такое?

UPD.
— Адаптировал под SSR
— Добавил кнопок на страницы со списками
— Добавил поддержку сериалов
— Заменил текст в кнопке на иконку
— Доработал стили, сделав адаптивными вне зависимости от цвета фона

До этого работало только при прямом переходе на страницу извне, либо после перезагрузки страницы
И только на фильмах

Вот более развернутая демонстрация

Используется для того, чтобы вручную ссылки не переписывать и фильмы смотреть даже те, которых нет в KinopoiskHD
На Кинопоиске по сути все фильмы есть, его как поисковик и каталог использую, а смотрю на другом сервисе.
Только теперь это в интерфейс самого кинопоиска вписал.


#JavaScript
1👍1
💬 Отслеживание сетевой активности и переходов между страницами в SPA

При создании инъецируемых скриптов для сайтов, использующих архитектуру SPA (Single Page Application), может возникнуть потребность отслеживать переходы между страницами или перезагрузки элементов. Из-за динамической подгрузки контента через AJAX и Fetch, события DOMContentLoaded или load будут бесполезны.

Для инъецируемых скриптов, хорошим решением будет отслеживать состояние радиомолчания (network idle). Оно наступает, когда все сетевые запросы завершены, и сеть на некоторое время «замолкает». Подобное поведение полезно, если нужно запустить код только после того, как пройдут все запросы или после перехода на другую страницу, чтобы реинициализировать скрипт.

💻 Пример сценария использования

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

🤫 Как это работает

1. Инициализация счетчика активных сетевых запросов.

Сниппет отслеживает все сетевые запросы на странице (Fetch и XMLHttpRequest) с помощью PerformanceObserver. Каждый раз, когда начинается новый сетевой запрос, счетчик activeRequests увеличивается.

2. Обработка завершения запросов.

После завершения запроса activeRequests уменьшается, и проверяется состояние сети. Если активных запросов не осталось, через 500 мс на объекте window генерируется событие network-idle.

3. Использование события network-idle.

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

4. Задержка перед генерацией события.

Задержка в 500 мс добавлена, чтобы устранить "шум" случайных срабатываний и убедиться, что действительно наступило состояние радиомолчания.

📞 Важно:

• Модификации роутов в SPA. Если у вашего SPA-приложения не используются сетевые запросы при изменении маршрутов, дополнительно можно привязаться к событиям history.pushState и popstate.

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

🫡 Заключение

Этот сниппет помогает организовать логику на основе сетевых событий в инъецируемых скриптах для приложений с динамическим роутингом, позволяя учитывать состояние “радиомолчания” и гарантируя, инъецируемые скрипты выполняются после прогрузки страницы, а также помогает перезапускать инъецируемый скрипт при переходах между страницами.

🖼️ Ознакомиться со сниппетом можно на GitHub Gist.

#JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
И снова React!
Простая библиотека для уведомлений

Сижу подучиваю его, по случаю выхода Tauri v2 из beta!
Rust базово уже знаю, а большая часть работы у меня в любом случае пока ожидается с веб технолиями или фронтом, по Rust я только мелкие задачки буду брать, и делать интерфейс им на React!

Ну а на видео - полностью самописная стилизованная на css modules библиотека, если можно так выразиться.

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

Сначала я чуть не изобрел заново Class Components, при этом не используя реальные классовые компоненты, и даже заставил это вё дело работать.
Под шумок смог реализовать возможность вызова экземпляров класса, будто это функция, как в PHP и Python.
Выложил сниппет в gist.
Достаточно вернуть toCallable(this) из конструткора любого класса, и реализовать ему метод call

Но меня остановил TypeScript, когда я уже смог типизировать абсолютно все свои извращения, но он мне не дал возможности создать тип, который бы представлял из себя смесь объекта и функции.
За что я его люблю, это за две вещи:
• Сильно прокачивает IDE, в плане подсказок кода (и AI ассистенты гораздо лучше тебя понимают)
• И ты если пошел не в ту сторону, если в своем уме, в процессе поиска решения и постоянного рефатокринга, рано или поздно задумаешься "А прав ли я?"

ЗЫ.
Исходники выложу если попросите.


#react #JavaScript #TypeScript
👍1
Cododel.dev | Александр
И снова React! Простая библиотека для уведомлений Сижу подучиваю его, по случаю выхода Tauri v2 из beta! Rust базово уже знаю, а большая часть работы у меня в любом случае пока ожидается с веб технолиями или фронтом, по Rust я только мелкие задачки буду…
Media is too big
VIEW IN TELEGRAM
Закончил полный цикл разработки Уведомлений на React

Интересный опыт.
Получилось закрыть дыры знаний в CSS анимации и узнать много нового о React.

В с последнего поста:
- Полностью переработана и оптимизирована анимация
- Оптимизирована работа с данными
- Переработан программный интерфейс вызова и работы с уведомлениями
- Разработан провайдер контекста, для возможности использования уведомлений в любом месте приложения
- Исправлена и переаботана структура библиотеки так, что теперь не ломает HMR
- Сохранена возможность использовать библиотеку без использования провайдера контекста

С исходниками можно ознакомиться тут

Позже хочу оформить как полноценную библиотеку и залить в NPM, так что пока просто файлы, без мусора.

#react #JavaScript #TypeScript
👍1
Cododel.dev | Александр
Наткнулся на видео, в котором раскрыты существенные нюансы по Rust. И я действительно их считаю существенными, потому чо похожий опыт был с фреймворками и другими языками... (Самый банальный пример, но довольно похожий, это React vs Svelte, у второго комьюнити…
🖼️ Бинарники, RUST и JavaScript (Bun)

В комментариях рассказывал, что учил Rust, делая пошаговый эффективный setup сценарий для настройки Ubuntu в качестве веб сервера.
После чего планировалось его собрать в бинарник.

Я нашел нужные библиотеки, разобрался с базовыми принципами работы на Rust, и определил порядок действий и архитектуру проекта, но на этом и остановился, так как подвернулся коммерческий проект.

Так сейчас я вспомнил один факт!
У JavaScript - есть шикарнейшая среда выполнения Bun, предоставляющая еще и набор довольно интерсных инструментов.
Полностью о нём пока не стану рассказывать, суть не в этом, а в возможности компиляции кода в бинарник. При этом, нечто подобное есть и в последних версиях NodeJS в виде патчинга бинарника интерпретатора JavaScript кодом (упоминалось начиная с 16, если не ошибаюсь).
Но в Bun умеет в рантайм исполнения TypeScript без необходимости сборки проекта в JavaScript. А ещё говорят, что есть возможность оптимизации этого TS/JS в байткод.

Но я вижу, что Bun явно в проигрыше по памяти, а производительность и не ставил под сомнение, Rust шустрее.
На скрине можно увидеть, что такой скрипт занимает 20Mb RAM, а сам по себе весит 57Mb:

setInterval( () => {
console.log(Date.now());
}, 1000);


Но!
Мне никогда и не требовалась производительность. У меня в приоритете скорость и удобство разработки.
А в NPM я помню, есть огромное разнообразие отличных библиотеки для CLI.
И упаковав это всё дело в бинарник весом ±60-120Mb — останется просто его закинуть на сервер, запустить, выбрать что нужно установить, И..(!)
Пойти пить чай на минут 15
(вместо 20-60 минут настройки сервера - мы тратим 5 минут и пьем чай 10-20, и это при наличии опыта, новичкам сильно больше сэкономит времени)

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

А ещё, для шарящих —бонусом к Cursor я взял в работу проект, на котором будет расширение для бразуера на React в WXT и бекендом на AppWrite
Так что будет чего интересного рассказать и обсудить


#NodeJS #Bun #Rust #JavaScript #TypeScript #Linux
Please open Telegram to view this post
VIEW IN TELEGRAM
Cododel.dev | Александр
Закончил полный цикл разработки Уведомлений на React Интересный опыт. Получилось закрыть дыры знаний в CSS анимации и узнать много нового о React. В с последнего поста: - Полностью переработана и оптимизирована анимация - Оптимизирована работа с данными…
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня приспичило жестко разобраться с контекстом в React
За основу взял проект с уведомлениями, тк там был и контекст, и срач

Ну вот навёл порядок, подцепил RSBuild, отрефакторил весь проект

А так же получил несколько консультаций у ИИ модельки в Cursor
(они кстати сейчас оч умные, по дефолту в режиме агента, и можно разрешить гуглить самостоятельно, а не по просьбе)


С исходниками можно ознакомиться тут

#react #JavaScript #TypeScript