https://news.1rj.ru/str/artalog/624
Фан-факт про JS, который вы, возможно не знали. В спеке JS нет Integer, но есть абстрактная операция ToIntegerOrInfinity которая используется для приведения Number к целому числу. И работает она так, что просто отрезает всё, что находится за запятой — It converts argument to an integer representing its Number value with fractional part truncated, or to +∞ or -∞ when that Number value is infinite
Убедитесь сами, вот вам спецификация.
Фан-факт про JS, который вы, возможно не знали. В спеке JS нет Integer, но есть абстрактная операция ToIntegerOrInfinity которая используется для приведения Number к целому числу. И работает она так, что просто отрезает всё, что находится за запятой — It converts argument to an integer representing its Number value with fractional part truncated, or to +∞ or -∞ when that Number value is infinite
Убедитесь сами, вот вам спецификация.
Telegram
artalog
А вот что бы вам совсем весело было.
❤5👍5😭2
melikhov.dev
https://news.1rj.ru/str/artalog/624 Фан-факт про JS, который вы, возможно не знали. В спеке JS нет Integer, но есть абстрактная операция ToIntegerOrInfinity которая используется для приведения Number к целому числу. И работает она так, что просто отрезает всё, что…
Вот ещё забавное —
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#using_parseint_on_non-strings
parseInt не рекомендуется использовать с Number, потому что он берёт строкое представление числа и режет его до точки или до e.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#using_parseint_on_non-strings
🤯20👍2🔥1😁1🤣1
Дэн Абрамов написал на GitHub развёрнутый комментарий, к которому можно отправлять теперь всех, кто спрашивает «а что не так с Create React App»? Особенно порадовало, что тезисы в целом совпадают с моими, которые я недавно не публично озвучивал в ответ на очередной боллерплейт поверх CRA.
TL;DR
Основная проблема CRA в том, что он обеспечивает только клиентский рендер. Никаких префетчингов данных, никакого SSG и SSR в нём нет, как и нет умного разделения бандла на чанки с часто и редко обновляемыми кусочками. CRA создавался как инструмент для быстрого старта с zero-конфигурацией, но требования к современным приложениям иные.
"However, it doesn't meet the original goal of being the best way to create a React app anymore."
Даже если отбросить в сторону вопрос SSR/SSG (не всем нужно SEO, да и можно прикрутить костылик на папетире), у нас всё равно остаётся вопрос водопада сетевых запросов: скачали бандл, отрендерили компоненты, сфетчили данные, отрендерили следующий набор компонентов. Печалька.
Несколько раз Дэн подчёркивает, что реакт это библиотека, а не фреймворк (React itself is only a library). В нём нет высокоуровневых механизмов работы с данными (интересно, что иногда в ответах на проблемы от команды Реакта проскальзывает «возьмите хороший инструмент с кэшом»). В нём нет роутера, кэшей, серверной части и т.д. Он не диктует правила, он предоставляет инструменты.
Какой же видится выход? Создавать «эталонный» фреймворк у команды нет ни желания ни ресурсов. Выбирать один из имеющихся на рынке за эталон не хочется. Совсем депрекейтить CRA тоже не вариант — хочется всё же поставлять какой-то CLI из коробки. Да и нужно сохранить актуальность для кучи ранее созданных обучающих материалов.
В итоге Дэн предлагает рассмотреть вариант, что CRA превращается в лончер, который позволяет создать базовое приложение на любом популярном react-фреймворке: Next, Remix, Гэтсби или простенький шаблон на Vite.
И, конечно, интересно, что этот комментарий родился в ответ на предложение перевести документацию для новичков с CRA на Vite, потому что CRA безнадёжно отстал от прогресса. Давно пора!
TL;DR
Основная проблема CRA в том, что он обеспечивает только клиентский рендер. Никаких префетчингов данных, никакого SSG и SSR в нём нет, как и нет умного разделения бандла на чанки с часто и редко обновляемыми кусочками. CRA создавался как инструмент для быстрого старта с zero-конфигурацией, но требования к современным приложениям иные.
"However, it doesn't meet the original goal of being the best way to create a React app anymore."
Даже если отбросить в сторону вопрос SSR/SSG (не всем нужно SEO, да и можно прикрутить костылик на папетире), у нас всё равно остаётся вопрос водопада сетевых запросов: скачали бандл, отрендерили компоненты, сфетчили данные, отрендерили следующий набор компонентов. Печалька.
Несколько раз Дэн подчёркивает, что реакт это библиотека, а не фреймворк (React itself is only a library). В нём нет высокоуровневых механизмов работы с данными (интересно, что иногда в ответах на проблемы от команды Реакта проскальзывает «возьмите хороший инструмент с кэшом»). В нём нет роутера, кэшей, серверной части и т.д. Он не диктует правила, он предоставляет инструменты.
Какой же видится выход? Создавать «эталонный» фреймворк у команды нет ни желания ни ресурсов. Выбирать один из имеющихся на рынке за эталон не хочется. Совсем депрекейтить CRA тоже не вариант — хочется всё же поставлять какой-то CLI из коробки. Да и нужно сохранить актуальность для кучи ранее созданных обучающих материалов.
В итоге Дэн предлагает рассмотреть вариант, что CRA превращается в лончер, который позволяет создать базовое приложение на любом популярном react-фреймворке: Next, Remix, Гэтсби или простенький шаблон на Vite.
И, конечно, интересно, что этот комментарий родился в ответ на предложение перевести документацию для новичков с CRA на Vite, потому что CRA безнадёжно отстал от прогресса. Давно пора!
GitHub
Replace Create React App recommendation with Vite by t3dotgg · Pull Request #5487 · reactjs/react.dev
Create React App is not a great recommendation to be making, especially for newer developers.
As an educator, I run into countless issues w/ new React devs running into unnecessary issues due to th...
As an educator, I run into countless issues w/ new React devs running into unnecessary issues due to th...
👍46👏4👎1😁1
Не так много разработчиков помнят, что вторым параметром в JSON.stringify передаётся функция-реплейсер, но, подозреваю, ещё меньше тех, кто знает, что вместо функции можно передать массив — белый список полей объекта для фильтрации (кому вообще это поведение понадобилось в API в таком виде?).
Там ещё и третий параметр есть, space, который может быть либо числом, либо строкой и от этого тоже зависит его поведение.
Вот такое ужасное API в спеке, в лучших традициях боевых апишек живых проектов.
Там ещё и третий параметр есть, space, который может быть либо числом, либо строкой и от этого тоже зависит его поведение.
Вот такое ужасное API в спеке, в лучших традициях боевых апишек живых проектов.
👍35🤡8🤯5
На Секвойе вышла статья про Райана Дала. Текст конечно чистая беллетристика про трудное детство и героические преодоления, но есть любопытные моменты.
Совершенно близкое и понятное мне желание уничтожить ранние работы от стыда за них:
«Этим поступком Дал присоединился к ряду художников и изобретателей, таких как Уилла Кэтер, которая в предисловии к переизданию своего первого романа просила читателей рассматривать книгу как исторический артефакт ранних попыток, а не как отражение ее нынешних художественных достоинств. <...> Дал, не имея возможности кремировать свое цифровое творение, фактически просил всех присутствующих в зале и полмиллиона человек, которые будут смотреть его выступление онлайн, отнести Node к списку его "ранних работ".»
Импульсивность и радикальность поступков в молодости:
«В то время Дал был немного бескомпромиссным. У него была тенденция иногда очень агрессивно удалять некоторые вещи из Node. Одной из таких вещей были Promises. Дал счел их дизайн неэлегантным. "На следующий день было удалено огромное количество кода, - вспоминает Белдер, - и всем пришлось переписывать свои Node.js-программы, потому что теперь все работало по-другому".»
Дал сожалел, что подписал контракт с Joyent и отдал им Node.js, так как тех, в итоге, Нода интересовала только как маркетинговый инструмент и вкладывать большие деньги в развитие, нанимать больше инженеров они были не готовы. Позже это стало причиной выбора Далом иной модели развития для Deno, сейчас он получает венчурное финансирование от Секвойи и развививает свой продукт так, как он видит это сам, являясь полноценным владельцем, а не наёмным работником.
Ну и напоследок, самое важное (и я вижу ближашее будущее так же):
«Самым большим новшеством Deno является движение в сторону граничных вычислений (edge computing), которые Дал рассматривает как следующий большой сдвиг в веб-разработке. "В частности, бессерверные граничные вычисления (serverless at edge), то есть запуск сервера везде и сразу во всех регионах мира", - говорит он, - "вот где я вижу Deno через пять лет". Версия edge computing, которую Deno называет облаком изолятов (речь про V8-изоляты), запускает маленькие кусочки JavaScript в датацентрах по всему миру»
Почитайте, чтиво лёгкое и приятное.
Совершенно близкое и понятное мне желание уничтожить ранние работы от стыда за них:
«Этим поступком Дал присоединился к ряду художников и изобретателей, таких как Уилла Кэтер, которая в предисловии к переизданию своего первого романа просила читателей рассматривать книгу как исторический артефакт ранних попыток, а не как отражение ее нынешних художественных достоинств. <...> Дал, не имея возможности кремировать свое цифровое творение, фактически просил всех присутствующих в зале и полмиллиона человек, которые будут смотреть его выступление онлайн, отнести Node к списку его "ранних работ".»
Импульсивность и радикальность поступков в молодости:
«В то время Дал был немного бескомпромиссным. У него была тенденция иногда очень агрессивно удалять некоторые вещи из Node. Одной из таких вещей были Promises. Дал счел их дизайн неэлегантным. "На следующий день было удалено огромное количество кода, - вспоминает Белдер, - и всем пришлось переписывать свои Node.js-программы, потому что теперь все работало по-другому".»
Дал сожалел, что подписал контракт с Joyent и отдал им Node.js, так как тех, в итоге, Нода интересовала только как маркетинговый инструмент и вкладывать большие деньги в развитие, нанимать больше инженеров они были не готовы. Позже это стало причиной выбора Далом иной модели развития для Deno, сейчас он получает венчурное финансирование от Секвойи и развививает свой продукт так, как он видит это сам, являясь полноценным владельцем, а не наёмным работником.
Ну и напоследок, самое важное (и я вижу ближашее будущее так же):
«Самым большим новшеством Deno является движение в сторону граничных вычислений (edge computing), которые Дал рассматривает как следующий большой сдвиг в веб-разработке. "В частности, бессерверные граничные вычисления (serverless at edge), то есть запуск сервера везде и сразу во всех регионах мира", - говорит он, - "вот где я вижу Deno через пять лет". Версия edge computing, которую Deno называет облаком изолятов (речь про V8-изоляты), запускает маленькие кусочки JavaScript в датацентрах по всему миру»
Почитайте, чтиво лёгкое и приятное.
Sequoia Capital
Ryan Dahl, Node.js Creator, Wants to Rebuild the Runtime of the Web
A decade ago, Ryan Dahl changed how web development works. Now, he wants to do it again with his new company Deno.
👍26🔥4
Сегодня полдня спорили JS синхронный или асинхроннный. Так вот, совершенно не важно, как вы его называете, важно другое — понимание, как работает рантайм, в котором ваш JS запущен. Да, сам язык ECMAScript не обладает встроенными асинхронными апишками (ок, мне тут говорят про Атомики. Поговорим когда они будут везде!). Всё, что вы делаете в нём происходит синхронно. Максимум можно отбросить что-то в очередь микротасок — таким образом мы поменяем порядок обработки, но не освободим Event Loop. Цепочка из коллбеков вручную созданных промисов так и останется крутиться в фазе микротасков. Следующая итерация внешнего event loop не наступит. Из коробки мы не можем сказать «Эй VM, вот тебе корутина, выполни её в соседнем треде и верни результат по готовности». Нет у нас ничего для этого. Мы можем очень сильно упороться и написать свой Event Loop с прерываниями внутри JS — вот это мы можем да.
Таймеры, setImmidiate, функции, возвращающие промисы — всё это прилетает к нам из окружения. Именно платформа, где мы запускаем наш JS предоставляет работу с другими тредами и даёт нам EventLoop. В спецификации самого ECMAScript нет никаких таймеров и фечей — всё это внешние апишки. Есть отдельные ребята, попавшие в спеку — например, динамические импорты. Но их тоже крутит внешний рантайм, не сам движок JS.
Как работает код на node.js?
Мы выполняем небольшой синхронный код на старте и заряжаем задачи во внешние API. Например, задачу слушать какой-то порт. К это задаче мы привязываем коллбек. Дальше где-то во внешнем мире другой код, написанный на другом языке (на плюсах, например), в другом треде слушает порты. Между внешним миром и нашим JS-кодом крутится эвент луп. Он проверяет, не сработал ли триггер и вызывает соответствующий коллбек в JS. Коллбек снова синхронно выполняется (и может поставить новые задачи в планировщик). Коллбек это реакция на то, что во внешнем мире что-то произошло. Что случится, если коллбек выполняется слишком долго? Например, мы запустили очень большой цикл? Event loop будет стоять и ждать выполнения этой синхронной операции. Ничего не будет происходить. Никакие внешние запросы не будут обработаны, никакие таймеры не сработают. В нашем Event Loop возникнет лаг.
Для Node.js приложения это значит, что в этот момент конкретно этот экземпляр приложения будет тормозить для всех клиентов. Т.е. если у вас есть один медленный эндпоинт, то обращение к нему остановит обработку для всех остальных эндпоинтов. Из-за одного пользователя будут страдать все остальные. Именно потому долгие синхронные операции в Node.js максимально нежелательны. Если вы пишете консольный скрипт или стартуете приложение — вы можете делать что-то синхронно. Если же делаете обработчик запроса пользователя, то добро пожаловать в асинхронность.
Да, нам нужно превращать синхронные операции в асинхронные. Встроенных средств в языке для этого нет, но есть во внешней среде: таймеры и setImmidiate, например. Мы можем буквально сказать — выполни этот код в следующем цикле. Или, иначе говоря, «вызови коллбек когда внешний таймер сработает через 0ms (т.е. в следующем цикле)». Маленькие кусочки нашего синхронного кода будут вызываться по чуть-чуть и мы дадим Event loop время размотать накопившиеся очереди и вызвать другие коллбеки.
А как померить лаг? Мы же должны следить за ним. Ну, конечно, мы можем взять встроееный метод perf_hooks.monitorEventLoopDelay . Но давайте подумаем, как это можно сделать на коленке? Очень просто! Берём текущий таймстамп в высоком разрешении, вызываем setTimeout(fn, 0) и в его коллбеке снимаем таймстамп и измеряем разницу. Время, через которое сработает коллбек таймера с ожидаемо нулевой задержкой и есть наш EventLoop-лаг.
Итого, мы действительно пишем асинхронный код каждый день. И эту замечательную асинхронность нам даёт рантайм, котором наш JS запущен. Этот рантайм содержит и интерпретатор языка и EventLoop и работу с I/O. Потому Нода это не просто V8, это V8 + libuv. А Deno это V8 + ядро на Rust + Tokio.
Таймеры, setImmidiate, функции, возвращающие промисы — всё это прилетает к нам из окружения. Именно платформа, где мы запускаем наш JS предоставляет работу с другими тредами и даёт нам EventLoop. В спецификации самого ECMAScript нет никаких таймеров и фечей — всё это внешние апишки. Есть отдельные ребята, попавшие в спеку — например, динамические импорты. Но их тоже крутит внешний рантайм, не сам движок JS.
Как работает код на node.js?
Мы выполняем небольшой синхронный код на старте и заряжаем задачи во внешние API. Например, задачу слушать какой-то порт. К это задаче мы привязываем коллбек. Дальше где-то во внешнем мире другой код, написанный на другом языке (на плюсах, например), в другом треде слушает порты. Между внешним миром и нашим JS-кодом крутится эвент луп. Он проверяет, не сработал ли триггер и вызывает соответствующий коллбек в JS. Коллбек снова синхронно выполняется (и может поставить новые задачи в планировщик). Коллбек это реакция на то, что во внешнем мире что-то произошло. Что случится, если коллбек выполняется слишком долго? Например, мы запустили очень большой цикл? Event loop будет стоять и ждать выполнения этой синхронной операции. Ничего не будет происходить. Никакие внешние запросы не будут обработаны, никакие таймеры не сработают. В нашем Event Loop возникнет лаг.
Для Node.js приложения это значит, что в этот момент конкретно этот экземпляр приложения будет тормозить для всех клиентов. Т.е. если у вас есть один медленный эндпоинт, то обращение к нему остановит обработку для всех остальных эндпоинтов. Из-за одного пользователя будут страдать все остальные. Именно потому долгие синхронные операции в Node.js максимально нежелательны. Если вы пишете консольный скрипт или стартуете приложение — вы можете делать что-то синхронно. Если же делаете обработчик запроса пользователя, то добро пожаловать в асинхронность.
Да, нам нужно превращать синхронные операции в асинхронные. Встроенных средств в языке для этого нет, но есть во внешней среде: таймеры и setImmidiate, например. Мы можем буквально сказать — выполни этот код в следующем цикле. Или, иначе говоря, «вызови коллбек когда внешний таймер сработает через 0ms (т.е. в следующем цикле)». Маленькие кусочки нашего синхронного кода будут вызываться по чуть-чуть и мы дадим Event loop время размотать накопившиеся очереди и вызвать другие коллбеки.
А как померить лаг? Мы же должны следить за ним. Ну, конечно, мы можем взять встроееный метод perf_hooks.monitorEventLoopDelay . Но давайте подумаем, как это можно сделать на коленке? Очень просто! Берём текущий таймстамп в высоком разрешении, вызываем setTimeout(fn, 0) и в его коллбеке снимаем таймстамп и измеряем разницу. Время, через которое сработает коллбек таймера с ожидаемо нулевой задержкой и есть наш EventLoop-лаг.
Итого, мы действительно пишем асинхронный код каждый день. И эту замечательную асинхронность нам даёт рантайм, котором наш JS запущен. Этот рантайм содержит и интерпретатор языка и EventLoop и работу с I/O. Потому Нода это не просто V8, это V8 + libuv. А Deno это V8 + ядро на Rust + Tokio.
Telegram
artalog
Давайте пжлст договоримся.
EcmaScript (ES) - это спека, в ней нет ничего про таймеры и остальное IO.
Но смысла в ней в отдельности от рантайма практически нет.
JavaScript (JS) - это ES + IO апишки, типа таймеров, фетча, бродкаст чанклов и т.п. Это то с…
EcmaScript (ES) - это спека, в ней нет ничего про таймеры и остальное IO.
Но смысла в ней в отдельности от рантайма практически нет.
JavaScript (JS) - это ES + IO апишки, типа таймеров, фетча, бродкаст чанклов и т.п. Это то с…
🔥48👍9😁1
С 15 марта откроется очередной набор в ШРИ. Естественно, записался туда читать лекцию по node.js
В этот раз на три страны, приходите. ШРИ штука не идеальная, но интересная и полезная. И бесплатная.
Upd
Вся история со ШРИ кажется мне очень уникальной (поправьте, если это не так). На чистом энтузиазме, бесплатно, одни ребята тратят личное время на обучение других. Учат как умеют, но но учат реальными боевыми знаниями. Другие ребята менторят и проверяют домашние работы. Многие преподаватели и менторы — сами бывшие выпускники (что и доказывает эффективность системы).
И вот этот корабль на невероятностной тяге успешно летит уже много лет.
В этот раз на три страны, приходите. ШРИ штука не идеальная, но интересная и полезная. И бесплатная.
Upd
Вся история со ШРИ кажется мне очень уникальной (поправьте, если это не так). На чистом энтузиазме, бесплатно, одни ребята тратят личное время на обучение других. Учат как умеют, но но учат реальными боевыми знаниями. Другие ребята менторят и проверяют домашние работы. Многие преподаватели и менторы — сами бывшие выпускники (что и доказывает эффективность системы).
И вот этот корабль на невероятностной тяге успешно летит уже много лет.
Школа фронтенд-разработки Яндекса
Летняя школа Яндекса для фронтенд-разработчиков. Больше половины выпускников получают офер
👍41❤4💩4🔥2
Попробовал перетащить небольшой проектик с CRA (не я поднимал его на CRA, сами понимаете) на vite. Результат, ну как сказать. Да, vite поднимается быстро, и dev-режим на esbuild хорош. Но продакшен rollup оказался неожиданно капризным, посыпались пачками транзитивные зависимости с кривыми esm (например). Что-то удалось перебить альясами (что совсем не радует, конечно), что-то не удалось поправить никак без правок в самих зависимостях.
С next таких проблем нет.
С next таких проблем нет.
👍18🤔6❤1
Попросил ChatGPT нарисовать Мона Лизу на чистом CSS. Результат явно лучше, чем я справился бы сам.
Drawing the Mona Lisa using CSS alone would be quite a challenge as it is a complex piece of art with many intricate details. However, it is possible to create a simplified version using basic shapes and positioning techniques in CSS.
Drawing the Mona Lisa using CSS alone would be quite a challenge as it is a complex piece of art with many intricate details. However, it is possible to create a simplified version using basic shapes and positioning techniques in CSS.
😁76🤣23👍12🤡5🤔1
За годы работы я сталкивался со множеством моделей разработки. Таблички в экселе и «сделать вчера», ватерфолы, эджайлы: скрамы, канбаны и все их уродливые сочетания. И вот я думаю, что это всё вообще не имеет значения для эффективной разработки. Важна только команда, понимание общих целей и мотивация каждого отдельного участника процесса.
В моей сегодняшней команде нет стендапов. Даже текстовых. Нет ретро и грумингов. Вообще очень мало встреч. Мы встречаемся в начале и в конце недели и иногда в середине, для того чтобы синхронизироваться и обсуждать проблемы. В остальное время все работают спокойно и независимо. Неспокойно работает только дежурный, который меняется каждую неделю. Дежурный катит релизы и разгребает входящие баги, помогая второй линии поддержки.
Какие же ощущения у меня по таким процессам?
Во-первых (и в главных), это работает только в том случае, если команда состоит из людей, способных эффективно работать самостоятельно. Самостоятельно определять приоритеты и следить за своими целями. Под такие процессы нужно нанимать соответствующих людей, иначе не выйдет.
Во-вторых, спустя три месяца я всё ещё не понимаю кто чем именно занимается. В этом нет плохого для команды, но лично меня это расстраивает. Для меня важно видеть куда мы движемся вместе.
В-третьих, для меня утренний дейлик это хороший пинок продуктивности. Без него тяжеловато. Дни без встреч требуют большего самостоятельного контроля времени.
На днях мы провели первое планирование спринта. И я очень доволен. Не потому, что мне важны спринты и планирования. А только потому, что так происходит синхронизация целей и я начинаю видеть общую картину. Возможно, если бы мы сидели в одном офисе, то и это было бы не нужно, общая картина была бы вокруг меня весь день.
Не стройте процессы ради процессов, отталкивайтесь от реальных потребностей команды и бизнеса.
В моей сегодняшней команде нет стендапов. Даже текстовых. Нет ретро и грумингов. Вообще очень мало встреч. Мы встречаемся в начале и в конце недели и иногда в середине, для того чтобы синхронизироваться и обсуждать проблемы. В остальное время все работают спокойно и независимо. Неспокойно работает только дежурный, который меняется каждую неделю. Дежурный катит релизы и разгребает входящие баги, помогая второй линии поддержки.
Какие же ощущения у меня по таким процессам?
Во-первых (и в главных), это работает только в том случае, если команда состоит из людей, способных эффективно работать самостоятельно. Самостоятельно определять приоритеты и следить за своими целями. Под такие процессы нужно нанимать соответствующих людей, иначе не выйдет.
Во-вторых, спустя три месяца я всё ещё не понимаю кто чем именно занимается. В этом нет плохого для команды, но лично меня это расстраивает. Для меня важно видеть куда мы движемся вместе.
В-третьих, для меня утренний дейлик это хороший пинок продуктивности. Без него тяжеловато. Дни без встреч требуют большего самостоятельного контроля времени.
На днях мы провели первое планирование спринта. И я очень доволен. Не потому, что мне важны спринты и планирования. А только потому, что так происходит синхронизация целей и я начинаю видеть общую картину. Возможно, если бы мы сидели в одном офисе, то и это было бы не нужно, общая картина была бы вокруг меня весь день.
Не стройте процессы ради процессов, отталкивайтесь от реальных потребностей команды и бизнеса.
👍65❤7🔥5⚡1
Неожиданно в последний момент вписался в Субботник, расскажу как у нас устроена Ферма, на которую мы накатываем приложения для E2E.
Я.Субботник по разработке интерфейсов
Первый Я.Субботник по разработке интерфейсов в этом году пройдёт уже 25 марта.Мы приглашаем вас онлайн и офлайн в Москве. Программа ещё обновляется.Мероприятие бесплатное, чтобы ничего не пропустить, зарегистрируйтесь, пожалуйста, а мы будем держать вас…
👍28❤3
На волне шуток про устаревание UDP придумался ещё один стариковский вопрос — зачем кто-то в 2023 может использовать CP-1251? Что это, грёбаное легаси и бесполезная фигня?
А ответ в том, что русскоязычные символы в CP-1251 занимают 1 октет (8 бит). А в UTF-8 в два раза больше. То есть, если ваши данные это текст, и данных много, то переход на UTF-8 даст ого-го какие накладные расходы.
Вообще вспомнилось, как в первой половине нулевых я сидел через прокси, перегонявший UTF-8 сайты в KOI-8. Когда платишь за мегабайты, то отношение к обьёмам данных совсем иное.
А ответ в том, что русскоязычные символы в CP-1251 занимают 1 октет (8 бит). А в UTF-8 в два раза больше. То есть, если ваши данные это текст, и данных много, то переход на UTF-8 даст ого-го какие накладные расходы.
Вообще вспомнилось, как в первой половине нулевых я сидел через прокси, перегонявший UTF-8 сайты в KOI-8. Когда платишь за мегабайты, то отношение к обьёмам данных совсем иное.
👍26❤1😁1🥴1
И не отходя от кассы — почему правильнее говорить октет, а не байт (и так написано в спеках). Потому что байт это не 8 бит. Байт — это минимальная адресуемая область памяти, единица обработки информации. Так уж сложилось, что сейчас чаще всего байт содержит 8 бит. Но это не догма. Были и другие машинки, с другим размером байта.
Потому когда хотят точности в терминах, то используют слово «октет».
Потому когда хотят точности в терминах, то используют слово «октет».
🤓89👍6
План пока такой — в субботу на Субботнике, 6 апреля в Казань читать студентам КФУ (мечта старая постоять за кафедрой), 21 апреля Dump.
Дальше без докладов пока, идеи есть, но времени готовить новые материалы нет. Постараюсь слушателем добраться до Кодфеста, но тут как фишка ляжет, горизонт планирования сейчас никакой.
Летом будет ШРИ, надо направить силы туда.
Дальше без докладов пока, идеи есть, но времени готовить новые материалы нет. Постараюсь слушателем добраться до Кодфеста, но тут как фишка ляжет, горизонт планирования сейчас никакой.
Летом будет ШРИ, надо направить силы туда.
❤25👍6
DHH с товарищами опять чудят. Но я их понимаю и поддерживаю — люблю простые и понятные решения. Как минимум, чем ближе к железу, тем меньше шанс столкнуться с нерешаемой задачей.
https://dev.37signals.com/bringing-our-apps-back-home/
https://dev.37signals.com/bringing-our-apps-back-home/
37signals Dev
De-cloud and de-k8s — bringing our apps back home
For the Operations team at 37signals, the biggest effort in 2023 is removing our dependencies on the cloud and migrating our application stacks back into the data center onto our own hardware. We’ve already made amazing progress in a fairly short time — let’s…
👍9❤4
Playwright запили классный ui для дебага тестов. Теперь есть общий центр управления где можно выбрать нужный тест, запустить, перезапусть, включить вотчер, посмотреть тайм-тревел, пройтись пик-локатором и перейдя в VSCode быстро поправить код теста. Очень круто.
Хочется попробовать сразу, как доедет во внутренний npm компании. Кстати, если у вас E2E тесты не на Playwright, то поделитесь в комментах почему так.
https://github.com/microsoft/playwright/releases/tag/v1.32.0
Хочется попробовать сразу, как доедет во внутренний npm компании. Кстати, если у вас E2E тесты не на Playwright, то поделитесь в комментах почему так.
https://github.com/microsoft/playwright/releases/tag/v1.32.0
GitHub
Release v1.32.0 · microsoft/playwright
📣 Introducing UI Mode (preview)
Playwright v1.32 updates
New UI Mode lets you explore, run and debug tests. Comes with a built-in watch mode.
Engage with a new flag --ui:
npx playwright test --ui...
Playwright v1.32 updates
New UI Mode lets you explore, run and debug tests. Comes with a built-in watch mode.
Engage with a new flag --ui:
npx playwright test --ui...
🔥28👍6
Студенты очень классные. Как и мы 20 лет назад, только умнее (возможностей-то больше). Многие уже работают и мыслят технически на уровне хорошего миддла, если брать по уровню индустрии в стране в целом. Да, нужно набирать софты и продуктовое мышление, но хардовые мозги на месте.
Компании за них, кстати, активно борются, такие сотрудники всем нужны.
Компании за них, кстати, активно борются, такие сотрудники всем нужны.
🔥67👍9🎉1
Вчера один студент спросил «принесёт ли поддержка легаси больше денег?» и я подумал о том, что в моей голове не возник бы такой вопрос. Для меня уйти на скучные задачи ради хорошей компенсации кажется немыслимым выбором (кроме жёстких жизненных обстоятельств, конечно).
И вся возня с премиями/опционами/долями — она же жутко отвлекает от работы. Мы на берегу уже договорились, что компания получит мои 40 часов в неделю, а я получу в конце месяца свой бутерброд с икрой, на который мы подписались. «Вы что, премии не хотите?» — это худшие мотивационные слова от проджекта, что я слышал в своей жизни.
Не хочу я премию. Я хочу, чтобы продукт был классным. Чтобы своё время, потраченное на продукт было не жалко. Чтобы была польза и был смысл.
Пришёл в эту индустрию бедным и останусь здесь, даже если снова будет беднота.
И вся возня с премиями/опционами/долями — она же жутко отвлекает от работы. Мы на берегу уже договорились, что компания получит мои 40 часов в неделю, а я получу в конце месяца свой бутерброд с икрой, на который мы подписались. «Вы что, премии не хотите?» — это худшие мотивационные слова от проджекта, что я слышал в своей жизни.
Не хочу я премию. Я хочу, чтобы продукт был классным. Чтобы своё время, потраченное на продукт было не жалко. Чтобы была польза и был смысл.
Пришёл в эту индустрию бедным и останусь здесь, даже если снова будет беднота.
👍65❤20👎5😱3🔥1😁1🌚1💯1