Избранное

День Радио

Сегодня, 7 мая в России отмечают День радио — в этот день, 125 лет назад российский физик Александр Степанович Попов на заседании Русского физико-химического общества продемонстрировал «прибор, предназначенный для показывания быстрых колебаний в атмосферном электричестве».

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

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

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

В итоге, для этого я выбрал «Морской бой». В моём варианте игрок вводит информацию клавишей левого «Шифта», а компьютер отвечает, мигая светодиодом кнопки «Капс Лок». Чуть более подробные правила есть в репозитории проекта.

Обёртка и некоторые функции (мигание светодиодом, опрос «Шифта» и функция задержки) написаны на Си, остальная часть — на языке «Лу́а» (Lua). Давно хотелось изучить этот странноватый язык поглубже, а тут ещё удалось поучиться встраивать его в Си.

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

Диграфы в Си немного запутывают и вносят в код толику безумия

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

Для тех безумцев, которые захотят попробовать скопмилировать этот вариант «Морского боя» и сыграть, ещё раз привожу репозиторий проекта (только под «МакОСь») — https://github.com/bolknote/battleship.

Детская частная жизнь

Вкратце: есть ли у вас какие-то правила — что можно выкладывать о своих детях в интернет, а что нет?

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

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

Но эти видео — история более-менее приватная, их видим мы и бабушки-дедушки.

Теперь же я задумался над тем как и что писать о дочке тут — как она отнесётся к написанному, когда вырастет и существует ли уже такое явление как травля одноклассниками/одногруппниками за выложенное родителями в интернет?

Те, чьи похождения родители выкладывали в «Инстаграмм» в самом его начале, уже учатся в третьем классе, а блоги вообще существуют более 20 лет! Их фигуранты уже могут и своих детей позорить в каком-нибудь «Тик-токе». 20 лет, вы только вдумайтесь! В те времена первобытнообщинного интернета мало кто думал — что можно писать, а что нет (и сейчас-то это не всегда понятно). Если начать копаться в заброшенных блогах девяностых, наверняка можно порушить немало чьих-то судеб.

Расскажите что вы считаете возможным выкладывать на публику о своих детях, а что у вас под запретом? Были ли конфликты с детьми на эту тему? Была ли травля сверстниками по мотивам того, что вы выкладывали? Хочу изучить чужой опыт, прежде чем вырабатывать какие-то свои правила.

 6 комментариев    456   2 мес   дочка

«Глазелки»

Перерождённый на «Эгее» блог моего друга — «Глазелки.ру»

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

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

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

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

Рекомендую посетить обновлённые «Глазелки». Надеюсь Олег в скором времени напишет туда что-нибудь новое.

 3 комментария    384   2 мес   эгея

AppleScript Tetris

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

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

Для начала немного об ЭплСкрипте. Это скриптовый язык для автоматизации, который встроен в МакОС в незапамятные времена — в «Википедии» написано, что он появился аж в 1993 году, то есть широкоизвестный ПХП его младше аж на два года!

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

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

tell application "Microsoft Word" to quit
display dialog "Hello, world!"

print pages 1 thru 5 of document 2

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

За всё историю существования на ЭплСкрипте никто никогда не писал графических интерактивных игр. Причина проста: в языке нет поддержки графики и опроса клавиатуры. 😭, расходимся!

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

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

Для этого, в припципе, всё есть — ЭплСкрипт умеет запускать программы и управлять размерами и расположением окон:

tell application "TextEdit"
    set the bounds of 1st window whose id is wid to {x, y, (x + |size|), (y + |size|)}
end

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

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

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

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

-- Get height of menu bar
tell application "TextEdit"
	activate
	make new document at the front
	set the bounds of 1st window to {0, 0, 0, 0}
	set coords to bounds of 1st window
	close 1st window
end

set minimalY to coords's item 2

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

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

Сейчас на моём «Макбуке» аппаратных кнопок громкости уже нет, но «Тетрис» слушается и нарисованных на тачбаре

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

on levelReset()
    set volume output volume volumeMiddle without muted
end

on checkDirection()
    set level to output volume of (get volume settings)
    levelReset()
    _sign(level - volumeMiddle)
end

on checkRotate()
    return output muted of (get volume settings)
end

Тут _sign — моя собственная функция взятия знака, у ЭплСкрипта нет встроенной.

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

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

Полный исходный код есть на гитхабе.

Друг наш Лазарь уснул. Я иду разбудить его

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

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

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

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

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

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

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

