1.84K subscribers
3.26K photos
129 videos
15 files
3.53K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Технологический Болт Генона
Достижение выполнения кода при контроле над текстом комментария в Python-скрипте https://www.opennet.ru/opennews/art.shtml?num=63669 Участники могли отправить сетевой запрос к Python-скрипту, который создавал новый Python-скрипт cо случайными именем, добавлял…
#prog #itsec #python

В конце мне не нравится, что автор поёт дифирамбы ИИ. Ну и ещё у него есть функция ascii_safe, которая написана просто ужасно:

def ascii_safe(x: int) -> bool:
"""True if all four bytes have high bit clear."""
return all(((x >> (8 * i)) & 0x80) == 0 for i in range(4))

Это явно можно написать одновременно эффективнее и проще для восприятия:

def ascii_safe(x: int) -> bool
return x & 0x80808080 == 0
💯13🤡5
Короче, мне только что позвонили мошенники. Ничего удивительного так-то, мне и Kaspersky WhoCalls подсказал, что звонит кто-то подозрительный (минутка рекламы), и тему сразу подняли известную уже (про замену полиса ОМС), но суть не в этом.

Мне звонил парень. И он настолько заработался, что представился Анастасией.
Когда я решил уточнить у Настеньки, а не ошиблась ли он(а), он(а) слегка смешалась и дальше диалог уже не склеился 🌚
😁23🤡2🥴2
Forwarded from Сова пишет…
Жиза Армении
20👍5😭3🌚2😁1💯1
Forwarded from Om TV
Ну в принципе, чему тут удивляться? Если во главе страны кретины, ментально застрявшие в средневековье, то всё идет по плану!
💩10🤡54🤮2😁1🤯1
#prog #meme про документацию

Простите 🥲, жиза в глаз попала

(thanks @rustamemes)
👍10😁54😭4
Блог*
#prog #article #amazingopensource Jujutsu (jj) — система контроля версий, которая концептуально проще git и при этом мощнее. Неплохой (но местами устаревший) обзор Jujutsu — jj init — сделал Chris Krycho. Также есть пока что неполный туториал от Стива Клабника…
#prog

Чел делится впечатлениями от jj.

jj крута
Посидел я на jj где-то месяц, и... это офигенно.

Т.е. у меня по большей части не обычный "гит воркфлоу", где делаешь фичу, мержишь, делаешь новую, а эдакий стейт "тещу 20 фичей какая заработает"
И jj для этого идеален

t.iss.one/paniccode/45
👍7🤡6💯32🔥1
Forwarded from Panic! At the 0xC0D3 (Lev)
Я не могу этим не поделиться
Недавно я делал внутреннюю тулзу, для которой хотелось запускать питон код
Я решил попробовать сделать это не с помощью процессов, а запускать питон прям в этом же процессе (язык для скриптов же все дела) (плюс можно было шерить память за очень быстро)
Для раста есть прекрасная либа под названием pyo3 (а еще там же есть биндинги numpy)

И мне надо было сделать datetime numpy array (массив дат)
Ну я и пишу какой-то код аля
PyArray1::<PyDateTime>::from_iter(dates...);
И что бы вы думали

1. Компилятор(!) знал и понял, что PyDateTime нельзя пихать в numpy array
2. Но он не только сказал, что нельзя, но написал мне ошибку со скрина

А именно, он мне сказал:
"PyDateTime" нельзя сувать в numpy array, но есть несколько других типов, которые можно, например numpy::DateTime

Оказывается, что у нампая свой тип дат (что логично, вместо всей структуры с полями типа year, month, day и т.д., там просто хранится timestamp)
И если я хочу быстро, то мне нужно использовать его.

И УЗНАЛ Я ОБ ЭТОМ НЕ ИЗ РАНТАЙМ ОШИБКИ, НЕ ИЗ ГУГЛА, А ОТ КОМПИЛЯТОРА
АААААААА

К слову, часто раст рекламируют как "memory safety", но на самом деле его система типов позволяет делать намного больше, как, например, тут, правильно описывать апи вообще другого языка.
Помимо этого, мой экспириенс с питоном в расте был мега приятный. Я не знал, можно ли в структурах, которые будут экспортироваться в питон, использовать обычные типы из раста (условно, нужно ли использовать PyString, или можно String), и вместо того, чтобы гуглить, безопасно ли это, можно ли так, я просто писал такой код, и он компилировался, и я был уверен, что так можно (и да, все ок)
И такого рода вещей было очень много. Я глядел совсем чутка на то, как это делается в плюсах, и понял, что там просто UB на UB (C api все таки), и был в шоке, наскольно приятно это делается тут.

