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

Позднее Ctrl + ↑

Умный дом Xiaomi

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

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

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

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

Сценарий для двухклавишного выключателя в комнате дочки в приложении «Ми Хоум»

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

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

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

 4 комментария    345   14 дн   xiaomi

Загадочное убийство

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

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

Заметка из газеты «Камско-волжская рѣчь», вторникъ 5 ноября 1913 г., №244-й

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

25-го октября утромъ найденъ въ проулкѣ трупъ Митрофана Петрова, крестьянина с. Арбузова—Барана, спасскаго уѣезда. Наканунѣ онъ, Петровъ, ѣздилъ на базаръ въ Билярскъ продать возъ овса. Продавъ овесъ, онъ вернулся домой къ вечеру, выпивши и сказавъ домашнимъ, что пойдетъ въ слободку въ гости, ушелъ и не вернулся. Обстановка убійства загадочная, такъ какъ въ день убійства стояла ненасная погода, и съ 24 на 25 съ вечера и до часу ночи шелъ дождь.

При осмотрѣ же трупа оказалось, что одежда на немъ вся сухая и даже въ грязи не испачкана. Нанесенныя три раны въ голову должны бы дать много крови, но на мѣстѣ трупа крови нигдѣ не оказалось. Видѣвшіе трупъ говорили, что онъ обмытъ и одѣтъ въ чистое бѣлье, не исключая лаптей и онучъ, так—что «хоть въ гробъ клади и хорони.» Слѣдствіемъ не удалось выяснить у кого Петровъ былъ въ гостяхъ. Около трупа былъ слѣдъ тарантаса, что и дало поводъ думать, что трупъ привезенъ. Полиція съ понятыми пошла по слѣду и слѣдъ привелъ въ Арбузовъ—Баранъ и прошелъ мимо дома убитаго и потомъ вышелъ на дорогу, гдѣ разобрать его было нельзя.

«Как изучают сон / Что я знаю»

Очень познавательный часовой разговор редактора «ПостНауки» Алёны Селичевой и сомнолога Михаила Полуэктова — кандидата медицинских наук, доцента Первого МГМУ им. И. М. Сеченова.

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

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

О гигиене сна и когда можно говорить, что у человека со сном проблемы:

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

Про влияние на сон мелатонина:

— Выработка мелатонина начинается в районе 20—21 часа. Ну, у разных людей немножко по-разному… […]
— Про мелатонин как раз, чтобы он правильно вырабатывался, нужно в темноте спать.
— Ну это байка, которая везде в интернете повторяется, что яркий голубой свет блокирует секрецию мелатонина… С одной стороны — да, действительно, показано, что «работа на планшетном компьютере в течение сорока минут приводит к снижение уровня секреции мелатонина на 20%», вот так вот буквально цитирую. Но у молодых людей мелатонина очень много и двадцатипроцентное снижение никому не повредит. У людей старшего возраста, после 55 лет мелатонин почти совсем не вырабатывается и тоже они спят. То есть мелатонин не является ключевым гормоном, который определяет качество сна, это такой помощник для сна. То есть если мы хотим бороться за идеальный сон, лайфхак такой устроить всего, «прокачать сон», как говорится, вот тогда мы должны будем бороться с этими голубыми экранами.

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

 1 комментарий    291   16 дн  

Канал «Антропогенез.ру»

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

Каменная ваза — оригинал и её реплика, изготовленная без металлических инструментов

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

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

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

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

 4 комментария    301   18 дн   наука

Шабака

Некоторые владельцы собак в приливе чувств сюсюкают — «ах ты моя шабака».

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

Этимология обоих названий вполне очевидна: «шабака» — «шакал» и «собака», «шалайка» — «шакал» и «лайка».

Шалайка, фотография из блога авиационного фотографа Марины Лысцевой

Порода официально зарегистрирована в Российской кинологической федерации и взяла от обоих предков лучшие качества — имеет очень острое обоняние, может эффективно работать в температурном диапазоне от −30° С до +45° С, отличается небольшими размерами и весом.

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

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

 Нет комментариев    274   18 дн  

99 бутылок: ElanTele

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

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

// beer.et by Evgeny Stepanischev
вар бөтеннәрюлы := функция(ә) бу
    вар саннар := ["0","1","2","3","4","5","6","7","8","9"]
    вар олыара := ә/10
    вар нәтиҗә := саннар[ә - олыара*10 + 1]

    әгәр ә > 9 буочракта
        нәтиҗә := саннар[олыара + 1] + нәтиҗә
    бетте

    кайтар нәтиҗә
