О5 25

Опять заболел — вчера ночью почувствовал, что начинает болеть горло, но несмотря на шаманство с фурацилином, всё равно свалился в болезнь. На работе очень многие болеют, друзья тоже пишут, что регулярно заболевают. Что за зараза такая ходит — непонятно.

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

Дочь пообещала заботиться — принести стакан воды и нашлёпать бутербродов, если будет совсем плохо. Но пока до таких крайних мер не дошло.

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

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

Обидно заболевать к выходным, какое-то нецелевое использование. В выходные хочется куда-то ходить, а не быть прикованным к кровати недомоганием. Очень надеюсь, что сегодня всякие припарки поставят меня на ноги и, может, я хотя бы завтра куда-нибудь выберусь.

Оставить комментарий

«Гопник-2» на Haiku

В 2000-е у меня был друг, который фанател от «BeOS». Послушать его, так это лучшая система на Земле, где всё сразу продумано, нет родовых травм и легаси. Судя по деталям, которыми он сыпал в своих рассказах, во многом так и было, — многие вещи, которые бесили в других операционках, там были сделаны на удивление хорошо.

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

А мне тут что-то до того понравилось водружать «Гопника» на всё новые и новые операционные системы, что я решил пока не останавливаться, и, порывшись в памяти, вспомнил про BeOS, установил себе на виртуалку Haiku и попробовать собрать игру.

Скриншот терминала с текстовой игрой «гопник2: gop2» на рабочем столе Haiku; виден диалог, выбор роли (подтсан, отморозок и др.), уровень сложности и начало боя с беспредельщиком.
«Гопник-2», запущенный под Haiku (наследницей BeOS), собралось без правок, но с приключениями

Сразу у меня это сделать не получилось, но по ошибкам я догадался, что не хватает кое-каких библиотек. Полдня я пытался найти ответ в интернете или при помощи GPT, а потом обратился к живым людям в профильные чаты. За несколько итераций решение нашлось.

Вот как выглядит рецепт компиляции и запуска:

pkgman install gcc make haiku_devel
git clone https://github.com/bolknote/gopnik2.git
cd gopnik2
make
./gop2

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

Оставить комментарий

«Гопник-2»: UTF-8

Продолжаю писать про портирование «Гопника-2» под «Виндоуз», ибо там ещё есть о чём рассказать.

Я уже очень давно не работаю под этой операционной системой, поэтому некоторые обычные, возможно, для многих вещи для меня являются открытием. Когда я начинал процесс портирования игры под эту платформу, я был уверен, что столкнусь в трудностями совершенно в других частях кода. Одной из неожиданностей была плохая работа «Виндоуз» с кодировкой ЮТФ-8.

Если вывод в консоль удалось победить сравнительно легко, то со вводом возникли проблемы — вызов SetConsoleCP(CP_UTF8), который должен был помочь, не помог. В интернете пишут, что он, по всей видимости, не реализован — просто не делает ничего.

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

Рекомендуемый специалистами способ — переключить консоль в режим ввода кодировки ЮТФ-16, а потом перекодировать полученную строку в нужную кодировку. «Виндозу» ЮТФ-16 родная, поэтому проблем вообще никаких не возникает.

#ifdef __MINGW32__
        int wlen = 100;
        int save = _setmode(_fileno(stdin), _O_U16TEXT);
        wchar_t *wstr = (wchar_t *) malloc(wlen * sizeof(wchar_t));
        fgetws(wstr, wlen, stdin);

        int len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, 0, 0, 0, 0);
        user_name = (char *) malloc(len);
        WideCharToMultiByte(CP_UTF8, 0, wstr, -1, user_name, len, 0, 0);
        _setmode(_fileno(stdin), save);

        free(wstr);
#endif

Мне, к счастью, ввод русских букв нужен только в одном месте — там где игрок вводит своё имя. Я убрал используемую там функцию fgets под условную компиляцию и вставил кусок, который выше. С таким исправлением всё заработало, как ожидается.

Оставить комментарий

Ориентирование на местности

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

В какой стороне света находится дорога я знал, — смотрел перед поездкой карту, у меня она неплохо оседает в памяти.

Приподнятый конец нижней перекладины креста на куполе церкви указывает на север, что показано стрелками «С» и «Ю».
Кадр из диафильма «Ориентирование на местности и движение по азимутам» (1975 год)

История смотрелась бы выигрышнее, если бы у меня тогда сел смартфон, но нет, с зарядом было всё в порядке.

Оставить комментарий

Программист отдыхает

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

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

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

Три одинаковых кадра: программист в красной рубашке и очках печатает за компьютером; подписи: «Программист работает», «Программист отдыхает», «Программист празднует день рождения
Комикс, который я хотел нарисовать ещё в 2000-е, теперь можно нарисовать при помощи нейросетей (используется SDXL Beta)

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

Ну и вообще, что странного в том, чтобы вне работы от души поковыряться в том, в чём ты спец? Автомеханик, восстанавливающий какую-нибудь древнюю рухлядь, никого не смущает, вроде? Чем программисты такие особенные?

12 комментариев

Не блог

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

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

Тогда я понял, что слово «блог» использовать нельзя. У меня не блог и я не блогер — слишком много на эти слова сейчас наверчено новых смыслов. Это у меня «сайт» или «дневник». Дневник, кстати, я веду с 1989 года, в следующем году будет 35 лет.

Дополнено: в комментариях прекрасный пример того, как человек не понимает почему он ко мне пришёл, а я его не развлекаю.

12 комментариев

Опять аллергия

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

Не знаю что у меня за аллергия такая странная, несколько лет назад обращался к дорогущему аллергологу, ничего не прояснилось, но каждый сезон одно и то же — иду в аптеку и по одному перебираю препараты. В этом году начал с «Эриуса», пока мимо — не работает.

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

11 комментариев

«Всё вокруг колхозное, всё вокруг моё…»

Около двадцати лет назад, когда я совладел «Казанским порталом», мы задумали его прорекламировать, разместив адрес на билбордах нашего города. Тогда это было свежо — никто так ещё не делал.

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

Грязный вывеска кафе «Седьмое небо» с надписью «Седьмое небо — значит любит. ГУМ, 6-7 этаж», лежащая на земле среди мусора и строительных отходов.

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

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

Двадцать лет прошло, ничего не меняется. В обед я люблю ходить по остаткам старой Казани, а это как раз частный сектор, в основном, то тут, то там видишь кирпичи, укрытые чужими баннерами, какие-то плакаты, закрывающие дыру в заборе, а недавно посредь чьего-то огорода заметил целый контейнер РЖД.

2 комментария

ChatGPT-4 vs. Chat X-Colleagues

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

Я сегодня уже рассказывал о своём опыте в Си и Си++. Результаты там, можно прямо сказать, не ошеломляющие, но на этом экспериментировать я не бросил. У меня родилась ещё одна идея.

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

Скриншот Makefile с настройками компиляции C++11, сборкой исполняемого файла gop2, правилами для mingw, компиляции .cpp в .o и очистки проекта.
Получившийся в результате эксперимента Makefile

В проекте «Гопника-2» такой файл тоже есть — тот, который достался мне в наследство от автора оригинальной игры. Я его сильно упростил, — несмотря на то, что я их не частно пишу, всё же принципы понимаю очень хорошо.

Хорошо, но недостаточно, чтобы дописать секцию mingw, где у меня бы переопределялись флаги компилятора и его название. С задачей я справился, но решение мне не нравилось.

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

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

Вывод такой: программистов когда-нибудь заменят, но не на ChatGPT-4.

4 комментария

«Гопник-2»: буферизация

Как я писал уже сегодня, мне пришлось вчера выключить буферизацию вывода, так как текст визуально «застревал» на экране. Добавление fflush проблему решало, но не будешь же выставлять этот вызов везде, где есть вывод, это несколько сотен мест.

В общем, вчера я сделал попроще, а сегодня пришла в голову более удачная идея обернуть printf в макрос:

// включаем буферизацию вывода
setvbuf(stdout, nullptr, _IOFBF, 1000);
// делаем макрос со сбросом буфера
#define PRINTF(...) { printf (__VA_ARGS__); fflush(stdout); }

Работает просто отлично, вывод текста стал выглядеть комфортно.

6 комментариев

«Гопник-2»: адаптация под Windows

В итоге, вчерашняя мысль адаптировать «Гопника-2» под Виндоуз меня не отпустила. Открыл вечером «ЧатГПТ» и попробовал с его помощью сделать первые шаги.

Несмотря на то, что «Чат» у меня последней, четвёртой версии, всё равно, даже на простых примерах он допускает совершенно детские ошибки, — не подключает нужные заголовочные файлы (мы программировали на Си), упускает важные части.

ChatGPT объясняет, что код на C с Unix-вызовами не переносится на Windows, но предлагает аналог через conio.h: функцию get_key с _setmode и _getch для чтения символа без эха.
Пытаемся программировать на пару с «ЧатГПТ-4»; подсказанный пример не скомпилируется

На скриншоте у меня как раз такой пример — он не скомпилируется из-за отсутствия констант и не содержит условия для обработки комбинации Ctrl+C, как было в том коде, который я попросил «ЧатГПТ» переписать.

Вот как в итоге стал выглядеть этот кусок после нескольких уточняющих вопросов и гуглежа:

#ifdef __MINGW32__
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
    DWORD mode = 0;
    GetConsoleMode(hStdin, &mode);
    if (echo) {
        mode &= ~ENABLE_ECHO_INPUT;
    } else {
        mode |= ENABLE_ECHO_INPUT;
    }

    SetConsoleMode(hStdin, mode);

    int ch = _getch();
    if (ch == 0x03) // Ctrl+C
    {
        printf("Ctrl+C hit, exiting...\n");
        gracefulexit();
    }

    return ch;
#endif

Как бы то ни было, с помощью нейросетей и такой-то матери игра скопмилировалась под mingw и как-то заработала под Виндоуз без внешних библиотек. Кажется дольше всего я провозился с параметрами консоли. Получившийся код выглядит так:

#ifdef __MINGW32__
    SetConsoleCP(CP_UTF8);
    SetConsoleOutputCP(CP_UTF8);
    setvbuf(stdout, nullptr, _IONBF, 0);

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD mode = 0;
    GetConsoleMode(handle, &mode);
    SetConsoleMode(handle, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif

Пришлось полностью выключить буферизацию, чтобы нормально отрабатывал printf с UTF-8. Работает на троечку — вывод текста стал подтормаживать, такое себе.

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

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

2 комментария

Гепатит в таблетках

Век живи, век учись, дураком помрёшь.

Я-то думал, что гепатит — это исключительно вирусное заболевание. Очень удивился, когда увидел его в списке побочных эффектов в инструкции к таблеткам от аллергии. Рановато в этом году у меня сезонная аллергия началась, но речь не об этом.

Список побочных эффектов: головная боль, головокружение, гепатит, сухость во рту, тошнота, тахикардия, миалгия, фотосенсибилизация, утомляемость. Производитель — Байер, Россия.
Инструкция к антигестаминному препарату «Эриус»

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

В общем, новый, увлекательный мир гепатитов. Не дай бог когда-нибудь в него окунуться.

3 комментария

«Гопник-2»: попробовал под Windows

В моём иррациональном увлечении дописыванием «Гопника-2» есть и практическая сторона — получаю много интересного нового опыта. Вчера как раз был такой случай.

Стало интересно посмотреть — соберётся ли игра под Виндоуз. В конце концов она консольная, чего бы ей не заработать?

Скриншот терминала Cygwin: меню игры «Выбери, чё те надо» с опциями начать/загрузить/выйти, сюжет про студента в Питере и диалог с комендантом.
Игра «Гопник-2», собранная и запущенная через cygwin под Windows Server 2019

Раньше я таким не занимался, но из виндового прошлого я помню, что способы есть. Простых нагуглилось два — среда cygwin и набор инструментов mingw.

Через cygwin всё скомпилировалось и запустилось вообще без проблем, но у такого решения есть фатальный недостаток — собирать приходится в виртуальной машине с Виндоузом.

Набор mingw выглядит с этой точки зрения интереснее — есть и под мой «Мак», но там нет совместимости с «посикс», поэтому часть работы с терминалом не собралась, — проблемы с функциями tcsetattr и tcgetattr. Меня теперь так и подмывает отложить в сторону все планы и попробовать затащить игру ещё и Виндоуз, переписав эти два места.

Кстати, надо не забыть попробовать это сделать через ChatGPT. Я уже делал с ним несколько «подходов к снаряду», но каждый раз опыт был не очень. Например, пытался разобраться с тем как работать io_uring, рабочий пример так и не удалось получить. Но сейчас вышла новая версия, можно попробовать ещё раз.

8 комментариев

Переходим все на Brainfuck

Меня тут атакуют время от времени алармистки настроенные программисты, с вопросом что дальше делать, — ведь их всех скоро заменит ChatGPT. Так вас же ещё 2017-м Герман Греф предупреждал — не идите в программисты, программисты станут невостребованной профессией!

Лично я услышал Грефа, и вот уже шесть лет как переписываю все свои проекты на язык «Брейнфак». Это минималистичный язык, состоящий из шести операторов, при этом он полный по Тьюрингу.

Чат с ChatGPT 4: пользователь просит написать программу на Brainfuck для вывода «Bolk», ИИ даёт код и объяснение по шагам.
Этот ваш ChatGPT очень плох в «Брейнфаке» — его программа на самом деле выводит «Hello World!»

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

Коллеги, если мы успеем тайно переписать все свои проекты на «Брейнфак» в ближайшее время, то для поддержания всех переписанных на него проектов, понадобятся живые программисты! У нас будет работа! Никого не уволят! Так победим!

6 комментариев

«Гопник-2»: итог выходных

Человек предполагает, а череда неконтролируемых случайностей располагает. Я думал, что все выходные буду тихонечко пилить список запланированных изменений в игре, а на деле пришлось править совсем другое.

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

Терминал с пиксельным логотипом «ГОТНКИ2», надписями «ОКОРЕНИЕ», «УЛЬТУРНОЙ», «ТОЛИЦЫ», версией 1.17 и списком авторов: V.P., d-maxx, tiandrey, bolknote.
Баг, доставшийся в наследство от попытки портирования предыдущего автора — не выставляет чёрный цвет фона

Например, у одной моей подруги, которой я прислал «Гопника», программа «Терминал» почему-то имеет белый фон и игра на нём выглядела странно, пришлось это поправить.

Кстати, я не знал какой у неё «Макбук» — на процессоре «Интела» или «Эпла», поэтому пришлось научиться делать так называемые «универсальные бинарники».

Это несложно: компилируем программу дважды, сначала — под «интел» (-target x86_64), потом — под «эпл» (-target arm64-apple-macos11), после чего собираем оба бинарника в один:

lipo gop2-x86 gop2-arm -create -output gop2-universal

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

Автор первой попытки портирования игры из ДОСа в Линукс зачем-то убрал из исходников код сохранения и восстановления состояния героя, мне пришлось писать его самостоятельно. А так как я в коде игры ориентируюсь не блестяще, оказалось, что то, что я принимал за инвентарь, структура, отвечающая за что-то другое.

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

fread(&inv_amount, sizeof(inv_amount), 1, load_file);

inv = (inventory *) malloc(sizeof(inventory) * inv_amount);
fread(inv, sizeof(inventory), inv_amount, load_file);

for (int i = 0; i < inv_amount; i++) {
    size_t len;
    fread(&len, sizeof(len), 1, load_file);

    inv[i].name = (char *) malloc(sizeof(char) * len);
    fread(inv[i].name, sizeof(char), len, load_file);
}

Эти указатели — по сути мусор, но один файл игры занимает сотни байт, а у меня нет всего времени Вселенной, чтобы экономить на спичках.

В общем, из задуманного не сделал ничего, зато поправил некоторые вещи поважнее.

4 комментария

Цирк кошек Куклачёва

В позднем СССР, наверное, нельзя было найти ребёнка, который не знал бы цирк кошек Куклачёва, — его постоянно показывали по телевизору. Поэтому в детстве у меня была мечта, без надежды на осуществление, — попасть хоть раз на представление этого цирка.

Без надежды, потому что Куклачёв был настоящей звездой, выступал в Москве и крупных городах, куда я в детстве не ездил, а в мой родной маленький Лениногорск он приезжать бы не стал.

Сейчас тот самый Куклачёв уже не выступает, дело продолжает его сын, тем не менее, фамилия Куклачёвых до вчерашнего дня мне казалась цирковым брендом, показателем качества.

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

Клоун в жёлтом костюме поднимается по верёвочной лестнице, пока два артиста в синем поддерживают его; на фоне — декорации с инструментами.
Момент из выступления цирка кошек Куклачёва

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

Не знаю чему тут было смеяться, но мне симпатизировать криминалу совсем не хочется, я уже как-то писал про это, — воспевание девиантного поведения не терплю, даром, что реставрирую и дописываю игру с названием «Гопник-2».

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

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

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

2 комментария

Артак-спартак

В прошлом году у нас в городе построили второй «Айти-парк», но я в нём был только один раз — когда меня награждали нагрудным знаком. На днях шёл мимо и увидел на стене какой-то бинарный код, стало интересно, сфотографировал.

Фасад здания с рельефными блоками, на которых вырезаны двоичные коды: 0100 0001, 0101 0010, 0101 0100, 0100 0001, 0100 1011, 0101 0011, 0101 0000,
Одна из надписей бинарным кодом на стене нового «Айти-парка»

Дома написал небольшую программу на «Пайтоне», чтобы раскодировать, получилась надпись «ARTAKSPARTAK». Явно что-то осмысленное, но что — я не понимаю.

Интернет тоже ясности не принёс, может кто-то из читателей знает что это значит? Программу для раскодирования привожу ниже.

str = '01000001010100100101010001000001010010110101\
0011010100000100000101010010010101000100000101001011'
from textwrap import wrap
print(''.join(chr(int(x, 2)) for x in wrap(str, 8)))

8 комментариев

«Гопник»: команда «run»

У меня тут дописывание второй части «Гопника» превратилось их хобби в серьёзный геймдев прям! На трекере завели уж два бага и, пока дочка смотрела на проекторе еженедельный мультик, поправил оба.

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

У меня «run» появляется только на простом уровне и сбежать удаётся не всегда, — шансы начинаются с 50% и постепенно растут до 75 с ростом удачи (в игре есть такой параметр). Сбежать не получится, если сломана нога, а если сбежать во время стрелки, упадёт понтовость, когда она падает до нуля, братва перестаёт за тебя впрягаться в драках.

Скриншот текстовой игры: загрузка из "gop2_1.sav", встреча с беспридельщиком 4 уровня, выбор «наехать» или «бежать», реакция на побег — «тебе удалось ссаться».
Демонстрация новой команды «run» (сбежать)

В ближайших планах небольшие усовершенствования:

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

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

Оставить комментарий

Два вида таксистов

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

10 комментариев

Интерфейс «умного» сиденья для унитаза

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

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

Панель управления биде с индикаторами Power Supply, Night Light, Seat Temp, Water Temp и наклейкой Antibacterial Seat.
Непонятный мне интерфейс «умного» сиденья «AM·PM», ставит меня в тупик

Но иногда мне попадаются задачки, которые мне не по зубам. С одной из них я сталкиваюсь почти каждый день дома — это режимы биде «умного» сиденья «AM·PM» для унитаза.

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

8 комментариев