crypt of decay [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

для матюгов [May. 5th, 2024|09:23 am]
оказывается, у меня был верхний пост для матюгов, а потом куда‐то проебался. искать лень, поэтому сделаю новый. каменты торадиционно скринятся.

мой набор модов для GZDooM а всё равно устарело давно.

сумбурные недостатьи по Gilbert-Johnson-Keerthi distance algorithm помечены тэгом gjk.

upd: тру и баню, тру и баню. ничего не поделаешь.

пояснение: умных здесь любят. умничающих — нет. умный знает разницу.

для тех, кто пошёл на мой сервер, а его нипущають: если я не проебал обновление днс, то это означает, что ваша подсетка так заебала бедного робота‐охранника, что он ебанул по ней банхаммером. поскольку после банхаммера робот перестаёт видеть вашу подсетку, он постепенно (неделя‐месяц) успокоится и разбанит. извините, это частный сервер, на гладос ресурсов не хватило, взял на распродаже ржавый r2d2. работает как может.

техническое
Link278 абырвалг|абырвалг!

где-то находим, где-то теряем... [Jun. 25th, 2017|02:37 pm]
замыкания в cougar как-то хитро поломаны, поэтому y-combinator не работает пока. зато компилятор научился в constant folding.

вообще, с замыканиями я знатно намудил. как я (вроде бы) писал ранее, определить, намудил ты в коде, или нет, очень просто: если ты херово понимаешь, как некий код работает, и с трудом удерживаешь в голове картинку (или не удерживаешь вообще) — с кодом всё очень плохо. вот с замыканиями в cougar всё очень плохо сейчас.

зато добавил named let из схемы. зачем-то.
Linkабырвалг!

а есть... [Jun. 24th, 2017|10:39 pm]
…нормальная новая версия superhot, спизженая со стима и сломаная? этические ограничения не позволяют мне брать гоговую, а поиграть в финалку хочется.
Link6 абырвалг|абырвалг!

про «профессиональное поведение» [Jun. 23rd, 2017|07:29 pm]
когда про кого-то говорят, что «он повёл себя непрофессионально», то это значит, что он сделал что-то лично для себя, а не для ебущего его в жопу шваброй потовыжимателя.

«профессиональное поведение» придумано исключительно для того, чтобы когда босс-потовыжиматель в очередной раз обосрался, об этом узнало как можно меньше людей. плюйте на «профессиональное поведение», срите на него, смейтесь над ним: это инструмент для затыкания вам рта, и ничего больше. любые правила поведения сверх «don't be a dick» — совершенно лишние.

кстати, довольно многие люди упускают из виду то, что «не будь уёбком» не включает в себя этичное поведение по отношению к мудакам. но включает в себя непричинение collateral damage.

если совсем на пальцах: когда несправедливо уволеный без выходного пособия и зарплаты за последние три месяца чувак сжёг нахуй машину босса (возможно, вместе с боссом, но больше ни с кем) — этот чувак не мудак. а если он наебнул базу бухгалтерии, и из-за этого без зарплаты остались вообще все — он точно такой же мудак, как и его босс, никакой разницы.
Link40 абырвалг|абырвалг!

ах, ну да [Jun. 23rd, 2017|07:00 am]
облегчаю поиски говнокода: cougar. тот-самый-лисп. ворнинг: вери вип. правда, местами код комментирован и разжёван. в основном там, где я его делал проснувшись, свежим. а где ноголомная каша — это перед сном. легко различить, лол.

cougar потому, что до этого был движок MILF. ну, кто не догадался. милфа валяется где-то в архивах, и ничего интересного из себя не представляет: использует дишный GC, выделяя по объекту на ячейку, и тупорылый рекурсивный эвалуатор. не умеет даже замыканий. и тцо не умеет (очевидно). написана за день-два по нужде, но не пригодилась.
Linkабырвалг!

fear and loathing in lisp vegas [Jun. 22nd, 2017|02:08 pm]
i will tear your eyes apart! )
Link40 абырвалг|абырвалг!

о мелких удобствах [Jun. 20th, 2017|03:11 pm]
американцам не понять, а вот тем, у кого более одной раскладки… моя патченая опера, например, переключается на английскую при активации address bar, и назад на то что было при деактивации. а иркоклиент имеет настройку раскладки для каждой конфы. офигенно удобно.
Link15 абырвалг|абырвалг!

на честном слове, и на одном крыле [Jun. 20th, 2017|02:43 pm]
пока ещё не совсем заснул, допилил в лицп вложеные функции и замыкания. теперь оно даже более-менее юзабельно. нормально умеет в TCO, кстати.

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

p.s.: лол, это всё есть, а примитивов car/cdr — нет нихера.
Link8 абырвалг|абырвалг!

it was fun while it lasts [Jun. 20th, 2017|07:17 am]
еда, наркотики и деньги окончательно кончились, остались совсем одни долги. ну, это было относительно весело, пока это длилось, но, кажется, наконец кончается. можно радоваться.
Link4 абырвалг|абырвалг!

