TGViewer
Channel Public Channel
Андруша пишет код

Андруша пишет код

@xavescor_code

Subscribers
1.33K
Photos
163
Videos
2
Links
244

Showing posts older than #119 · Back to latest

Older Posts 19 shown
Post #118 995
Если вы хотите реально знать свои инструменты, но надо знать не только преимущества, но и недостатки. Одним из недостатков тайпскрипта на этой неделе для меня оказалось отсутствие Exact типа.

Мы используем кодген для слоя связи с бекендом и у нас огромное количество функций в стиле getPosts({param1: value1, …}).
И вот тут нас ждала засада.
Представьте: бекенд меняет контракт, переименовывая один параметр. И, спасибо монорепе, мы сломаем CI, если типы не будут совпадать с логикой.
Но есть один нюанс. У нас могут быть Optional поля. И вот тут в колено во всю силу стреляет дак-тайпинг, потому что {aba: 1} является подтипом {aaa?: 1}. И ты никак переименование aaa в aba не отловишь.

В итоге придётся кодгенить зод схему, чтобы отловить изменения контрактов в рантайме. Так что теперь нужно писать валидаторы схем не только при получении данных, но и при их отправке(
  • 💩 7
  • 👍 5
  • 🤡 2
Post #116 1.06K
Ещё одна причина почему пока что можно не опасаться захвата нейронными сетями наших рабочих мест.

Вот понадобилось мне найти как сделать Exact тип в тайпскрипте, чтобы в кодген можно было передавать только те аргументы, что описаны в спеке. Так как если у вас есть optional поля, то вы не защищены от опечаток.
{aaa: 1} имеет тип {aa?: number}. Спасибо утиной типизации.

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

https://www.squash.io/tutorial-on-exact-type-in-typescript/#:~:text=In%20TypeScript%2C%20the%20exact%20type,with%20strict%20and%20precise%20shape

Нейронки прямо сейчас хоронят сами себя, так как генерят некачественный контент, а потом на нём же обучаются. Так что ближайшее время бояться захвата ими программирования уж точно не стоит.
  • 😁 17
  • 💩 3
  • 🤡 1
Post #115 964
Не так давно я описывал, что понимание реактивности и описания логики в реактивном стиле очень важно для роста фронтенд разработчика. https://t.me/xavescor_code/101

Но важность вскоре превратится в необходимость, так как в стандарт хотят затащить реактивные примитивы https://github.com/tc39/proposal-signals/issues/178. И это будет, как сказал автор @effector_news в одной из бесед, «сродни переноса jQuery в стандарт. Мы перестанем заниматься изобретанием велосипедов и будем заниматься реально значимыми вещами»

У вас есть год-два чтобы подготовиться к этому, если вы всё ещё не осилили как выглядит реактивное программирование)
Telegram Андруша пишет код Сепарация Во фронтенде есть чёткая сепарация программистов на то какой "фреймворк" они используют: реакт, ангуляр, вью, свелт и прочие. Но если мы детально посмотрим на то из чего состоят эти фреймворки, то увидим простую вещь: рендер + способ организации…
  • 👍 9
  • 💩 4
  • 🔥 2
  • 🤡 2
  • 👀 1
Post #114 896
Где-то полгода назад я ввёл привычку для себя, понемногу работать на д техническим долгом https://t.me/xavescor_code/14

Но в какой-то момент я разгрёб почти всё и плюнул на это, так как стало лень этим заниматься. Это произошло этим январём. И вот прошло 4 месяца. И у нас опять 2/3 зависимостей выпустили свои мажоры и небольшая попытка поставить новую зависимость взрывает сборку, так как сборщик резолвит не ту версию зависимости из-за дубликата их в node_modules.

Вывод: не плюйте на необходимые привычке в работе. И слежка за актуальностью зависимостей - одна из них
Telegram Андруша пишет код Контролировать все пакеты актуальными очень сложно, особенно когда этим никто не занимался. К примеру, у нас этим серьёзно не занимались как минимум год, и мы уже получили такое отставание. Решение простое: каждое утро лично ты выполняй у себя на проекте…
  • 👍 7
  • 💩 4
  • 👏 1
  • 🤡 1
Post #113 868
https://9to5mac.com/2024/04/10/alternative-iphone-web-browsers/

