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

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

Фасад здания с рельефными блоками, на которых вырезаны двоичные коды: 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 комментариев

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

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

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

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

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

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

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

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

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

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

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

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

«Гопник-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 комментария

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

«Гопник-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 комментария

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

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

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

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

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

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

ChatGPT-4 vs. Chat X-Colleagues

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Не блог

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

«Гопник-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 под условную компиляцию и вставил кусок, который выше. С таким исправлением всё заработало, как ожидается.

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

«Гопник-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, сложно было догадаться, хорошо, что нашлись те, кто смог подсказать.

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

О5 25

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

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

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

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

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

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

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

«Гопник-2»: разные mingw

Надо по-быстрому дописать посты про портирования игры на «Виндоуз», пока свежо в памяти. Так что продолжу.

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

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

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

Во-первых, под «Виндой» отсутствовала функция strdup, интернет ничего не подсказал, но я случайно решил эту проблему, установив стандарт языка в GNU C++11: -std=gnu++11.

Во-вторых, почему отсутствовали-то ряд важных констант. Cледуя совету на «Стековерфлоу», я просто определил их нужными значениями.

В-третьих, функцию usleep пришлось заменить на Sleep из windows.h.

После этих правок игра начала собираться под «Виндой» тоже.

Недавно прочитал в одной из статей на Хабре, что «язык Си++ достаточно сложен, чтобы позволить нам писать на нём просто», как же это верно! Неожиданно много времени занимает борьба с какими-то вещами, которые, как мне кажется, должны просто работать.

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

То, что тебя не убивает, то — дверь

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

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

Наша собака, по всей видимости, слишком далеко ушла от дикого волка.

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

36,2°

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

У меня сейчас 36,2, что на фоне болезни для меня не редкость. Ощущения, как всегда, отвратительные — слабость, бросает в жар, голова болит. Но кому скажи «36,2», никакого понимания в глазах, один даже спросил — «выздоравливаешь, значит»?

Да откуда? Даже не близко!

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

Лингвистическая физиогномика

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

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

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

Черно-белое фото пожилого мужчины с белой бородой в тёмном пальто и шляпе, стоящего перед кустарником с ягодами.
Мой прапрадед Никанор Иванович Литвинов (9 авг 1881 — 22 окт 1975). Он окал? Акал? Может как-то ещё необычно говорил?

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

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

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

Плитка в хрущёвках

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

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

Всегда было интересно как так получилось. Вряд ли к проекту каждой новой партии домов кто-то каждый раз придумывал новый рисунок. Может строителям в этом случае давали карт-бланш на самовыражение?

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

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

Программируем с GPT

Мне всё-таки кажется, что в интернете достаточно примеров как замечательно нейросети справляются с программированием, надо восстанавливать баланс. Свежий пример из моей практики.

Нужно было переписать вот такой код с «Пайтона» на «Си++»:

{72: 65, 80: 66}.get(value, 0)

Что тут происходит? Если value равно 72, вернуть 65, если 80, то 66, иначе ноль. Нужно мне это, если вкратце, для преобразования виндовых кодов в линуксовые.

Так как Си++ я не знаю, описал на Пайтоне — так быстрее и проще показать, что код мне нужен компактный — хочется не городить switch, а добавлять новое правило как можно проще.

Вот что мне сгенерировал ChatGPT-4:

int value = 72;
std::map<int, int> mymap = {{72, 65}, {80, 66}};
int result = mymap.count(value) ? mymap[value] : 0;

После консультации с живыми людьми, выяснилось, что плохо тут примерно всё.

Во-первых, вместо map надо использовать unordered_map, сложность поиска по первой структуре логарифмическая, по второй — константная в среднем.
Во-вторых, в этом коде надо использовать find, а не count, так как find остановится после первого совпадения (что нам и надо), а count — нет, продолжая тратить ресурсы.
В-третьих, map создаётся в этом примере каждый раз вместо одного. Хороший программист так это не оставит.

В итоге, код стал выглядеть следующим образом:

const static std::unordered_map<int, int> win2lin = {{72, 65}, {80, 66}};

auto it = win2lin.find(_getch());
ch = it == win2lin.end() ? 0 : it->second;

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

Инфляция восклицательных знаков

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

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

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