а, хуй с ним [Jun. 19th, 2017|05:52 pm]
чего с голодухи не сделаешь — даже компилятор в сраный код для vm. жаль немного прошлого вычислителя, он мне нравился значительно больше. зато теперь честный 3op, почти ssa.
Linkабырвалг!

lisp engine [Jun. 18th, 2017|02:35 pm]
оно не такое простое, как может показаться. жёсткое self-imposed ограничение — весь движок должен быть доступен, всегда. то есть, лиспокод должен иметь возможность собирать себя по кускам не только даже из других списков, но и из текста, и из помеси этой фигни. и разбирать назад. и собирать снова. что нахуй ненужно, но очень забавно.

без этого ограничения я мог бы просто прекомпилировать всё в байткод и дальше особо не напрягаться. но так неинтересно.

хотя возможность прозрачной компиляции в байткод я ещё не полностью откинул: возможно, так оно и будет потом. хоть и жаль красивый вычислитель выкидывать (хотя это, по-сути, jit-байткод такой, гыг).

также запись/загрузка состояния VM должна быть не сложнее, чем: «ебанули на диск пул ячеек и несколько других массивов тупо блоком, потом тупо так же блоком загрузили», плюс небольшой фиксинг номеров примитивов. то есть, никаких нигде указателей. в идеале даже рабочее состояние машины должно жить в пуле (пока нет, но будет, наверное).

да, замыкания тоже будут. потому что какой нормальный лисп без замыканий? это херовый лисп получается, совсем не схема.

и бесплатные слайсы массивов: это важно. то есть, совсем бесплатные, они не используют пул ячеек вообще.

нет, это всё низачем не надо. просто дрочерство, как и любое искусство.
Linkабырвалг!

lisp engine [Jun. 18th, 2017|11:05 am]
стал ощутимо шустрее, приобрёл lexical scoping заместо dynamic. лисповый GC вроде как работает нормально (его можно пнуть в любой момент теперь — хоть и не нужно). ламбды чуть-чуть компилируются (хотя они всё ещё лисповые списки).

не могу придумать, как изящно сохранять позицию парзера для values. можно, конечно, тупо завести в объекте поле для этого, но жалко байтов: оно ведь надо исключительно компилятору, а потом байты бесполезно простаивают.

пока что тупо взрываемся без индикации места ошибки.
Link14 абырвалг|абырвалг!

маленькие удобные вещи [Jun. 16th, 2017|12:14 pm]
[Tags|]

было бы отлично, если бы разработчики игорей при загрузке сейва сразу после запуска игры смотрели на его дату, и пускали набор катсцен, которые рассказывают, чо за нахуй ваще в игре происходит, и что было в важных точках, если сэйв старее, скажем, месяца.

потому что некоторые игори я не в состоянии пройти ещё и потому, что сделать это за раз не хватает терпения; а если я бросил, то возвращаюсь нескоро. и уже всё забыл, конечно. и начинаю сначала. и дохожу примерно до того места, где бросил. и бросаю. и… ну, вы поняли.

иногда, кстати, и не возвращаюсь, потому что: «да ну нахуй, всё забыл уже, а начинать заново как-то не вдохновляет.»

Ghost 1.0, кстати, делает нечто похожее. только на даты не смотрит.
Link6 абырвалг|абырвалг!

про игры, красоту и бессмысленность [Jun. 16th, 2017|09:16 am]
[Tags|]

я уже говорил как-то: в Deus Ex, в самом начале, у Поля в кармане лежит ключ к дверям юнатко. он там совершенно бесполезен, и о нём невозможно узнать, если не ковырять файлы игры (или не написать скрипт для просмотра карманов NPC). но ключ там есть. я, собственно, о нём узнал как раз когда написал скрипт.

с одной стороны — это абсолютно бессмысленное дрочерство разработчиков. а с другой — привычка обращать внимание на мелкие детали может помочь не объебаться, когда это действительно будет надо. хотя я думаю, что в данном случае это всё-таки было дрочерство.

кстати, если поправить финальный скрипт в Аркануме так, чтобы не случался гамовер, NPC немножко офигеют. и начнут говорить тебе, что ты сраный задрот, что игра закончилась, вырубай компьютер и вали уже нахер.
Link51 абырвалг|абырвалг!

и прежде чем кто-то спросит... [Jun. 16th, 2017|03:05 am]
…про the war of mine: я в неё не играл. по двум большим причинам. во-первых, если ребята зафэйлили такую мощную тему, то у меня будет плак-плак. а во-вторых, идите нахуй вообще, я в видеоигры не затем хожу, чтобы переживать Риал Драма (что там пытались сделать). это какой-то толстоевский, и такая часть искусства мне абсолютно неинтересна: я живу достаточно хуёво (очень хуёво, да) для того, чтобы чужая реалистичная драма вызывала не сопереживание, а раздражение.
Link26 абырвалг|абырвалг!

superhot [Jun. 15th, 2017|03:06 pm]
[Tags|]