В общем, это довольно хороший пример большой библиотеки с кучей сложных вещей, которая при этом позволяет добиваться того самого волшебного момента "компилируется - значит работает"
👍22🔥81
Блог*
#prog #rust #menacingopensource github.com/Speykious/cve-rs
@paniccode подсказывает, что там прекрасная лицензия:

You just DO WHATEVER THE FUCK YOU WANT TO as long as you NEVER LEAVE
A FUCKING TRACE TO TRACK THE AUTHOR of the original product to blame for
or held responsible.
9
😁342🤡2😢1🌚1
#math #game

В сфере настольных ролевых игр наиболее известной и популярной игрой, безусловно, является Dungeons & Dragons пятой редакции. Сказать, кто стоит на втором месте, проблематично, но, по разным оценкам, следующей по популярности игрой в этой нише является Pathfinder второй редакции. Это — разные игры, но общего у них довольно много (что неудивительно, учитывая, что обе игры прослеживают свою родословную от D&D 3.5).

Одна из этих общих частей — пошаговые бои, в рамках которого участники действуют каждый в свою очередь в пределах установленного в начале боя порядке. Ещё одним общим моментом является использование хитов/очков жизни (hit points) для отслеживания физического благосостояния живых существ, включая персонажей под управлением игроков. Существа в обеих системах обычно умирают, когда число хитов опускается до нуля, но это не касается персонажей игроков. Вместо этого они валяются в бессознательном состоянии и каждый ход делают проверки, по итогам которых персонаж может стабилизироваться, то есть остаться без сознания, но без угрозы для жизни. Детали этих проверок уже разнятся между этими двумя играми, но они схожи тем, что характеристики персонажей на эти проверки не влияют, а также тем, что при получении хитов персонажи автоматически перестают умирать.

В D&D 5e правила следующие:
- Когда персонаж впервые падает без сознания (= опускается до 0 хитов), он начинает умирать и отслеживать провалы и успехи спасбросков от смерти. Поначалу число и тех, и тех равно нулю.
- В начале каждого хода, когда персонаж умирает, он делает спасбросок от смерти. Это означает, что игрок кидает куб кость d20 (икосаэдр, с 20 гранями) и сравнивает выпавшее число с 10. Если число равно или больше 10, то персонаж получает один успех. Если число меньше 10, то персонаж получает один провал.
- Если персонаж получает три успеха спасброска смерти, он стабилизируется, перестаёт умирать и больше не делает спасброски от смерти. Если он получает три провала, то умирает окончательно.
- 1 и 20 на кости имеют особое значение. Значение 20 означает, что персонаж получает 1 хит (= перестаёт умирать), приходит в сознание и может действовать на этом ходу. Значение 1 означает, что персонаж получает два провала вместо обычного одного.

Прежде чем объяснить правила в Pathfinder 2e, нужно сначала объяснить, как там делаются проверки. И в DnD, и в PF для этого кидается кость d20, прибавляются уместные модификаторы и результат сравнивается с заранее заданным целевым порогом, численно характеризующим сложность задачи. Значение равно или больше порогу — успех, меньше — провал. PF2 отличается тем, что проверка также может окончиться критическим успехом и критическим провалом. Критический успех получается, если число на кубе после модификаторов превосходит порог на 10 или более. Аналогично критический провал получается, когда результат на 10 или более меньше порога. Числа 20 и 1 имеют особый эффект: 20 увеличивает степень успеха на одну, а 1 степень успеха на одну уменьшает (на практике для типичных задач, когда сложность не является очень высокой или очень низкой, это означает, что 20 на кубе является критическим успехом и 1 критическим провалом).