Синяя табличка с жёлтым текстом: «ВНИМАНИЕ! Автомобили НЕ ПАРКОВАТЬ! Возможен сход снега и льда с крыши. ТСЖ ответственности за повреждения не несёт!!!
ТСЖ в исступлении сообщает…

1 комментарий

«Гопник-2»: фан-клуб

Тем временем, у игры «Гопник-2», с которой я вожусь почти каждый день в последнее время, отрос небольшой фан-клуб. Самый заметный его участник, bairog, прошёл всю игру вдоль и поперёк, завёл мне десяток багов, которые я постепенно исправил и даже начал писать игре краткое описание. За что ему огромное спасибо!

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

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

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

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

Отломались уши

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

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

Чёрная круглая катушка металлоискателя Minelab CTX II с красными элементами и кабелем, лежащая на плитке с серо-белым орнаментом.
На катушке лежит напечатанные на 3д-принтере новые «уши» с площадкой под клей

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

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

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

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

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

«Гопник-2»: теперь «Андроид»

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

Решил попробовать скомпилируется ли. В принципе проблем почти не возникло. Всё необходимое поставил командой pkg install make clang git, после чего выписал проект и поправил путь до заголовочного файла — в «Андроиде» он находится в другом месте.

Скриншот текстовой RPG: игрок «bolk» в Купчине, уровень 0, здоровье 35/35, точность 30%, пива и бабла нет; начал битву с Гопником 1 уровня, ударил на 33 урона, враг промахался.
Так выглядит запущенный «Гопник-2», запущенный в терминале Termux под «Андроидом»

Правки в репозиторий внёс, теперь всё будет собираться ещё и под «Андроид». Проверять в будущем я не буду, вряд ли кто-то будет собирать для себя, но проверить было интересно.

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

Поддельное серебро

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

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

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

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

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

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

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

Конный спорт

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

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

Девочка в шлеме и желтых сапогах сидит на черном пони, рядом стоит женщина в шлеме; на заднем плане — манеж, зрители и городские здания.
Тренер даёт последние инструкции перед выступлением

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

Похоже конный спорт из лёгкого увлечения перерос во что-то куда более важное.

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

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

Поддельные деньги

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

В выходные всё почистил, смазал вазелиновым маслом, чтобы блестело и сфотографировал на подоконнике, пока было утреннее солнце. Кажется вышло достаточно контрастно. Внизу ещё пририсовал инвертированную и увеличенную часть оттиска, где угадывается фраза «РСФСР пролетар…».

Четыре старые монеты на бежевом фоне: 50 копеек 1922 г. со звездой, 20 копеек 1921 г., потертая без надписей и крупная корродированная.
Поддельный полтинник, настоящие 20 копеек, оттиск советского рубля 20-х годов

Рядом положил 20 копеек 1921 года, чтобы было наглядно видно отличие по цвету серебряной и поддельной монеты. Интересно, когда её изготовили, она была похожа на серебряную-то? Потому что сейчас разница очевидна. Ещё непонятно что это за металл. Может какой-то алюминиевый сплав? Если алюминий натереть, то он вполне может сойти за серебро.

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

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

«Гопник-2»: версия 1.24

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

Там универсальный бинарник под МакОС и статически собранные файлы под 64-битные «Виндоуз» и «Линукс». Ссылка для скачивания выше, а ниже скриншот, в нём ссылки не работают.

Релиз 1.24: исправлен баг с «Чёрной речкой», герой не может драться при побеге, сборка под Android; доступны бинарники для Linux, macOS, Windows и исходники.

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

Минимально интеллигентный человек

Смотрел тут недавно шуточную сценку «Вступительные экзамены в театральное училище» (1980 год) с Яковлевым, Мироновым и Этушем. Не знаю с какой радости мне её порекомендовал «Ютуб», но рекомендация была верная — зацепило.

В самом начале Миронов рассказывает вступление, цитата оттуда:

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

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

Мне всегда хотелось считать себя хотя бы минимально интеллигентным человеком, но увы мне. Из стихов я знаю «Лиличку!» Маяковского, но ни басни, ни какого завялящего куска прозы на память рассказать не смогу. Тест провален!

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

Агриппина Сергеевна Миронова (Макридина)

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

Позже она дала контакт своей бабушки, с которой мы тоже списались, — в свои 75 бабушка бодро пользуется «Телеграмом».

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

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

