friends [entries|archive|friends|userinfo]
phonomania

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

самі ми нє мєсниє, і очі в нас чесниє [Nov. 10th, 2019|01:06 pm]

ketmar
ёрнический заголовок обозначает, что мне опять не на что покупать еду. так что нате вам кусочек «шоу довгоносиків», где поясняют, какие блага и просветления будут тем, кто отдаёт свои деньги на полезные цели. полезная цель — это я, если что. в общем, дайте пожалуйста денег.
Link

народная примета [Nov. 9th, 2019|12:22 am]

ketmar
если игру можно предзаказать, и за это дают бонус — игра говнище. no exceptions.
Link11 comments|Leave a comment

новый вавумчик созрел [Nov. 6th, 2019|01:33 pm]

ketmar
[Tags|]

инфо.

в этом билде кардинально переделан код лайтмапов, и добавлен дисковый кэш для них. то бишь, движок теперь в состоянии скинуть на диск посчитаное освещение, а не считает его заново при каждой загрузке сохранёнки, например. ну, и больше не будет падать с воплями про то, что surface cache overflow.
Link18 comments|Leave a comment

малацы заипис зделали!!1 [Nov. 2nd, 2019|12:58 pm]

ketmar
обновил вайн с 2 до 4. внизапна, какой-то дегенеративный жопорукий уебан (сокращённо — «разработчик wine») где-то по дороге решил, что загружать .dll из каталога с .exe больше не надо. то есть, срановайн больше не ищет dll-ки по пути argv[0]. при этом в текущем каталоге ищет, поэтому оправдать уебанство каким-нибудь «секурити» нельзя — это тупо регрессия, на которую всем похуй. потому что вайн очень хорошо тестируют, да, там много тестов, очень много. только они не ловят регрессии. очень полезные тесты.

нет, как починить — не знаю. исходники полное говно, я в них поковырялся — и никакой опции не нашёл.


upd: хуясе. оно было сломано как минимум с 3.18. (анон говорит, что это похоже на опечатку) и — как полагается — в каментах некоторое количество феерических, которые уверяют, что «с вайнам фсё нармальна кокококо».
Link25 comments|Leave a comment

и ещё лолушка [Oct. 30th, 2019|09:34 am]

ketmar
новые владельцы «котаку» (это сайт сжв-дегенератов, которые отчего-то считают себя «игровыми журналистами») весьма однозначно намекнули, что если сайт про видеоигори — то там надо писать про видеоигори, а не про сжв. «команда» сайта в ахуе и истерике — потому что журналисты они никакие, и ни про что кроме сжв писать не могут. смотреть на пылание сжв-пердаков всегда прельстиво.
Link19 comments|Leave a comment

про шитлаб [Oct. 30th, 2019|09:10 am]

ketmar
наебать с телеметрией брутфорсом не вышло. теперь будут рубить хвост по кусочкам.

хипсторы, конечно, радуются: «шитлаб слушает камунити! шитлаб работает над ошибками! молодцы!» ну, хипсторы тупые, это неудивительно. до них никогда не дойдёт тот факт, что если «взаимодействие с сообществом» является «core value», то подобные типа-ошибки просто не могут возникнуть. а возникают они только если на камунити насрать, и внимание обращают лишь когда слишком уж громко квакает. так что я с умилением наблюдаю, как хипсторы благодарят за тёплую шапку. такие пусечки!
Link15 comments|Leave a comment

librem 5 немножко наебалово [Oct. 28th, 2019|04:16 am]

ketmar
или множко. короче, обычная история: неплохо начали, потом подросли, расширились и наёбывать стало удобней, нежели что-то делать. совершенно неудивительно, потому что стратегия «бизнес должен развиваться, а для этого расти» неизбежно приводит к тому, что самым выгодным производством становится производство денежных потоков. а остальное только мешает.
Link20 comments|Leave a comment

интересная карта для думчика [Oct. 26th, 2019|09:17 am]

ketmar
No Quarter. тот редкий случай, когда карта сделана в стиле «реализма», но вполне играбельна, и не скучная.
Link16 comments|Leave a comment

перечитывая "the ethical engineer" [Oct. 23rd, 2019|04:13 am]

ketmar
ужасно ненаучная фэнтэзи. человек из будущего знает про перегонный куб и принцип работы парового двигателя. такого не может быть, потому что не может быть никогда. кто не верит — может осмотреться вокруг и прикинуть, сколько людей знают об этом сейчас. потом вспомнить, что это не было сакральным знанием всего каких-то пятьдесят-семьдесят лет назад (язон прав, практически любой фермер мог соорудить перегонный куб). а лет через сто все будут знать только то, что электричество производится магическими машинами древних, которые работают лишь потому, что Великий Наследный Президент неусыпно молится богам. жаль, что я не доживу: я бы с удовольствием посмотрел на пиздец человечеству в такой форме.
Link49 comments|Leave a comment