А вот и плюсы нагиба монополистов. Рынок становится чуток конкурентнее. Хотя интересно к чему в итоге это приведёт, так как запрет альтернативных браузеров на ios было единственной причинай почему Chrome не захватил весь мир. А теперь, возможно, захватит. А может и нет.
9to5Mac More people choose smaller iPhone web browsers when prompted One of the changes Apple had to make to comply with the EU’s Digital Markets Act (DMA) was to present...
  • 💩 6
  • 🤡 2
Post #112 1.1K
https://www.jetbrains.com/webstorm/whatsnew/

Вот и новая версия WS, в которой jB всё-таки сдались в том чтобы поддерживать TS. Теперь мы окончательно живём в мире, где lang_server > spec.
  • 👍 4
  • 💩 2
  • 🔥 1
  • 🤡 1
Post #111 1.28K
Post #110 1.02K
Post #109 1.08K
https://github.com/tc39/proposal-iterator-helpers

Вот такая штука недавно появилась. И самое прекрасное, что оно уже есть в core-js(https://github.com/zloirock/core-js?tab=readme-ov-file#iterator-helpers) и вскоре появится в хроме(https://v8.dev/features/iterator-helpers).

Array.from прощай, ты теперь не нужен(почти).
GitHub GitHub - tc39/proposal-iterator-helpers: Methods for working with iterators in ECMAScript Methods for working with iterators in ECMAScript. Contribute to tc39/proposal-iterator-helpers development by creating an account on GitHub.
  • 💩 3
  • 👍 2
  • 🤡 1
Post #108 1.22K
#база про технические собеседования.

Новый месяц, и мне пришла идея, что надо как-то монетизировать этот канал. Поэтому порекламлю себя же: https://t.me/xavescor_meetings_logs/6

Но мне не хочется просто так тратить твоё время, поэтому расскажу о небольшом неприятном факте: люди не умеют проходить технические собеседования.
Приведу пару примеров, которые я увидел на последних консультациях(тык и тык), которые были посвящены собеседованию:

Намбер ван: люди не умеют говорить "не знаю".
На любой вопрос у тебя должно быть всегда 2 варианта ответа:
- Я знаю и чётко отвечаю на вопрос
- Я не знаю, ПОТОМУ ЧТО <причина>(к примеру "в работе это не нужно было" или "нагуглю, поэтому не запоминаю"), но могу предположить что ответ такой-то, так как бла-бла

Всё! Не нужно молчать, не нужно пугаться. Если ты что-то не знаешь, то значит это не было у тебя в работе. И это нормально. Не стесняйся сказать "чувак, ну ты дичь спрашиваешь. Кому это надо?".

Намбер ту: люди объясняют одни термины через другие термины, которые раньше не встречались в разговоре.
Пример: в чём разница между объектом и примитивными типами данных? Плохой ответ: ну, объект - это ссылочный тип данных, а примитивный - нессылочный.
Этот ответ плох тем, что вводится новый термин. Логичный следующий вопрос интервьювера - "а что такое ссылочный тип данных?". Не нужно давать интервьюверу возможность цепляться за слова. Если возникают такие вопросы, то просто приведите пример, на котором видны различия.
Например

{a: 1} === {a: 1} // false
'abc' === 'abc' // true

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

Набер три: Расскажи о <какая-нибудь фигня>. Этот вопрос нужно интерпретировать как "какую задачу решает эта фигня?". Тут, к сожалению, только заниматься подготовкой.
1) Если говорится о части стдлибы или js, то хороший способ зачем нужна та или иная штука - глянуть пропозалы. Например, https://github.com/tc39/proposal-promise-with-resolvers. Тут прекрасно объясняется зачем был добавлен Promise.withResolvers. И такой документ есть на каждый кусок языка за последние лет 10, если не больше.
2) Если это библиотека, то рекомендую поискать сравнения её с конкурентами, к примеру, реатом: https://www.reatom.dev/recipes/atomization/#reducing-computational-complexity.
Не забывай, каждая мелочь имеет причину в этом мире. Ничего не появляется просто так, поэтому надо искать преимущества.