Три пожилые женщины стоят на фоне кустарника: центральная держит два стакана, слева — чайник, справа — бутылку; все одеты в повседневную одежду, выражения лиц спокойные.
В центре моя прабабушка — Агриппина Сергеевна Миронова (бабушка Груня или Груша)

А куда мы идём в 2023-м году, когда нам нужен текст, который мы не можем написать из-за лени или отсутствия таланта? Разумеется к ChatGPT! Закинул в диалог разрозненные цитаты и попросил собрать из них связный текст в «народном» стиле.

После обработки получилось вот такое эссе о семье Макридиных. К этой семье принадлежала моя прабабушка Груня (1895—1968). Она на фотографии в центре снимка.

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

У Макридиных было своеобразное правило: у них не было постоянных работников, так как в роду было много мужчин, которые помогали на полях. Они нанимали работников только во время срочных работ, таких как посев и уборка. Для этого они приглашали всех желающих мужчин, хорошо их кормили, и тех, кто первым закончит есть, брали на работу. Работников кормили три раза в день и даже платили за их труд. Те, кто не попадал в число нанятых, умоляли Сергия дать им возможность поработать бесплатно, лишь бы трижды хорошо поесть.

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

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

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

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

Дополнено: родственные связи в тексте не вычитывал, вполне может быть, что при трансформации текста истина в этом месте пострадала.

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

Бархат

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

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

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

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

Неубиваемые вещи

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

Я этот тред как-то упустил, но недавно он снова всплыл и я его проштудировал целиком. Хотя большинство предметов там мне неактуально, кое-что всё-таки себе выписал. Буду постепенно покупать и тестировать.

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

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

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

Жена очень хвалит, я тоже очень доволен приобретением, пользуемся уже две недели, можем рекомендовать к покупке!

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

Самокатное

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

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

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

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

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

auto в Си и Си++

Из-за дикой перегруженности фичами мне никогда не нравился язык Си++. До увлечения игрой «Гопник-2» никогда на нём не программировал, но нужда заставила. Тянет с ней повозиться, а она написана на смеси Си и Си++, правда с упором на Си.

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

Одна из таких мелочей — ключевое слово auto. Оно есть и в Си, но значение у него совершенно другое, в современном коде, как будто бы, его использовать негде.

В Си++ оно означает автоматический вывод типа, вместо его явного указания. Клёвая штука, позволяет делать например такое (пример из кода «Гопника-2»):

auto old_mode = set_tty_special_mode();
// тут какой-то код
restore_tty_mode(old_mode);

Фишка тут в том, что у set_tty_special_mode и restore_tty_mode две реализации — под «Виндоуз» своя. Эти две реализации работают с разными типами, под «Виндоуз» там DWORD, в остальных случаях — структура termios.

В Си было бы что-то вроде:

#ifdef __MINGW32__
#typedef DWORD terminal_mode
#else
#typedef struct termios terminal_mode
#endif

terminal_mode old_mode = set_tty_special_mode();
// тут какой-то код
restore_tty_mode(old_mode);

А в Си++ можно просто поставить auto и обойтись без шаблонного кода. Очень хочется иметь такую клёвую примочку и в Си.

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

«Гопник-2»: новости

Может показаться, что после релиза «Гопника-2» я игрой больше не занимался, так как ничего про неё не пишу.

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

Текст битвы в игре: игрок наносит урон шоком, получает ответные удары, побеждает врага, получает 90 качков опыта; в конце — «А у Нарка был косячок. Пиво победителю!
Новая штука в игре — шокер, можно бить противника током

Я долго не понимал как во внутреннем АПИ игры формируются прайс-листы, но теперь разобрался и сделал, как и планировал, на новой станции «Чёрная речка» ларёк. В нём можно покрепиться семечками и шавермой (мы же в Питере), а так же купить батарейки для шокера — нового игрового предмета.

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

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

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

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

Beta than nothing

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

— из приложения «Знакомимся с кодировками символов» к книге «Фокал снаружи и изнутри».

Принцип известен в программировании как «Beta than nothing». Из-за созвучности «beta» («бета-версия») и «better» («лучше») сложно переводится на русский, но без сохранении игры слов можно перевести как «лучше бета, чем ничего».

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

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

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

Любопытно что тут поменяет искусственный интеллект.