В Pathfinder 2e правила следующие:
- Когда число хитов персонажа опускается до нуля, он начинает умирать и получает состояние dying 1 (обычно, при некоторых обстоятельствах это значение может быть выше).
- В начале каждого хода, когда персонаж умирает, игрок делает recovery check. Для этого игрок кидает кость d20 и сравнивает значение с порогом, равным 10 + текущее значение dying. Успех уменьшает значение dying на 1, провал увеличивает значение dying на 1. Критические успех и провал меняют значение на 2 в ту же сторону.
- Когда значение dying увеличивается до dying 4 или выше, персонаж умирает насовсем. Если значение dying уменьшается до dying 0 или меньше, персонаж теряет состояние dying и стабилизируется.
2
Не смотря на различия в правилах двух систем, их объединяет тот факт, что степень умирания персонажа можно охарактеризовать дискретным состоянием, и переходы между этими состояниями проходят пошагово, вероятностно и независимо от всех предыдущих переходов. Иными словами, процесс умирания в обеих системах можно описать простой цепью Маркова! Так как мне влом самому писать нужные программы, я взял первый попавшийся в гугле калькулятор и описал все матрицы перехода.

Одной из претензий к D&D пятой редакции является тот факт, что персонажи обладают сверхчеловеческими способносятями. В частности, персонажей в игре очень сложно убить в бою, что приводит к снижению напряжения и потере правдоподобия. Персонажи в Pathfinder второй редакции также, вообще говоря, обладают сверхчеловеческими способностями, но бой в Pathfinder предположительно несёт более высокий риск смерти для персонажей. Справедливо ли считать Pathfinder 2e более смертельным, чем DnD 5e? Давайте посмотрим на результаты анализа и узнаем!
👏1
Сначала рассмотрим, как это выглядит в D&D. По очевидным причинам процесс умирания не может продолжаться больше пяти раундов, поэтому распределение вероятностей после пятого шага совпадает со стабильным распределением. В типичных играх персонажи действуют не поодиночке, а в составе так называемой партии, и от игроков ожидается, что их персонажи будут стабилизировать тех персонажей партии, кто упал без сознания. Каждый ход, когда помощь не оказана, грозит всё большим шансом смерти персонажа.

В D&D умирающий персонаж не может умереть за один ход (если ему не наносят урон, конечно же). При отсутствии попыток стабилизации (или неудачных попытках) умирающий персонаж умирает на второй ход с вероятностью 4,25% и на третий ход с вероятностью 15,7%.

С другой стороны, у персонажа есть шансы оперативно вернуться в строй: даже на первый и второй ход персонаж может не просто стабилизироваться, а прийти в сознание с вероятностями 5% и 9,75% соответственно.
А что там в PF2e? В отличие от DnD5e, состояние dying может меняться туда-сюда (что приводит к забавному результату, что теоретически персонаж в PF может умирать неограниченно долгое время). Но как это сказывается на шансах?

В PF персонаж, которому не оказывают медицинскую помощь, не умирает через 1 ход (опять-таки, при условии, что ему не наносят урон), но умирает на второй ход с вероятностью 7,5% и на третий ход с вероятностью 19,8%.
Казалось бы, цифры вроде как подтверждают заявление о более смертоносном Pathfinder — в конце-концов, если персонажа не пытаются стабилизировать уже два хода, то дело дрянь. Но это — неполная картина.

Что произойдёт, если по каким-то причинам все персонажи в партии упадут без сознания? Смотрим вероятности дальше. В D&D персонаж умирает с вероятностью 29,7% на четвёртый ход и с вероятностью 40,5% на пятый ход. В Pathfinder же соответствующие числа — 22,4% и 26,7%. Более того, если посмотреть на стабильное распределение, в Pathfinder персонаж, предоставленный самому себе, умирает с вероятностью 30,8% против 40,5% в D&D. Иными словами, в Pathfinder в партии, которую целиком лишили сознания, в среднем будет больше выживших!
Однако даже такой максимально сферически-коневой пример упускает одну важную вещь. Именно, в D&D умирающий персонаж начинает с нулём провалов и нулём успехов, вне зависимости от того, как он начал умирать. В PF2e же, как я уже отметил выше, персонаж может начать с dying выше 1.

