Size: a a a

2020 August 30
Stepaneko
Yes!
источник
Stepaneko
Улитца (на самом деле крытша ТЦ)
#phone
источник
Stepaneko
Тэ о эр тэ
источник
2020 August 31
Stepaneko
Вспомнил мемы про длинный чай когда увидел это чудо
источник
Stepaneko
В рамках разработки проекта на TypeScript полез исправлять баги в библиотеке которую мы используем.
Качество библиотеки такое себе, и его я, в общем-то, не улучшил, но вот изменять ее оказалось очень интересно.

Библиотека называется typescript-is (форк), она через недокументированное API пропатченного компилятора TypeScript изменяет AST во время сборки проекта.
Похоже на процедурные макросы Rust.

Вчера я исправил проблему с верификацией опциональных полей в интерфейсах -- она не соответствовала поведению самого TypeScript, то есть typescript-is считал невалидными те объекты, которые вполне устраивали TypeScript.

Сегодня же занимался исправлением обработки класса Buffer -- он обрабатывался как Array, и от этого все ломалось. Вот только отличать их друг от друга на этапе компиляции оказалось не так-то просто.
А еще существуют Typed Arrays и DataViews, которые обрабатываются той же функцией. Мы их не используем, поэтому я постарался обрывать генерацию кода в случае если они встречены, так как до этого для них просто генерировался бы неправильный код.
источник
Stepaneko
А еще сегодня увидел, что Promises в JavaScript начинают выполняться сразу, что является интересным наблюдением для меня после Rust, в котором futures поллятся только при явном ожидании на них.
источник
2020 September 02
Stepaneko
Уф, история с typescript-is продолжается. Кое-как обеспечил верификацию Typed Arrays и обнаружил регрессию после обновления проверки опциональных полей.

В общем...
interface A {
   field?: number
}

let a1: A = {};
let a2: A = {field: undefined};
let a3: A = {field: 42};

Все a1, a2, a3 -- валидные A. Вот только между a1 и a2 есть небольшая разница:
a1.field // undefined
"field" in a1 // false
a2.field // undefined
"field" in a2 // true

То есть в a2 поле определено как неопределенное 😵
Это было причиной бага в typescript-is. Я поменял проверку вида "field" in object на сравнение object["field"] с undefined и все стало прекрасно. За одним исключением.

Я не подумал что бывают ситуации когда поле может быть undefined не являясь опциональным.
Например:
interface B {
   field: number | undefined
   // field: undefined
   // тоже является примером,
   // но бесполезным практически.
}

let b1: B = {field: undefined};
let b2: B = {field: 42};
// А вот просто {} уже не является
// здесь валидным значением
// с точки зрения TS.


Из-за предыдущих изменений возникла проблема с b1 - ведь поле-то у нее undefined.
Поэтому вчера наделал еще тестов и сделал эти проверки разными в зависимости от опциональности поля.
На опциональных полях так и останется сравнение с undefined, а на неопциональных будет проверка включения поля в объект.

Надеюсь на этот-то раз правильно, хе-хе.
источник
Stepaneko
Миленько
источник
Stepaneko
Обед!
источник
Stepaneko
Слушаю и слушаю почти одну и ту же музыку, плейлист у меня небольшой. Опасаюсь момента, когда он в очередной раз надоест.
С другой стороны TIDAL неплохие рекомендации мне подсовывает по сравнению со спотифи, правда слушаю я их редко.
источник
2020 September 08
Stepaneko
Тем временем, сегодня, оказывается, год с первого поста в этом канале. Ура 🎉

Почему я проснулся так рано -- это другой очень сложный вопрос мироздания.
источник
Stepaneko
#phone
источник
2020 September 11
Stepaneko
#phone
источник
2020 September 17
Stepaneko
Жжжжжжжж
источник
2020 September 25
Stepaneko
Водичка
источник
2020 September 26
Stepaneko
#phone
источник
2020 September 27
Stepaneko
Это так меня, оказывается, в кино зовут
источник
2020 September 29
Stepaneko
Да, сходил в кино. На Tenet.
Очень понравилось. К сожалению не все слова разобрал, и поэтому иногда уследить за сюжетом было сложно, но и сюжет, и видеоряд, и музыка очень клевые.
источник
2020 September 30
Stepaneko
источник
2020 October 02
Stepaneko
Великолепный пятничный хайк.
https://strava.app.link/RJDzbwjXfab 😵

С фоточками в посте 😌
источник