PVS-Studio и «Гопник-2»
Много читал об инструменте статического анализ
Нашлось несколько интересных ошибок. На скриншоте одна из них. Как видно, str_enemy_amount проверяется два раза, тогда как после первого условия там гарантировано ноль. Очевидно автор этого куска кода его скопипастил, но забыл во втором куске исправить enemy на hero.
Я бегло посмотрел все ошибки, которые он мне выдал, надо будет внимательно посмотреть каждую, но как будто бы всё по делу, ноль ложных срабатываний.
Приехали «The Sensor Watch»
Наконец завершилась эпопея с «The Sensor Watch» — это плата, превращающие оригинальные часы «Касио» в некое подобие
Я для них уже написал свою первую программу — порт классической текстовой игры
Эту плату я пытаюсь заполучить с августа. Получилось только с третьей попытки, сегодня забрал. Два пересыльных сервиса их отправлять отказались
Купил сразу три штуки — одну себе, остальные заказали два моих друга.
Накрыло «Гопником-2»
Пока играл, нашёл и поправил несколько незначительных багов, всё
Монета с Некрасова
Ну и последняя находка с чердака дома на Некрасова.
Её я тоже, как и крестик, нашёл металлоискателем и сначала подумал, что это просто
Уже дома я понял, что это сильно потёртая серебряная монета и обработал её жидкостью для чистки серебра. После чего на ней проступил
Оказалось, что это 10 копеек
Внизу фотографии я поместил пример того как она могла выглядеть то того, как потеряла часть своего веса.
В какой кодировке?
Попался мне недавно на глаза вот этот разворот из детской книжки «Энциклопедия профессора Фортрана»
Сразу бросается в глаза, что бинарные строки справа не восьмибитные, как мы все привыкли, а на бит короче. Ещё, при внимательном рассмотрении, в закодированных числах узнаются пробелы, у них код 32 или 0100000. Только первый
Всё это меня очень заинтересовало, я отложил себе эту картинку, а сегодня, по пути домой, разобрался в этих странностях.
Воспользовавшись программой для распознавания, я перевёл текст на картинке в буквы и цифры, вырезал оттуда закодированное и попробовал перегнать этот кусок в буквы. Получилась следующая строка: pro~itajte glawu "qzyki programmirowaniq".
Теперь осталось понять что это за кодировка. Не уверен, что я
Латинские символы видно, потому что эта кодировка содержит в себе несколько наборов символов, которые надо переключать специальным кодом. Русские символы находятся в тех же позициях, что и латинские, а поскольку кодировка
В конечном счёте, я написал небольшую программу на Перле, чтобы вывести строку на русском:
#!/usr/bin/perl
use Text::Iconv;
my @codes = qw(
1110000 1110010 1101111
1111110 1101001 1110100
1100001 1101010 1110100
1100101 0100000 1100111
1101100 1100001 1110111
1110101 0100000 0100010
1110001 1111010 1111001
1101011 1101001 0100000
1110000 1110010 1101111
1100111 1110010 1100001
1101101 1101101 1101001
1110010 1101111 1110111
1100001 1101110 1101001
1110001 0100010
);
$conv = Text::Iconv->new("KOI-7", "UTF-8");
# ПРОЧИТАЙТЕ ГЛАВУ "ЯЗЫКИ ПРОГРАММИРОВАНИЯ"
print $conv->convert(chr oct "0b$_") for @codes, "\n";Перл, конечно, малопопулярный язык, но тут вполне читаемый даже для тех, кто его не знает. Его я выбрал
В конечном счёте раскодированный текст выглядит так: ПРОЧИТАЙТЕ ГЛАВУ "ЯЗЫКИ ПРОГРАММИРОВАНИЯ". Лобастый Новосельцев немного нас обманывает.
Ногтей насыпал…
Как говорит русская народная поговорка, «проблема современной молодёжи в том, что ты к ней больше не относишься».
Народ бает, что молодёжь нонче стыдит почтенных людей за то, что мы используем в качестве смайликов «скобочки». Я сам не сталкивался, но дочь подтверждает, что в их кругу «)))))» уничижительно называют «ногтями». Пример употребления: «опять дед ногтей в чате насыпал».
Остроумно, на самом деле, примерно на уровне «сцеплера», если не круче.
Но я тут намедни, третьего дня прочитал в гиперлетописи
A famous thinker has compared parentheses with disgusting nail clippings.
Или, если
Один известный мыслитель сравнил круглые скобки с отвратительными обрезками ногтей.
Получается, скобки «ногтями» выдумала называть вовсе не нынешняя молодёжь, это название появилось ещё до рождения большей её части!
«Мото-трек» с Некрасова
Продолжаю описывать находки с чердака дома на Некрасова.
Следующая находка сделана на том же чердаке, но находкой её можно назвать только формально. Ну, то есть найдена она, конечно, там, но если в остальных случаях мне приходилось прилагать усилия, рыться в пыли и завалах, то эта коробка лежала почти на виду, в куче другого советского хлама — вроде старых стиральных машинок, поломанных стульев и бесконечных подшивок казанских газет.
Это детская игра
В наборе детали для сбора мототрека, подпорки, флажки, четыре мотоцикла с грузиками внутри и специальный механизм для подъёма мотоциклов наверх, к которому нужны батарейки.
Механизм в нашем случае не работал, нескольких подпорок не хватало и один мотоциклист
Правила такие: при помощи специальной картонки (которой в нашем наборе тоже не оказалось) каждый игрок выбирает себе своего мотоциклиста и ставит на трек. Вначале все мотоциклы удерживаются специальный рамкой. Для начала игры рамку поднимают наверх и мотоциклы устремляются вниз по треку. В конце пути их встречает механизм на электрическом приводе, который поднимает каждый мотоцикл обратно на старт.
Над каждой дорожкой стоит счётчик, который сбрасывается перед каждой игрой на ноль. Побеждает тот игрок, чей мотоцикл первым «проезжает» девять кругов. Победа, конечно, совершенно случайное дело и никак от игрока не зависит.
Выбрасывать её мне не хотелось, но хранить не хотелось вдвойне. К счастью, оказалось, что игра считается редкой. Я выставил её на «Авито» по символической цене в тысячу рублей и она ушла буквально за полчаса.
99 бутылок: препроцессор Си
Те программисты, кто
С тех пор как мне много лет назад
80. Препроцессор Си, разумеется, не задумывался как
Изучение этих материалов было не только для меня интересным делом, но и полезным — я лучше понял как работает препроцессор в Си, а так же узнал
Вопреки обыкновению, вывод программы я обрабатываю другой утилитой (см. строку запуска). Это приходится делать, так как в этом языке нет простого способа вывести перевод строки. Можно было бы сделать это ANSI-кодами, но их не будет видно в листинге кода, что меня не устраивает.
#if 0
Bolknote.ru, 2024.11.05
To run:
gcc -P -E - < 99 | sed 's/\\n */\n/g'
#endif
#define CAT(a, b) a##b
#define SECOND(a, b, ...) b
#define TEST(...) SECOND(__VA_ARGS__, 0)
#define LF \n
#define DEC(n) CAT(DEC_,n)
#define DEC_0 9
#define DEC_1 0
#define DEC_2 1
#define DEC_3 2
#define DEC_4 3
#define DEC_5 4
#define DEC_6 5
#define DEC_7 6
#define DEC_8 7
#define DEC_9 8
#define DEC_X0(a, b) IF_ELSE(ISZERO(b)) (DEC(a)) (a)
#define ISEND(a, b) TEST(ISEND_ ## a ## b)
#define ISEND_01 ,1
#define ISZERO(n) TEST(ISZERO_ ## n)
#define ISZERO_0 ,1
#define ISONE(n) TEST(ISONE_ ## n)
#define ISONE_1 ,1
#define IF_ELSE(b) CAT(IF_, b)
#define IF_0(i) ELSE_0
#define IF_1(i) i ELSE_1
#define ELSE_0(e) e
#define ELSE_1(e)
#define PLUR(n) IF_ELSE(ISONE(n)) (bottle) (bottles)
#define PRINT_PLUR(a, b) IF_ELSE(ISZERO(a)) (b PLUR(b)) (CAT(a, b) bottles)
#define PRINT_B(a, b) IF_ELSE(ISZERO(b)) \
(IF_ELSE(ISZERO(a)) \
(No bottles) \
(PRINT_PLUR(a, b)) \
) \
(PRINT_PLUR(a, b)) of beer
#define PRINT_ROW(a, b) \
PRINT_B(a, b) on the wall, PRINT_B(a, b)! LF \
Take on down, pass it around, LF \
PRINT_B(DEC_X0(a, b), DEC(b))! LF LF
#define STOP(...) No more bottles of beer on the wall, LF \
No more bottles of beer! LF \
Go to the store and buy some more, LF \
PRINT_B(9, 9) on the wall!
#define EMPTY()
#define DEFER(...) __VA_ARGS__ EMPTY()
#define CROSS1(a, b) PRINT_ROW(a, b) \
DEFER(IF_ELSE(ISEND(a, b)) (STOP) (CROSS2)) (DEC_X0(a, b), DEC(b))
#define CROSS2(a, b) PRINT_ROW(a, b) DEFER(CROSS1) (DEC_X0(a, b), DEC(b))
#define MUL0(...) MUL1(MUL1(MUL1(MUL1(__VA_ARGS__))))
#define MUL1(...) MUL2(MUL2(MUL2(MUL2(__VA_ARGS__))))
#define MUL2(...) MUL3(MUL3(MUL3(MUL3(MUL3(__VA_ARGS__)))))
#define MUL3(...) __VA_ARGS__
#define RUN(a, b) MUL0(CROSS1(a, b))
RUN(9, 9)ТЭЖЭ с Некрасова
Как вы помните, в качестве своеобразного отчёта, я выкладываю по одной находке с чердака расселяемого дома на Некрасова, куда меня пригласили поискать
Со следующей находкой я сильно подзатянул, потому что это бутылочка, а с ними всегда непросто. В том смысле, что их надо мыть, так как чистыми они на чердаках не бывают, а грязными их показывать не хочется.
Я долго не мог заставить себя ей заняться, но сегодня взял себя в руки и под киньчик, часа за полтора её
Бренд «ТЭЖЭ» мне раньше не попадался, хотя, как оказалось, в своё время он был очень известен и распространён, а значит и флаконов от него должно было остаться немало. Название похоже на французское, но на самом деле это аббревиатура Треста
Я поискал похожие бутыльки
«ТЭЖЭ» был огромным трестом, объединяющим в себе целый список фабрик. В 1928 году на него работали более 7000 рабочих. Трест имел следующие основные производства:
С датировкой бутылька всё сложно — трест был создан в 1922 году, а товары с этим брендом выходили вплоть до 1956 года, слишком большой диапазон. С другой стороны, все рекламные объявления этого одеколона, которые я нашёл, датируются
Мороз и собачий язык
Собаки, как и многие другие животные, метят территорию и читают метки других собак. Но, думаю, те, у кого собак нет, не знают, что иногда собаки лижут старые метки, чтобы на них появился запах.
У нас уже заморозки и вчера я с тревогой наблюдал (не успел вмешаться), как мой пёс лижет железку на морозе, чтобы прочитать
Фигня мелкая
Не могу не поделиться. На этой иллюстрации — две бабочки из рода Fignya. В роду их шесть, но я картинку обрезал, так как интереснее всего та, что слева.
Её научное название «Fignya melkaya» (то есть, натурально, «фигня мелкая»). Это название ей дали
Есть подозрение, что за названием
Casio WQV-3
К заметке, где я писал про камеру для «Флиппера», один из читателей прислал ссылку на часы «Casio
Разумеется я загорелся их купить.
На «Ебее» их можно найти без проблем, но с пересылкой часов через границу сейчас большие проблемы. Без особой надежды я пошерстил «Авито» и оказалось, что, хотя первой модели часов там нет, зато лежит третья, которую я тут же себе купил и ношу уже несколько дней.
Оцените какой
Всего в линейке таких часов было четыре модели с номерами «1», «2», «3» и,
Конечно снимки хочется из часов
Под рукой, из того, что поддерживает инфракрасный обмен, у меня только «Флиппер». В принципе, если знать протокол, можно под него написать программу, которая списывала бы снимки на карточку, оттуда перекинуть на ноутбук — ноль проблем.
Описание протокола найти было нетрудно. Но позже оказалось, что в третьей модели «Касио» перешли на некий стандартный протокол передачи, а его описание я ещё даже не искал. Возможно, раз протокол стандартный, снимки можно получить
Я немного посмотрел АПИ для работы с инфракрасником во «Флиппере» и, пока не забыл узнанное, сделаю заметки для себя.
Для передачи сигналов подойдёт одна из двух функций. Если повезёт это будет infrared_send, которая принимает команды в одном из стандартных кодеков, либо infrared_send_raw_ext, где придётся возиться с ручным кодированием битов.
Зависит от того, что за кодировка сигналов используется в этом самом «стандартном протоколе». Если это
Наименее очевидными были для меня тайминги. Я
Шахматы у дочки
У дочки ещё в садике был кружок шахмат. Помню, как она пришла из садика и заявила, что узнала про шахматы всё. Вина преподавателя, — видимо чтобы не расстраивать, он проиграл ей несколько раз подряд, и дочка решила, что достигла вершины. После этого интерес к шахматам она потеряла. Как мы думали, — навсегда.
В школе интерес вернулся
В общем, шахматы вернулись. На этот раз как будто всё серьёзнее — даже дома постоянно играет. Так как мы с женой играем неважно, а кот с собакой вообще не умеют, я решил поискать
Почитал обзоры, выбрал один из популярных детских порталов — ChessKid. Пока дочка сыграла всего несколько партий с ботами и выяснила, что она по уровню между пингвином и тигром. Хочу подбить её поиграть с живыми людьми, но пока времени нет — каникулы кончились, начались домашние задания и прочая движуха.
Бумажка с Некрасова
На чердаках старинных домов довольно часто попадаются обрывки
Чердак на Некрасова бумагами в хорошей сохранности не порадовал. Там я нашёл несколько страниц
Здание тех номеров находилось на площади Габдуллы Тукая, напротив гостиницы «Татарстан». Оно было перестроено в 1872 году из бывших одноэтажных лавок купца Рязанова по проекту архитектора Петра Тихомирова. Поскольку здание находилось около Рыбнорядской площади, оно получило название Рыбнорядских номеров.
Владельцем стал купец Афанасий Музуров, кроме гостиницы в нём так же располагались ресторан, кинематограф, а так же столовая и колбасная. В разные времена в номерах проживали выдающиеся личности, в том числе будущий нарком здравоохранения Н.А. Семашко.
После революции здание стало коммунальным, а позже здесь размещалась гостиница «Татарстан». В 1992 году здание было включено в Свод памятников республиканского значения, и к юбилею Казани планировалась его реконструкция. Однако отсутствие финансирования привело к его разрушению, и сегодня от Музуровских номеров остались лишь воспоминания и открытки.
Судя по тому, что на квитке стоит имя «Пётр Афанасьевич», бумага напечатана не ранее 6 марта 1886 года по старому стилю, — тогда умер купец Афанасий Музуров, первый владелец здания гостиницы.
Сзади моей находки перечислены
Чтобы понять много это или нет, можно посмотреть в интернете на уровень оплаты труда в те годы. Зарплата чернорабочего в день в Питере во вторую половину
Крест с Некрасова
Продолжаю описывать находки с чердака дома на Некрасова. На этот раз это крестик. Вообще крестики довольно частая находка, правда не на чердаках. Видимо люди постоянно их теряли, думаю
В данном случае это один из двух предметов, которые мне удалось найти металлоискателем. На чердаках им сложно орудовать — слишком много мусорных сигналов,
Датировать крест вряд ли получится. Не знаю что тут могли бы увидеть специалисты, я не специалист и достаточно характерных надписей тут не вижу. Не знаю возможно ли вообще провести датировку, просто его разглядывая. Может
Сохран довольно плохой, не всё можно разобрать. На одной из сторон видны надписи «ЦРЪ» («царь»), на другой, внизу — «ГА» («голова Адама»). Как и надписи, почти все остальные символы тоже вполне стандартные — крест, копьё, трость, пирамида с глазом.
Единственное, не опознал символ в центре крестика на картинке слева. Можно
Семь минут
Одна моя знакомая называла время в семь минут «временем лжецов». Надо упомянуть, что это было ещё до навигаторов, такой точности неоткуда было взяться.
Объясняла она это так: если человек говорит, что он будет через семь минут, то он скорее всего врёт — десять минут он сказать не может, потому что это уже следующий порядок, долго, пять тоже — так как через пять он точно не будет, поэтому берёт посерёдке — семь.
Навигаторы уже давно с нами, но это правило работает до сих пор. Если человек обещает быть через семь минут, я раньше чем через минут пятнадцать—двадцать его не жду.
«ГигаЧат» и распознавание картинок
Прислали тут новость по сберовской нейросети «ГигаЧат», — теперь она научилась описывать словами изображение. Вообще не удивили, конечно. Нейросети, умеющие такое, существуют лет десять. Но, может, тут
«ГигаЧат» ожидаемо не справился. Я готов согласиться, что горелка керосиновой лампы
Интересно, что «ГигаЧат» время от времени даёт очень разные описания. Последнюю фотографию я загрузил несколько раз. Один раз он увидел вместо «таблетки» пулю, в другой раз ответил правильно — сказал, что видит «металлическую деталь круглой формы с отверстиями».
Ещё смешнее получилось с фотографией дочки, снятой на «Флиппер» из предыдущего поста:
Для интереса и я это изображение попробовал загрузить несколько раз, получил совершенно разные, но одинаково далёкие от реальности результаты.
Я подумал, что можно написать такую же «нейросеть», которая будет в ответ на загруженную картинку генерировать
Но, справедливости ради, более понятные изображения «ГигаЧат» описывает очень неплохо. Вот пример из заметки про «метроном» в китайских боевиках:
Ещё фотки камерой «Флиппера»
Когда берёшь в руки молоток, всё вокруг становится похожим на гвозди. Раз уж я примотал камеру к «Флипперу», надо всё вокруг пофотографировать. Мы с дочкой решили сфоткать домочадцев.
Жена на работе, себя я фоткал вчера, поэтому слева направо: улитки Тайгер и Найгер, кот Марсик, пёс Бейсик и дочь Ева.
Деталь с Некрасова
В одни выходные меня пригласили поискать на чердаке одного из домов расселяемых на Некрасова
Следующая деталь, которую я нашёл, сначала поставила меня в тупик. Думаю я долго разбирался бы что это такое, но выручила надпись — POLARSTERN BRENNER 15’’’.
Слово brenner («горелка»
Разобрался только дома, когда нашёл фотографию керосиновой лампы определённого устройства. Найденная штуковина, — кольцевая горелка, в её видно наверху фотографии лампы в сборе.
Горелка сделана компанией Хьюго Шнайдера, которая располагалась в немецком городе Лейпциге. «Polarstern» («Полярная звезда») — это модель, а число «15», в надписи, согласно каталогу 1911 года, — это размер (диаметр) горелки в линиях, которые, в данном случае, равны 1⁄10 дюйма.
История компании начинается с мастерской Эрнста Хеккеля, открытой в 1854 году в Вурцене. В 1863 году он основал мануфактуру Häckel und Schneider, которая к 1877 году значительно увеличила выручку. В 1871 году контроль над фирмой перешел к Хуго Шнайдеру, сыновья которого в 1899 году преобразовали её в акционерное общество Hugo Schneider Aktiengesellschaft (HASAG). Основным бизнесом было производство ламп.
В 1903 году компания начала производство автомобильных ламп и с началом Первой мировой войны переключилась на военное производство.
Установить время изготовления найденной мной детали затруднительно, но если покопаться в интернете, можно узнать, что патент на первую горелку такого типа был выдан 15 января 1884 года в США Леонарду Хенкле, в Германии они появились
Камера для «Флиппера»
Около трёх месяцев назад, болтаясь по интернету, я, волею случая, наткнулся на репозиторий с софтом, позволяющим подключить к «Флипперу» небольшую
Выглядело это забавно, да и цена вопроса — всего 400 рублей, плюс комплект перемычек за 30. Невеликие траты за такую прикольную штуку. Я
Если внимательно следовать инструкции, то всё просто: четырьмя перемычками соединяешь «Флиппер» и плату, ещё одной замыкаешь между собой два штырька — это нужно, чтобы залить в камеру прошивку. Потом скачиваешь редактор для «Ардуино», там ставишь плагин, далее через «Флиппер» с его помощью заливаешь в камеру прошивку, размыкаешь перемычку. Потом через магазин приложений ставишь нужную программу и развлекаешься.
Единственная хитрость — плагин надо ставить второй версии, а не третьей, в третьей
Экранчик у «Флиппера» маленький