Намбер фор: волнение, эканье и прочая неуверенность.
Подобная штука исправляется просто: нужно быть готовым. Как готовиться?
1) Берёшь, ищешь в гугле "50 вопросов на js интервью". И расписываешь ответ на каждый вопрос. Самостоятельно. При ответе твой мозг будет структурировать информацию и запоминать план ответа. И это самое главное. Тебе нужно понимать структуру ответа, а остальное ты сам расскажешь на собеседовании. А вот без плана ты будешь просто хлопать глазами и молчать.
2) После написания ответа идёшь в ЧатГПТ или в Genimi и узнаёшь норм ли ты написал ответ или нет. Если же нет, то переписываешь по памяти. Опять же самостоятельно. Если LLMка говорит что ты красаучег, то
3) Идёшь в чат и спрашиваешь корректно ли ты ответил на вопрос. Да, возможно люди назовут тебя дебилом или как-нибудь ещё, но это нормально. Ответ ты получишь. Но до пункта 2 не ходи в чат, так как не нужно напрягать людей там где людей можно не напрягать.
4) Ты великолепен и готов к интервью.

Намбер файв: Если хочешь узнать ещё какие минусы, то всё просто, идёшь сюды https://t.me/xavescor_meetings_logs/6.
Telegram Андруша консультирует Привет. Я Андрей и понять кто я ты можешь тута https://www.linkedin.com/in/xavescor/ и вот тута @xavescor_code Этот канал - это краткая выдержка консультаций, котоыре уже произошли. Можешь глянуть выше или ниже чтобы понять что узнавали другие люди. Хочешь…
  • 👍 11
  • ❤ 7
  • 💩 2
  • 🤡 2
  • 🔥 1
  • 🐳 1
Post #107 1.15K
В поездках айпад как возможность дополнительно вывести информацию на экран - просто незаменимая штука. Если у вас мак, то прямо советую купить какой-нибудь экран на барахолке.

Как минимум для того чтобы девтулзы вывести туда, так как мне даже на 16дюймовом маке не хватает места для браузера + девтулов
  • 👍 7
  • 🔥 3
  • 💩 3
  • 🤡 2
Post #106 1.35K
TTI всё

Вышел наконец-то https://developer.chrome.com/blog/lighthouse-10-0, где основным изменением стало как раз удаление TTI из метрик.

TTI(time to interactive) - одна из метрик, которая показывала время от момента открытия страницы до момента, когда пользователь может взаимодействовать со страницей.
TBT(total blocking time) - сколько времени выполняются таски до статуса IDLE эвент лупа
CLS(cumulative layout shift) - насколько сильно ваша вёрстка "дергается" в процессе загрузки

Гугл считает, что мерять TTI не имеет смысла, так как эта метрика очень хорошо кореллирует с TBT. И по этой причине 10% оценки лайтхауса теперь уходит в сторону CLS. Теперь корпеть над рендерингом и структурой страницы стоит побольше времени, если хочется иметь хорошую оценку от гугла. А её хочется иметь, так как относительно этих метрик гугл, в том числе, ранжирует свою выдачу. Поэтому если вы хоитте иметь хорошее SEO, то стоит выбивать около сотни в лайтхаусе.

Так же добавили несколько новых эвристик. Но на них смотреть не так важно: просто запустите новый лайтхаус у себя на сайте и постарайтесь всё исправить о чём он говорит. Он весьма подробно рассказывает в чём может быть проблема.
Chrome for Developers What's new in Lighthouse 10 | Blog | Chrome for Developers Lighthouse 10 is here with new scoring and audits.
  • 👍 3
  • 💩 2
  • ❤ 1
  • 🔥 1
Post #104 1.26K
Хватит сжимать изображения руками

