#prog #ml #abnormalprogramming
Llama.ttf
Есть ссылка на видео с демонстрацией. Сам шрифт весит 60 мегабайт, по очевидным причинам.
(thanks @programming_sucks)
Llama.ttf
The font shaping engine HarfBuzz, used in applications such as Firefox and Chrome, comes with a Wasm shaper allowing arbitrary code to be used to "shape" text.
In particular, this "arbitrary" code could in principle be an entire LLM inference engine with trained parameters bundled inside, relying on treating text containing magic symbols for fake "ligatures" to initialize the LLM and use it to generate text.
It could also in principle be an entire LLM inference engine (Llama in our case, hence the name) except instead of only being in principle it's what this is.
Есть ссылка на видео с демонстрацией. Сам шрифт весит 60 мегабайт, по очевидным причинам.
(thanks @programming_sucks)
fuglede.github.io
llama.ttf
llama.ttf is a font file which is also a large language model and an inference engine for that model.
🤯11❤3😁2
Forwarded from (trying) healthy adult mode
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚11😭2
Forwarded from k8s (in)security (r0binak)
Massimiliano Oldani (sgrakkyu) опубликовал PoC, который из непривилегированного процесса внутри изолированного по сети контейнера даёт полноценный побег на хост с root. В основе — свежезакрытая уязвимость IPv6-стека ядра Linux: при сборке UDPv6-фрагментов через splice() ядро выделяло буфер только под заголовки, забывая про перенос выровненных байтов (fraggap), и запись уходила за конец объекта прямо в служебную структуру skb_shared_info.Дальше один испорченный байт
nr_frags разворачивается в page use-after-free и технику Dirty Pagetable с произвольным чтением/записью ядра: KASLR обходится через SMP-трамплин, SELinux глушится подменой пролога avc_denied(), а сам побег из контейнера делается через core_pattern. Всё срабатывает детерминированно, без heap-grooming и без каких-либо привилегий.Баг тихо жил с ядра
6.0, но эксплуатировать его стало возможно только с версии 6.6, после которой он попал во все поддерживаемые ветки и был незаметно убран коммитом в середине июня — без CVE, без advisory и без бэкпорта в stable, что автор и критикует: фикс лежит в открытом дереве, фактически раздавая рабочий 0-day. Опубликованный PoC намеренно ослаблен и работает только на ядрах без CONFIG_INIT_ON_ALLOC (RHEL/CentOS). Боевую версию обещают после выхода патчей.🤩2❤1
Блог*
#prog #csharp #suckassstory C# — пример того, как не надо делать язык программирования. C# очень странно относится к затенению переменных. Обычно он это запрещает. Вот такой код, например, не компилируется: string x = "Hi"; if (true) { string x = "Bye";…
#prog #csharp #suckassstory
Блин, спасибо, очень полезно.
Для сравнения, #java:
using System;
using System.Collections.Generic;
var arr = new int[] {1, 2, 3};
Console.WriteLine(arr); // System.Int32[]
var list = new List<int>{1, 2, 3};
Console.WriteLine(list); // System.Collections.Generic.List`1[System.Int32]
Блин, спасибо, очень полезно.
Для сравнения, #java:
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
class Main {
public static void main() {
var arr = new int[] {1, 2, 3};
System.out.println(arr); // [I@251a69d7
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
var list = new ArrayList<>(List.of(1, 2, 3));
System.out.println(list); // [1, 2, 3]
}
}
😁5🍌5
Блог*
#prog #csharp #suckassstory using System; using System.Collections.Generic; var arr = new int[] {1, 2, 3}; Console.WriteLine(arr); // System.Int32[] var list = new List<int>{1, 2, 3}; Console.WriteLine(list); // System.Collections.Generic.List`1[System.Int32]…
Справедливости ради, в C# всё же можно добиться желаемого через
Но выглядит как-то слишком многословно для такой базовой операции. Даже в Java для этого сделали отдельный метод, пусть и на util-классе
Console.WriteLine($"[{string.Join(", ", arr)}]"); // [1, 2, 3]Но выглядит как-то слишком многословно для такой базовой операции. Даже в Java для этого сделали отдельный метод, пусть и на util-классе
👍3
Forwarded from AlexTCH
You can now connect your JetBrains IDE to LinkedIn and showcase your real tool usage rather than relying solely on self-reported skills.
This is so disgusting...
1. Like, being proficient in IDE usage is the most important skill for a developer now? What, the code is now being written by an LLM "agent", and the "programmer" needs only to know what buttons to click in an IDE to close a ticket in Jira?
2. If I say I know my way around an IDE, I cannot be trusted? I need to prove it now?
3. Surveillance and automatic time tracking. "I'm loving it!"
Great job, folks. Thank you so much.
❤11🌚6🤯3😢2
#prog #rust #rustreleasenotes
(в силу непонятных причин я почему-то полностью пропустил этот релиз, который был аж 28 мая)
Вышла версия Rust 1.96.0! Как всегда, тут только избранные части, а всё целиком в детальных заметках о релизе.
▪️До стабильной версии дошли
▪️Стабилизировали макросы
Пример сообщения об ошибке:
⬇️
Как и другие
Как вы могли заметить, в коде есть явные импорты этого макроса. К сожалению, в прелюдию их не добавили, поскольку уже есть широко используемый сторонний крейт с этими макросами, и такое добавление создало бы конфликты имён в большом количестве кода.
▪️Теперь можно итерироваться по диапазонам из беззнаковых `NonZero` чисел.
▪️Определение "valid to read/write" для сырых указателей теперь явно исключает null. Некоторые функции, тем не менее, всё ещё позволяют пользоваться null-указателями для доступов нулевого размера, но теперь это исключения из общего правила.
(согласно CAD97 — члену команды операционной семантики — такое поведение было и раньше, просто теперь оно задокументировано)
▪️Манифесты для cargo теперь поддерживают назначение флагов для rustdoc в зависимости от cfg-предикатов.
▪️rustdoc теперь не вырезает <p>-теги из сообщений о устаревании (deprecation).
▪️rustdoc теперь разделяет функции на типе в боковой панели на ассоциированные функции (которые нельзя вызвать через точку) и методы. Полезно, но терминология, на мой взгляд, неудачная: методы тоже являются ассоциированными функциями.
▪️
▪️Приватные типы в RPITIT ("return position impl trait impl trait") теперь являются ошибкой компиляции.
(в силу непонятных причин я почему-то полностью пропустил этот релиз, который был аж 28 мая)
Вышла версия Rust 1.96.0! Как всегда, тут только избранные части, а всё целиком в детальных заметках о релизе.
▪️До стабильной версии дошли
Range, RangeFrom и RangeInclusive из core::range. В отличие от существующих типов диапазонов, эти типы реализуют IntoIterator, но не Iterator. Это позволяет им быть Copy и иметь публичные поля без подводных камней, присущих неявно копируемым итераторам. Как вы могли заметить, в этот список не входят RangeTo и RangeFull, но они и так не могли быть итераторами и потому реализовывали Copy. В следующей edition планируют переключить синтаксис диапазонов на создание этих новых типов. До этого переключение между типами облегчено за счёт реализаций From между новыми и старыми типами.▪️Стабилизировали макросы
assert_matches! и debug_assert_matches!, которые проверяют не на равенство, а на соответствие паттерну (и потому могут дать более внятное сообщение об ошибке, чем assert_eq!. Пример из блога:use core::assert_matches;
/// [Random Number](https://xkcd.com/221/)
fn get_random_number() -> u32 {
// chosen by a fair dice roll.
// guaranteed to be random.
4
}
fn main() {
assert_matches!(get_random_number(), 1..=6);
}
Пример сообщения об ошибке:
use core::assert_matches;
fn main() {
let x = ('a', None::<i32>);
assert_matches!(x, ('a' | 'b' | 'c', Some(42)));
}
⬇️
thread 'main' (31) panicked at src/main.rs:5:5:
assertion `left matches right` failed
left: ('a', None)
right: ('a' | 'b' | 'c', Some(42))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Как и другие
assert*-макросы, туда можно добавить аргументы для дополнительного форматирования при панике.Как вы могли заметить, в коде есть явные импорты этого макроса. К сожалению, в прелюдию их не добавили, поскольку уже есть широко используемый сторонний крейт с этими макросами, и такое добавление создало бы конфликты имён в большом количестве кода.
▪️Теперь можно итерироваться по диапазонам из беззнаковых `NonZero` чисел.
▪️Определение "valid to read/write" для сырых указателей теперь явно исключает null. Некоторые функции, тем не менее, всё ещё позволяют пользоваться null-указателями для доступов нулевого размера, но теперь это исключения из общего правила.
(согласно CAD97 — члену команды операционной семантики — такое поведение было и раньше, просто теперь оно задокументировано)
▪️Манифесты для cargo теперь поддерживают назначение флагов для rustdoc в зависимости от cfg-предикатов.
▪️rustdoc теперь не вырезает <p>-теги из сообщений о устаревании (deprecation).
▪️rustdoc теперь разделяет функции на типе в боковой панели на ассоциированные функции (которые нельзя вызвать через точку) и методы. Полезно, но терминология, на мой взгляд, неудачная: методы тоже являются ассоциированными функциями.
▪️
repr(Int) меняет представление enum-ов, делая явный дискриминант всегда существующим... По крайне мере, в теории. Оказалось, что ранее для ненаселённого типа включались оптимизации раскладки, которые меняли размер таких типов в ноль, вопреки тому, что обещала документация. Теперь это пофиксили.▪️Приватные типы в RPITIT ("return position impl trait impl trait") теперь являются ошибкой компиляции.
blog.rust-lang.org
Announcing Rust 1.96.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
❤5👍2