Здесь будет мой дневник про инвестиции. Недавно я посмотрел на свои счета, и понял что заработанное постепенно выгорает на сберкнижке. Что делать в этой ситуации? Конечно, инвестировать. Во всех гайдах про инвестиции говорят, мол, сначала определитесь с целями инвестиций. Я выбрал цель понятную и бесхитростную: иметь миллион долларов. Открыл брокерский счет, и исходя из этого, выбрал QQQ как первое приобретение. Это фонд, инвестирующий в хайтек компании - компьютеры, интернет. Один из самых популярных, существует 20 лет и хорошо растет. Компьютеры никуда не денутся и через 100 лет, так что это надежный вклад. Покупать я буду только на долгосрок (от года). Также у меня $14000 в крипте. Итого 2% от цели.
Полугодовой апдейт. Пополняю брокерский счет понемногу. Покупаю QQQ и S&P500 в соотношении примерно 1:5. Добавил и на сбер. счет немного. Там 3.6% годовых сейчас.
68% от цели.
Полюбуйтесь-ка, 2/3 пути пройдено. Уже и финиш чувствуется не далеко за горизонтом.
>>768891 Да, у меня так и было. Когда ЗП была 60-80к- я смотрел на графики, просчитывал варианты, гонял валюты туда-сюда, и всё как-то не удавалось, то курс не угадаю, то комиссию не учту... А когда доходы выросли с 60-80 до 400 внезапно накопления бодро пошли, всё стало получаться, даже на графики смотреть перестал.
>>802195 А я не перестал. Каждую неделю уже не делаю расчеты как раньше, но все же стратегию фин. менеджмента продумываю и следую ей.
Когда у тебя откладывается только карманная мелочь, то в инвестициях смысла нет. То, чем занимаются двачерские инвесторы в /биз и подобных местах, это трейдинг, на их уровне это просто азартная игра. Инвестиции же это постоянная игра с целью выигрывать стабильно на долгой дистанции, когда у тебя уже есть капитал и его надо сохранить. Для этого не нужно мониторить минутные свечи.
Неплохо так все растет, как на дрожжах. Аж некомфортно немного, коррекция ощущается в будущем. Под это подумывал над расширением своего портфеля недвижимости. Смотрел в сторону квартирки у моря, которую можно было бы сдавать и самому там жить в отпуске. Я частенько бываю на море летом, но обычно это поездка на день. А со своей-то квартиркой можно было бы хоть каждые выходные чилить. Передумал пока что. Сейчас больше половины портфеля в недвиге, если еще больше делать совсем уже будет перекос. На сбер. счете процент упал до 3.5%. Буду, наверное, обратно в бонды переползать постепенно. Хотя смысла большого сейчас нет, но скорее всего фед. резерв снизит основной процент, а за ним сейвингс упадет еще дальше.
71% от цели. Вот уже и пункт назначения виден на горизонте. Еще как минимум 2 года до миллиона, но видно что это вполне достижимо.
Запись настроений и ещё чего-то:
Аноним23/02/23 Чтв 22:57:21№662931Ответ
А чо похоже на простые числа? Может даже можно упорядочить это, ввидя иерархию какую-то.
А так к чему это я... (k[n]()[])○[ison]~=entity? Ну и не обязательно через ○. Как угодно свободно, но тут можно выходит разбирать что-то на подобные вещи.
Иными словами отрезок(обобщенный дискретный) и точка = отрезок из точек.
Ну и следовательно обратно можно пытаться это разбирать, а не собирать.
А там уже если не разберётся, то ~= тока себе же...
Но смысл был бы в другом - в конструктивном подходе же.
Но прежде этого не стоит забывать о "сути", что можно... в общем что может стать None(аля уничтожено быть).
Только правда суть тут и не суть, а исток тогда уж.
А вот дальше уже как раз создать исток вещям(упростить? ну поняли), чтобы уничтожив исток уничтожить вещи. Уничтожить через изменение границ, предположительно или как вариант, кандидат - то, что зовется гомологиями. Z/B Zyklus/Boundary. Дихотомии короче говоря, тени(?), None и Что-то.
Дневник, принадлежащий не аутентичному дазайну, человеку, пытающийся в редкие моменты своей раздражё
Francua05/03/25 Срд 14:40:24№779139Ответ
Дневник, принадлежащий не аутентичному дазайну, человеку, пытающийся в редкие моменты своей раздражённости, вызванной теми или иными событиями, вторгающимися в его жизнь время от времени, понять, как устроен этот мир, пытая себя через робкие попытки разобраться в тех или иных концептуальных схемах, разработанных другими людьми, чтобы получить пищу для рассуждений. Но по-большей части разворачивающийся перед взором читателя горизонт представит его вниманию уже успевшие стать классикой и так всеми полюбившиеся — размышления ни о чем, рефлексия, самобичевание, попытка поднять дневник на нулевой произвольно выбранной картинкой, отправленной лишь с этой целью. В общем, будет интересно.
Но для начала, будет не лишним ввести читателя в контекст жизни автора через подробно изложенную биографию — ту выжимку из неё, которой бы хватило, чтобы понять, кого и зачем вы читаете. Начнем: В 2016 году автор окончил среднюю школу, отучившись всего девять классов. Автор всегда был человеком робкого характера, болезненно застенчивым и странным — отчего общался в средней школе с одним единственным человеком, который по совместительству был его знакомым, проживающим по тому же адресу с ранних лет, что и автор. В 2019 году автор поступил в шарагу на программиста оператора компьютерного набора/секретарь властителя; автор обзавелся социофобией, выражающейся в соматических симптомах, пока обучался в той шараге, — с чем не расстается и по сей день. Автор обзавелся там одним новым — другим старым — другом, с которым потерял связь сразу же после того, как раз и навсегда покинул стены того заведения. После окончания учебы в шараге, автор стал на службу в армию. Отслужив там свое, автор вернулся домой, где без работы и каких-либо планов на будущее сидел безвылазно дома, пока мать силой не устроила его на низкооплачиваемую работу — сначала на завод, затем и помощником в частный цех по производству мебели, откуда автор был удален, как только выяснилось, что автор всё-таки пальцем деланный. ....
Теперь, ближе к нашему времени, автор работает в доставке глово, страдает от социофобии, много думает о философии и политике, а также мало много читает и деградирует в Ютуб шортс.
Даже вообщем-то нет пруфов, что после хака был именно он, а не кто-то другой, кто имитировал его. И нет пруфов, что то, о чём он писал – правда. Как и нет пруфов того, что он вообще не был агентом.
Его сообы о том, что он переживал в дурке, очень показательны. Его подозрительное поведение в 2020 тоже. Его странные сообщения eto bil ya и сообщения про антидепрессанты подозрительны. Его открытость тоже странна, общаться не в приватном чате. Есть вероятность, что ты обстёбываешь чью-то креатуру, а на деле он мало был связан с чем-то таким. Ещё я помню те странные пассажи о том, что Ничто нет, вроде это с чем-то увязывалось, но ассоциацию я уже не вспомню.
>>809270 Для молодежи это мечта о вечном тепле, море, расслабоне. Для зрелых это мечта о тихой пенсии без нервняков. Испания как сборная солянка манямечт о рае на земле.
>>813666 Трипл не ошибается. Гуляю без отсрочки от мобки пока, чет сложно с этим нынче. Интересно, что же случилось.... Учителем дальше работаю. Больше часов получил.
Ко мне никто не подкатывал никогда в школе. И это оч хорошо, ибо ничем хорошим это не грозит. Всегда нужна жесточайшая субординация. Стены нужно строить. При чем не только с учениками, но педсоставом. Времена нынче неспокойные. Даже на харкачике не как дома.
Текучка учителей норм такая. При чем в большинстве школ. Зрелые +60 лвл учителя не тянут тягомотину с электронными журналами. Заполнением 100500 ебнутых доков. Молодые 1-2 года работают и уходят. Ибо есть еще напряжное класссное руководство, разборки с РОДителями. Нынешняя система больше о воспитании чем про учебу.
Залетел в деревню в этом году мощный препод из универа. Сократили его, ибо студентов мало. А он еще и пенсионного возраста. Теперь со мной на одном каноэ. А когда-то писал маня-статьи научные. Еще одна симпотная учительница появилась. Помогаю ей. Тоже откуда-то из Востока. До 30 лет примерно.
В такой солянке работаю. Местами ловлю кайф. Особенно, когда ученики говорят спасибо за уроки, хвалятся, что выучили что-то. Местами охуеваю от несправедливости в распределении ЗП. Но в свои почти 30 лет говорить о какой-то (((справедливости))) смешно.
С друзьями, знакомыми почти не вижусь. В Киев ехать далеко, кругом блокпосты. Много времени уделяю семье, ребенку. Я для них уже как дауншифтнутый абориген. Просто лоллируют с моих историй. А точек соприкосновения все меньше. Круг новых друзяшек не сформирован. Да и нет предпосылок к ему формированию. Да и похуй. Цель одна - выжить. Это надолго и никто не соскочит.
>>815449 Кстати да, прикол dr в том, что тут комментарии оставлять можно, происходит почти общение. Без этого блог быстро скукожится, как обычно при перекате в телегу и происходит
ПУТЬ К БОГАТСТВУ
Аноним28/07/25 Пнд 15:54:52№805884Ответ
Тред про ставки и лёгкие деньги точнее мою тягу к ним, в реальности я не уверен, что мне что-то светит.
Я не уверен, что мой тред подходит разделу тематически, но так как раздел про азартные игры закрылся, а спортач немного не про это тематически ,хотя и там ставки обсуждаются, я решил создать тред здесь. Мне очень нравится сам раздел, хотя я сам, конечно, превознемогать и чего-то добиваться не планирую, так же как и обсуждать мою жизнь вне лудомании. Просто много размышлений на тему и, как мне кажется, полезного опыта которым очень хочется поделиться. Если я нарушаю правила-мне очень жаль, просто удалите тред, пожалуйста.
ПРЕДЫСТОРИЯ: во время КОВИДа со скуки подсел на тогда ещё растущий ММА Ютуб и решил, что для полного удовольствия от его просмотра мне стоит начать смотреть и само ММА, сначала в записи, потом в лайве. К 25 году бесконечный форс ставок, а так же моё бесперспективное финасовое положение убедили меня начать ставить, что я и начал делать с мая этого года.
ПРОГРЕСС:я 24 000 рублей в минусе, но на последнем карде UFC карде мне удалось таки выйти в плюс аж на целую тысячу рублей. То есть я ставил 10 000 и выиграл 11 000 11 050, если бы точным, что я надеюсь подводить черту в моём образовательном и наконец-то поводит меня к непосредственному богатству и миллионам рублей ставить на доллары из РФ к сожалению невозможно.
ПЛАНЫ: в Августе UFC проводит 4 карда, на моём аккаунте сейчас 31 055 рублей, за будущий месяц я планирую удвоить свои деньги, таким образом покрыв минус и выйдя в плюс. К концу года я планирую выйти на 100 000+. Конкретные мысли по ставкам на карде будут ниже в треде.
>>814621 11k, но есть ещё 2 на карте. Я на следующий кард много ставит не буду, даже в лайве скорее всего тока мейн посмотрю. Каловый он пиздец, да я и не знаю никого, в лайве денег не подниму. Закину экспрессик и баиньку. Кард после этого должен быть очень денежный, я на него всё буду ставить. Там либо выиграю по-крупному, либо потрачу все деньги и закончу тред.
https://www.tapology.com/fightcenter/events/126286-ufc-fight-night\ Ивент начинается на 3 часа раньше обычного, потому что в тот же день будет бокс и его тоже промоутирует TKO и конкретно Вайт который отчаянно пытается выбраться из ММА. Начало в 10 вечера, но я всё ещё не хочу сидеть через весь ивент. Я решил, что заряжу два экспресса и похуй. Скучно пиздец. Кроме РАБоты ничего в моей жизни не происходит, но и она по сути нихуя не интересная. Хобби что ли какое найти ? Может если разбогатею ПеКу себе куплю, в игоры там позалипаю. Жзинь литтерали превратилась в комнату ожидания возможности слить очередные бабки и тихонечко посидеть в депрессии два дня.
Кард откровенно плохой, я выбрал этих двоих на мой экспресс для андердогов. На Таполоджи говорят, что они ничего такие и я вроде даже помню как однажды смотрел бой Агулара.
ИЗГНАННИК. ПУТЬ К ВЕЛИКОМУ МАНГАКЕ
Аноним16/10/24 Срд 18:09:11№761242Ответ
Хочу суметь выразить творящийся внутри и вокруг меня хаос в форме художественных произведений. Преимущественно манге, хотя не знаю, насколько можно мои представления в голове назвать ориентированными на мангу, я чё, еблан, справа налево писать. Я не сильно погружен в этот жанр, нравятся такие произведения как: Берсерк, легенда о сильнейшем из мужчин Куросаве (ну на него в плане рисовки я ориентироваться точно не буду) и манга Дзюндзи Ито. Но тем не менее, мои представления явно больше ориентированны на перечисленные творения, чем на условные американские комиксы, так что условно будем называть это мангой.
Было бы здорово, если по итогу я получу признание в этой сфере и среди зумеров дед инсайдиков, имел бы свой хорошо монетизируемый патреон или другой подобный сервис, продавал бы печатные экземпляры манги и прочее и прочее. Но сильно на такой исход не рассчитываю, если получится реализовать свои задумки на должном уровне, я уже буду считать, что состоялся в своем жизненном пути, даже если умру в нищете, одиночестве, будучи больным спидораком.
Вводные:
-24,5 годов.
-рисовать не умею, было какие-то попытки, заканчивающиеся на черточках и фигурах. С 17 рисовал по 3-5 всратых картинки для души, как мог, как умел. Сдвиг произошел только в этом году появилась регулярная потребность и желание рисовать, настругал сопоставимо картинок, чем за предыдущие 6 лет(ну правда при условии, что много картинок прошлых лет рисовалось друзьям/еоткам и были либо отданы им,либо выкинуты и уничтожены, так что точный подсчет за предыдущие годы вести нет возможности.) В плане обучения конечно все ещё плохо, но тоже больше стал заниматься им, чем раньше. Нынешний уровень рисования можете наблюдать на пиках.
-Живу с родителями, весной должен переселиться в бабушкину квартиру -Работа в Яндекс еде, которую я периодически проебываю -Друзей нет. Девушки нет и не было, только уебищный суррогат интернет отношений пару раз. -Девственность потеряна пару лет назад в лесопарке темным вечером с жирухой с двача за 1500р. Больше подобного опыта не имел. -Долги на 400+ тысяч -Пристрастие к азартным играм. -Мазохистские наклонности, оральный гомосексуальный секс 4 раза, футфетиш с женщиной за 6к, различные фото и видео унижения на камеру для сомнительных доминирующих личностей в интернете. Ну и всякие перверсии над собой соло, на фантазии при дрочке само собой. -Тело в шрамах и ожогах от селфхарма -Лежал в дурке
Нам очень жаль что вы столкнулись с данной ситуацией. К сожалению, в компенсации мы вынуждены вам отказать. Согласно правилам представления услуги, компенсация предоставляется в случае своевременной оплаты. Спасибо что вы с нами!
Вы можете составить досудебную претензию и отправить её нашему оператору. Главное не отчаивайтесь, двигайтесь по карьерной лестнице и ни в чём себе не отказывайте. Всё в ваших руках.
Здравствуй, двач. Совсем скоро, 28 августа 2024 года я переезжаю в Москву. В данном дневнике буду расписывать свои трудно выебудни и свой быт. Цель данного переезда: заработать как можно больше денег. Дано: 24 лвл, Высшее образование МухГТУ по специальности Данные удалены, 1 год опыта на производстве в качестве аппаратчика, довольно аскетичный образ жизни, 30к рублей на карте Буду устраиваться технологом или инжинером, как получится. Планирую ещё выходить на подработки. В Москве у меня ни знакомых, ни родственников, поэтому как приеду буду жить в хостеле первую неделю или как получится, пока не найду работу. Потом буду снимать комнату возле работы, подешевле. Т. к.производства находятся как правило на окраинах, то мне это даже на руку, там дешевле. В выходные буду брать подработки с оплатой в конце дня или на следуюущей недели, что бы работать без выходных и заработать много. Вообще я за этот год отдал все свои долги >100к и заработал ещё 100к, рлюс немного отдохнул, бухал много, кароче проебал всё. Приехал к маме пожить на две недели и из 100к осталось 30. Пиздец. Вообще цель заработать как можно больше за год и уехать обратно. Планирую не меньше 500, а там как пойдёт. Постараюсь отписываться здесь, если конечно не забуду
Забыл сказать, где-то месяц назад купил себе велик. Классная тема, до магазина доехать 5 минут, вместо ходить пешком 15-20 и до работы маминой. Поставил себе крылья и поменял педали ещё в том же магазине вчера Сегодня сварил борщ. Пока варил, покрасил косяк у двери, т.к. залели его, когда заносили шкаф вешать. Я его зашпаклевал давно, неделю стоял сушился неошкуренный, т к я то в милионник ездил, то мне было лень. Осталось другой косяк сделать, потому что когда меня входную дверь, то срезали гипсокартон у стены и там пена монтажная. Некрасиво На следующей неделе будут устанавливать балкон. Этот балкон что-то уж слишком надолго растянулся. Вместо 1-2 недель, как я ожидал когда хотели его установливать растянулось на месяц-полтора. И пока с матерью договаривались где и как его оплачивать и что там делать это ещё на это месяц ушел. В общем пиздец
Всякие мелочи сегодня пожелал Народ, если кто умеет. Как сука зашпаклевать НОРМАЛЬНО ??? Пытался в прошлый раз вышла хуйня, в этот раз лучше, но всё равно далеко не идеально, есть неровности. Возможно я шкурить нормально не умею, не отрицаю. Скорее всего я делаю только хуже, но похуй. Меняли входную дверь и гипсокартон возле двери срезали, я пытаюсь эту щель зашпаклевать может быть поменять просто этот лист гипсокартона? Надо будет со своим товарищем посоветоваться, он обещал помочь тут кое с чем на следующей неделе. Приедет из милионника
>>814329 Неясно что именно ты хочешь зашпаклевать, но обычно это делается в несколько (минимум 2) слоев. Для последнего слоя финишная шпаклёвка используется, например, ротбанд финиш. Потом шкуришь мелкой шкуркой, доводишь до идеала.
Наконец то застеклил балкон, внутреннюю отделку буду делать сам. Ванную комнату вроде бы тоже заканчиваю, осталась пара мелочей. Потом хочу поменять саму ванную, но это уже летом наверное. Наверное найду себе работу и через пару месяцев буду уже продолжать ремонт
открыл накопительный счёт. На счету сейчас 350к, выплаты ещё ни разу не приходили. На основной карте 15к. Кубышку-накопительныйсчет трогать не буду пока что/i]
Тивач — это самый специфический раздел Двача, место, где можно смотреть фильмы и педерачки вместе с друзьями. А этот тред - его персональный дневник, первая в истории данной доски хроника целого раздела, в которой будут фиксироваться различные эпизоды из его жизни. Тред в /mov/ был задушен бесчувственными бюрократами, которые вознамерились превратить его в унылую доску объявлений. Поэтому все, что оказалось за рамками новых правил - скриншоты, пасты, картинки, описание интересных случаев - теперь будет выкладываться здесь по мере сил и желания. Ссылок в оппосте кидать не стану - тем, кто будет общаться в этом треде, они не понадобятся.
И не забывайте - у нас есть тег "тивач" на архиваче. Где бы вы не находились, имеет смысл пользоваться функцией allimages, чтобы увидеть самое интересное. https://arhivach.top/?tags=9404
Шапка: Каждый день в 19:30 на Тиваче начинается голосование за фильм, который мы будем смотреть первым. Как только фильм кончается, запускается новая голосовалка. За сутки мы смотрим по 4-5 фильмов, в зависимости от продолжительности. Последний фильм заканчивается далеко за полночь.
Вы можете зарегистрироваться, либо завести гостевой логин и также принять участие в голосовании. Регистрация не требует подтверждения по почте, но если вы хотите попробовать гостевой аккаунт, просто вбейте ник в поле под чатом и нажмите Enter.
Я открыл способ сидеть на американском тиваче для русских не знающих англюсика! Кликаете правой кнопкой по пустому месту на странице, выбираете "Перевести на русский", и теперь ВСЕ сообщения в чате и даже английские субтитры если они включены будут переводиться на русский. Ребята, разнесите эту новость всем.
Почистил клавиатуру, коврик для мыши, стол протёр. Чё-та сделал сегодня, не лошок. Лицо не побрил, в открытый социум работать не пошёл - тут лошок. короче из самого сложного комп разобрать, почистить и собрать, потом комнату убрать и дальше уже двигаться шажками. есть, осанку ровнять, шмотки купить, мебель купить, то сё купить - короче всё смазано
Ну что, порриджи/пердиксы/пыниксы допрыгались? Я запускаю дневник, где буду делиться собственными наблюдениями о вашей беспредельной глупости и фактах, которые вам неприятно слышать.
ВАЖНАЯ ИНФОРМАЦИЯ: 1) Порридж/пердикс/пыникс это малолетний даун 0-25 лет. 2) Если вы порридж/пердикс/пыникс, то прежде чем отписаться в треде вы обязаны следовать следующей форме: Я порридж/пердикс/пыникс заявляю: текст вашего сообщения 3) Перефорсеры будут забанены без объяснения причин.
>>814422 >Если бы у меня был такой мощный инструмент в то время, когда вкатывался я, то вообще б никаких проблем не было с тем, что что-то непонятно. Всё бы свелось к дисциплине и времени.
Пиздец с тобой как соглы. С одной конечно стороны похуй но с другой завидую блять, у пердижониксов щас всякие технологии есть ИИ сиди дрочи целыми днями, по языку обычному, программному, да по всякой хуйне. ЕСТЕВЕННО она не прям истина, НО! Сука планшеты - хуешеты, айфоны и прочее. В моем детстве сука сотик монохромный, да гроб ебучий чорный под столом и кактусом на столе был, а то аблучение блять от монитора! Так что да, завидую немного щас бы и по технологиям бы выучился заебись и по языкам и прочее, увы уже возможностей давно нет, здоровья и да похуй чо плакаться то
>>815374 >не смогли догадаться поменять в строчке браузера домен А если старпёры не смогли догадаться поменять в строчке браузера домен? Старпёров тоже помянем или это другое?
>>811063 Как будто дописал парсинг в том числе для дробных чисел, не особо проверял, но вроде работает. Там основная сложность для меня была - это длинное деление написать, а код его использующий - более-менее короткий получается.
Единственное, я как-то поздно осознал, что для обобщёной функции float_parse (которая используется как для парсинга 32-битных, так и 64-битных флоатов) недостаточно знать только, сколько бит мантиссы ей нужно сгенерировать, ей нужно также знать минимальное значение экспоненты. Иначе, например, для даблов она всегда будет генерировать 53 бита, даже в случае денормализованных флоатов. То есть снаружи придётся округлять до меньшего количества битов, когда экспонента меньше минимальной, но это не получится корректно сделать, потому что выйдя из функции, ты уже потерял информацию о том, какие там были биты за пределами этих сгенерированных 53 бит мантиссы. Если что, под "сгенерировать N бит мантиссы" я имею в виду найти N-битное целое число с единицей в старшем бите, такое, что умножив его на 2^E, ты бы получил ~входное число.
Но вроде как это всё просто решается тем, чтобы прокинуть минимальную экспоненту и ограничить ею то, на какую степень двойки можно максимум заскейлить входную дробь d / 10^D, чтобы частное числителя и знаменателя в итоге содержало нужное количество бит. Там даже получается, что автоматически хендлится случай с андерфлоу в 0: когда минимальная экспонента не позволяет заскейлить дробь d / 10^D даже, чтобы она была больше единицы, то частное будет 0, но с помощью достаточно большого остатка всё ещё можно округлиться наверх.
Деление не стал полноценно как у кнута реализовывать, только использую его верхнюю оценку через две цифры делимого и одну цифру делителя, а дальше перебором вниз нахожу первое попавшееся число, которое после умножения на делитель даёт что-то меньшее, чем делимое. Этот момент - далеко даже не первый кандидат на улучшение, там в целом код ужасный, много аллокаций, которых можно было бы, наверное, если не избежать, то хотя бы заранее рассчитать их суммарный размер в пике и выделить одним куском? По возможности этот один кусок выделить на стеке, если он достаточно маленький?
Ну а ещё там возведение 10 в степень сделано тупым последовательным умножением, но это ещё отчасти потому что я не уверен, как сделать умный вариант без дополнительной памяти? Просто, умножая в столбик, тебе нужно несколько раз пройтись по верхнему числу, из-за чего ты не можешь в него же писать результат, выходит, как будто результат надо в отдельное место писать.
Я не знаю, каким образом у меня могли получиться первые два пика в ходе того, как я пытался написать дизеринг, и не понимаю, почему у меня вообще это заняло во много раз больше времени, чем десять минут.
Отчасти вина на убогом шизоидном апи моего гиф энкодера (ну, то есть всё ещё на мне), которое, как оказалось, на практике использовать максимально неприятно, особенно, когда смотришь на него в первый раз спустя несколько месяцев. Я, наверное, пришёл к выводу, что самый нормальный способ абстрагироваться от IO - это просто делать коллбэки, как в stb_image и stb_image_write. А не вот этот бред с функцией, которая пишет в буфер, который ты ей даёшь, и ты дёргаешь её до тех пор, пока она не выплюнет из себя все байты.
>>778391 Обнаружил, что алгоритм, который я использовал для генерации палитры (median cut), генерирует довольно убогие палитры и это плохо синергирует с тем, что похоже error diffusion дизерингу не особо такое нравится и в итоге получается всратый результат как на втором пике. Я так понял, проблема в том, что палитра не накрывает все цвета в картинке? Потому что если палитра, например, чёрно-белая или как на третьем пике (все 216 комбинаций 0x00, 0x33, ..., 0xff), то всё в порядке.
Я не знаю, может быть, можно как-то растянуть сгенерированную палитру, либо наоборот: ужать или заклампить цвета в картинке, чтобы дизеринг мог нормально отработать, не пробовал.
Либо попробовать сам median cut улучшить, типа, я сейчас пополам делю, но вот тут: http://www.leptonica.org/color-quantization.html http://leptonica.org/papers/mediancut.pdf как я понял, вместо этого предлагают посмотреть на два диапазона, которые получаются после разделения медианой, взять тот, где больше разброс минимальное/максимальное значение (по выбранной компоненте цвета), и в качестве разделения взять его середину. Таким образом разбиение будет смещаться в сторону к менее плотно наполненным различными цветами участкам.
Это должно контрить ситуацию, когда, например, в картинке много различных оттенков синего и есть одна большая, но одноцветная красная клякса. И если делить по медиане, то красный цвет перемешается с синими, потому что медиана будет смещена в сторону кластера синих цветов из-за того, насколько их много. Из-за чего красная клякса возможно поменяет свой цвет на синий.
Там не только этой идеей реализация отличается, там вообще полностью всё другое: компоненты цвета квантизируются до 5 бит во время разбиений боксов в цветовом пространстве и во время усреднения цветов в конце (но это, скорее всего, только для оптимизации). И приоритет выбора следующего бокса для разбиения может зависеть как от количества в нём различных цветов, так и от его объёма.
Попробовал ещё сейчас ordered дизеринг, он должен для любой палитры как будто работать, но как будто получается прикольнее фиксированные палитры делать. Не уверен, что правильно написал, просто посмотреть хотел.
Попробовал сделать генерацию через k-means кластеризацию, вроде бы получше выглядит. Ещё для сравнения картинка, ужатая до 8 цветов через k-means (в LAB) и через median-cut (в нелинейном sRGB, потому что текущая реализация в LAB выдаёт более плохо выглядящий результат). Забавно выглядит, как k-means тупо выпиливает почти всё синее: облака и горы.
Немного думал над тем, как быть с рехешем хеш-сетов при условии, что память аллоцируется через арену. Конкретно в контексте того, чтобы выбрать уникальные цвета из картинки, чтобы алгоритму подбора палитры не надо было пережёвывать больше входных данных, чем нужно.
Неприятность в том, что массив бакетов нельзя просто расширить, нужно именно сначала создать новый, перенести все элементы из старого в новый, и это как-то плохо стакуется с идеей линейно аллоцировать память. Ну, вроде бы есть какое-то "линейное хеширование", но я не смотрел особо, что это.
Была в мыслях шизовая идея делать хеш-сет с бакетами на связных списках вместо открытой адресации, чтобы во время рехеша можно было собрать все бакеты в один большой связный список и потом перераспределить по ячейкам (то есть память под сами элементы, хранимые в хеш-сете, выделяется единожды). Ячейки были бы сущностями как бы отдельными от бакетов: это массив указателей на бакеты, которые ставят соответствие между хешкодом и бакетами. Массив ячеек можно было бы представить как массив, разбитый на куски с размерами 2^0, 2^1, 2^2, ..., 2^63, то есть расширение такого массива - это просто аллокация нового куска.
Но это всё не имеет смысла из-за того, что для реализации нужно как минимум +8 байтов на каждый элемент хеш-сета для хранения указателя next, а размер хранимых элементов в моём случае - это и так всего лишь 12 байтов (3 флоата для представления цвета). Короче, что толку, что мы можем всё сделать как бы in-place, если для этого нужно столько же дополнительной памяти, сколько выбрасывается в мусорку, когда мы просто выбрасываем старые хеш-сеты после рехеша. Может быть, можно было бы ужаться, если вместо указателей использовать 16/32-битные индексы, но я, короче, решил забить и единственное, что сделал - пытаюсь по возможности переиспользовать постепенно растущий кусок свободной памяти, образующийся после рехешей.
Ещё плюс открытой адресации в сочетании с тем, что твои бакеты - это просто сами значения, хранимые в таблице (пустые бакеты обозначаются каким-то специальным значением), это то, операция сбора элементов хеш-сета в один плотный массив просто in-place делается. Ну, тебе просто надо выпилить все "пустые" значения и всё. Я не знаю, почему я это в упор не заметил, когда ещё писал median-cut и там тоже надо было выбрать уникальные цвета.
Идею с кусочным массивом всё же использовал, для того, чтобы сохранять разбиение цветов на кластеры, потому что там получается ситуация, что мы одновременно пушим цвета в K различных динамических массивов (один под каждый кластер). Правда, сейчас я понял, что это тупая идея и здесь тоже: я мог бы просто рядом с цветом хранить то, какому кластеру он принадлежит сейчас, нет смысла хранить эту информацию в каком-то отдельном списке из списков. Когда вычисляешь новые центроиды, то вместо того, чтобы отдельно проходиться по цветам из каждого кластера, суммируешь цвета параллельно по всем кластерам.
Не особо понял, когда заканчивать итерации в k-means, я сейчас просто суммирую то, на сколько изменилось количество цветов в каждом кластере с предыдущей итерации и завершаю алгоритм, если это количество меньше скольки-то процентов от общего числа цветов. Не уверен, что это правильно.
>>815289 Подход из >>544995 →НЕ СЛОЖНЕЕ и строит (в отсутствие удалений) плотный массив с цветами СРАЗУ. Помимо этого, применительно к твоему случаю:
— Пустые элементы обозначаются специальным индексом (положим, −1; или 0 со сдвигом всех индексов на +1). Изначальный такой пустой массив индексов можно заполнить через memset (полагая битовым паттерном многобайтовых нулей очевидные «все нули», или многобайтовых минус единиц менее очевидные «все единицы»). Это эквивалент «невозможного» значения, как NaN является «невозможным» значением для цвета, но с этим не нужно полагаться на то, что у самих цветов вообще есть «невозможное» значение, тем более NaN.
— Только массив индексов должен быть овераллоцирован на множитель вроде 3/2, массив цветов может иметь и ровно требуемый размер. Хэш-таблица с максимальными 224 цветов в твоём случае займёт (4 × 3) × 224 × (3 / 2) = 288 Мб, с индексами, полагая int32 — 4 × 224 × (3 / 2) + (4 × 3) × 224 = тоже 288 Мб. (Если хранить цвета по-человечески в 4 байтах — 3 байта на цвет + дополнительный байт на представление пустой ячейки — индексы становятся хуже, но не очень сильно и см. следующий пункт.)
— Вариант с индексами позволяет сделать оба массива, индексов и цветов, «чанкнутыми», и рехэшировать на месте, благодаря тому, что массив индексов можно полностью восстановить из массива цветов. Для рехэша мы просто расширяем оба массива, стираем все индексы, и перестраиваем их.
Попробовал сделать сам: https://godbolt.org/z/fxnMdhrTr. В части построения «чанкнутого» массива со случайным доступом это использует мою крутую идею из https://gitlab.com/freepascal.org/fpc/source/-/blob/21fe99bfccf56bdb4c765b5d0dd5c4629c9eca92/rtl/inc/heap.inc#L229!!! :> (просто, согласно моему телепатическому модулю, ты посчитал это невозможным, Я ПРАВ?), и у меня это даже НЕ МЕДЛЕННЕЕ обычных массивов. (Ну, было вдвое медленнее, но потом я заменил код вида >with ChunkedArray.DecomposeGlobalIndex(iIndex) do carr[chunkIndex][indexInChunk] := ...; на >dec := ChunkedArray.DecomposeGlobalIndex(iIndex); >carr[dec.chunkIndex][dec.indexInChunk] := ...; и стало прям ровно как с обычными массивами, так что, скорее всего, это причуды кодогенератора FPC в отношении никем не используемого оператора with.)