очень, очень крутая. дисциллят механики, ничего лишнего. очень крутая.
Link9 абырвалг|абырвалг!

все лезут в наполеоны.нельзя по улицам пройти из-за наполеонов. [Jun. 14th, 2017|11:53 pm]
где-то глубоко в подвале меееееедленно, по биту в месяц, движется проект переноса Doom 2D: Forever с паскаля на дишечку.

в принципе, там на три дня работы руками и регулярными выражениями, но шурик, мы же комсомольцы, это не наш метод! поэтому мы делаем парзер, который разберёт паскаль в аст, перепишет обращения к библиотекам на мои, и потом соберёт из этого ди. потому что только так можно будет написать красивый постмортем. а про руки что писать — руками каждый умеет.
Link4 абырвалг|абырвалг!

lisp evaluator [Jun. 11th, 2017|10:21 pm]
из рекурсивных вызовов переделал в ручной стек и машину состояний (так изначально и планировалось). естественно, в таком виде там можно сделать нормальный трассировщик/дампер (миниотладчик такой), suspend/resume (бесполезно в моём use case), или — более полезное — проверки в стратегических местах и прерывание особо наглых скриптов, с опциональным stack dump. TCO, опять же (редуцируется до «глянуть на запомненые состояния в стеке», даже не надо код анализировать).

байткод делать не хочу принципиально, хочу всё на лисповых ячейках.

заодно перенёс больше значений в nan-боксы. теперь слайсы массивов и строк бесплатные (за счёт замедления GC, но GC у меня, как я писал, ситуация скорее нештатная). единственная gotcha — присвоеный глобалу слайс после выполнения скрипта будет сконвертирован в новый массив. сколько раз разным глобалам присвоили — столько новых массивов и будет. потому что это не решить иначе без полного скана всего space (слайс может указывать в произвольное место; а массивы просто откусывают от спейса куски нужного размера).

можно, конечно, завести ещё один параллельный список, в котором сохранять начальные адреса всех массивов. поскольку аллокатор всегда идёт строго в порядке возрастания адресов, поиск там будет O(log N). может, так и сделаю. или просто документирую фичу, потому что не вижу в таком усложнении практического смысла (это ж не язык для «генерального программирования»).
Link5 абырвалг|абырвалг!

2-space abuse-like lisp for nothing [Jun. 10th, 2017|10:03 pm]
чисто для смеху. ну ладно, для Секретной Цели, но будем считать, что для смеху.

специфика в том, что двигатель заточен на нечто типа гейм-скриптов, которые быстренько выполнились и отвалились. то есть, не шибко большие, и уж точно не очень долго исполняющиеся. поэтому имеет два хранилища: «постоянное» и «временное». все выделения памяти идут во временном, а после выполнения eval() оно нафиг очищается.

ну ладно, не совсем: сначала выполняется хитрая штука, называемая `fixBrokenHearts()` (терминология спизжена просто так). что она делает? очень просто: каждый раз, когда car/cdr из постоянного хранилища присваивается временная ячейка (или символу), модифицированная постоянная ячейка тупо заносится в «список разбитых сердец». список, понятно, простейший односвязный, проверка на дубликаты O(1) (а хуле там поле next проверить? я только про правильный sentinel сначала забыл; бывает).

так вот. потом этот список усердно проходится, и если в постоянной ячейке находится ссылка на временную, то создаётся новая постоянная ячейка, в неё копируется значение временной, и: новая постоянная добавляется в список для обработки прям сейчас (рекурсия без рекурсии и расхода стека, ага), а временная заменяется на разбитое сердце со ссылкой на новую (таким образом корректно обрабатывается ситуация, когда на одну временную ячейку есть много ссылок — очевидным образом).

конечно, в постоянном пространстве постепенно накапливается мусор, но весьма медленно. в том числе за счёт того, что для значений используется nan-boxing, и ячейки имён символов сразу создаются в постоянном пространстве. внешние entities, понятно, имеют поля, значения которых тоже перетаскиваются в постоянное пространство. однако irl они очень редко будут содержать списки, особенно активно меняющиеся. в основном если и есть список, то его раз создают, и потом откусывают головы — или что-то в этом роде.

в общем, когда глобальное хранилище вырастает до неприличных размеров, то возможны occasional GC spikes, конечно. или для патологических случаев, когда идиоты на каждом кадре пердолят в глобалы новые списки (используйте массивы, йопта — они там специально для этого! и эмулируют структуры!) — будут танцы с GC. меня такой расклад устраивает.

конечно, особых оптимизаций по скорости там нет — это специально. ну, может потом схемоподобный байткод сделаю.

потратил на написание всё вчера, если что.
Linkабырвалг!

кстате [Jun. 9th, 2017|06:18 pm]
клёвый чувак. наглухо пизданутый, прикольно. а TempleOS очень забавная. но у него, конечно, есть на что купить пожрать — чего бы и не уверовать, да. а у меня нету, поэтому я атеист.
Link42 абырвалг|абырвалг!

navigation
[ viewing | most recent entries ]
[ go | earlier ]