Андруша пишет код – Telegram
Андруша пишет код
1.25K subscribers
137 photos
1 video
1 file
218 links
Download Telegram
Удивлён насколько vitest передовая штука.

Да, я знал что vitest в отличии от jest прекрасно работает с ESM кодом. Но я даже не подозревал насколько они пошли дальше. К примеру, они позволяют писать тесты на ТИПЫ. На типы, Карл. Такого я не ожидал уж точно. Для писателей библиотек это просто маст хев.

Дока: https://vitest.dev/guide/testing-types
Как выглядят тесты в бою на примере моей маленькой библиотечки: https://github.com/XaveScor/signal-components/blob/f0271fd2c1ae50bf159b484b2928d654060ef536/src/props.test.ts#L78-L110
👍27💩41🤩1🤡1
Сегодня понедельник, а значит интересности от меня за прошлую неделю

- ditox.js.org
Весьма интересный для меня IoC контейнер. Возможно, его реализацию и идеи можно будет куда-нибудь затащить ко мне в проект. Возможность заменять любой узел очень привлекательна как для тестов, так и для разработки

- https://knip.dev
Популярный, но прошедший мимо меня, вычищатель неиспользуемого кода.

- https://x.com/kotkoa/status/1785731445106827496?s=52&t=ohIjgaVZLt6vr9X0nBz1jg
История как можно подзадолбаться чтобы наиболее быстро получить лучшее предложение работы на рынке
👍8💩2🤡1
Цифровое образование

Последние 4 месяца я занимался вплотную изучением английского, так как это хороший ключ к глобальному рынку.
И у меня произошло 3 открытия:

1) Я разучился учиться. Это прямо сложно. Я обучался оффлайн в специализированной школе по 5 часов 5 дней в неделю. И где-то через 2.5-3 месяца я чувствовал натуральную усталость и нежелание продолжать. Если вы обучаетесь сейчас, то рекомендую не терять этот навык, потому что вкатываться обратно - это прямо перелом себя. Никому не советую это испытывать на себе, но, вероятно, тебе, читатель, это придётся испытать, если хочется что-то сделать.

2) Мир за последние лет 10-15, внезапно(нет) изменился. Теперь для учёбы достаточно просто планшета. По типу айпада. Главное, чтобы у него было перо и камера. Так как с помощью камеры можно делать фотографии распечаток и рисовать на них всё что тебе требуется. А перо - это очень удобный способ ввода.
Только советую не смотреть именно решения по типу киндла, remarkable и т.п. Камера - это необходимость. Как и браузер, мессенджеры и т.п. Потому что вам практически каждый день понадобился или сделать фото, или открыть pdf, или сделать скриншот сайта или каким-либо другим образом получить изображение из внешних источников.

3) Писать и рисовать - очень полезно для обдумывания. К примеру, я сейчас пилю библиотеку, и её прототипирование на бумаге/планшете - это прямо маст хев. Где-то 2-3 месяца просто обдумывания и рисования на бумаге позволило мне избежать многих проблем, по сравнению с ситуацией если бы я взял и сразу попрыгал писать код.
Из забавного: одну из фичей я затащил в библиотеку не думая, просто потому что она показалась хорошей. В итоге: в следующей версии пришлось переделывать апи, так как я не учёл одной суровой штуки.

Теперь, благодаря этому марафону, блокнот в виде планшета и карандаш - это мой постоянный друг почти во всём. Думать в голове - попросту максимально неэффективно. Рисовать - куда проще.
👍28💩5🤡4👎21🔥1🤬1
Новый месяц - новая реклама себя.

Если очень кратко: то я за деньги консультирую по разным вопросам. Если очень длинно: https://news.1rj.ru/str/xavescor_meetings_logs/6

