Пишу, по большей части, про историю, свою жизнь и немного про программирование. Живу в Казани.

Позднее Ctrl + ↑

Богомол поел

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

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

Богомол и таракан, приступаю к кормлению

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

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

«Гопник 2»: порт под Линукс и МакОС

Я искал медь, а нашёл золото! Постоянные читатели блога знают, что я маниакально одержим текстовой игрой «Гопник» и её продолжением, которые были написаны ещё под ДОС. Хотя её время давно прошло, я постоянно пытаюсь разыскать что-нибудь новенькое про неё, и у меня даже есть отдельный тег для заметок на эту тему.

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

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

И вот наконец мне крупно повезло!

Игровой процесс. Игра запущена под МакОС

Как оказалось, автор второй части когда-то выкладывал в сеть исходный код, и хотя сейчас он, по всей видимости, потерян, зато доступна модифицированная версия — некто Андрей Тихонов («tiandrey») запустил игру под Линукс.

Интернет со временем всё забывает и чтобы это не случилось и с этим портом, я выложил его на «Гитхаб», минимально причесал, внёс исправление для компиляции под МакОС и пофиксил один баг (при переходе в метро игра падала с ошибкой).

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

«Крестики-нолики» и printf

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

На днях один из читателей очень меня порадовал игрой «Крестики-нолики», написанной на… языке функции printf! Возможно я когда-то и слышал, что язык printf полный по Тьюрингу, но в голове это не отложилось.

Пример сыгранной партии в «Крестики-нолики»

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

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

Например, вот небольшой пример, который запишет число «42» (длину строки «Answer to the Ultimate Question of Life is») в переменную c:

#include <stdio.h>

int main() {
  int c;
  printf("Answer to the Ultimate Question of Life is%n ", &c);
  printf("%d", c);
}

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

Если закодировать «ложь» пустой строкой, а «истину» строкой длиной один, то логическую операцию «ИЛИ» можно получить, если померить совокупную длину двух входных значений:

// c = strlen("") + strlen("")
printf("%s%s%n", "", "", &c); // в c будет «0»

// c = strlen("1") + strlen("")
printf("%s%s%n", "1", "", &c); // в c будет «1»

«НЕ» получается сложнее, для этого надо использовать несколько хитростей.

Во-первых, у printf есть возможность задавать отступ для значения.

Во-вторых, у %n есть параметр, который выводит длину по модулю 256.

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

Всё это позволяет закодировать «НЕ» как (strlen(a)+255)%256 или strlen(a)-1:

printf("%1$255s%1$s%2$hhn", a, &c);

Тут написано следующее: вывести первый параметр как строку, дополнив его до длины в 255 символов пробелами (%1$255s), снова вывести первый параметр как строку (%1$s), записать полученную длину по модулю 256 во второй параметр (%2$hhn).

Отсюда легко понять как сделать операцию «И-НЕ»:

printf("%1$254s%1$s%2$s%3$hhn", a, b, &c);

В принципе, этого хватило, что реализовать всю требуемую логику.

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

Очень заморочено и очень интересная идея!

«Евгений Степанищев»

Утром проснулся, а друзья-музыканты скинули в «Телеграм» песню про меня, которую они сочинили ночью. Всё утро слушаю, смеюсь, не могу остановиться. Песню про меня ещё никто не писал. Шикарно прикололись!

Слова ниже. Авторы — ребята из коллектива «qaynar», Сергей Костюжов и Радиф Кашапов.

Евгений Степанищев хранитель татарского айти,
Евгений Степанищев грозный повелитель «Госуслуг»,
Евгений Степанищев свои корни пытается найти,
С металлоискателем бродит там и тут, таков его досуг.

Даже в ванной есть колонка,
И любую форму кровать принимает,
«Умный дом» шторы закрывает,
А колонка эта песни играет!

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

Даже в ванной есть колонка,
И любую форму кровать принимает,
«Умный дом» шторы сам закрывает,
А колонка эта песни играет!

Только текст!

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

Я же, напротив, настроен крайне скептически и считаю, что у меня не получится.

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

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

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

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

Дочка во дворе

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

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

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

Не гиперопека, а забота о безопасности ребёнка!

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

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

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

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

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

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

Память

Две ночи назад со мной случилось кое-что необычное.

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

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

Счета

Незакрытый и ненужный мне счёт в «Росбанке»

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

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

Богомол

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

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

Богомол ещё маленький — родился пятого января, ожидается, что вырастет до семи сантиметров

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

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

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

Теперь жалею, что я сделал из этой истории пример того Как Надо Держать Своё Слово.

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

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

Учитывая количество новообретённых забот, кажется пора завязывать со зверюшками, хватит.

Управление часами: ответы

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

Во-первых, как устройство, которым хочется управлять, узнает, что человек на него нацелился?

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

Умный дом пекинского горожанина, оснащённый устройствами позиционирования; в разрезе, гравюра 17 века

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

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

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

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

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

Ранее Ctrl + ↓