Наткнулся на пост в LinkedIn о том, как правильно организовать структуру файлов в Реакт приложении.
Ну типа логику Context API складывайте в папку /context, хуки складывайте в папку /hooks
И вспомнил про довольно продвинутую систему организации, предложенную ещё Дэном Абрамовым.
Вот тут можно почитать доку по ней: https://react-file-structure.surge.sh/
Ну типа логику Context API складывайте в папку /context, хуки складывайте в папку /hooks
И вспомнил про довольно продвинутую систему организации, предложенную ещё Дэном Абрамовым.
Вот тут можно почитать доку по ней: https://react-file-structure.surge.sh/
Так и не удалось попробовать Cursor AI, да и наверное не стану - сделан он поверх VS Code, а соответственно ради AI фич нужно потерять комфорт Вебшторма - а я на такое не готов.
Но на выходных поигрался с https://v0.dev/ - который оставил приятное впечатление. Сразу небольшой дисклэймер - что-то серьезное там вряд-ли получится сделать, но для генерации небольших участков интерфейса прям хорошо работает.
Мой пример - небольшое Electron приложение для генерации пары учетных данных - email и пароль. Приложение запускает e2e фреймворк, который проходит регистрацию со временным email, и по завершению регистрации выдает полученные креды в список со скроллом. Из списка их можно скопировать сразу в буфер. Весь интерфейс состоит из списка со скроллом, и кнопки для старта генерации, каждый элемент списка это две строки с кнопками копирования в буфер.
Довольно простой интерфейс, вручную можно накидать минут за 15. Но, на удивление v0 выдал этот же интерфейс после первого же описания, на которое я потратил не больше минуты.
В общем, для внутренних тулзов, если не требуется сторонней библиотеки компонентов, и достаточно будет shadcn/ui - пушка.
Но на выходных поигрался с https://v0.dev/ - который оставил приятное впечатление. Сразу небольшой дисклэймер - что-то серьезное там вряд-ли получится сделать, но для генерации небольших участков интерфейса прям хорошо работает.
Мой пример - небольшое Electron приложение для генерации пары учетных данных - email и пароль. Приложение запускает e2e фреймворк, который проходит регистрацию со временным email, и по завершению регистрации выдает полученные креды в список со скроллом. Из списка их можно скопировать сразу в буфер. Весь интерфейс состоит из списка со скроллом, и кнопки для старта генерации, каждый элемент списка это две строки с кнопками копирования в буфер.
Довольно простой интерфейс, вручную можно накидать минут за 15. Но, на удивление v0 выдал этот же интерфейс после первого же описания, на которое я потратил не больше минуты.
В общем, для внутренних тулзов, если не требуется сторонней библиотеки компонентов, и достаточно будет shadcn/ui - пушка.
Оказывается абсолютно бесплатно прямо сейчас доступен аналог GitHub Copilot, при этом даже симки не нужно для регистрации.
Называется это чудо Sourcegraph Cody https://sourcegraph.com/cody
В бесплатный тариф включён безлимитный inline autocomplete и 200 запросов к чату. Работает все на Claude 3.5 Sonnet и есть расширения для VS Code и JetBrains. Попробовал расширение для Вебшторма - весь функционал, который доступен в Copilot, доступен и тут. UX точно такой же.
Искал возможность попробовать Claude 3.5, т.к. постоянно слышу, что он намного лучше работает для генерации кода, чем Copilot, а тут такая штука доступна ещё и бесплатно.
Называется это чудо Sourcegraph Cody https://sourcegraph.com/cody
В бесплатный тариф включён безлимитный inline autocomplete и 200 запросов к чату. Работает все на Claude 3.5 Sonnet и есть расширения для VS Code и JetBrains. Попробовал расширение для Вебшторма - весь функционал, который доступен в Copilot, доступен и тут. UX точно такой же.
Искал возможность попробовать Claude 3.5, т.к. постоянно слышу, что он намного лучше работает для генерации кода, чем Copilot, а тут такая штука доступна ещё и бесплатно.
Sourcegraph
Cody | AI coding assistant from Sourcegraph
Cody is the most powerful and accurate AI coding assistant for writing, fixing, and maintaining code
Сегодня начинается Advent of TypeScript - https://www.adventofts.com/
Каждый день новая задачка по Тайпскрипту в течении месяца.
Отличная возможность восполнить пробелы в знаниях и получить удовольствие.
UI выглядит довольно симпатично и празднично, в отличие от того же Advent of Code https://adventofcode.com/, который судя по всему нужно сдавать на перфокартах.
Каждый день новая задачка по Тайпскрипту в течении месяца.
Отличная возможность восполнить пробелы в знаниях и получить удовольствие.
UI выглядит довольно симпатично и празднично, в отличие от того же Advent of Code https://adventofcode.com/, который судя по всему нужно сдавать на перфокартах.
Adventofts
Advent of TypeScript
Advent of TypeScript is a month-long event running from December 1 to Christmas, featuring daily TypeScript challenges. Participants can test their skills, climb the leaderboard, and engage with the TypeScript community
Очень скептически относился к Biome https://biomejs.dev/, но решил все-таки попробовать.
И результаты на самом деле приятно удивили. Попробовал прогнать его на рабочем проекте. Biome встал на место eslint с кучей плагинов и кастомным конфигом, который мы очень долго настраивали под себя, практически идеально. Ну то есть Biome с дефолтными настройками делает почти то же самое что и наш продвинутый eslint конфиг.
При этом линтинг и форматирование на prettier и eslint занимает 28s, а на Biome - 1s 😳
Раз такое дело решил закинуть Biome в свой темплейт для Next.js - https://github.com/artabr/liva-nextjs, заодно и зависимости обновил.
И результаты на самом деле приятно удивили. Попробовал прогнать его на рабочем проекте. Biome встал на место eslint с кучей плагинов и кастомным конфигом, который мы очень долго настраивали под себя, практически идеально. Ну то есть Biome с дефолтными настройками делает почти то же самое что и наш продвинутый eslint конфиг.
При этом линтинг и форматирование на prettier и eslint занимает 28s, а на Biome - 1s 😳
Раз такое дело решил закинуть Biome в свой темплейт для Next.js - https://github.com/artabr/liva-nextjs, заодно и зависимости обновил.
Biome
Format, lint, and more in a fraction of a second.
This media is not supported in your browser
VIEW IN TELEGRAM
Эти ребята уже много где мелькали со своей «самой большой в мире» библиотекой инпутов, но они не останавливаются и продолжают пополнять библиотеку другими компонентами.
Тут коллекция диалогов. Все сделано на Tailwind. Там еще есть кнопки, слайдеры и попапы.
Но конечно самое полезное - это все равно инпуты (их там 77 штук): https://originui.com/inputs
Тут коллекция диалогов. Все сделано на Tailwind. Там еще есть кнопки, слайдеры и попапы.
Но конечно самое полезное - это все равно инпуты (их там 77 штук): https://originui.com/inputs
У меня есть 60 дней чтобы выложить какое-то приложение в Google Play.
Иначе мой аккаунт будет удалён - оказывается, если ты так ничего и не запаблишил в течение года с создания аккаунта, он удаляется. И 25$ не возвращаются 😁
Короче теперь срочно придётся доделывать какой-нибудь пет проект, чтоб не потерять бабки 😂
Иначе мой аккаунт будет удалён - оказывается, если ты так ничего и не запаблишил в течение года с создания аккаунта, он удаляется. И 25$ не возвращаются 😁
Короче теперь срочно придётся доделывать какой-нибудь пет проект, чтоб не потерять бабки 😂
feat: initial commit
У меня есть 60 дней чтобы выложить какое-то приложение в Google Play. Иначе мой аккаунт будет удалён - оказывается, если ты так ничего и не запаблишил в течение года с создания аккаунта, он удаляется. И 25$ не возвращаются 😁 Короче теперь срочно придётся…
В общем, а почему бы и нет? Нужно только выбрать самый маленький скоуп - приложение одной фичи, и возможно получиться успеть.
Идея такая - приложение трекер ежедневного прогресса (streak tracker) - думаю каждому хоть раз напоминал об этом один известный любитель иностранных языков👋
Но трекать можно не только ежедневные занятия корейским, но и другие активности - зарядку, чтение книг, прогулки на свежем воздухе - у каждого будет что-то свое.
При открытии приложение показывает экран с количеством пропущенных дней и 3 опции: заполнить пропущенные дни, пропустить их или напомнить позже.
Так как сделать нужно быстро - пока не будет онлайн синхронизации, личного кабинета - все будет на устройстве. А чтобы было интересно попробуем Bun на Expo и Tailwind (NativeWind).
Идея такая - приложение трекер ежедневного прогресса (streak tracker) - думаю каждому хоть раз напоминал об этом один известный любитель иностранных языков
Но трекать можно не только ежедневные занятия корейским, но и другие активности - зарядку, чтение книг, прогулки на свежем воздухе - у каждого будет что-то свое.
При открытии приложение показывает экран с количеством пропущенных дней и 3 опции: заполнить пропущенные дни, пропустить их или напомнить позже.
Так как сделать нужно быстро - пока не будет онлайн синхронизации, личного кабинета - все будет на устройстве. А чтобы было интересно попробуем Bun на Expo и Tailwind (NativeWind).
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет!
Буду стримить создание приложения. В это воскресенье, 29.12 в 14:00 GMT+2.
Будем делать трекер привычек на React Native, Expo и Tailwind. Посмотрим что нового с React Native экосистемой (последний раз смотрел туда почти год назад) и проверим удобно ли пользоваться Tailwind на React Native.
Приходите поддержать и пожалуйста подписывайтесь на платформах:
https://www.twitch.tv/feat_initial_commit
https://live.vkvideo.ru/initial_commit
Буду стримить создание приложения. В это воскресенье, 29.12 в 14:00 GMT+2.
Будем делать трекер привычек на React Native, Expo и Tailwind. Посмотрим что нового с React Native экосистемой (последний раз смотрел туда почти год назад) и проверим удобно ли пользоваться Tailwind на React Native.
Приходите поддержать и пожалуйста подписывайтесь на платформах:
https://www.twitch.tv/feat_initial_commit
https://live.vkvideo.ru/initial_commit
Twitch
feat_initial_commit - Twitch
feat_initial_commit streams live on Twitch! Check out their videos, sign up to chat, and join their community.
Что удалось сделать на вчерашнем стриме:
1. Развернули новый проект на Expo 52.
2. Добавили Biome для форматирования и линтинга.
3. Попробовали запустить готовый стартер темплейт с Гитхаба на Bun, Expo 51, TypeScript, TailwindCSS - темплейт с ходу не завелся - продолжили со своим проектом.
4. Добавили Nativewind (Tailwind для React Native) и библиотеку компонентов для него - gluestack.
В итоге Таилвинд не завелся.
Судя по ишьюям на ГитХабе, Таилвинд не работает на Expo 52.
5. Попробовали еще один темплейт на Expo 50 и Tailwind - заработало, но классы с цветами все равно не заработали.
В итоге на домашнюю работу мне осталось даунгрейднуть наш проект на Expo 50 и разобраться в чем проблема с классами цветов (почему
Запись стрима постараюсь выложить на днях на YouTube (на Твиче я его не записал😥).
1. Развернули новый проект на Expo 52.
2. Добавили Biome для форматирования и линтинга.
3. Попробовали запустить готовый стартер темплейт с Гитхаба на Bun, Expo 51, TypeScript, TailwindCSS - темплейт с ходу не завелся - продолжили со своим проектом.
4. Добавили Nativewind (Tailwind для React Native) и библиотеку компонентов для него - gluestack.
В итоге Таилвинд не завелся.
Судя по ишьюям на ГитХабе, Таилвинд не работает на Expo 52.
5. Попробовали еще один темплейт на Expo 50 и Tailwind - заработало, но классы с цветами все равно не заработали.
В итоге на домашнюю работу мне осталось даунгрейднуть наш проект на Expo 50 и разобраться в чем проблема с классами цветов (почему
red-500
не работает, а font-bold
работает), чтобы на следующем стриме можно было начать накидывать компоненты.Запись стрима постараюсь выложить на днях на YouTube (на Твиче я его не записал😥).
Выложил запись стрима на YouTube -
https://www.youtube.com/watch?v=TsEyG445exI
https://www.youtube.com/watch?v=TsEyG445exI
YouTube
Делаем трекер привычек на React Native, Expo и Tailwind для Android и iOS. Часть 1: Старт проекта
Это первый стрим на котором мы разворачиваем проект, пытаемся запустить Андроид приложение на WSA, устанавливаем Biome, пробуем несколько готовых темплейтов с Гитхаба и боремся с Таилвиндом на React Native.
Подписывайтесь на мой Телеграм: https://t.me/f…
Подписывайтесь на мой Телеграм: https://t.me/f…
feat: initial commit
Всем привет! Буду стримить создание приложения. В это воскресенье, 29.12 в 14:00 GMT+2. Будем делать трекер привычек на React Native, Expo и Tailwind. Посмотрим что нового с React Native экосистемой (последний раз смотрел туда почти год назад) и проверим…
Всем привет! Сегодня в 14:00 GMT+2 делаем вторую часть стрима. Приходите!
Также будет трансляция на YouTube:
https://youtube.com/@featinitialcommit
https://www.twitch.tv/feat_initial_commit
https://live.vkvideo.ru/initial_commit
Также будет трансляция на YouTube:
https://youtube.com/@featinitialcommit
https://www.twitch.tv/feat_initial_commit
https://live.vkvideo.ru/initial_commit
YouTube
Initial commit
Привет! Меня зовут Артем. Пишу на JavaScript. На работе делаю фронтенд на React и бэкенд на Node/AWS. На стримах пробую что-то новое, связанное с веб и мобильной разработкой.
Наткнулся на шикарную штуку для визуализации регэкспов - Regexper https://regexper.com/#%5E%28%5C%2F.*%29%3F%5C%2F.*
Строит действительно понятную диаграмму того, что будет происходить в вашем регэкспе.
Для тестирования регэкспов всегда пользовался https://regex101.com/ - но там хоть и есть описание поведения каждого токена, такой диаграммы не хватает.
Вот бы их еще и совместить - проблема регэкспов была бы навсегда решена.
Строит действительно понятную диаграмму того, что будет происходить в вашем регэкспе.
Для тестирования регэкспов всегда пользовался https://regex101.com/ - но там хоть и есть описание поведения каждого токена, такой диаграммы не хватает.
Вот бы их еще и совместить - проблема регэкспов была бы навсегда решена.
Разработка трекера привычек идёт.
Я взял небольшую паузу и не делился ходом разработки, чтобы разобраться насколько удобно работать с Expo SQLite и что лучше использовать - чистые SQL запросы или все же какой-то ORM.
Я однажды пробовал подключить TypeORM на Expo и это была мука - нужно было включать какие-то экспериментальные флаги, накатывать патчи - в общем работало тогда это очень плохо. Да и приложение довольно простое - в ORM смысла особенно нет.
И тут я решил попробовать Drizzle https://orm.drizzle.team/ и остался в полном восторге.
Drizzle - это так называемый SQL builder - он даёт очень лёгкие абстракции поверх SQL - т.е. вместо того чтобы написать:
ты пишешь:
тоже самое будет и с джоинами:
вместо:
пишешь:
По сути ты пишешь SQL и этот SQL выполняется как есть без лишней магии и дополнительных вычислений. Ну и соответственно производительность запроса через Drizzle такая же как наивный запрос с помощью чистого SQL.
Почему бы тогда не остаться на чистом SQL?
Вот тут самая главная прелесть Drizzle - до того, как начать работать с базой и делать запросы ты описываешь ее схему. И все полученные данные приходят тебе уже с типами.
Плюс удобный инструмент для миграции - если схема поменялась, Drizzle сам мигрирует существующую базу, плюс админка для работы с базой на Expo - если например к сторонней базе ты можешь подключится любым SQL клиентом, то Expo SQLite не поддерживает сторонние подключения, а тут данные можно редактировать в UI - очень удобно.
Я взял небольшую паузу и не делился ходом разработки, чтобы разобраться насколько удобно работать с Expo SQLite и что лучше использовать - чистые SQL запросы или все же какой-то ORM.
Я однажды пробовал подключить TypeORM на Expo и это была мука - нужно было включать какие-то экспериментальные флаги, накатывать патчи - в общем работало тогда это очень плохо. Да и приложение довольно простое - в ORM смысла особенно нет.
И тут я решил попробовать Drizzle https://orm.drizzle.team/ и остался в полном восторге.
Drizzle - это так называемый SQL builder - он даёт очень лёгкие абстракции поверх SQL - т.е. вместо того чтобы написать:
SELECT * FROM test
ты пишешь:
db.select().from(test);
тоже самое будет и с джоинами:
вместо:
SELECT * FROM users LEFT JOIN pets ON users.user_id = pets.owner_id
пишешь:
db.select().from(users).leftJoin(pets, eq(users.id, pets.ownerId));
По сути ты пишешь SQL и этот SQL выполняется как есть без лишней магии и дополнительных вычислений. Ну и соответственно производительность запроса через Drizzle такая же как наивный запрос с помощью чистого SQL.
Почему бы тогда не остаться на чистом SQL?
Вот тут самая главная прелесть Drizzle - до того, как начать работать с базой и делать запросы ты описываешь ее схему. И все полученные данные приходят тебе уже с типами.
Плюс удобный инструмент для миграции - если схема поменялась, Drizzle сам мигрирует существующую базу, плюс админка для работы с базой на Expo - если например к сторонней базе ты можешь подключится любым SQL клиентом, то Expo SQLite не поддерживает сторонние подключения, а тут данные можно редактировать в UI - очень удобно.
orm.drizzle.team
Drizzle ORM - next gen TypeScript ORM.
Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.
This media is not supported in your browser
VIEW IN TELEGRAM
В субботу установил превью версию трекера на свой телефон и нужно сказать, что один довольный юзер у этого приложения уже есть 😂
Осталось привести в порядок внешний вид и можно будет выкладывать в Google Play (дедлайн у меня 16 число).
Т.к. всю бизнес логику и работу с хранилищем я провел оффлайн, хочу в субботу записать на стриме видос о том, как работать с Expo SQLite с помощью Drizzle - в этот раз долгих размышлений не будет, весь код уже готов - буду просто показывать, что сделано.
Так, что если будет минутка - забегайте:
https://youtube.com/@featinitialcommit
https://www.twitch.tv/feat_initial_commit
https://live.vkvideo.ru/initial_commit
Стрим начнётся в 10:00 GMT+2
Осталось привести в порядок внешний вид и можно будет выкладывать в Google Play (дедлайн у меня 16 число).
Т.к. всю бизнес логику и работу с хранилищем я провел оффлайн, хочу в субботу записать на стриме видос о том, как работать с Expo SQLite с помощью Drizzle - в этот раз долгих размышлений не будет, весь код уже готов - буду просто показывать, что сделано.
Так, что если будет минутка - забегайте:
https://youtube.com/@featinitialcommit
https://www.twitch.tv/feat_initial_commit
https://live.vkvideo.ru/initial_commit
Стрим начнётся в 10:00 GMT+2
Ура, друзья!
Мой аккаунт не будет удалён.
Я поправил верстку, и опубликовал приложение в закрытый тест. Кстати, чтобы выполнить требование по активности аккаунта, достаточно было просто публикации для внутреннего теста.
Вообще Гугл имеет три уровня публикации:
1. Внутренний тест (internal testing) - для первоначального тестирования того как будет выглядеть приложение на реальных устройствах - не нужно настраивать вид странички приложения в сторе, тестеры скачивают его просто по ссылке.
2. Закрытый тест (closed testing) - нужно тестировать приложение на реальных устройствах в течении двух недель, тестеров должно быть не менее 12 человек. Нужно оформить страничку приложения, согласиться с политиками и офертами, указать какие данные пользователя используются и как.
3. Продакшн - приложение публично доступно в Google Play Store.
И теперь, когда приложение в закрытом тесте, мне нужны 12 добровольцев, которые поставят его себе на устройство и будут пользоваться 2 недели 😅
В общем, ребята, если есть желание помочь пожалуйста пошэрьте свои адреса Гугл аккаунтов и попользуйтесь две недельки (нужны адреса к которым привязан Google Store, иначе установить не удастся).
Я сделал форму, чтобы можно было пошэрить адреса только со мной https://docs.google.com/forms/d/e/1FAIpQLSekYYQBfxdAJNB-r8cxeKQXRptsPRtY_iuk9o6TjmSG7F4gMA/viewform?usp=header
Там можно анонимно пошэрить только адрес - я добавлю вас в список и приложение можно будет скачать по этой ссылке в Google Store - https://play.google.com/store/apps/details?id=com.artabr.streakTracker
Мой аккаунт не будет удалён.
Я поправил верстку, и опубликовал приложение в закрытый тест. Кстати, чтобы выполнить требование по активности аккаунта, достаточно было просто публикации для внутреннего теста.
Вообще Гугл имеет три уровня публикации:
1. Внутренний тест (internal testing) - для первоначального тестирования того как будет выглядеть приложение на реальных устройствах - не нужно настраивать вид странички приложения в сторе, тестеры скачивают его просто по ссылке.
2. Закрытый тест (closed testing) - нужно тестировать приложение на реальных устройствах в течении двух недель, тестеров должно быть не менее 12 человек. Нужно оформить страничку приложения, согласиться с политиками и офертами, указать какие данные пользователя используются и как.
3. Продакшн - приложение публично доступно в Google Play Store.
И теперь, когда приложение в закрытом тесте, мне нужны 12 добровольцев, которые поставят его себе на устройство и будут пользоваться 2 недели 😅
В общем, ребята, если есть желание помочь пожалуйста пошэрьте свои адреса Гугл аккаунтов и попользуйтесь две недельки (нужны адреса к которым привязан Google Store, иначе установить не удастся).
Я сделал форму, чтобы можно было пошэрить адреса только со мной https://docs.google.com/forms/d/e/1FAIpQLSekYYQBfxdAJNB-r8cxeKQXRptsPRtY_iuk9o6TjmSG7F4gMA/viewform?usp=header
Там можно анонимно пошэрить только адрес - я добавлю вас в список и приложение можно будет скачать по этой ссылке в Google Store - https://play.google.com/store/apps/details?id=com.artabr.streakTracker