Одна из таких возможностей — получение урона от критической попадания атаки или критического провала спасброска от эффекта, наносящего урон. В этом случае персонаж начинает с dying 2. Как видно на таблице "The steady-state vector depends on the initial state" выше, оставленный без опеки персонаж с dying 2 в PF2 умирает с шансом 59,4% — практически вдвое выше, чем обычно! Более того, даже при наличии живых сопартийцев персонаж в таком случае может умереть уже через 1 ход с не такой уж и маленькой вероятностью 10%, а на втором ходу уже с вероятностью 37%!
Кроме того, есть и другие факторы, увеличивающие смертоносность Pathfinder 2e. В обеих системах получение урона делает приближение смерти более вероятным, однако механически это выражено по-разному. В D&D получение урона добавляет один провал спасброска (два от критической атаки), а в Pathfinder 2e получение урона увеличивает значение dying на 1 (два от критической атаки/критического провала спасброска). В D&D провалы и успехи отслеживаются независимо, а вот в Pathfinder 2e recovery check должны перекрыть урон, полученный во время валяния в бессознательном состоянии!

Помимо этого, в Pathfinder 2e есть механика, которая наказывает падение в 0 хитов. В D&D персонаж может падать без сознания и один, и два, и десять раз за бой — до тех пор, пока у партии есть способ восстанавливать хиты, они в относительной безопасности. В Pathfinder 2e же каждый раз, когда персонаж теряет состояние dying, он получает состояние wounded 1 — или увеличивает его на единицу, если оно уже было. Когда персонаж теряет сознание, к начальному значению dying прибавляется текущее значение wounded. Это означает, что персонаж с wounded 3 может умереть от одного удара! Избавиться же от состояния wounded можно только путём восстановления хитов до максимума.

Именно из-за этой дополнительной механики с положительной обратной связью Pathfinder 2e и имеет более опасные бои. Как следствие, в этой игре крайне важно лечить персонажей до того, как они получат урон, давая им возможность пережить больше ударов. Это является ещё одним заметным отличием двух игр: в D&D лечение значительно менее эффективно, чем урон, и так и задумано гейм-дизайнерами. Отсутствие последствий для многократного падения в 0 хитов является прямым следствием этого дизайн-решения.

Но при всём этом, что иронично, умереть в D&D 5e в одиночку всё ещё более вероятно, чем в Pathfinder 2e. И дело не только в вероятностях, но и в дополнительных механиках, отражающих тот факт, что персонажи игроков — особенные личности.

В D&D есть игромеханически такая вещь, как вдохновение. Его ведущий игры может выдавать по своему усмотрению — обычно тем игрокам, персонажи которых добились каких-то больших успехов, сделали что-то героическое или тем игрокам, которые хорошо отыгрывают роль. Вдохновения не может быть больше одного. То, как его можно использовать, зависит от редакции игры.

Название D&D 5th edition по факту относится к двум наборам правил, первый из которых вышел в 2014 году, а второй — в 2024. Да, это запутанно. (Справедливости ради, название Pathfinder 2nd edition тоже относится к двум наборам правил, но у более новой версии хотя бы есть официальный подзаголовок Remaster)


Так вот, в D&D5e2014 можно использовать вдохновение, чтобы сделать любой бросок с преимуществом, а в D&D5e2024 его можно использовать, чтобы перебросить проваленный бросок (если новый бросок всё равно проваливается, вдохновение не тратится). Оба этих варианта использования можно использовать для спасбросков смерти, увеличивая шансы получить успех, но оба варианта не дают гарантий. Вдобавок, даже для успешного броска всё ещё один успех, а для стабилизации нужны 20 или три успеха.

В Pathfinder 2e есть схожая механика: очки геройства (hero point). Они также выдаются на усмотрение мастера и тратятся схожим образом (на переброс проверок), но есть пара важных отличий. Во-первых, hero points не переносятся между сессиями. Во-вторых, их может быть максимум три штуки у каждого персонажа. В-третьих, каждый персонаж получает один hero point в начале каждой игровой сессии. И в-четвёртых, hero points можно использовать не только для перебросов: игрок может потратить все hero points, что у него есть, чтобы стабилизировать персонажа без увеличения состояния wounded. Автоматически.

В итоге, где же бои более смертоносны, в D&D 5e или в Pathfinder 2e? Сложно сказать. Из-за игрового баланса в PF2e хиты персонажей меняются туда-сюда с большим размахом, и правила умирания увеличивают вероятность помереть за пару ходов, но очки геройства дают подушку безопасности, которая позволяет с высоким шансом избежать потери персонажа. А как вы считаете?
2👍1💩1
😁26🎉5👍21🌚1💯1
Forwarded from Neural Machine
Сил моих больше нет.
🤝32
13💯4🔥1