о ручной оптимизации замолвите слово [Oct. 9th, 2019|08:30 pm]

ketmar
[Tags|]

как ни странно, но ручная микрооптимизация вида «заменяем деление сдвигом» всё ещё имеет смысл. да-да, у нас очень умные компиляторы, они умеют это делать сами. но только для беззнаковых целых. потому что деление отрицательного целого на два не то же самое, что арифметический сдвиг его вправо. потому что «-3/2 == -1», но «-3>>1 == -2». ой.

а теперь возьмём классический алгоритм двоичного поиска. если проигнорировать возможность переполнения (в большинстве случаев переполнение невозможно всё равно), то мы имеем операцию `m = (l+r)/2` для получения среднего элемента, и операцию `r = m-1` для одного из вариантов уменьшения диапазона. при `l: 0, r: 1` первое даёт нам `m: 0`, и тогда второе даст `r: -1`. поэтому мы не можем использовать беззнаковые целые. а раз `l` и `r` у нас знаковые, то и соптимизировать деление компилятор не сможет. скорее всего, для цпу что деление на два, что сдвиг в данном случае будут одинаково быстрые, но в принципе — это нигде не гарантируется. также деление потенциально может выкинуть исключение, а спекулятивный предсказатель может не знать, что на что мы делим в момент попытки предсказания, и пойти по самому пессимистичному пути.

в общем, поскольку мы хоть и используем целые со знаком, но точно знаем, что делить будем только положительные числа, то мы можем или сделать уродливое выражение `m = ((unsigned)l+(unsigned)r)/2u` (да, один каст и `u` не нужны, я знаю), или просто написать `m = (l+r)>>1`. лично мне нравится второй вариант, он красивей даже если поубирать из первого лишнее.

так что если вдруг увидите где-то в коде сдвиг вместо деления, не спешите кричать, что это бесполезное битоёбство, и компилятор сам всё порешает. возможно, автор как раз знал, что делает, и почему в этом случае компилятор порешать не имеет права. конечно, это всё ещё микрооптимизация, которая вряд ли будет иметь какое-то влияние на итоговый результат, но почему бы и да. и бесценный бонус: позлить хипсторов «устаревшим битоёбством», которое можно формально обосновать.
Link22 comments|Leave a comment

увы, вы будете смеяться, но мне опять... [Oct. 3rd, 2019|08:39 am]

ketmar
в общем, старания не аскать донатов некоторое время работали, а теперь опять перестали. так что если у вас вдруг есть желание задонатить на что-то соверешенно бесполезное, то можете задонатить мне. очень кушать хочется. (и покурить)
Link

вещь, о которой никто не пишет [Oct. 2nd, 2019|07:08 am]

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

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

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

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

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


p.s.: xfs, похоже, не парится, и держит два дерева, сортированых как по смещениям, так и по размерам. понятно, что это тоже вариант, но он мне совсем не нравится.
Link16 comments|Leave a comment

проржавшись, по мотивам стукалки [Oct. 1st, 2019|08:49 pm]

ketmar
эм… сокпаппет. ну, мне можно, я хоть и не с двачей, но с нульчика.

а, заодно и это уже, а то премии не дадут: грета — хитрая дура. виновата, впрочем, только в том, что невовремя попалась со своим прогулом уроков на глаза куче очень неприятных мразей. дуру — в школу, мразей — на костёр: нам нужна тёплая планета!
Link13 comments|Leave a comment

emperor's new build [Oct. 1st, 2019|07:55 pm]

ketmar
[Tags|]

свежий k8vavoom. я пока пилю дерево, так что даже протухнуть не успел.
Link3 comments|Leave a comment

органы на беженйцев [Sep. 30th, 2019|09:52 am]

binladen_ljr
Хочу пожертвовать я негру
Своё пылающее сердце!
Скачи, мой негр, подобно тигру
В бундесверовских берцах!

Хочу пожертвовать арабу
Свою могучую простату!
Пускай араб пердолит бабу
Как подобает Арафату!

И лишь жидовскому отродью
Я не пожертвую ни грамма
Говна, обильного в природе.
Такая у меня программа!
LinkLeave a comment

наши грабли самые фигурные! [Sep. 30th, 2019|05:58 am]

ketmar
поскольку я так и не нашёл кейвалуя, который бы сделал меня кончить и закурить, придётся запиливать свой. что-то типа lmdb-без-mmap: тоже на b+tree, с acid, variable-length keys, и — скорее всего — без блокирования читалок пока писалка всё портит.

оно кажется ambitious, но на самом деле весь акцид и прочие продвинутые фичи основаны на очень простой концепции: pages are immutable (except the first one, where db header is stored). ну, точнее, кроме первых двух, потому что они используются в режиме flip-flop, на тот маловероятный случай, когда фс умудрится при записи одну из них убить (впрочем, эта фича сдизайнена, но я не уверен, что я стану её делать; а если делать, то лучше тогда заголовки разнести килобайта на 64 друг от друга хотя бы).

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