Сейчас я чуток начал торговать своей задницей(https://t.me/xavescor_meetings_logs/6) и занимаюсь, в том числе, созданием рекламных материалов, чтобы привлечь людей.
Одним из способов доказать свою квалификацию я решил пробежаться по крупным казахстанским(и не очень) сайтам и провести онолитегу как их можно изменить минимальными телодвижениями, чтобы они работали шустрее.

И, к сожалению, я вижу, что у 99% ресурсов нет такой штуки как сжатие изображений. Как менеджер запихнул фото на лендинг, так оно и отдаётся. Не делайте так. Да, я не говорю что надо погружаться в теорию отдачи изображений(но ознакомиться стоит https://evilmartians.com/chronicles/images-done-right-web-graphics-good-to-the-last-byte-optimization-techniques). Хотя бы жмите изображения автоматом. Те же марсиане давно сделали прекрасный imgproxy(https://evilmartians.com/products/imgproxy), который сам сожмёт изображение в наилучший формат для каждого клиента.

Не позволяйте своей лени ухудшать пользовательский интерфейс. А то получится как у jusan.kz, у которого на главной находится 5 огроменных картинки, под 1 мб каждая.
Telegram Андруша консультирует Привет. Я Андрей и понять кто я ты можешь тута https://www.linkedin.com/in/xavescor/ и вот тута @xavescor_code Этот канал - это краткая выдержка консультаций, котоыре уже произошли. Можешь глянуть выше или ниже чтобы понять что узнавали другие люди. Хочешь…
  • 👍 10
  • 💩 2
  • 🔥 1
  • 👏 1
Post #103 1.09K
Невидимая глазу работа

Недавно я попал в очередное набрасывание на вентилятор в теме "линтер vs форматтер".
Да, всё ещё есть люди, которые считают, что в 2024 году нужно иметь собственные правила форматирования и что надо этим управлять самостоятельно.

На фоне этого, я решил заглянуть в репозиторий Prettier'a и прямо подивился какого уровня проблемы там пытается решить сообщество.

Например:
- https://github.com/prettier/prettier/issues/14754
- https://github.com/prettier/prettier/issues/187#issuecomment-1971232175
- https://github.com/prettier/prettier/issues/15515

И я уж точно понял, что подобные проблемы у меня решать самостоятельно уж точно никакого желания нет. Пусть этим занимается сообщество. Потому что это прямо гиганский труд, который, по факту, достаётся нам бесплатно.
  • 💯 4
  • 💩 2
  • 👍 1
  • 👎 1
  • 🔥 1
  • 😱 1
Post #102 1.27K
Диверсификация(не о js)

Последние 2 года я веду жизнь ИП, из-за чего приходится взаимодействовать +- активно с государством. И ногда государство любит делать всякие пакости, чтобы взаимодействие было более удобным для него.
И вот ситуация: Я в Канаде и получаю блокировку всех счетов в Казахстане(где живу, плачу налоги и в общем работаю), а так же не стоит забывать что между Казахстаном и мной сейчас 12 часов разница, так что я не могу целые сутки узнать в чём причина блокировки, так как ночью, очевидно, никто не работает.

Сейчас же я узнаю, что я получил блокировку всех своих финансов из-за долга по налогам в 0.07USD. Весело, правда?

Короч, какой я могу сделать вывод: можно сколько угодно пенять на несправедливое государство, но жить как-то надо. То бишь не стоит держать все финансы в одной юрисдикции. После разблокировки счетов я займусь тем, что раскидаю часть денег по разным местам, которые одновременно не смогут заблокировать:
1. Часть денег унесу в США, Грузию, Вьетнам или Кыргызстан(как мне посоветовали в чатиках, так как это самые безгеморные зоны, но это не точно)
2. Часть денег переведу в РФ, так как сделать обмен на Тинькофф <=> деньги в любом другом регионе стало не так сложно. Спасибо войне и рассредоточившимся россиянам по всему миру
3. Часть денег уведу в какой-нибудь стейблкойн типа USDT, чтобы их всегда иметь при себе.
4. Иметь друзей, которые дадут тебе одолжить карту(благо такие уже есть)

Всё-таки не прикольно жить с $20 в кармане налички и не иметь доп. денег. Очень сильно бьёт по психике
  • 👍 14
  • ❤ 2
  • 💩 2
  • 🤔 1
Post #101 1.94K
Сепарация

Во фронтенде есть чёткая сепарация программистов на то какой "фреймворк" они используют: реакт, ангуляр, вью, свелт и прочие. Но если мы детально посмотрим на то из чего состоят эти фреймворки, то увидим простую вещь: рендер + способ организации логики.

Да, вы можете сказать "компиляция шаблонов" у ангуляра, свелта и вью - это прямо пушка. Я могу согласиться, но если вы посмотрите на то как устроены эти компиляторы, то увидите, что их самая важная часть - это биндинг реактивных частей к DOM элементам.

И поэтому абсолютно все фреймворки в той или иной степени реализуют ровно один способ организации логики: реактивный. И причина проста: руками следить за изменениями стейтов и понимать стоит ли делать ререндеринг - сверхсложно(я смотрю на тебя реакт). И продвинутость именно этой части отличает одну систему от другой:
- свелт изобретает свой язык
- вью пилит своё велосипед, который позволяет описывать весьма неплохо реактивные связи
- ангуляр2+ взял для себя RX и благодаря этому становится прямо конфеткой
- реакт плюнул на всё и дал людям только способ рендеринга и биндинга к рендеринг слою. В итоге все пилят свои стейт менеджеры.

По этой причине, если вы хотите повышать свои скиллы во фронтенде, то вам необходимо не осваивать всякие финтифлюшки, которые можно делать в конкретном фреймворке, а качать базу: то как работают реактивные системы. Потому что теория - это важнейшая вещь, когда ты уже научился говнякать всякие решения. А эта база уже и используется почти везде.
И тут нам, русскоязычным, внезапно повезло. У нас есть огромное количество ребят, которые очень хорошо шарят в этой теме: @artalog, @effector_news, http://mol.hyoo.ru

И на последнее я рекомендую очень сильно обратить внимание. Да, вам может не нравится Карловский(как и мне, так как у него совершенно на нуле софт скиллы и он не очень хороший продажник), но чувак реально несёт базу. К примеру, тут: https://habr.com/ru/companies/timeweb/articles/586450. Чувак очень умный в этом отношении и мол имеет огромное количество прекрасных идей. Реализация, конечно, под вопросом, но именно теоретическая база, которая там лежит - эпохальна. И всё это есть, внезапно, почти только на русском.
Так что если хотите качать себя как фронтендера, то изучите что такое $mol и какие идеи он в себе несёт. Потому что это, не побоюсь сказать, одно из самых технологичных решений во фронте, которое сейчас есть на рынке.
mol.hyoo.ru $mol framework $mol - fastest reactive micro-modular small flexible lazy ui web typescript framework.
  • 👍 44
  • 😁 5
  • 🤩 4
  • ❤ 3
  • 💩 2
  • 🥰 1
Post #100 1.07K

Forwarded from artalog (artalar)

Temporal

Ну и история! 13 мая 2017 появляется первый коммит Temporal Proposal - нового апи для управления датами, вдохновленный moment и luxon.

Ключевые отличия от Date: продуманная работа с часовыми поясами, иммутабельное апи, работа с интервалами (Duration). Схема ключевых сущностей.

В 20 году идет активная работа над полифилом. Игалия вкладывает в него много сил, написано куча тестов, многое сделано типобезопасно и даже в рантайме расставлено куча ассертов - все по лучшим практикам.

Я сам использовал этот полифил в течении года, пока пилил проект на ноде, остался очень доволен! С багами не сталкивался, только сделал ПР с улучшением типов (приятно делать даже небольшой вклад в такие крупные проекты)

Уже в 21 году я считал сам пропосал и полифил к нему самым продуманным и проработанным тулом для работы с датами. И сейчас так считаю, но смущает 200 kB (50 kB gzip), что бы тянуть на фронт. Хотя стоит учитывать, что когда оно появится в браузере вы сможете просто вырезать полифил не меняя сам код, чего не скажешь про остальные либы для дат из NPM.

Но почему это все еще не стандарт?

Ключевая фича нового апи - работа с часовыми поясами, не могла быть реализована из-за недоработки самого стандарта часовых поясов. Ужвал - сотрудник Игалии и основной разработчик Temporal, а так же просто очень крутой чел, внес предложение в стандарт дат всея интернета по расширению формата хранения и передачи времени с возможностью расширять его дополнительной информацией. Например?

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

23 октября 2023 предложение апрувнули!

Работа над темпорал продолжается, серьезных блокеров, кажется, больше нет. Текущий статус трекатеся тут: https://github.com/tc39/proposal-temporal/issues/2628

Мне сложно сказать, когда предложение станет стандартом и мы увидем его в браузерах, но вот в V8 реализация Temporal занимает уже больше 2.6% бинарника и вы уже можете использовать его в Deno.

Напоследок, очень порекомендую великолепный доклад Пару календарей назад я был совсем другим Алексея Охрименко, для понимания всей проблематики. А вот доклад конкретно про Temporal: How to Outsmart Time Building Futuristic JavaScript Apps Using Temporal
  • 🔥 5
  • 💩 2
  • ❤ 1
Post #99 1.09K
Время - это настолько сложная штука, что люди не только не могут справиться с сложнопредсказуемыми ситуациями типа "правительству стало скучно и они поменяли таймзону", но и с вполне предсказуемыми вещами типа 29 февраля, который понятно что бывает раз в 4 года(если мне не изменяет память)

https://codeofmatt.com/list-of-2024-leap-day-bugs/
Code of Matt List of 2024 Leap Day Bugs Well, it's 2024 and leap day has come once again. As I've done in prior leap years, I've captured as many bug reports and outages as I can, along with links to the source where possible. For those have been following along, you'll notice these have
  • 🤡 4
  • ❤ 1
  • 👍 1
  • 💩 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →