#TIL TrueType и FreeType шрифты – это, по сути, байт-код для виртуальных машин шейпинга и рендеринга.
На интерпретаторах шрифтов обычно стоит ограничение на количество переходов, но если их обойти, то можно сделать вот это
https://fxtwitter.com/valdemarerk/status/1682715181854367744
Недавно вышел wasm shaper – это набор API для создания своего интерпретатора для движка, который, насколько я понял, можно подгрузить например на web страничку.
Интересно, я не видел ещё статей о side channel атаках через шрифты из-за своего пузыря, или пока люди просто ленятся?
На интерпретаторах шрифтов обычно стоит ограничение на количество переходов, но если их обойти, то можно сделать вот это
https://fxtwitter.com/valdemarerk/status/1682715181854367744
Недавно вышел wasm shaper – это набор API для создания своего интерпретатора для движка, который, насколько я понял, можно подгрузить например на web страничку.
Интересно, я не видел ещё статей о side channel атаках через шрифты из-за своего пузыря, или пока люди просто ленятся?
FxTwitter / FixupX
Erk (@valdemarerk)
I embedded Bad Apple into a font using Harfbuzz' new wasm shaping engine. #BadApple #touhou #harfbuzz #wasm #rustlang
🔥7💊6
☕️ Мерлин заваривает τσάι 🐌
#TIL TrueType и FreeType шрифты – это, по сути, байт-код для виртуальных машин шейпинга и рендеринга. На интерпретаторах шрифтов обычно стоит ограничение на количество переходов, но если их обойти, то можно сделать вот это https://fxtwitter.com/valdema…
С вами была рубрика "очередная совершенно бытовая штука оказалась тьюринг-полной".
Интересно, мы уже вступили в эпоху эмерджентной тьюринг полноты или ещё нет?
Интересно, мы уже вступили в эпоху эмерджентной тьюринг полноты или ещё нет?
❤4
Сейчас нашёл прикольный способ как с точки зрения парсера можно реализовать вызов функций вида
левая скобка
myfunc(x, y, z)
левая скобка
(
- это инфиксный оператор, который принимает выражение слева и список выражений справа🤯7💅3💊2🌭1
☕️ Мерлин заваривает τσάι 🐌
зачем писать свой auth, если есть ory
Хабр
Ory Kratos — коробочный SSO
Вступление Ory Kratos - современный cloud native сервер идентификации с поддержкой PassKeys, MFA, FIDO2, TOTP, WebAuthn, с возможностью управления профилями, схемами пользователей, входом через...
👍4❤1
Forwarded from Go Update
🔒proposal: Tuple Types for Go
Я наконец оправился после конференции, а ребята из Go Core Team ненадолго вернулись к обсуждениям после ноябрьских праздников в США, перед тем как снова уйдут уже на рождественский отдых.
Итак, на повестке дня у нас новый тип - кортеж. Вообще кортежи много где встречаются - от sql до python. Идея проста: нужно хранить несколько значений друг с другом в одной конструкции и иметь доступ к ним по индексу. Условно говоря это такой массив фиксированной длины, у которого элементы могут быть разного типа.
И тут появляется традиционный вопрос - а зачем? Их много раз предлагали, но каждый раз упирались в вопрос "А чем мало простых структур?". И ведь правда, обычно структур должно хватать за глаза, а там где очень хочется можно притянуть множественный возврат из функции (тоже, кстати, своего рода кортеж). Но сила кортежей не в инновациях, а в облегчении каждодневной разработки. А именно в этих двух вещах:
• Для кортежа не нужно создавать отдельный тип (но можно). Ближайший аналог это анонимная структура, только в случае кортежа не нужно указывать имена полей.
• Для распаковки и упаковки кортежей в несколько переменных в язык добавляются специальные конструкции.
Посмотря на количество предложений, ребята наконец назрели и решили провести эксперимент по итогу которого сделали свое предложение: в их случае синтаксис выглядит как-то так:
Так-же можно получить конкретный элемент:
Функции тоже могут возвращать кортежи, но выглядит это немного странно (по причине обратной совместимости):
Однако по мнению Go Core Team это не настолько нужно, чтобы внедрять принципиально новый тип в язык. Поэтому сам proposal это даже не предложение, а скорее заметка о том, какое исследование они провели внутри Google и какие выводы сделали. Выводы кстати простые: делать они эту фичу не будут.
На мой взгляд, здесь они правы, так как для полноценного внедрения кортежей нужно было бы решать вопрос с возвратом функций без этих ужасных двойных скобок. Да и анонимные структуры решают 80% описанных проблем. Однако само исследование породило интересные выводы о том как можно улучшить язык не внедряя новые типы. Об этом мы поговорим в следующий раз.
P.S. И да я очень надеюсь вывести количество заметок хотя-бы до трех в месяц 😆️️️️️️
Я наконец оправился после конференции, а ребята из Go Core Team ненадолго вернулись к обсуждениям после ноябрьских праздников в США, перед тем как снова уйдут уже на рождественский отдых.
Итак, на повестке дня у нас новый тип - кортеж. Вообще кортежи много где встречаются - от sql до python. Идея проста: нужно хранить несколько значений друг с другом в одной конструкции и иметь доступ к ним по индексу. Условно говоря это такой массив фиксированной длины, у которого элементы могут быть разного типа.
И тут появляется традиционный вопрос - а зачем? Их много раз предлагали, но каждый раз упирались в вопрос "А чем мало простых структур?". И ведь правда, обычно структур должно хватать за глаза, а там где очень хочется можно притянуть множественный возврат из функции (тоже, кстати, своего рода кортеж). Но сила кортежей не в инновациях, а в облегчении каждодневной разработки. А именно в этих двух вещах:
• Для кортежа не нужно создавать отдельный тип (но можно). Ближайший аналог это анонимная структура, только в случае кортежа не нужно указывать имена полей.
• Для распаковки и упаковки кортежей в несколько переменных в язык добавляются специальные конструкции.
Посмотря на количество предложений, ребята наконец назрели и решили провести эксперимент по итогу которого сделали свое предложение: в их случае синтаксис выглядит как-то так:
val := (1, "foo", false)
x, y, z := val...
fn(val...) // вызываем функцию в которую распаковываем кортеж
func fn(int, string, bool) { ... }
Так-же можно получить конкретный элемент:
val := (1, "foo", false)
x := val.0 // получаем первый элемент
Функции тоже могут возвращать кортежи, но выглядит это немного странно (по причине обратной совместимости):
func f() ((int, int)) { // обратите внимание на двойные скобки
Однако по мнению Go Core Team это не настолько нужно, чтобы внедрять принципиально новый тип в язык. Поэтому сам proposal это даже не предложение, а скорее заметка о том, какое исследование они провели внутри Google и какие выводы сделали. Выводы кстати простые: делать они эту фичу не будут.
На мой взгляд, здесь они правы, так как для полноценного внедрения кортежей нужно было бы решать вопрос с возвратом функций без этих ужасных двойных скобок. Да и анонимные структуры решают 80% описанных проблем. Однако само исследование породило интересные выводы о том как можно улучшить язык не внедряя новые типы. Об этом мы поговорим в следующий раз.
P.S. И да я очень надеюсь вывести количество заметок хотя-бы до трех в месяц 😆️️️️️️
GitHub
proposal: Tuple Types for Go · Issue #64457 · golang/go
NOTE: This is a write-up of an internally worked out idea for tuple types, inspired by some of the tuple proposals listed below. The primary reason for this write-up is simply to document this work...
👍1🤔1🫡1
Forwarded from Блог*
#prog #amazingopensource
wuffs (Wrangling Untrusted File Formats Safely) — язык (и компилятор) для написания программ обработки данных, который компилируется в C. Язык намеренно весьма ограниченный — в частности, в нём отсутствует IO и способы динамически управлять памятью, да и в принципе доступ к сисколам. Язык также memory safe: компилятор отказывается компилировать программу, в которой индексы выходят за границу массива (а также если в ней где-то есть переполнение).
Несмотря на ограниченность языка и намеренно простые проверки диапазонов переменных, на практике он с успехом подходит для написания (де)кодировщиков медиаформатов — реализации на wuffs по производительности обгоняют существующие реализации на C и Rust.
(thanks @experimentalchill за привлечение внимания к этой вещи — взято из поста про ошибки реализации в CRC32 в Linux)
wuffs (Wrangling Untrusted File Formats Safely) — язык (и компилятор) для написания программ обработки данных, который компилируется в C. Язык намеренно весьма ограниченный — в частности, в нём отсутствует IO и способы динамически управлять памятью, да и в принципе доступ к сисколам. Язык также memory safe: компилятор отказывается компилировать программу, в которой индексы выходят за границу массива (а также если в ней где-то есть переполнение).
Несмотря на ограниченность языка и намеренно простые проверки диапазонов переменных, на практике он с успехом подходит для написания (де)кодировщиков медиаформатов — реализации на wuffs по производительности обгоняют существующие реализации на C и Rust.
(thanks @experimentalchill за привлечение внимания к этой вещи — взято из поста про ошибки реализации в CRC32 в Linux)
GitHub
GitHub - google/wuffs: Wrangling Untrusted File Formats Safely
Wrangling Untrusted File Formats Safely. Contribute to google/wuffs development by creating an account on GitHub.
❤4👍2
tl;dr: Диффузионную модель обучили делать оптические иллюзии и визуальные анаграммы
https://dangeng.github.io/visual_anagrams/
https://dangeng.github.io/visual_anagrams/
dangeng.github.io
Visual Anagrams
Optical illusions zero-shot from diffusion models.
👍3🎃1
Интерактивные заметки к грядущему релизу go 1.22 https://antonz.org/go-1-22/
antonz.org
Go 1.22 interactive tour
Isolated loop variables, range over integers, math/rand v2 and enhanced routing.
🔥9❤2👍2
☕️ Мерлин заваривает τσάι 🐌
Интерактивные заметки к грядущему релизу go 1.22 https://antonz.org/go-1-22/
В комментах справедливо поинтересовались — не сломает ли старый код новая семантика for-циклов?
Я прогнал тесты для kubernetes, hugo, minio и caddy — все зелёные.
Кажется, что вероятность нарваться на обратную несовместимость почти пренебрежимо мала 🤔
Я прогнал тесты для kubernetes, hugo, minio и caddy — все зелёные.
Кажется, что вероятность нарваться на обратную несовместимость почти пренебрежимо мала 🤔
👏5💯1
Писать падающий тест, чтобы начать следовать методичке TDD 🙅
Писать падающий тест, чтобы завтра вспомнить на чём ты остановился 🙌
Писать падающий тест, чтобы завтра вспомнить на чём ты остановился 🙌
🤝29👍4😁1
☕️ Мерлин заваривает τσάι 🐌
Кстати вчера был день уничтожения оспы, с чем я вас и поздравляю
Поздравляю, человечество загеноцидило один из очень неприятных штаммов вируса гриппа https://en.wikipedia.org/wiki/Influenza_B_virus
💯12🔥3👍1