ах, да: иногда в b+ приделывают «горизонтальные указатели», чтобы проще было итераторы пилить. это во-первых, лишнее, а во-вторых, с immutable pages без нужды увеличивает количество страниц для обновления. намного проще просто хранить в итераторе весь путь до текущего листа: дерево n-арное, жёстко балансированое, так что тупой массив на 16 элементов справится без проблем (особенно с учётом лимита в 4 гига на базу).

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

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

p.s.: код lmdb я не смотрел, так что все мои рассуждения о ней — на основе кое-какой инфы от автора и прочих интернет-слухов.

p.p.s: mmap, возможно, будет для больших валуев, чтобы zero-copy. но отдельным режимом, и в версии 2, потому что он дорогой, если его постоянно ставить и снимать.
Link19 comments|Leave a comment

сошёл с ума, но не застрелился [Sep. 23rd, 2019|08:40 pm]

ketmar
когда автор openal-soft решил, что надо переписать проект на c++ — я сразу понял, что он (автор) сошёл с ума, и ничего хорошего там больше не будет. но не думал, что так быстро. ещё даже официальный релиз не приехал — а оно уже во-первых, вообще не собирается gcc6 (малацца атлична зделали 10 из 10!), а во-вторых, если кое-как собрать — то настолько адски тормозит, что каким-то образом весь вавумчик периодически замирает на пол-секунды (или даже больше).

ну, это… R.I.P. OpenAL-Soft, ты был отличным проектом. хотя, собственно, и остался: сборка с последним коммитом, где автор ещё не сумасшедший, великолепно работает. на этом рекомендую обновления заморозить, дальше будет только хуже.

p.s.: нет, «ты подожди офрелиза, там всё починят» не катит. хотя бы потому, что в нормальной сишной версии ничего «чинить» не надо было, она отлично работала. а если автор совершенно низачем сначала решил всё поломать, а потом — может быть — самоотверженно чинить, то это обозначает, что проекту пиздец.
Link57 comments|Leave a comment

две самых вредных вещи для сишечки и жму/пинус [Sep. 23rd, 2019|02:26 am]

ketmar
[Tags|]

две. самые вредные. первая — это комитеты по стандартизации. потому что они обычно стандартизуют какую-то совершенную поеботину, не соответствующую ни здравому смыслу, ни реальному положению дел. а вторая — gcc.

впрочем, по справедливости, gcc должен быть первым в списке, потому что его разработчики совершенно неадекватные, и творят поебень просто потому что могут. ну, например (и немного контекста в обсуждение).

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

дегенеративное неадекватное мудачьё.

к сожалению, gcc — единственный GPL-компилятор, который можно использовать для проектов сложнее «привет, мир, это мой курсач 'приветмир'». но для меня очень большая загадка, почему разработчики gcc такие поголовные неадекваты. потому что судя по их ответам в багзилле (не только из этого поста, у них много такого) — разрабы gcc совершенно не имеют понятия о том, что их компилятор используется для чего-то кроме бенчмарков.

и да, я уже нашёл «-mstackrealign». вот только штука в том, что эта опция должна быть opt-out, а не opt-in. но тогда gcc будет делать что-то разумное и применимое ирл, а этого — как я понимаю — допускать никак нельзя.


p.s.: вроде бы осень, школа — откуда опять парад дебилов в комментариях-то?
Link16 comments|Leave a comment

key/value storage, в одном файле, чтобы удобно встраивать, и не mmap нахер всей базы [Sep. 22nd, 2019|09:23 am]

ketmar
как ни удивительно — но $subj почти нет. из достойного внимания — QDBM, конечно, про который все знают, и iowow, который выглядит весьма вкусно, но я лично его особо не тестировал.

нет, LMDB не проходит чек по последнему пункту, увы.

а, да: ещё есть TDB из самбы. ну, такое.

и я в курсе, что можно ебануться, и тупо взять sqlite. не самый плохой вариант, конечно, но как-то… неизящно.


p.s.: не, есть ещё масса всяких то ли наполовину допиленых, то ли обскурных (типа skipdb), но у них чересчур большой код, чтобы лично его аудитить, и слишком маленькая юзербаза, чтобы более-менее доверять им данные. что, конечно, не значит, что мне неинтересно на такие посмотреть.
Link25 comments|Leave a comment

Сальвиниада Секунда [Sep. 19th, 2019|01:21 am]

binladen_ljr
Мы всегда страдали от нацистов",
говорил фашист куда-то вдаль
Отхлебнул шампанского игристого
чтоб забыть тревогу и печаль

Там Сальвини и нашёл ракету
да не ту ракету он нашёл
а нашел бы он Ракету эту
стало б итальянцам хорошо

Или потопил её бы лодку
со всем чёрным обезьянником
Чтоб её немецкую пелотку
Драли б Нептуны на дне морском!
LinkLeave a comment

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