В общем, киберпанк стал на шаг ближе.

 2 комментария    428   3 мес  

Але́кса против Яндекс.Станции

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

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

«Але́кса» во всей красе — из минусов английский язык и плохая интеграция с «Сяоми»

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

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

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

«Яндекс.Станция» в миниатюрном исполнении — глуховатый Петросян

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

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

Тут за натужный юмор «Алисы» начинаешь испытывать настоящий испанский стыд. Если кто не знает, «Алиса» пытается притворяться человеком — шутит, отвечает разнообразными фразами. Наверное это ещё будет хорошо работать, но пока всё портят две вещи — огрехи синтеза голоса и выхватывание случайных фраз из фонового разговора. «Алекса» в этом случае отвечает «I’m not sure» или подобное, а «Алиса», что-то там сконструировав себе из услышанных фрагментов, попадает впросак.

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

Из плюсов — русский язык. Общаться с помощником на русском заметно проще, русские названия «Алиса», разумеется, понимает лучше «Алексы» — особенно смешно, когда мы пытались заставить «Алексу» поставить песню Ёлки (на «Дизере» она есть), а получали сборник для йоги.

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

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

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

 1 комментарий    451   4 мес   гаджет

Старость и смерть

Дочка пытается написать «Вспыш» — это персонаж из мультфильма «Чудо-машинки», с которым она себя ассоциирует

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

— Папочка, а ты немно́жечко постарел? Вот столько?

Почему-то мне стало весело, усилий стоило не рассмеяться, но отвечаю серьёзно:
— Да, совсем немножечко.

Продолжая тревожно на меня смотреть:
— А мы с тобой скоро в скелетиков превратимся?

Тут у меня как-то смех прошёл, меня самого эта тема тревожит.
— Нет, — отвечаю, — пройдёт много-много лет.
— А когда люди умирают, он потом исчезают?
— Ну… да.
— А потом снова появляются?
— Нет, доченька, не появляются.
— Почему?
— Так заведено, такие правила.

Долгая пауза. Потом хитрый вопрос с улыбкой в глазах:
— А Чеширской Кот пропадает, а потом появляется?
— Конечно!
— Ну что же, папочка, ты этого не знал, да?

Кажется ушли от темы.

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

 5 комментариев    512   4 мес   дочка

Бум!

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

Агент Смит бьёт по Нео, а попадает по подготовленной для удара колонне

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

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

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

На помощь приходит Мэтт Каррикер — известный оружейный видеоблогер, ведущий канала «Разрушительное ранчо». На видео он проводит эксперимент — стреляет в замки́ из различного оружия, начиная с пистолета П22, заканчивая снайперской винтовкой Барретт 50-го калибра. Попробуйте угадать из какого оружия удастся так же непринуждённо открыть замок, как это делают в фильмах.

 9 комментариев    403   4 мес  

Новости майнинга

Ферма по майнингу какой-то «крипты» на «айсиках»

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

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

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

Оказалось, с этим научились справляться. Дело в том, что большинство крупных предприятий закупает определённое количество электричества оптом. Если потратить слишком мало, закупочная цена в будущем вырастет. Поэтому предприятию выгодно куда-нибудь «сбросить» электричество. Иногда это происходит планово, иногда предприятию анонимно «помогают» его сотрудники, например при помощи майнинговых ферм.

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

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

 Нет комментариев    216   5 мес  

PythonFuck

Давайте вспомним, что у меня блог ещё и про программирование.

Есть такое развлечение — не используя алфовитно-цифровые символы, писать осмысленные программы на разных языках программирования. Для конкретного языка это называется «имя языка»+«Fuck». Меня это занятие не то чтобы захватило, но иногда интересно поразмяться и попробовать себя в этой забаве.

Для некоторых языков такого ещё никто не делал, приходится изобретать собственные приёмы, в конечном счете это интереснее всего. Я уже делал PHPFuck, BashFuck (и даже не один раз) и совмещал JavaScriptFuck с языком программирования Brainfuck.

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

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

_=(''<())+(''<());__=_**_**_
___='%'+('%'+`'±'`[_])%(__-_-_)

___*(_*_*_-_)%((
(__+_)*_*_,
`{_}`[_/_],
)+(`(''<'')`[_],)*_+\
(
__*_*_*_-__-_/_,
__*_+_/_,
))

Это запускается и работает (выводит строку «Hello!»), но только из командной строки и только во второй версии Пайтона. Когда напишу небольшой разбор кода, станет понятным почему.

Ранее Ctrl + ↓