Интересный кейс человека, который арендовал меня на одну сессию:
Люди часто не догоняют насколько лычки могут упрощать жизнь.
В данном случае, клиент пытался вкатиться в айтиху и после этого пойти в универ. Хотя, если ты думаешь пойти в универ, то ты приобретаешь прямо чит для вкатышей. К студентам требования куда ниже и куча крупных компаний прямо нанимает только студентов на некоторые направления. И это хороший способ вкатиться, если возраст и статус позволяет.
Советую не игнорировать то что у вас уже есть, возможно, это будет прямо суровым преимуществом для вас, по сравнению с другими кандидатами.
👍16💩8🤡1
Как я изучал английский

В догонку к https://news.1rj.ru/str/xavescor_code/147 хочу описать конкретную задачу, на основе которой я принял в свои инструменты планшет с ручкой.
Этой задачей было(и есть) изучение английского. В момент, когда Рф вторглась в Украину, мой уровень английского был примерно А-2, т.е. прямо ниже нуля. Поэтому, по факту, у меня около 2 лет сейчас изучения иностранного языка почти с нуля и мне хочется немного поделиться и зафиксировать некоторые вещи, как в современном мире можно изучать(не обязательно эффективно и быстро) английский на примере своего опыта.

1) изучение грамматики. Грамматика - это наверное самая дибильная вещь, которую не хочется изучать. Потому что это сложно. Научиться незаметно для себя применять грамматику мне помогло 2 инструмента:
- grammarly.com. Это автоматическая исправлялка ваших текстов на английском. Мне повезло, что за последние полтора года я пишу относительно много текстов на английском, поэтому исправления grammarly помогли мне незаметно для себя изучать грамматику. Тебя исправят в первый раз, во второй, в третий. В пятый же ты осознаешь ошибку и будешь её допускать куда реже. Это прекрасный инструмент для беглости грамматики
- gemini.google.com. Эта ЛЛМка куда лучше чатгпт 4 для изучения английского. Её основное преимущество тут: она не подчиняется командам. Почему это плюс? Потому что во время изучения языка ты не можешь дать чёткую интересную команду. Я, чаще всего, копипастил в gemini непонятные фразы и просил их объяснить мне на английском. И объяснения были вполне хорошими. Не забываем ещё о grammarly, которая исправляет тебя во время написания команд.

2) Лексикон: тут мне помогло чтение книг и, снова, gemini. Gemini обучалось на всём интернете, из-за чего все книги, которые вы читали или будете читать, уже есть в индексе ЛЛМки. Это приводит к тому, что gemini способна не только объяснить смысл самого предложения, но и объяснить контекст предложения вокруг него.
Так же с gemini ты можешь играть в разные игры, просить генерировать упражнения и многое другое. В комментарии я прикреплю скриншоты диалогов, которые у меня получались

3) Говорение: тут мне помогло, внезапно, говорение. Но не в локальных языковых клубах, а я поехал в Канаду, чтобы общаться там под наблюдением преподавателя. Локальные языковые клубы сыграли со мной злую шутку. Я стал говорить не на английском, а на локальном диалекте, который понятен только членам клуба. Не советую совершенно языковые клубы.
Так же я нашёл discord канал популярного ютубера-полиглота LanguageSIMP. У него в дискорде можно найти желающих пообщаться со всего мира на практически любом популярном языке. Интернет и дискорд сообщества - это вообще пушка для говорения

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