В принципе, переводить мысли в понятный машине код будет проще, — не надо учить никакие машинные языки, оно там как-то само… Учитывая темпы развития, не за горами системы, которые помогут программным ошибкам уйти в прошлое, а за ними и части логических, — как хороший программист спрашивает «а как тут должно работать?», ИИ будет подствечивать недодуманные места и противоречия.

Классное время настанет для креативных людей!

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

Чей почерк?

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

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

Старая фотография пожилого мужчины с белой бородой в тёмной одежде и рукописная записка на обратной стороне с обращением «Здравствуй, дорогая дочка» и подписью «Я старик».
Прапрадед Никанор Иванович пишет (своей ли рукой?) своей дочке — моей прабабушке; написано было карандашом, ручкой обвёл я в детстве

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

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

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

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

Милота

Милота — Ева написала своей подружке-соседке (тоже Еве) записочку, положила под дверь (ошибки другой ручкой исправляла жена).

Розовая записка с рукописным текстом: «ЕВА ПРИХОДИ В ГОСТИ КОГДА ОСВОБОДИШЬСЯ», лежащая на тёмной фактурной поверхности.
«Ева, приходи в гости когда освободишься»

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

Агафия Захариевна Макридина

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

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

Сепия-портрет пожилой женщины с короткими волосами и темным воротником, на котором видны следы времени: трещины, потертости и заломы на поверхности фотографии.
Агафия Захариевна Макридина (около 1870—?)

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

На ней хоть и не мой предок, но тоже родственник, хоть и ментальный, — мачеха моей прабабушки Груни — Агафия Захариевна Макридина, примерно 1870 года рождения.

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

ЧатГПТ и понимание смысла

Илья Бирман в своём блоге опубликовал небольшую заметку на тему понимания ЧатГПТ смысла. Он попросил нейросеть ответить ему через пятнадцать минут. Естественно, с заданием она не справилась.

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

Чат с ИИ: пользователь просит не отвечать на сообщения, ИИ подтверждает выполнение просьбы и предлагает задать другие вопросы.
«Пожалуйста, не отвечай ничего не это сообщение»

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

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

Поиск «Яндекса» по архивам

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

Этих самых фондов там пока мало, но это неважно, важно то, что у «Яндекса» получилось довольно неплохо распознавать рукописный текст. Пока до идеала далеко, но прежде нам и такое не было доступно.

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

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

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

Семён Венедиктович (1885—?) — потомок моего прапрапрадеда Павла Степанищева.

Рукописный текст: «Села Андреевки крестьянинъ Семенъ Венедиктовъ Степановъ и заповедная его жена Марфа Кирпеева; оба православные
«Села Андреевки крестьянинъ Семенъ Венедиктовъ Степанищевъ и законная его жена Марѳа Кириллова; оба православные». Фонд №389, опись №4, дело №9, стр. 36, 1909 год

Яков Платонович Степанищев (1865—?) — прапрадед, Жилины — родственники по той же стороне.

Список поручителей: крестьяне Черновки (Осипов, Саддьев, Булгаков, Часьев) и Богдановки (Иван Игнашев, Яков Пелагонов, Степанцев, Василий Именистый) по небытию Ендриевых.
«Поручители по женихъ деревни Черновки крестьяне: Ѳеофор Ѳадеѣвъ Булгаковъ, Димитрій Афанасьевъ Булгаковъ и деревни Богдановки крестьянинъ Иванъ Игнатьевъ. По невѣстѣ села Андреевки крестьяне: Яковъ Платоновъ Степанищевъ и Василій Жилинъ». Фонд №389, опись №1, дело №1297, стр. 122

«Пристроить» в дерево удаётся не всех, вот один из примеров — Евдоким Михайлович Степанищев, кто он мне — непонятно. Таких беспризорных записей нашлось несколько штук, не стал их все скриншотить.

Запись о браке однодворца Василия Мотина (17 лет) и дворовой девушки Агафьи Алексеевой (28 лет) из той же деревни.
«Тойже деревни [Андреевки] однодворческой сынъ Евдокимъ Михайловъ Степанищевъ 18-ти лѣтъ сочетался первымъ бракомъ той же деревни съ однодворческой дочерью дѣвицой Февроньей Матвѣевой 23-й лѣтней». ГБУ «ОГАОО», фонд №173, опись №15, дело №105, стр. 181

Василий Васильевич Степанищев (1873—?) — опять же потомок моего прапрапрадеда Павла Степанищева.

Крестьяне села Андреевки: Василий Васильев Степанцев, крестьянка деревни Шаталовки Николы Иванова Красникова, крестьянка Пелагея Власова.
«[Крёстный изъ] села Андреевки крестьянинъ Василій Васильевъ Степанищевъ и деревни Шаталовки крестьянина Николая Иванова Красникова жена Пелагея Власова». ГБУ «ОГАОО», фонд №389, опись №4, дело №9, стр. 29

А тут Феврония Фроловна (1892—?) и Герасим Павлович (1887—?), потомки моего прапрапрапрадеда Григория, выступают свидетелями на бракосочетании.

Курсивный почерк на бумаге: «села Андреевки крестьянин, Терентий Павлов Степанищев и крестьянка села Андреевки, Фрола Семенова Степанищева дача, Ольга Осипова».
«Cела Андреевки крестьянинъ, Герасимъ Павловъ Степанищевъ и крестьянина села Андреевки, Фрола Семенова Степанищева дочь дѣвица Ѳевронія». ГБУ «ОГАОО», фонд №389, опись №4, дело №9, стр. 26

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

Незаменимо, если вообще непонятно откуда начинать. Такое бывает, например, если неизвестна география, а тут хоть какие-то зацепки могут появиться.

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

«Гопник-2»: переход на нормальный Си++11

Как я писал прежде, когда я адаптировал «Гопника-2» для запуска под «Виндоузом», столкнулся с тем, что не все тамошние компиляторы игру собирали. Не хватало двух функций — strdup и _fileno. Проблема решилось переключением компилятора на стандарт gnu++11, но меня это беспокоило — вдруг найдётся компилятор, который его не поддерживает.

Тут у нас в Татарстане выдались длинные выходные, — в праздник «Ураза-байрам» у нас выходной, я решил этим воспользоваться и поковырять эту тему подробнее.

Вызов _fileno у меня использовался для получения номера дескриптора входного потока, так что тут всё решилось просто, — для этого есть специальная константа STDIN_FILENO. А вот с strdup пришлось повозиться.

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

Первым делом пошёл на поклон к «ЧатГПТ», спросил совета. Советы не заработали, но дали направление мысли.

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

Мне хотелось как-то отличать между собой обычный mingw без strdup от того, который внутри msys2. «ЧатГПТ» тут не помог, хоть и подсунул несколько макросов на пробу, которых в действительности не существует.

Пришлось пошарить по исходникам. Оказалось, есть ряд макросов, которые присутствуют в msys2, но отсутствуют в msys. Из них я выбрал __MINGW64_VERSION_MAJOR:

#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
#define strdup(s) (__extension__({ const char* __s = (s); size_t __l = strlen(__s) + 1; char* __d = (char*)malloc(__l);\
__d ? (char*)memcpy(__d, __s, __l) : nullptr; }))
#endif

Тут используется расширение, которое позволяет писать многострочные макросы. Хотя этот вариант мне и нравится, но опять используется не нормальный Си++, а расширение компилятора.

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

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

Слабые символы используются для библиотек, чтобы пользователь мог заменить некоторые сущности, если они его не устраивают.

Если перевернуть ситуацию, и считать мой код библиотекой, а тот код, где должна быть определена strdup основным, то всё должно получиться.

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

Всё оказалось не так уж и сложно. Сначала в заголовочном файле определяем прототип функции:

#ifdef __MINGW32__
char *strdup(const char *s1);
#endif

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

Потом в самом коде создаём слабый символ для strdup:

#ifdef __MINGW32__
#pragma weak my_strdup
char *strdup(const char *src) {
    size_t len = strlen(src) + 1;
    char *s = (char *) malloc(len);
    return s == nullptr ? nullptr : (char *) memcpy(s, src, len);
}
#endif

Слабый символ я определяю через директиву #pragma weak, у которой надо указать имя слабого символа, причём оно должно отличаться от имени функции. Я пока не до конца понял зачем это нужно делать, но без этого не работает.

Кстати, #pragma weak тоже расширение, но оно легко заменяется на атрибут weak, надо только будет изучить его синтаксис, я не успел этого сделать.

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

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

Дополнено: в итоге все ситуации я побороть не смог и откатился на самое простое решение со своей собственной реализацией strdup.

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

«Назаваль»

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

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

Белая пластиковая бутылочка с дозатором и этикеткой «Назаваль» (500 мг), стоящая на деревянном столе под солнечным светом, отбрасывая тень.
Противоаллергенный препарат «Назаваль», в этом году заказывал в «Озоне»

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

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

Ненормальный цикл на «баше»

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

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

Мой вариант:

Команда `tr ' alt=

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

Everyone is my brother, but some are brothest

Как я уже писал, у меня есть несколько спорная, но пока статистически хорошо подкрепляемая теория о том, что все Степанищевы — родственники.

Я в ней так уверен, что в прошлом году заключил любопытное пари. К нам пришёл на удалённую работу парень из Бугульмы и как-то в разговоре упомянул, что у одного из его приятелей фамилия Степанищев.

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

Схема родословной семьи Степанищевых: Григорий (1836), Ольга (1856), Иван Шепилов, Дмитрий (1897), Анна (1896–1979), Михаил (1926–1998), Александра (1925–1998).
Григорий Павлович — прадед, ниже начинается линия новоявленного родственника

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

Диапазоны в Си

Почитал тут на досуге какие ещё расширения есть у «ГНУ Си». Хотя я их и не использую, но знать не помешает. Оказалось, что там много такого, что лично мне хотелось бы видеть в языке. Например, хорошая штука — диапазоны. Выглядят они так:

const char *whatisit(char code) {
    switch (code) {
        case 'a' ... 'z':
            return "lowercase";
        case 'A' ... 'Z':
            return "capital";
        case '0' ... '9':
            return "digit";
        case 0 ... 31:
            return "special";
        default:
            return "unknown";
    }
}

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

Если его не будет, компилятор подумает, что перед ним число с плавающей точкой и заругается на ошибку синтаксиса.

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

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

Перекодировка вручную

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

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

Например, я вижу вот такую строку: Требуется авторизация. Она так выглядит, потому что она была в кодировке UTF-8, но код подумал, что она с CP1251 и перекодировал её в UTF-8. Предположим это всё известно, как вернуть всё в норму и посмотреть что там написано?

Почему-то мало кто справляется с задачей в такой формулировке. Вроде всё просто — строка перекодировалась из CP1251 в UTF-8, значит надо перекодировать по этой цепочке обратно:

iconv -f utf8 -t cp1251 <<<"Требуется авторизация"
Требуется авторизация

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

Гиперссылки в терминале

Решил сегодня скоротать вечерок со статическим анализатором в gcc — уже несколько раз натыкался на статьи о нём, пока читал про Си++. Всё откладывал знакомство и вот решил посмотреть.

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

Скриншот предупреждения анализатора Werror о неинициализированном значении 'main_hero' в файле comm/k.cpp, с трассировкой пути выполнения от создания переменной до использования.
Вывод статического анализатора: гиперссылки подчёркнуты прерывистой линией

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

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

Штука достаточно свежая и поддерживают её не все терминалы. У себя попробовать можно вот так:

printf '\e]8;;https://bolknote.ru\e\\Сайт Степанищева Евгения\e]8;;\e\\\n'

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

ChatGPT 3.5 vs 4

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

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

Попробовал на примере «крестиков-ноликов» на Коболе.

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

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

С четвертой версией вышел облом, дело застопорилось в самом начале. Сеть каждый раз отвечает как-то так:

Unfortunately, we cannot provide a step-by-step guide for rewriting the program in COBOL as it requires a deep understanding of the language and its syntax. However, we recommend consulting resources and tutorials specific to COBOL programming.

И сильно дальше этого мне пока продвинуться не удалось. Осложняется всё тем, что у меня сейчас нет доступа к ChatGPT-4, то есть версии, которая умеет хранить контекст.

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

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

Слеш в имени файлов «МакОСи»

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

Another obvious problem is the different path separators between HFS+ (colon, ’:’) and UFS (slash, ’/’). This also means that HFS+ file names may contain the slash character and not colons, while the opposite is true for UFS file names. This was easy to address, though it involves transforming strings back and forth.

The HFS+ implementation in the kernel’s VFS layer converts colon to slash and vice versa when reading from and writing to the on-disk format. So on disk the separator is a colon, but at the VFS layer (and therefore anything above it and the kernel, such as libc) it’s a slash. However, the traditional Mac OS toolkits expect colons, so above the BSD layer, the core Carbon toolkit does yet another translation. The result is that Carbon applications see colons, and everyone else sees slashes. This can create a user-visible schizophrenia in the rare cases of file names containing colon characters, which appear to Carbon applications as slash characters, but to BSD programs and Cocoa applications as colons.

На скриншоте видно как это выглядит в жизни: в командной строке создаём папку с двоеточием в имени, в Файндере в этом месте — слеш. В цитате такое поведение метко названо «шизофренией».

Скриншот терминала с командой mkdir ':)' и стрелкой к синей папке, под которой написано '/)
Создаём в командной строке папку с двоеточием в имени, в Файндере в этом месте — слеш

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

Кирпич «Боровичи ALFA»

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

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

Серый кирпич с оттиском «ЕГОРЬЕВСКИЙ КИРПИЧНЫЙ ЗАВОД» лежит среди строительного мусора и пыли.
Кирпич с клеймом «Боровичи ALFA»

Не очень чётко видно, но на кирпиче стоит клеймо «Боровичи ALFA». ALFA — это класс огнестойкости (до 2100°С), а Боровичи — город в Новгородской области, откуда в Казань попадало немало кирпичей разных производителей, видимо были налажены хорошие торговые связи.

История завода хорошо описана у известного коллекционера кирпичей Владимира Смирнова:

В 1888 году в местечке Лысцово недалеко от Боровичей предприниматели (также с немецкими корнями) инженер-технолог Фридрих Карлович Тауцен, статские советники Николай Васильевич Нерлинг и Владимир Карлович Бекман построили завод для производства огнеупорных изделий «Надежда». В 1893 году ими было образовано «Товарищество производства глиняных и гончарных изделий» (сокращенно ТОПГИ). Несмотря на несколько случившихся за период работы пожаров (в частности, в 1897 году), к 1903 году завод набрал мощности и имел 2 производственные площадки.

В 1913г. Товарищество было ликвидировано и заводы вошли в состав «Общества Боровичского завода огнеупорных, кислотоупорных изделий и канализационных труб бывш. К. Вахтера и Ко».

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

Умная собачка «Соня»

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

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

Решил посмотреть нет ли чего похожего в забугорных магазинах и каким-то образом вышел на робота «Бисквита» фирмы Хасбро. Он полностью удовлетворял всем требованиям — с шерстью, знает семь команд, реагирует на прикосновения и даже умеет спать.

Я не знал, что он уже не производится, а то бы не стал дальше искать. Но повезло и на «Авито» нашлось одно-единственное объявление, где продавали такого робота в идеальном, несмотря на почтенный возраст, состоянии.

Пушистый светло-коричневый щенок сидит на деревянном полу, повернув голову влево; на шее — ошейник с узором, рядом белые плинтусы и картонная коробка.
Робот «Бисквит» от фирмы Хасбро

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

Фиолетовая бирка в форме кости с командами для собак: «Сидеть!», «Голос!», «Хочешь лакомство?», «Дай лапу!», «Отряхнись!», «Лежать!», «Служить!» на деревянном фоне.
Набор выполняемых роботом голосовых команд

Дочка роботу чрезвычайно обрадовалась и назвала «Соней», в честь серии рассказов про умную собачку Соню. Пока с ней не расстаётся, таскает из комнаты в комнату за собой.

Схема показывает 9 датчиков игрушечного щенка BISCUIT, реагирующих на прикосновение, свет и звук, с указанием их расположения на теле и пояснением внизу.
Расположение различных сенсоров на роботе-собаке

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

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

«Из» → «с»

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

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

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

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

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

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

Промпт-инженер

Сейчас многие говорят о рождении профессии будущего — «промпт-инженер». Она то ли уже появилась, то ли вот-вот появится. Это те ребята, которые умеют объяснить нейросети что от неё ждёт человек. Якобы там нужны какие-то особые навыки, которые можно развивать.

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

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

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

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

То ли нас ждёт расслоение на элоев и морлоков, то ли что-то в духе Пелевина с общением через машины, так как друг другу мы будем малоинтересны.

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

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

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

← сюда туда →