бетте

вар форматлау := функция(шешәләр) бу
    вар нәтиҗә

    әгәр шешәләр = 0 буочракта
        нәтиҗә := "no bottles"
    башкаочракта
        әгәр шешәләр = 1 буочракта
            нәтиҗә := "1 bottle"
        башкаочракта
            нәтиҗә := бөтеннәрюлы(шешәләр) + " bottles"
        бетте
    бетте

    кайтар нәтиҗә + " of beer"
бетте

вар ә, юл

дәвамында ә эчендә 1..99 элмәк
    юл := форматлау(100-ә)
    яз юл + " of beer on the wall, " + юл + " of beer."
    яз "Take one down and pass it around, " + форматлау(99-ә) + " on the wall.\n"
бетте

яз "No more bottles of beer on the wall, no more bottles of beer."
яз "Go to the store and buy some more, 99 bottles of beer on the wall."

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

Расцветка синтаксиса программы редактором «СаблаймТекст 3»

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

Сладимый

«О вліяніи христіанства на славянскій языкъ: опытъ исторіи языка по Остромирову евангелію», Ѳ. Буслаевъ, 1848, стр. 138—139

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

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

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

 Нет комментариев    310   23 дн  

PythonFuck: разбор

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

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

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

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

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

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

module, method = "__builtin__", "print"
vars(vars()[module])[method]("Hello")

Есть варианты, но без использования букв — никак.

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

Посмотрим в код. Первая строка:

_=(''<())+(''<());__=_**_**_

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

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

_=-~(''<()) # число «2» можно получить и так тоже

Результат мы кладём в переменную с именем «подчёркивание». В той же строке мы получаем «16» возводя два в степень два в степени два, результат помещается в переменную «два подчёркивания».

Вторая строка:

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

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

Этот символ вставлен внутрь конструкции «обратный апостроф», которая является во втором Пайтоне эквивалентом repr — функции, возвращающей строковое представление объекта, в данном случае это будет «’\\xc2\\xb1’». Нам отсюда нужен второй символ (нумерация с нуля) — «x». Цифра два для индекса у нас уже есть — в переменной «_».

Дальше используется оператор «процент» — форматированный вывод. Полученное «x» используется как шаблон для «процента», чтобы преобразовать число в шестнадцатеричный вид. Из выражения «__-_-_» (16−2−2) получаем «12» или, после преобразования, «c».

Вообще можно было обойтись без этого шага, получив эту же букву из строкового представления «±» («’\\xc2\\xb1’»), но в процессе продумывания я себе выписал ряд трюков и мне хотелось использовать их все.

В итоге, в переменную «три подчёркивания» попадает строка «%с», её мы будем использовать для оператора форматированного вывода («%»), чтобы получать символ по его коду.

Дальше символы получаются следующим образом:

(__+_)*_*_ # (16+2)*2*2 = 72, код символа «H», через шаблон «%c» получим отсюда букву
`{_}`[_/_] # первая часть даёт строку «set([2])», отсюда берём символ «e»
`(''<'')`[_]*_ # получаем строку «False», оттуда символ «l», удваиваем его умножением на два
__*_*_*_-__-_/_ # 16*2*2*2-16-2/2 = 111, код символа «о»
__*_+_/_ # 16*2+2/2 = 33, код символа «!»

Не требующее преобразования оставляем как есть, а из кодов символы получаем шаблоном «%с». В результате складывается строка «Hello!».

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

Обновился на бету «Эгеи» версии 2.9

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

Наконец-то скачал себе все аватары пользователей, до этого они хранились в облаке «Яндекса»

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

Разумеется, раз это бета, то могут быть баги, например. Я уже заметил, что блок «Избранное» не работает, как только Илья выпустит патч, сразу же накачу исправление. Патч выпущен, накатил новую версию, «Избранное» работает.

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

Другая заметная вещь — «глаз». Около него пишется количество прочитавших заметку. Не знаю в точности что это значит, но занятная штука, пусть будет (она отключается). У меня посещаемость после борьбы с аудиторией упала на два порядка и теперь составляет примерно 800 человек в прыжке, более обычная цифра — около 400—500 в день.

 3 комментария    350   25 дн  

Алфавит

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

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

Алфавит по версии меня, я знаю, что «Ц» и «Ч» где-то в конце алфавита, но где конкретно…

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

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

А как у вас? Знаете алфавит? Если да, то сможете перечислить его буквы задом наперёд?

Ранее Ctrl + ↓