Media is too big
VIEW IN TELEGRAM
🔥7❤5👍1💘1
Археология JavaScript, new Date() между прошлым и будущим
Мы думали, что отменили Судный день (Y2K). Ан нет — просто отсрочили его, запрятав в недрах
1. "0", "00", "0000" — магия или безумие?
Передаёшь строку в new Date() и попадаешь в лабиринт временных парадоксов:
Вывод: Если цифр не 4 — JS додумывает за вас. "0000"? Серьёзно? Кто-то явно пересмотрел "Назад в будущее".
2. "42" vs "51" — путешествие во времени
Почему?
В 1995 году, когда создавался JS, Y2K-паника была в разгаре.
Чтобы отличать 20XX от 19XX, придумали гениальное правило:
Результат: "51" — это 1951, а "49" — 2049. Потому что "так исторически сложилось".
3. Раз есть правило, давайте его проверим:
a few moments later...
Ну, нормально же разговаривали...4 символа, я уже запомнил
Теперь попробуем всунуть лишний ноль
и пунктуацию
Вывод
Date — это машина времени, собранная на коленке в 90-е.
P.S. Если ваш код вдруг сломался 1 января 2050 года — вы теперь знаете, кого винить. 😈
Ну а если зашло, то на https://jsdate.wtf можно еще примеров найти
Мы думали, что отменили Судный день (Y2K). Ан нет — просто отсрочили его, запрятав в недрах
new Date()
.Когда-то из-за "проблемы 2000 года" (Y2K) COBOL-разработчики стоили дороже золота. Их вытаскивали из пенсии, чтобы те переводили "98" в "1998"за бешеные деньги. А потом... 2000 год наступил, мир не рухнул, и COBOL снова отправили в музей. Но JavaScript, как истинный археолог, сохранил эту логику на века.
1. "0", "00", "0000" — магия или безумие?
Передаёшь строку в new Date() и попадаешь в лабиринт временных парадоксов:
new Date("0") // 1 января 2000 (логично? нет)
new Date("00") // 1 января 2000 (ну ладно...)
new Date("0000") // 1 января 0000 (💀 эпоха Иисуса?)
new Date("000000") // 1 января 2000 (а это уже издевательство)
Вывод: Если цифр не 4 — JS додумывает за вас. "0000"? Серьёзно? Кто-то явно пересмотрел "Назад в будущее".
2. "42" vs "51" — путешествие во времени
new Date("42") // 2042 (будущее! 🚀)
new Date("51") // 1951 (прошлое! 📻)
Почему?
В 1995 году, когда создавался JS, Y2K-паника была в разгаре.
Чтобы отличать 20XX от 19XX, придумали гениальное правило:
00–49 = 2000–2049
50–99 = 1950–1999
Результат: "51" — это 1951, а "49" — 2049. Потому что "так исторически сложилось".
3. Раз есть правило, давайте его проверим:
new Date("0") // 1 января 2000
new Date("1") // 1 января 2001
new Date("2") // 1 февраля 2001 🤪
new Date("02") // 1 февраля 2001 😅😅😅
...
new Date("12") // 1 декабря 2001
new Date("13") // Invalid Date, верните мой 2013-й год!
...
new Date("32") // 2032
a few moments later...
new Date("106") // 106 год, римляне завоевали Дакию, осуждаем
Ну, нормально же разговаривали...4 символа, я уже запомнил
Теперь попробуем всунуть лишний ноль
new Date("010") // 2001 🤬🤬🤬
и пунктуацию
new Date("1.4") // 2001, 4 января
new Date("1/4") // 2001, 4 января
new Date("1>4") // 2001, 4 января, плевать какой знак
new Date("1+4") // Invalid Date, а, нет, тут уже считает за таймзону
Вывод
Date — это машина времени, собранная на коленке в 90-е.
P.S. Если ваш код вдруг сломался 1 января 2050 года — вы теперь знаете, кого винить. 😈
Ну а если зашло, то на https://jsdate.wtf можно еще примеров найти
jsdate.wtf
new Date("wtf")
How well do you know JavaScript's Date class?
🔥16❤🔥3🤣3❤1💘1
Буду снова выступать со стендапом: в этот раз про то как работается когда у тебя 2 детей)
🤝5💘4😁3
Forwarded from Selectel Team
Они смеялись в лицо выгоранию...
И правильно делали 😎
Помимо докладов, на Selectel Day Off мы приготовили несколько зон притяжения — рассказываем про одну из них.
🎤 IT Open Mic — стендап от айтишников для айтишников. Нет, не тот утренний скрам-стендап с командой. Ребята приготовили честные сторителлинги про жизнь и работу в IT, которые отзовутся каждому.
Шуток много не бывает, а до Day Off еще 12 дней! Кидай в комменты любимый мем про работу и ставь реакции лучшим🔥
➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿
Подробнее про Selectel Day Off рассказываем в канале Selectel Events — переходи, чтобы узнать больше.
Помимо докладов, на Selectel Day Off мы приготовили несколько зон притяжения — рассказываем про одну из них.
🎤 IT Open Mic — стендап от айтишников для айтишников. Нет, не тот утренний скрам-стендап с командой. Ребята приготовили честные сторителлинги про жизнь и работу в IT, которые отзовутся каждому.
Шуток много не бывает, а до Day Off еще 12 дней! Кидай в комменты любимый мем про работу и ставь реакции лучшим🔥
Подробнее про Selectel Day Off рассказываем в канале Selectel Events — переходи, чтобы узнать больше.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12💘1
🔥 Внимание, сенсация! Google добавил ИИ в new Date()!
Клод Сонне, ведущий инженер V8
Пример работы нового API:
Если вы дочитали до сюда, вы великолепны! что там на самом деле:
1. Любой мусор до цифр — пропускается
"В какой день Валенсия и Барселона сыграли" → игнорируется (как в коде V8: "any garbage is allowed").
Первые две цифры (2-3) → месяц-день
Автоматически превращается в 02-03 (или 03-02, если вы живёте в EN локали).
2. Год — 2001 (потому что «логично же»)
3. Вопросительный знак — это «для атмосферы» ?, !, ... — всё съедается, как пробелы.
Бонусом экзестенциальная драма:
"Функционал проверялся только в Chrome. В остальных браузерах возможно Invalid Date, потому что они 'не понимают искусства'."
P.S. Temporal API в ярости.
"Мы долго думали, как сделать new Date() удобнее для новичков. Temporal API — это, конечно, круто, но зачем учить новые методы, если можно просто... спросить дату как у друга? Поэтому мы тайно обучили ИИ парсить любые текстовые запросы. Ну почти любые. Главное — верить в магию!"
Клод Сонне, ведущий инженер V8
Пример работы нового API:
new Date("В какой день Валенсия и Барселона сыграли 2-3?");
// Sat Feb 03 2001 00:00:00 GMT+...
Если вы дочитали до сюда, вы великолепны! что там на самом деле:
1. Любой мусор до цифр — пропускается
"В какой день Валенсия и Барселона сыграли" → игнорируется (как в коде V8: "any garbage is allowed").
Первые две цифры (2-3) → месяц-день
Автоматически превращается в 02-03 (или 03-02, если вы живёте в EN локали).
2. Год — 2001 (потому что «логично же»)
3. Вопросительный знак — это «для атмосферы» ?, !, ... — всё съедается, как пробелы.
Бонусом экзестенциальная драма:
new Date("Когда я родился? я помню что в 12-10, (но мама говорит, что это было поздно ночью)");
// Mon Dec 10 2001 00:00:00 GMT+...
"Функционал проверялся только в Chrome. В остальных браузерах возможно Invalid Date, потому что они 'не понимают искусства'."
P.S. Temporal API в ярости.
🤪11😭4🤝3😁2💘1
Media is too big
VIEW IN TELEGRAM
Вчера подвергся дополнительной мотивации
Иногда фоном смотрю стримы по Tesera, в которой сейчас пишу графику и решили мы поправить баг с тем, что свет от факела в руке был привязан к камере а не к игроку. Погрузился в код, разбираюсь. Так тут кажется что-то не передается, а здесь вообще условие не обработано... И тут слышу на стриме:
— Блин, да у них свет от факела к камере привязан, невозможно бегать с видом от 3-го лица в темноте
— Да, погоди, уже разбираюсь, говорю я
— Не, ну это совсем не удобно конечно
— Да-да, я согласен, уже правлю
— Хотя может они это для оптимизации сделали, знаете там наверное расчеты еще одного источника света нагружают, а у них же браузер...
— Да какая оптимизация! Это баг, я правлю прямо сейчас!
Так и доделал все быстро)
PS запись стрима вот: https://www.youtube.com/live/I7LwXvcDgak, где этот момент был не вспомню)
Иногда фоном смотрю стримы по Tesera, в которой сейчас пишу графику и решили мы поправить баг с тем, что свет от факела в руке был привязан к камере а не к игроку. Погрузился в код, разбираюсь. Так тут кажется что-то не передается, а здесь вообще условие не обработано... И тут слышу на стриме:
— Блин, да у них свет от факела к камере привязан, невозможно бегать с видом от 3-го лица в темноте
— Да, погоди, уже разбираюсь, говорю я
— Не, ну это совсем не удобно конечно
— Да-да, я согласен, уже правлю
— Хотя может они это для оптимизации сделали, знаете там наверное расчеты еще одного источника света нагружают, а у них же браузер...
— Да какая оптимизация! Это баг, я правлю прямо сейчас!
Так и доделал все быстро)
PS запись стрима вот: https://www.youtube.com/live/I7LwXvcDgak, где этот момент был не вспомню)
❤12😁8🔥1
В CSS появились ветвления
Не так давно обнаружил, что уже 2 месяца как в обычном Chrome работает функция if() в CSS (статья на MDN)
Теперь можно делать так:
или так:
ну и вообще это скорее напоминает множественную if...else конструкцию:
Ну и не обошлось без веселого, можно использовать сколько угодно else, но выполнится только первый, все условия после него игнорируются:
Кажется для достижения полноты по Тьюрингу осталось только завести смену состояния, чтобы стать полноценным языком программировния. Но если добавить чекбокс, то и эта проблема уходит и можно написать свой Сапер на CSS.
Не так давно обнаружил, что уже 2 месяца как в обычном Chrome работает функция if() в CSS (статья на MDN)
Теперь можно делать так:
div {
margin: if(media(width > 700px): 0 auto;)
}
/* if(<if-condition> : <value>) */
или так:
div {
color: if(
supports(color: lch(77.7% 0 0)): 3px solid lch(77.7% 0 0);
else: 3px solid #c0c0c0;
)
}
ну и вообще это скорее напоминает множественную if...else конструкцию:
padding: if(
media(width < 480px), 20px;
media(width < 960px), 40px;
media(width < 1200px), 80px;
else: 0px;
)
Ну и не обошлось без веселого, можно использовать сколько угодно else, но выполнится только первый, все условия после него игнорируются:
div {
background: if(
style(--scheme: ice): white;
else: green;
style(--scheme: fire): orange;
else: red;
);
}
Кажется для достижения полноты по Тьюрингу осталось только завести смену состояния, чтобы стать полноценным языком программировния. Но если добавить чекбокс, то и эта проблема уходит и можно написать свой Сапер на CSS.
🔥10😈3😱1💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Доделали портал для Tesera
В этом посте я показал первую версию того что было сделано, теперь добавился вид выключенного портала, где анимации замедлены и добавлено мерцание.
Все анимации, размеры, скорости выглядят случайно, но на самом деле тут кроется одна особенность шейдеров: в них нет функции random чтобы получить случайное значение. Как же быть?
1. Идеальный шум
Обычно создаются функции шума на основе координат и времени, где складываются синусы, умножается на простые числа, откидывается целая часть числа... Короче если постоянно вызывать синус можно рано или поздно построить модель нового мира.
2. Числа Цикады
То есть нужны любые простые числа, которые делятся только на 1 и самого себя, кроме 1. Умножая разные волны и шумы на эти числа мы получаем с виду случайные последовательности, циклы которых не совпадают и не идут синхронно.
В этом посте я показал первую версию того что было сделано, теперь добавился вид выключенного портала, где анимации замедлены и добавлено мерцание.
Все анимации, размеры, скорости выглядят случайно, но на самом деле тут кроется одна особенность шейдеров: в них нет функции random чтобы получить случайное значение. Как же быть?
1. Идеальный шум
Обычно создаются функции шума на основе координат и времени, где складываются синусы, умножается на простые числа, откидывается целая часть числа... Короче если постоянно вызывать синус можно рано или поздно построить модель нового мира.
2. Числа Цикады
Числа цикад, о которых идёт речь, это 13 и 17. Эти числа являются простыми и представляют собой циклы развития некоторых видов периодических цикад в Северной Америке. Цикл в 13 или 17 лет позволяет этим цикадам избегать синхронизации с циклами развития хищников, которые обычно имеют более короткие жизненные циклы.
То есть нужны любые простые числа, которые делятся только на 1 и самого себя, кроме 1. Умножая разные волны и шумы на эти числа мы получаем с виду случайные последовательности, циклы которых не совпадают и не идут синхронно.
🔥13❤🔥3💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядный Computer science в работах Sam Rose
Наткнулся на сайт с визуализациями разных алгоритмов и подробным объяснением как они работают: балансировка нагрузки сервера, очереди, хеширование... Сделано красиво, с любовью и заботой.
https://samwho.dev
Наткнулся на сайт с визуализациями разных алгоритмов и подробным объяснением как они работают: балансировка нагрузки сервера, очереди, хеширование... Сделано красиво, с любовью и заботой.
https://samwho.dev
🔥14❤🔥4👍1💘1