Category: искусство

Category was added automatically. Read all entries about "искусство".

Book

Монадические приседания в JS/TS

Set поддерживает конструирования из Iterable. Есть AsyncIterable. Но Set из него сконструировать нельзя. Почему? А вот по "алгебраическим" причинам.

Ну вот у нас есть Set.fromList :: Ord a => [a] -> Set a

Как из него сделать Monad m => Ord a => m [a] -> m (Set a)? Просто, через fmap fromList. Но это же не то, что нужно!

Т.е. можно написать <t>((x: AsyncIterable<T>) => Promise<T>), но это же не то, что нужно. А того, что нужно, написать, задейстовав имеющийся вариант new Set(), низя.

Как поменять JS/TS, чтобы можно было? Тоже непонятно. Конструкторы синхронные. Если делать руками - получается максимум static factory method:
async function setFromAsyncIterable<T> (asyncIterable: AsyncIterable<T>): Promise<Set<T>> {
  const set = new Set<T>()
  for await (const setElement of asyncIterable) {
    set.add(setElement)
  }
  return set
}
Но на самом деле этот метод выглядит красиво, а по перфомансу - полная хуйня. Как и изначально AsyncIterable. Нужон двухуровневый AsyncIterable<Promise<T>>. Скажем, вы конструируете Set рекурсивным обходом каталогов. И вам логично конструировать N элементов параллельно в произвольном порядке, загружая дисковую очередь.

И тут понятно что могут быть разные случаи, аналогичные ситуации с spine strict lists, т.е 4 комбинации от Iterable без промиса до AsyncIterable с промисом.
Book

Эдж на Трайденте всё

https://blogs.windows.com/msedgedev/2021/03/09/microsoft-edge-legacy-end-of-support/

Теперь только тот что на Хромиуме. Несколько печально на самом деле, потому что паровозик в кои-то веки таки смог как в перфоманс, так и в комплаенс.
Book

Телевизионный художественный фильм

Нашёл тут полезные тестовые видеоматериалы.

1. На нетфликсе есть сериал под названием Test Patterns. По нему можно настроить телек чтобы не было ореолов вокруг маленьких цифирек (артефактов перешарпливания). Интересно что в моём такой пресет есть называется pelicula ("фильм"), хез почему, но в принципе понятно - estandar (стандартный) - это не sRGB без постпроцессинга для большинства людей, а "дефолтовый"). Ну а контент весь надо шарпить до вырвиглазности, иначе люди не поймут и уйдут к конкурентам так как у них "картинка чётче". Ну а для нердов есть нердорежим. В прошлом телеке, который я ковырял был даже калиброванный режим, который действительно калиброванный, я писал.

С помощью этой таблицы,

а. Понятно, сколько пикселей у нас реально есть - там линеечка есть однопиксельная

б. Понятно с какого расстояния какие штуки мы видим. Например на 46" уже с 2 метров 4к нифига не видно. Ну то есть линеечка как бы видна, но наклонные линии уже хуй сливаются в кашу. С того места, откуда типично смотрим, я ничего выше 2k/HD не вижу (но у нас ещё экран по-дебильному высоко повешен - мне кажется это желание вешать нижний край экрана выше уровня глаз стоящего человека сродни моде на перешарпливание и пересвет)

в. Понятно есть ли артефакты перешарпливания. Ещё есть лже-мира из говна, чтобы примерно понять, есть ли зависимость артефактов от направления и муар.

2. https://www.youtube.com/watch?v=7zCywLzJJs8 - эталонное видео 60 fps без перешарпливания,
и с относительно привычными объектами. Люди на 60+ FPS реагируют по-разному но как правило не понимают, что это. Собственно если nerd stats показывает @60 и вы видите пластиковых людей и неестественную пыль - то тест удался. Я уже почти не вижу, ибо привык.
Book

GHC и перекрашивание bikeshed в каждом релизе

Все очень обрадовались, когда команда msvc перестала перекрашивать интерфейс Студии в каждом релизе, и занялась compliance. (Второй раз обрадовалаись когда они признали, что догнать gcc, clang и комитет по комплаенсу не получается, но потом внезапно у них получилось).

Сейчас что-то подобное происходит с GHC:

https://gitlab.haskell.org/ghc/ghc/wikis/status/ghc-8.8.1

Там таки занялись перфомансом!

Правда, это на фоне перекрашивания Кабала, внедрения Адриана и очередных Kind Applications которые используются 0.1% кода.
Book

(no subject)

Классический комикс, который MS вроде бы наконец переросли:

- Что бы нам сделать в новой студии?

- Поменяем технологию и внешний вид инсталляции?
- Переставим дефолтовое расположение всех панелей и перепишем всё на новую библиотеку контролов?
- Улучшим интеллисенс и компиляторы? [вылетает в окно]

Они тут собираются, о чудо, обратно вернуть 100500 галочек в инсталляторе, чтобы инсталляция не занимала полдня на механическом винте. У меня 2015 Community выкачивается на одном гнилом доминиканском мегабите быстрее, чем ставится.
Book

Протокол однопоточного воркера

Художественная резьба по диаграммам дала частичный ответ на вопрос об оптимальности однопоточного протокола. Оказывается, если нет ненужных блокировок, разные реализации отличаются всего лишь последовательностью пакетов в половине TCP-соединения, направленной от воркера к гирману (обозначенной как send).

Send и Recv - половины TCP-соединения.
Source и Sink - половины гирмана. Сорс раздает работы, синк принимает результаты.
Grabber и CPU - половины воркера.

исходник
Book

build/foldr fusion and Church encoding

Если показать сишнику list fusion - то он сделает у себя то же самое через декорацию коалгебр (они же стримы, итераторы, генераторы, развёртки, анаморфизмы)

Но в Хаскеле это сделано - вы не поверите - через декорацию алгебр (они же правые свёртки, катаморфизмы и кодировка Чёрча).

Технология называется build/foldr fusion, и опирается на эквивалентность foldr k z (build g) = g k z, в которой слева был промежуточный список, а справа его уже нет. foldr всем известен, а build определён в GHC.Exts и выглядит экзотично:

build :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a]
build g = g (:) []

Но на самом деле всё просто:

toChurch list k z = foldr k z list
fromChurch = build

и наше равенство превращается в

toChurch (fromChurch g) k z = g k z
toChurch (fromChurch g) = g
toChurch . fromChurch = id

Тип 2 ранга в build нужен, чтобы запретить "нехорошие" g, которые игнорируют аргументы и конструируют список, используя "настоящие" (:) и [] вместо переданных алиасов.
Book

Об одной из инсталляций Его Ворсейшества

Ковры на полу, с любым орнаментом и даже с похищением невесты - общепризнанное средство от холодных полов

Ковры как средство от холодных стен или от отсутствия стен - тоже общепринятое средство у кочевников.

И только декоративные настенные ковры в оседлом отапливаемом жилище - признак массовой застройки в СССР

В данном случае ковёр сугубо утилитарный - он висит возле одноместной кровати, на которой спят два человека, в помещении недостаточной площади, где зимой температура опускается ниже +15, и является лишь признаком бедности, но никак не плохого вкуса.