Но в этом, внезапно, помогает прямо сейчас, эстеты отвернитесь, тикток. Там всем максимально плевать с высокой колокольни на качество звука и качество контента. Именно на видео где подросток ссыт себе в штаны вы найдёте то как общаются нейтивы. Прямо сейчас это основной мой канал для обучения listening. К примеру, могу посоветовать https://www.tiktok.com/@harbourcustoms?_t=8mwF9WjrEKD и подобных ребят. Научитесь понимать их - понимать живую речь станет на порядки проще.
🤡21👍15💩5
Я с интересом посматриваю на спеку сигналов(https://github.com/tc39/proposal-signals) и недавно понял насколько реакт разрабам будет просто переходить на эту логику.

Ну посмотрите, у нас есть абсолютно прямые аналоги уже привычных инструментов:
React.useState -> new Signal.State
React.useCallback -> просто функция () => {}
React.useMemo -> new Signal.Computed(...)
React.useEffect -> new Watcher(...)

Отдельно мы можемь обрабатывать unmount. В таком случае наш рендеринг фреймворк может прокинуть нам AbortSignal, через который мы уже можем обработать анмаунт.

Нет ни одной причины с точки зрения DX завязываться на текущую систему, которая на каждый чих требует ререндер.
👍18💩5🤡2🍾1
Понедельник. Интересное за прошлую неделю для меня:

Как запускать LLMки на домашнем ПК:
https://medium.com/@madalina.lupu.d/how-to-shrink-large-language-models-quantization-and-1-bit-llms-explained-c50c76df0b42
https://news.1rj.ru/str/artalog/1327

Сырость и готовность реакт компилятора:
https://www.developerway.com/posts/i-tried-react-compiler
ТЛРД - могло быть лучше

Внезапно, сборная солянка вьюшных хуков на любой вкус. Пример всем реактивным либам, что реактивные структуры данных - это как минимум неплохо:
https://vueuse.org/

Почему всегда нужно пытаться, если в худшем варианте у тебя в жизни просто ничего не изменится(Волкам и прочим не честным на руку людям, привет):
https://x.com/7rulnik/status/1797565614329880604
👍8💩3🔥2🤡1
Тут в одном из чатов промелькнула, вроде как очевидная мысль, но которая мне в голову не приходила.

Идея простая: сидеть на разработческих машинах на alpha/beta версиях софта, чтобы находить баги как можно раньше, чтобы твоё приложение в будущем с большей вероятностью не ломалось при апгрейде на новую версию рантайма.

В нашей работе это можно применить, к примеру, к Nodejs. Просто работая ты получаешь и тестирование фич, и доп скорость. Минусы? Иногда надо переключаться на LTS, если ты столкнулся с лютым багом, который мешает работать. В остальном, кмк, одни плюсы.
Аналогично можно поступить и с браузерами: сидеть на canary версии хрома, nighly FF и т.п. чтобы просто в фоне проверять что у тебя сайт не разломается в будущих версиях браузера.

Я, лично, перешёл полностью на бета версии софта. Пока неудобств сильных не заметил. Пока всем советую.
👍12🤡7💩4
Недавно один мой хороший знакомый столкнулся с пренеприятнейшей ситуацией: лишился своего основного номера телефона, из-за того что он им не пользовался из-за переезда.

А номер телефона - это одна из основных штук, которая есть в современном мире. К нему прикрепляются все аккаунты, государство через номер телефона взаимодействует со своими гражданами. И из-за этого переезд в другую страну - это огромная заноза в заднице. Ты попросту не знаешь где ты регистрировался. И это прямо усложняет жизнь. Поэтому я стараюсь не привязывать номер телефона к сервисам. Если у сервиса есть 2fa, который работает не через СМС, то надо пользоваться не через СМС.

Но не всегда подобное возможно. И тут приходит на помощь password manager. Как раз Apple недавно сделала попытку вкатиться на этот рынок. И даже их решение на порядок лучше чем хранить пароли в голове.
Так вот, как помогает в этой задаче password manager? Просто: у вас есть список всех ваших аккаунтов за всю вашу жизнь. Пройдитесь по каждому из них и проверьте привязан ли туда ваш номер телефона. Так вы защититесь от доступа нового владельца вашего старого номера к вашим данных. Да, это геморно, но безопасность куда важнее вашего гемора.

Я лично использую 1password.com, так как он позволяет хранить так же кредитные карты, заметки, ssh ключи, доступы к БД, работать из терминала(https://news.1rj.ru/str/xavescor_code/131) и многое многое другое. Если вы не пользуетесь никаким менеджером паролей, то вы очень сильно усложняете свою жизнь. Советую задуматься об этом
👍12💩4🤡3
Понедельник. Интересное за прошлую неделю для меня:

Выпуск подкаста. Аудио/Видео. Нарциссизм и что ожидать от таких людей:
https://news.1rj.ru/str/zachemmt/329

Запуск любого кода в воркерах. Даже того что не предполагалось. К примеру, всякие аналитики и т.п:
https://partytown.builder.io

Playwright уже на уровне cypress, а vite вскоре обгонит webpack:
https://x.com/filip_hric/status/1800538141280850409
Очень мало времени(около 1.5-2 лет) нужно реально хорошим инструментам, чтобы обогнать заплесневейших лидеров

Пример почему таймзоны это сложно и ни в коем случае нельзя работать со временем руками:
https://www.timeanddate.com/time/time-zones-interesting.html
Опишу так же свой опыт жизни в другой таймзоне, относительно продуктов, которыми я пользовался:
Я некоторое время пожил в таймзоне UTC-7, из-за чего время с Казахстаном отличалось на ровно 12 часов. Я жил для него в прошлом.
Передаю привет всем менеджерам, которые для удобства клиента запрещают искать транзакции в БУДУЩЕМ. Потому что у меня ВО ВСЕХ банках не работало отображение транзаций, так как транзакция проходила образно за 5 марта, а у тебя в это время 4 марта. А когда у клиента 4 марта, то зачем позволять ему запрашивать информацию за 5 марта? Это же БУДУЩЕЕ, там 100% ничего нет, правда? Короч, вы не умеете работать со временем. И не пробуйте даже.

https://socket.dev/npm/package/signal-components/
Удобный сайтец, который показывает чуток больше информации по вашим зависимостям. К примеру, я туда хожу, чтобы глядеть ченжлоги. Это чуток удобнее для меня

https://haveibeentrained.com
Немного забавный ресурс. "Загрузи к нам работу и мы 100% не будем на ней тренировать модель в будущем". Я похехал, но вдруг и реально оно работает.
👍15💩6🤡4
Эта неделя была настолько скучной, что я думал вообще ничего не писать, но:

- Весёлость в одной из зависимостей свелта:
https://github.com/A11yance/axobject-query/pull/354
Чувак 1 PR'ом затащил 16 СВОИХ зависимостей в рантайм, заменил jest на СВОЙ аналог и заменил стандартную CI джобу на поделку, написанную собой.
И самое весёлое: никто не знает каким образом этот человек получил доступ к репозиторию. Просто добрый человек, который добавил поддержку node 0.4. Очень полезно, правда?)

- Реакт кардинально ломает обратную совместимость, изменив рендеринг некоторых апи с параллельного на последовательный. Что ломает кучу библиотек, которые позволяют вам делать запросы из рендера, так как они опираются на Suspense в своей логике
https://github.com/facebook/react/issues/29898
Но самое печальное, что эта проблема чуток глубже. Аж тянет "почему реакт идёт куда-то не туда pt4".

- Версель начинает монетизироваться, поэтому опенсорс идёт в контратаку. Проект, который позволяет запускать next со всеми верселевскими апихами поверх AWS или просто рантайма ноды.
https://open-next.js.org/

- Так же появились результаты state of js 2023 https://2023.stateofjs.com/en-US. Но мне там вычленить почти нечего
👍13🤡41💩1
Channel photo updated
Почему реакт идёт куда-то не туда pt4

Ограничусь просто ссылкой на https://phryneas.de/react-server-components-controversy.

Плюс обращаю внимание на этот абзац.

So, at the beginning of 2023, I started poking the React team, and the maintainers of Apollo Client, TanStack React Query, and Redux got a meeting with the React team. The message was essentially “yeah , you can try to write an implementation now”. So we did.

Но, как уже вам известно, это не остановило авторов реакта от https://github.com/facebook/react/issues/29898
👍13💩2🤡2
Ну вот и ко мне домой пришёл Rust.

Мы на проекте используем SWC, так как он весьма быстро собирает код. И вот после обновления на последнюю версию оказывается, что наши сорсмапы - не сорсмапы. Как минимум по мнению SWC.

И для дебага этой ошибки нужно всего лишь выучить раст. Обожаю современный мир, где у тебя нет возможности дебажить свои же тулзы.
🤡21👍10💩6😁3🥰1😢1
typenoscript & vitest

Typenoscript - это одновременно и прекраснейшее что случалось со фронтом, когда ты пишешь бизнес-логику. Есть подсказки. Ошибки ловятся. Всё прекрасно.
Но так получилось, что мне захотелось написать свою библиотеку @signal_components. И тут я столкнулся с ужаснейшей частью: ты не можешь дебажить типы в привычном для нас виде.
А они, в случае написания библиотеки, могут быть весьма сложными.

Что мы делаем, когда нужно продебажить код? Верно: или ставим брейкпоинт, или ставим console.log и смотрим какие там значения у переменных. Но у TS подобное недоступно. Ты не можешь поставить брейкпоинт во время вычисления типа. В итоге, единственный нормальный выход - TDD. Другими словами, пишем тесты на каждый чих.

В итоге типы превращаются в портянку со скриншота. Ну или вот ссылка, если хочется потыкать самостоятельно https://github.com/XaveScor/signal-components/blob/5ef372090a45535fcfc3364d0606cb2e8e43be8b/src/types. Но я пришёл к тому, что это единственный способ одновременно и дебажить типы, и писать их.

И вот тут уже играет vitest. Интеграция всего в единый тестраннер работает удивительно хорошо. У него есть и cjs, и esm, и ts, и проверка типов, и он позволяет писать тесты в одном файле с логикой(https://vitest.dev/guide/in-source.html), и запускать тесты в браузере(https://vitest.dev/guide/browser.html). Да, часть функций находится в активной разработке, но аргументов за неvitest уже почти не остаётся.
👍22💩4🤡2💯2🤝2
llama.ttf

https://github.com/fuglede/llama.ttf

Как вам идея шрифта, в котором запущена нейронка?

Спасибо подобным наркоманам, потому что я теперь знаю, что в шрифтах можно запускать WASM. (Что?)
https://github.com/harfbuzz/harfbuzz/releases/tag/8.0.0

Вот кому это пришло в голову? Слишком мало мест куда майнер можно вперндюрить?
*Ушёл отключать на всех машинах эту дырень в безопасности*
🤯7😁5💩4🤡3🔥2
https://blog.cloudflare.com/declaring-your-aindependence-block-ai-bots-scrapers-and-crawlers-with-a-single-click

А вот и первое на моей памяти решение, чтобы защищаться от тренировки на своём контенте. И учитывая что это сделало cloudflare - обучаться теперь будет весьма геморно, так как cloudflare один из самых крупных игроков на своём рынке.
👍8💩4🤡31😁1
Понедельник. Ссылки.

vitest 2.0. Новый мажор лучшего инструментария для тестов.
https://github.com/vitest-dev/vitest/releases/tag/v2.0.0

Новый сборщик на расте номер 1005001. Единственная вещь почему на него можно обратить внимание: он разрабатывается командой vite. А значит потенциально он будет заменой rollup в будущих релизах vite
https://rolldown.rs/about

Ещё одна причина почему нельзя грузить ресурсы с чужих доменов. Если есть возможность - всегда локализуйте зависимости: скрипты, шрифты и т.п.
https://sansec.io/research/polyfill-supply-chain-attack

Очень годный разбор давно опубликованных результатов state of js
https://www.youtube.com/watch?v=1dReRMvwckY

Инструмент для тестирования запросов нормального человека. Не мокайте fetch или xhr, если это можно не делать
https://mswjs.io

У реакта большой дефицит нормальных DnD решений. Возможно, это одно из нормальных
https://www.neodrag.dev

Прошедший скандал с чуваком, который добавлял поддержку ноды 0.4 в свелт, показал прекраснейший проект. Он направлен на то, чтобы заменять зависимости на уровне менеджера зависимостей и не качать устаревшую дичь к вам на машины
https://github.com/SukkaW/nolyfill
👍15💩43🤡2
Совместимость и технический PR.

Обратная совместимость с конкурентами - это то преимущество, которое почему-то современные решения почти полностью игнорируют. И я не говорю про необходимость обратной совместимости между версиями, которую, к примеру, полностью игнорирует react-router. Я говорю про обратную совместимость между решениями, в случае когда одно решение пытается заменить собой другое.

Возьмём реакт мир: у нас куча библиотек, которые являются "убийцами редакса", "убийцами react-router", "убийцами реакта", но которые предоставляют примерно 0 совместимости с предыдущими решениями. Почему-то авторы либ считают, что пользователи с радостью будут брать и переписывать проект полностью на новое решение, что пользователи сами будут придумывать как дружить старое решение и новое, что нужно лишь придумывать как делать прекрасный новый мир, не задумываясь над старым.


Хорошим примером противоположного подхода является мной обожаемый vitest, на который мы недавно мигрировались буквально за неделю с jest'a. Причём большую часть времени мы занимались тем, чтобы подружить vitest с нашей немного чуждой системой для фронтенд мира(Bazel). Схожее апи с jest'ом на 90-95% позволило не просто переписывать тесты, не включая мозг, а перепоручить этот опыт LLMке, которая сделала почти что всю работу за людей. Достаточно было промта для chatgpt 4o:

Rewrite the typenoscript file from jest to vitest. Also port the noscript to ESM. Give me ONLY the total file content. No explanations!. No markdown. I want to paste your response directly into the file. Do NOT erase types inside the file.
[File]
${content}

И 95% кода было успешно переписано. Да, в некоторых ситуациях были ошибки. Но их легко поправить руками. Но почти вся рутина была автоматизирована.


Другим хорошим примером является preact. Эти ребята сделали почти полную совместимость с реактом, добавив нормальное решение в виде сигналов. Что позволяет взять и максимально постепенно переписывать код на реактивные рельсы. В отличии от solid'a, который паразитирует на реакте, но заставляет полностью переписывать код.

Ещё один хороший концептуально пример: https://github.com/SukkaW/nolyfill. Чувак ничего не изобретает и просто создаёт более эффективные решения на основе существующих апи.

Если вы захотите разрабатывать библиотеку, то сначала подумайте как ваша концепция ложится на то, чтобы создать имплементацию текущего плохого решения на вашей либе. К примеру, как реализовать редакс на ваших примитивах, чтобы пользователь 1 движением мог заменить его на вашу реализацию. Потому что простая интеграция - это ключ к продажам вашего решения.
👍20💩5🤡4
ljharb

Ситуация с ljharb продолжает быть веселее и веселее. Это тот чувак, который решил в доку свелта добавить поддержку ноды 0.4.

Вчера я пытался в очередной раз апнуть наш проект до eslint 9 и увидел, что eslint-plugin-import принадлежит как раз этому челобеку. Следовательно, по классике, этот плагин поддерживает eslint 2, node 4 и прочую некрофилию. А так же чувак попросту не добавляет поддержку flat config и eslint 9. И вот история в том, что игнор идёт уже больше года. В итоге появляется eslint-plugin-import-x: https://www.npmjs.com/package/eslint-plugin-import-x, который поддерживает только eslint 8/9, не имеет кучи говнозависимостей и пока поддерживается новым ментейнером.

Другая история происходит прямо сейчас про библиотеку traverse. Как легко догадаться, туда тоже пришёл ljharb. В итоге ша маемо, то маемо. Но благо, благодаря этому появилась библиотека neotraverse: https://www.npmjs.com/package/neotraverse, которая является форком оригинальной, но без всей этой дичи от нашего поциента.

В итоге, если хотите получить популярный проект, то алгоритм чуток прост:
1. Смотришь, в какой очередной утилитарный проект пришел ljharb и навернул секурности
2. Делаешь форк от прошлой версии без зависимостей, обзываешь neo/nano/x-оригинальное имя и публикуешь
3. Профит, благодарные юзеры благодарны на ровном месте, репутация локального спасителя экосистемы

Так шо велком, заработать лычку на популярной библиотеке сейчас как никогда просто.
👍23🤡6😁4💩4🔥21💯1