Все к чему прикладывает руку Evan You всегда имеет на порядок выше DX чем aналогичные решения.
- Vue с React сравнивать сложно, они совсем разные. Но точно никто не будет спорить насколько в vue проще было зайти с такой хорошей докой переведенной на все основные языке, тогда как у реакта адекватная документация появилсь сравнительно недавно.
- Vite и Webpack сравнить по-проще, vite по части DX опережает на порядки, но все же по функционалу они пока не имеют паритета (webpack умеет больше. пока что)
- Но Jest и Vitest просто грешно не сравнить в виду того что имея в основе аналогичные апи, vitest уделывает jest и по функционалу и по удобству.
Jest не только умудрились прибить гвоздями к require, что автоматически пораждает мильен костылей. И это еще можно было бы понять в контексте - все ради DX. Но какое там, даже базовые вещи делаются в Jest через жепу.
А Vitest смог сделать все на ESM, всего пару не значительных изменений и получилось удобно, понятно и быстро.
- Vue с React сравнивать сложно, они совсем разные. Но точно никто не будет спорить насколько в vue проще было зайти с такой хорошей докой переведенной на все основные языке, тогда как у реакта адекватная документация появилсь сравнительно недавно.
- Vite и Webpack сравнить по-проще, vite по части DX опережает на порядки, но все же по функционалу они пока не имеют паритета (webpack умеет больше. пока что)
- Но Jest и Vitest просто грешно не сравнить в виду того что имея в основе аналогичные апи, vitest уделывает jest и по функционалу и по удобству.
Jest не только умудрились прибить гвоздями к require, что автоматически пораждает мильен костылей. И это еще можно было бы понять в контексте - все ради DX. Но какое там, даже базовые вещи делаются в Jest через жепу.
А Vitest смог сделать все на ESM, всего пару не значительных изменений и получилось удобно, понятно и быстро.
👍3💯1
Слыхали про Rabbit R1?
Кто не в теме - это девайс за 200$, ваш корманный AI помошник. Без подписок.
Очень популярная штука, вижу много обзоров на нее на ютубах. Выглядит эстетично, не правда ли?
Однако, реддиторы быстро раскусили где тут собака зарыта, выковыряли оттуда APK а запустили всю эту радость на андроид смартфоне.
Я сначала подумал - почему же они не выпустили просто приложение под андроид, наладить производство собственного дейваса это огромные деньги и куча времени. Но сам же понимаю, что как приложение эта штука вобще не интересна, и просто "один из" чатов которых и так уже не сосчитать.
Почему так? Люди любят коробочные решения? Или им проще заплатить 200$ за осязаемый девайс чем за софт?
Кто не в теме - это девайс за 200$, ваш корманный AI помошник. Без подписок.
Очень популярная штука, вижу много обзоров на нее на ютубах. Выглядит эстетично, не правда ли?
Однако, реддиторы быстро раскусили где тут собака зарыта, выковыряли оттуда APK а запустили всю эту радость на андроид смартфоне.
Я сначала подумал - почему же они не выпустили просто приложение под андроид, наладить производство собственного дейваса это огромные деньги и куча времени. Но сам же понимаю, что как приложение эта штука вобще не интересна, и просто "один из" чатов которых и так уже не сосчитать.
Почему так? Люди любят коробочные решения? Или им проще заплатить 200$ за осязаемый девайс чем за софт?
Виталий Зюин собрал коллекцию авторских блогов по фронтенду, веб-разработке и вокруг неё.
Как он сам пишет - "Специально отбирал именно ламповые авторские блоги, а не перепосты ссылок, документации или тексты не про код."
🔗 https://news.1rj.ru/str/addlist/Z6Efi4jXwe9lODcy
Как он сам пишет - "Специально отбирал именно ламповые авторские блоги, а не перепосты ссылок, документации или тексты не про код."
🔗 https://news.1rj.ru/str/addlist/Z6Efi4jXwe9lODcy
Telegram
Виталий Зюзин
Веб-разработчик, веду @web_platform, @zyuzin_vitaly_blog, @urban_trail
❤2
Что касается практического применения AI - я тут немного тормажу.
Мне показали huggingface.co, я многозначительно потыкал в него курсором, увидел кнопочки "задеплоить куда-то в облако за деньгу" на модельках и подумал - может быть в другой раз.
Наверное так бы и продолжал использовать браузерные версии чатов если бы меня не познакомили с Яном.
Ян - это гуйное приложение для запуска, использования и настройки моделек локально. Инуитивно и понятно, мне зашло.
Кроссплатформа, опенсорс.
https://github.com/janhq/jan
Мне показали huggingface.co, я многозначительно потыкал в него курсором, увидел кнопочки "задеплоить куда-то в облако за деньгу" на модельках и подумал - может быть в другой раз.
Наверное так бы и продолжал использовать браузерные версии чатов если бы меня не познакомили с Яном.
Ян - это гуйное приложение для запуска, использования и настройки моделек локально. Инуитивно и понятно, мне зашло.
Кроссплатформа, опенсорс.
https://github.com/janhq/jan
👍6
Переодически натыкаюсь на js код 10летней давности и прекрасно понимаю всех тех кто в те времена считал что js это говно и фатальная ошибка человечества.
У меня бы тоже горело такое дебажить
https://github.com/floridoo/concat-with-sourcemaps/blob/master/index.js
У меня бы тоже горело такое дебажить
https://github.com/floridoo/concat-with-sourcemaps/blob/master/index.js
GitHub
concat-with-sourcemaps/index.js at master · floridoo/concat-with-sourcemaps
Concatenate file contents with a custom separator and generate a source map - floridoo/concat-with-sourcemaps
😁7
Купил себе наконец лицуху на quokka. Во первых они чет расщерились и обявили майскую скидку на 50%, во вторых я только счас заметил что лицензия бессрочная, через год мне просто перестанут прилетать обновления (что меня совершенно устраивает)
🔥2
У Figma есть брат близнец - Penpot.
Figma я начал юзать еще когда она была в бэте, а Penpot - со вчера.
Они очень похожи, и казалось бы зачем было делать клон. Но разница есть, я уже вижу что penpot делался для верстальщиков, тогда как figma для дизайнеров.
В чем вы это выражается?
1. Penpot позволяет вам делать все то (и только то) что позволяет делать css и html. И вы везде встретите тут знакомые верстальщику термины. Например лейаут выбирается между grid и flex, настройки выравнивания детей - justify, space-around, space-between
2. Penpot генерит вам css. Более адекватный чем фигма.
Более ого они генерят вам верстку. С классами.
3. Penpot сразу на видное место выносит "палитру" шритов и цветов, что внезапно намного удобнее чем в фигме
4. Бесплатная версия более фичастая чем у figma
Вобщем если вам не логотипы рисовать а сайтец задизайнить надо - рекомендую
https://penpot.app/
Figma я начал юзать еще когда она была в бэте, а Penpot - со вчера.
Они очень похожи, и казалось бы зачем было делать клон. Но разница есть, я уже вижу что penpot делался для верстальщиков, тогда как figma для дизайнеров.
В чем вы это выражается?
1. Penpot позволяет вам делать все то (и только то) что позволяет делать css и html. И вы везде встретите тут знакомые верстальщику термины. Например лейаут выбирается между grid и flex, настройки выравнивания детей - justify, space-around, space-between
2. Penpot генерит вам css. Более адекватный чем фигма.
Более ого они генерят вам верстку. С классами.
3. Penpot сразу на видное место выносит "палитру" шритов и цветов, что внезапно намного удобнее чем в фигме
4. Бесплатная версия более фичастая чем у figma
Вобщем если вам не логотипы рисовать а сайтец задизайнить надо - рекомендую
https://penpot.app/
👍15
Work & Beer Balance
У Figma есть брат близнец - Penpot. Figma я начал юзать еще когда она была в бэте, а Penpot - со вчера. Они очень похожи, и казалось бы зачем было делать клон. Но разница есть, я уже вижу что penpot делался для верстальщиков, тогда как figma для дизайнеров.…
В комментариях отмечают что генерация так себе.
Сделал примерчик по сложнее чтобы посмотреть где проблемы будут - и нашел.
Вот макет, вот его код на jsfiddle
Итого:
1. height 100% в браузерах работает не так как в Penpot.
2. Проверить адаптивность макета в Penpot невозможно, размер холста блокируется в режиме with: 100% и менять в редакторе мы его не можем.
3. Верстка содрежрит мусорную информацию в виде data-tag "data-x="1097.999999999999" data-y="42""
4. Стили которые я хвалил по началу реализованы через css перменные, что круто. Не круто то что они почему-то инлайняться в html
5. Названия классов генерятся по непонятной логике, иногда названия осмысленные, иногда это просто хеши прямо в середине названия класса.
6. Компоненты реализованы плохо, по какой-то причине они оборачиваются в absolute див, хотя никаких таких настроек в самом редакторе я не выбирал.
7. box-sizing: border-box не нашел как включить из интерфейса, а без этого маржины уезжают из дива =(
Итого, задумка интересная, реализация не оч
Сделал примерчик по сложнее чтобы посмотреть где проблемы будут - и нашел.
Вот макет, вот его код на jsfiddle
Итого:
1. height 100% в браузерах работает не так как в Penpot.
2. Проверить адаптивность макета в Penpot невозможно, размер холста блокируется в режиме with: 100% и менять в редакторе мы его не можем.
3. Верстка содрежрит мусорную информацию в виде data-tag "data-x="1097.999999999999" data-y="42""
4. Стили которые я хвалил по началу реализованы через css перменные, что круто. Не круто то что они почему-то инлайняться в html
5. Названия классов генерятся по непонятной логике, иногда названия осмысленные, иногда это просто хеши прямо в середине названия класса.
6. Компоненты реализованы плохо, по какой-то причине они оборачиваются в absolute див, хотя никаких таких настроек в самом редакторе я не выбирал.
7. box-sizing: border-box не нашел как включить из интерфейса, а без этого маржины уезжают из дива =(
Итого, задумка интересная, реализация не оч
Пока эпл смакует то что они стали тем злом с которым должны были бороться, я листаю официальный мануал моего пк, который расказывает как его самому собрать и разобрать (в картинках)
👎1🤔1
Ваш дед только что обнаружил что если на youtube зажать левую кнопку мыши то видео будет воспроизводиться на x2 скорости
🤯15
Есть такая фича на фронте - возобновляемая загрузка (Resumable Upload).
Это когда вы закидывайте ваш архив мемов на 5 гигов, а он на фронте распиливается и загружается в бэк кусочками по-меньше (chunks).
Все это для того чтобы:
a) Если соединение оборвется, можно было сделать ретрай не с самого начала, а только с незагруженого кусочка
б) Можно было распаралелить (а следовательно - распределить) загрузку (например грузить по 3 кусочка паралельно)
в) Самое главное - если вы забыли что у вас там идет загрузка и закрыли браузер, выключили ноут, на следующий день можно было прийти и возбновить загрузку с того места где мы остановились
Вобщем все чтобы оградить ваших пользователей от данного опыта.
(технически так же позвоялет продолжить загрузку этого же файла с другого устройства , или даже грузить с нескольких одновременно, но это уже out of scope)
Принцип работы (упрощенно):
1. Создаем "сессию" загрузки
2. Пилим файл на кусочки,
3. Грузим все файлы в любом порядке прикрепив номер кусочка и айди сессси
4. Закрываем сессию когда все кусочки загружены (в этот момент склеиваем их на бэке в один файл).
5. Самое главное - у нас должен быть эндпоинт который скажет нам какие кусочки уже загружены для этой сессии (т.е. - что можно скипать при возбновлении загрузки)
Что у нас есть на фронте для реализации:
- Есть мамонт resumable.js, сегодня интересен только в качестве музейного экспоната
- Есть filepond - имеет навароченую интерактивную часть с приятным дизайном, однако техническая реализация довольно кривая, много багов, почти нет тестов, поверхностыне типы (пытался поправить но чет мейнтейнеру не зашло)
-Есть tus.io - самое здравое решение на сегодняшний момент. И дело тут даже не в качестве кодовой базы. Ниже обьясню.
Как вы уже заметели, это фича не чисто фронтовая, она тесно связана с бэкэндом, на стороне которого должна быть реализована пачка эндпоинтов, которые работают определенным образом.
Так что если делать бэк под фронт под конкретную либу - она протекает в ваш бэкэнд и, вероятно даже в БД.
Tus - это не либа, это протокол. Причем под этот протокол уже написаны реализации под разные ЯП и окружения, как для фронта так для бэка. Вобщем есть из чего выбрать.
Впрочем есть вариант не писать бэк вообще, и взять multipart upload от aws S3, что по сути готовая реализация бэкэнда (на собственном протоколе) для resumable uploads
Ну и наконец, у нас есть uppy.io - это все-включено-мега-комбайн который в том числе включает в себя и поддержку tus протокола, и 3S multipart upload и еще с десяток всяких других сервисов типа дропбокса и гуглдрайва,
(не забудьте завести голден ретривера) и вобще умеет делать разную дичь типа - стриминга вашей вэбки в ваш onedrive (what?)
Это когда вы закидывайте ваш архив мемов на 5 гигов, а он на фронте распиливается и загружается в бэк кусочками по-меньше (chunks).
Все это для того чтобы:
a) Если соединение оборвется, можно было сделать ретрай не с самого начала, а только с незагруженого кусочка
б) Можно было распаралелить (а следовательно - распределить) загрузку (например грузить по 3 кусочка паралельно)
в) Самое главное - если вы забыли что у вас там идет загрузка и закрыли браузер, выключили ноут, на следующий день можно было прийти и возбновить загрузку с того места где мы остановились
Вобщем все чтобы оградить ваших пользователей от данного опыта.
Принцип работы (упрощенно):
1. Создаем "сессию" загрузки
2. Пилим файл на кусочки,
3. Грузим все файлы в любом порядке прикрепив номер кусочка и айди сессси
4. Закрываем сессию когда все кусочки загружены (в этот момент склеиваем их на бэке в один файл).
5. Самое главное - у нас должен быть эндпоинт который скажет нам какие кусочки уже загружены для этой сессии (т.е. - что можно скипать при возбновлении загрузки)
Что у нас есть на фронте для реализации:
- Есть мамонт resumable.js, сегодня интересен только в качестве музейного экспоната
- Есть filepond - имеет навароченую интерактивную часть с приятным дизайном, однако техническая реализация довольно кривая, много багов, почти нет тестов, поверхностыне типы (пытался поправить но чет мейнтейнеру не зашло)
-Есть tus.io - самое здравое решение на сегодняшний момент. И дело тут даже не в качестве кодовой базы. Ниже обьясню.
Как вы уже заметели, это фича не чисто фронтовая, она тесно связана с бэкэндом, на стороне которого должна быть реализована пачка эндпоинтов, которые работают определенным образом.
Так что если делать бэк под фронт под конкретную либу - она протекает в ваш бэкэнд и, вероятно даже в БД.
Tus - это не либа, это протокол. Причем под этот протокол уже написаны реализации под разные ЯП и окружения, как для фронта так для бэка. Вобщем есть из чего выбрать.
Впрочем есть вариант не писать бэк вообще, и взять multipart upload от aws S3, что по сути готовая реализация бэкэнда (на собственном протоколе) для resumable uploads
Ну и наконец, у нас есть uppy.io - это все-включено-мега-комбайн который в том числе включает в себя и поддержку tus протокола, и 3S multipart upload и еще с десяток всяких других сервисов типа дропбокса и гуглдрайва,
(не забудьте завести голден ретривера) и вобще умеет делать разную дичь типа - стриминга вашей вэбки в ваш onedrive (what?)
YouTube
Масяня. Эпизод 20. Даунлоад
Да, были временя когда скачать даже просто масяньский мульт весом в 3-4 мегабайта могло быть проблемой. Модемы на телефонных проводах работали отвратительно, связь постоянно отрубалась. Иногда, как в этом мульте, в самый неподходящий момент. Этот мульт…
🔥19👍3❤1
Постоянно гуглю этот тип, так что решил обронить его тут.
Полезная вещь для дебага, позвоялет "развернуть" сложный тип. Ну то-есть выводит конечный тип после всех дженериков юнионов и тп.
Если совсем просто - вместо
Бонус контент:
чтобы тс вам в ошибках не обрезал тип через ... надо включить
#typenoscript #ts
Полезная вещь для дебага, позвоялет "развернуть" сложный тип. Ну то-есть выводит конечный тип после всех дженериков юнионов и тп.
Если совсем просто - вместо
SomeGeneric<SomeOtherGeneric, AnotherGeneric<API["some"]>> получаем структуру из js примитивов/**
* Debugging type that will display a fully resolved type
* in Intellisense instead of just the type aliases
*
* @type {T} The type to expand out
*/
type ExpandRecursively<T> = T extends (...args: infer A) => infer R
? (...args: ExpandRecursively<A>) => ExpandRecursively<R>
: T extends object
? T extends infer O
? { [K in keyof O]: ExpandRecursively<O[K]> }
: never
: T
type Expand<T> = T extends (...args: infer A) => infer R
? (...args: A) => R
: T extends object
? T extends infer O
? { [K in keyof O]: O[K] }
: never
: T
Бонус контент:
чтобы тс вам в ошибках не обрезал тип через ... надо включить
noErrorTruncation в tsconfig#typenoscript #ts
🔥26👍8
Есть такая ловушка в практике разработчика в которую я сам попадал несколько раз.
Когда у нас есть какая-то проблема, но у нас недостаточно знаний о системе, мы пытаемся ее решить в той области, в которой мы чувствуем себя уверенно.
Такие решения, те кто по опытней, называют костылями, и мы когда становимся мидлами - ругаем наших джунов, за то что их фикс лечит симптомы а не проблему.
Но иногда все не так очевидно, иногда костыль сделан из элитной породы дерева, лакированый, и имеет форму библиотеки с 1000 звездами на гитхабе.
Будьте бдительны, отличить не так сложно - хорошие решения просто работают, плохие постоянно нуждаются в новом слое костылей и увеличении сложности.
Когда у нас есть какая-то проблема, но у нас недостаточно знаний о системе, мы пытаемся ее решить в той области, в которой мы чувствуем себя уверенно.
Такие решения, те кто по опытней, называют костылями, и мы когда становимся мидлами - ругаем наших джунов, за то что их фикс лечит симптомы а не проблему.
Но иногда все не так очевидно, иногда костыль сделан из элитной породы дерева, лакированый, и имеет форму библиотеки с 1000 звездами на гитхабе.
Будьте бдительны, отличить не так сложно - хорошие решения просто работают, плохие постоянно нуждаются в новом слое костылей и увеличении сложности.
🫡8👍3
Не секрет что популярный - не значит качественный, и наоборот.
Качественные решения с трудом проникают в нашу практику, а некачественные однажды набрав хайпа разрастаются как сорняк.
Далеко ходить не надо, возьмем Next.js - обрастает костылями и сомнительными решениями, но его все равно "хавают".
Сегодня у нас есть уникальная возможность посмотреть на примере как это работает.
alexgriss поделился своими мыслями о том как он приходит к выбору next.js, в своем посте про выбор стэка для нового проекта.
Речь там не о Proof of Concept или MVP, это имено продуктовый стэк.
Обратите внимание - в листе приоритетов нету ничего что должно волновать иженера:
- Подерживаемость
- Производительность
- Вендорлок
- Куда движется это решение и есть ли у него будущее
и так далее.
Вместо этого вы увидите что
- Мне надо побыстрее
Выводы делайте сами, от себя только добавлю что пункт "я должен быть знаком с технологиями" зависит полностью от вас.
Не откладывайте на завтра, пробуйте технологии сегодня чтобы потом не решать судьбу нового проекта основываясь на том что вы попробовали в 2017 году
Качественные решения с трудом проникают в нашу практику, а некачественные однажды набрав хайпа разрастаются как сорняк.
Далеко ходить не надо, возьмем Next.js - обрастает костылями и сомнительными решениями, но его все равно "хавают".
Сегодня у нас есть уникальная возможность посмотреть на примере как это работает.
alexgriss поделился своими мыслями о том как он приходит к выбору next.js, в своем посте про выбор стэка для нового проекта.
Речь там не о Proof of Concept или MVP, это имено продуктовый стэк.
Обратите внимание - в листе приоритетов нету ничего что должно волновать иженера:
- Подерживаемость
- Производительность
- Вендорлок
- Куда движется это решение и есть ли у него будущее
и так далее.
Вместо этого вы увидите что
- Мне надо побыстрее
Выводы делайте сами, от себя только добавлю что пункт "я должен быть знаком с технологиями" зависит полностью от вас.
Не откладывайте на завтра, пробуйте технологии сегодня чтобы потом не решать судьбу нового проекта основываясь на том что вы попробовали в 2017 году
Telegram
alexgriss.tech
Я — Александр Григоренко, фронтенд-архитектор и продуктовый инженер.
Пишу о зрелом инженерном мышлении, лидерстве, архитектуре и продуктовой разработке, создаю образовательный проект Web Audio Lab.
Сайт: https://alexgriss.tech
ТГ: @astroscientist
Пишу о зрелом инженерном мышлении, лидерстве, архитектуре и продуктовой разработке, создаю образовательный проект Web Audio Lab.
Сайт: https://alexgriss.tech
ТГ: @astroscientist
💯10🤡3👍1🔥1
На канале mefody_dev появился класный пост про то как сделать модалки с анимациями на нативных апишках.
(codepen демка)
В лисе анимашки не работают, но может через год два уже можно будет тащить в прод
(codepen демка)
В лисе анимашки не работают, но может через год два уже можно будет тащить в прод
Telegram
mefody.dev
Доброжелюбный бородач про фронтенд, тимлидство, спикерство.
Автор — @dark_mefody
Канал про работу: @mefody_work.
Не размещаю рекламу в своём канале. Даже за деньги. Даже большие.
Автор — @dark_mefody
Канал про работу: @mefody_work.
Не размещаю рекламу в своём канале. Даже за деньги. Даже большие.