Зоотроп

Устройство на гифке носит греческое название «зоотроп» («жизнь» плюс «вращение»), думаю многие видели похожие в исторических фильмах. Если его раскрутить, то через щель можно наблюдать небольшой закольцованный «мультфильм».
Телефоном при видеосъёмке в фокус движущиеся картинки поймать не удалось, в жизни они отчётливые, а тут автофокус всё время наводился на переднюю стенку. Кроме того видно
Этот зоотроп продаётся в виде набора и собирается минут за десять. Правда детали иногда не совсем друг к другу подходят, но специально для таких случаев в наборе есть наждачная бумага. Самое сложное — соединить верхнюю и нижнюю часть барабана вместе, тут одной наждачкой не обошёлся, пришлось применять силу, рискуя сломать всю конструкцию.
Сразу вспоминается бородатый анекдот:
Купили американцы у русских новый истребитель. Собрали — получился торпедный катер.
Разобрали-собрали — катер.Разобрали-собрали — катер. Зовут на помощь русских, мол, не получается. Русские присылают своего специалиста, тот запирается в ангаре. Через три дня открывает ворота — стоит истребитель. Американцы недоумевают, получался же катер. Русский: «написано же в инструкции — перед сборкой детали обработать напильником».
В общем, наждачку положили не зря.
«Мультфильмов» в наборе несколько, плюс есть размеченные ленты для самостоятельного творчества, но не думаю, что они нам скоро пригодятся. Надеюсь дочку готовыми движущимися картинками порадовать, утром посмотрим интересно ли ей будет, если нет, отложим игрушку «на вырост», не пропадёт.
Если кому интересно, весь фарш был куплен сегодня на казанском фестивале «Духов день», фестиваль кончился, но у мастера, которые его делает, есть магазин на «Ебее», цена там правда выше ярмарочной — я покупал за 950 рублей.
Счётный пфенниг
Я почти перестал писать о монетном поиске — надоело, всё довольно однообразно — помыл, сфоткал, описал, похоже на гроссбух, а не блог. Да и сами выезды не отличаются разнообразием — как правило я еду
С пфенингом выше связана небольшая история, может быть не очень интересная, зато немного разбавляющая некоторую рутинность записей на эту тему.
В тот день я выезжал с военными поисковиками, моё участие в этих мероприятиях заключается в поиске личных вещей вокруг захоронений, а так же разведке — случайные пробы там и тут иногда помогают выявить
По приезде на стоянку я кинул свои вещи около самой большой палатки и больше не подходил к ним в течение дня — сначала был сильно занят около поднимаемых скелетов, потом мы с одним из поисковиков, моим приятелем поехали на машине подальше — занялись случайным поиском. Тем временем, о чём я не знал, основной лагерь снялся с места и уехал.
Ближе к вечеру мы вернулись — лагеря нет, вещей тоже. Позвонили уехавшим, те сказали, что мои вещи спрятали у приметного столба, под дровами, я туда — там ничего. Загрустил. Начал вспоминать, что у меня там довольно дорогой пинпоинтер и беспроводные наушники от металлоискателя.
Сидим с приятелем в машине, грустим, думаю что делать. Тем временем раздаётся ещё один звонок, новая информация — выяснилось, что другая группка, снимаясь с лагеря, обнаружила под дровами вещи и сдала их на хранение
Созвонились, приехали, забрали вещи. Женщина и её муж оказались удивительно сердечными людьми, я им рассказал о своём хобби, они в ответ — что в N. почти каждый владелец участка постоянно находит монеты, кольца и прочие старинные вещи — у них у самих целая горсть таких.
Вынесли показать, жаль я не сфотографировал, помню там было два кольца, несколько пфенингов и набор распространённых монет — копейки Николая Второго, полушка Анны Иоанновны и тому подобное. Пригласили у них походить — огород был не засеян, они как раз готовились в тот день сажать картошку.
Мы и походили — нашли с приятелем по счётному пфенингу, плюс я нашёл медную пуговку без опознавательных знаков. Приятная память о случайно знакомстве.
Люк города Владимир
Как все наверное заметили, мне нравятся различные исторические детали городской среды — кирпичные клейма, страховые доски и прочие анахронизмы мира гипсокартона, стекла и пластика. Причём, если не знать куда смотреть, то можно годами ходить мимо таких деталей, ничего не замечая.
В последнее время стал смотреть на люки. Вроде не заметить их трудно,
На днях попался пусть не исторический, но тоже интересный люк — из Владимира, это 600 километров от нас! Больше я по городу таких не видел, видимо единичный экземпляр, как он мог сюда
Копирование при записи и reset
Многие ли увидят тут проблему?
function array_first(array $array)
{
return reset($array);
}Проблема в том, что reset меняет внутреннее состояние массива, а значит вызывает копирование при записи — в этот момент массив будет удвоен. Это небольшая неприятность для небольших массивов, но если в нём миллион элементов…
Короче, можно не заметить как исчерпаешь память. Кстати, ПХП тут мог бы делать оптимизацию (но не делает) — не менять указатель, если до вызова reset он был на первом элементе. В этом конкретном примере такая оптимизация иногда могла бы экономить память.
Но в общем случае использование тут reset — плохая идея, на мой взгляд, лучше сделать так:
function array_first(array $array)
{
return current(array_slice($array, 0, 1));
}Ту же проблему (с удвоением массива) содержит в себе и до сих пор встречающаяся итерация через each или next — вызов этих функций так же модифицирует внутренний указатель массива. Впрочем лечится легко — использованием foreach.
К слову, в ПХП 7.2 функция each объявлена устаревшей.
Несколько прокси в «Телеграме»
В черновиках несколько дней пролежал пост возмущения отсутствием в «Телеграме» поддержки нескольких прокси, а у меня их несколько — парочка частных и один корпоративный. Бывают проблемы с доступностью, поэтому приходится переключаться, неудобно.
Сегодня с удовлетворением стёр его из черновиков — с очередным обновлением «Телеграма» поддержка появилась, правда не без нареканий, — в мобильном клиенте, если выключить прокси, то обратно он уже не включается, но это поправят, конечно же.
Кстати, появился
Переезд на HTTPS
Это меня раздражает. Обычно это автоматизируют, но у «Мастерхоста», где я сейчас беру хостинг, такой автоматизации нет, а самому мне её костылить претит. Поэтому я просто заплатил «Комодо» через
При этом оказалось, что движок («Эгея») отрицательно относится к тому, чтобы сайт жил сразу по двум протоколам, поэтому я сегодня настроил редирект. Надеюсь у всех появился вверху зелёный замочек. Если у вас он
«Гилан»
Во время поездки с военными поисковиками в прошедшие выходные, в правый глаз надуло
На работу я решил себе тоже
Купил «Гилан», объёмистая солидная упаковка, приличная стоимость. После распаковки оказалось, что бо́льшую часть коробки занимает воздух — сама по себе бутылочка содержит милипизерное количество жидкости, да ещё и нижняя её часть —
Повёлся на объём ?
99 бутылок: Rust
64. Rust — довольно известный язык, на слуху, очень интересный своими концепциями. Пока писал «песню о пиве», даже захотелось познакомиться с ним поближе.
Язык является «близким к железу», нацелен на безопасность и многопоточность — немало ошибок, которые приводят к уязвимостям в программах на Си, тут выявляются ещё на этапе компиляции. Правда за это приходится платить, порог входа в язык очень высокий.
Ниже программа на этом языке, но выбранный формат позволяет показать лишь маленькую толику фишек языка.
Наверное опытные программисты уже выделили знакомые по другим языкам части программы, но некоторые вещи возможно требуют пояснений.
Тип u8 — это тип «байт», match — конструкция проверяющая совпадение с образцом, мощная вещь, умеет сопоставлять что угодно — значения, типы, реализованные методы и так далее, mut — ключевое слово, указывающая, что переменную можно модифицировать,
// Beer song. Evgeny Stepanischev, 2018
fn bottles(beer: u8) -> String {
match beer {
0 => "no bottles".to_string(),
1 => "1 bottle".to_string(),
_ => format!("{} bottles", beer)
}
}
fn main() {
let mut beer = 99;
while beer > 0 {
println!("{} of beer on the wall, {0} of beer.", bottles(beer));
beer -= 1;
println!("Take one down and pass it around, {} of beer on the wall.\n", bottles(beer));
}
println!("No more bottles of beer on the wall, no more bottles of beer.");
println!("Go to the store and buy some more, 99 bottles of beer on the wall.");
}Как сконвертировать bytea
Пока сегодня ехал домой с военного поиска (я в таком уже участвовал в прошлом году), написала в «телеграм» дипломница — она не смогла разобраться как сконвертировать в буквы формат постгреса bytea, в котором мы ей выгрузили
Отдельно про поездку рассказывать не буду, я вообще подумал, что пора завязывать с публикациями на такие темы, а пока ехал, накидал на коленке функцию на Пайтоне, положу сюда, чтобы не потерялась:
def decodeBytea(bytes: bytearray, charset: str) -> str:
if bytes[:2] == b'\\x':
return bytearray.fromhex(bytes[2:].decode()).decode(charset)
else:
raise ValueError('Invalid format')Формат немудрёный — впереди
Музей Нацбанка РТ
Очень люблю бывать в музеях, а Казань, для человека с такими пристрастиями, —
От приятеля узнал, что сегодня, в «ночь музеев» можно будет пройти в музей отделения Национального банка в Татарстане — это такое помпезное здание по адресу Баумана, 37. Если вы бывали в Казани, наверняка проходили мимо.
Там очень серьёзный пропускной режим и в другие дни его посетить почти невозможно, если только там не работаешь.
Музейчик небольшой, в основном в нём монеты и несколько предметов старины, но взглянуть стоило. Выше, например, монеты Екатерины I, её
Я
На фото выше слева можно заметить раннесоветский пятак, а справа — профиль Николая Второго на серебре. По музею,
Банкнот в музее тоже немало, жаль, опять же, всё за стеклом, фотографии на смартфон не особо удаются, снимок выше
В музее сегодня проводили экскурсию,
Выше, судя по надписи (action au porteur), — акции на предъявителя, рядом с ними лежало ещё несколько занимательных бумаг и поясняющая надпись «коллекция ценных бумаг, выпущенных организациями г. Казани на рубеже 19—20 веков, передал в дар Музею Д. В. Железняк».
Помимо денег и редко выставленной техники в музее сегодня было две инсталляции. Та, что на снимке выше, по всей видимости показывала рядовых банковский работников прошлого в их естественной среде — за скучным казённым столом со счётами, арифмометром и прочим.
Вторая располагалась в соседней комнате, там в углу
Вообще у меня есть ещё несколько фотографий, остатки можно посмотреть в «Фейсбуке». Раньше выкладывал на «Яндекс.Фотки», но этот сервис, как вы возможно знаете, приказал долго жить, а ничего нового я пока не подыскал.
Аудиоплатье
Помните платье, которое поссорило интернет? Одни видят его
Я отчётливо слышал «лорел»
Можно предположить, что дело в этих щелчках, в них содержится
СравниТакси
В рабочие дни я минимум два раза езжу в такси — на работу и обратно.
Так как основной целью является экономия, я всегда просматриваю предложения нескольких агрегаторов. Давно вертелась мысль это
Отдельной строкой — не знаю на чём они зарабатывают, но приложение бесплатное, никаких встроенных покупок или рекламы.
Модуль PHP на Go
Потешную штуку показали на днях —
Пока ехал домой, думал что бы такое обернуть.
Ссылка давно протухла, но «Вебархив», к счастью, имеет копию страницы — статья называется «Ridiculous
Программа там на Си, я её минимально подпилил, чтобы она нормально компилировалась, завернул через cgo в Гоу, а оттуда при помощи
Заодно набросал небольшой бенчмарк и залил всё на гитхаб, если
Зато попробовал
Функция sleep и сигналы
Век живи, век учись. Вот уж не знал, что при получении сигнала программой на ПХП, моментально прерывается выполнение функции sleep (и родственных ей time_nanosleep и usleep):
$ php -r 'pcntl_signal(SIGUSR1, "_"); var_dump(sleep(PHP_INT_MAX));' &
[1] 3177
$ kill -USR1 3177
$ int(4294967288)Вообще в Си так же, но где ПХП и где Си. Как и в Си, назад возвращается количество секунд, которые функция не «доспала» (time_nanosleep возвращает массив из секунд и наносекунд, а usleep — NULL). Правда под Виндой есть особенность — sleep при «недосыпе» всегда возвращает 192 (значение константы WAIT_IO_COMPLETION).
Любопытное исключение из правила — time_sleep_until, она сигналы игнорирует. Так что если вам нужна гарантированная по времени задержка, используйте её или напишите обёртку:
function bulletproof_sleep(int $seconds): bool
{
$period = ['seconds' => $seconds, 'nanoseconds' => 0];
while (array_sum($period) > 0) {
$period = time_nanosleep($period['seconds'], $period['nanoseconds']);
if (is_bool($period)) {
return $period;
}
}
return true;
}Дореволюционная библиотека
Ездил сегодня поискать монеты, и в одной из деревень привлёк внимание заброшенный дом немного на отшибе. Снаружи обычный русский дом, с печкой, ещё даже крепенький, двери нараспашку. Никогда не упускаю шанса заглянуть в такие, особенно если не требуется усилий, чтобы попасть внутрь.
Внутри ничего достойного внимания не было, кроме шкафа за печкой, а в шкафу —
Всё, что лежит на диване на первом снимке — дореволюционные издания на татарском, записанные арабским алфавитом. Целая библиотека, всё отпечатано в Казани.
Одна из книг, кстати, обёрнута приказом
Книги я сложил в мешок и забрал с собой. В ближайшее время их разберут два специалиста, которые умеют читать арабский алфавит, после чего будем думать куда их можно будет пристроить.
Автоматическая реставрация фильмов
Помните
Привет
Вверху закриншотил один из примеров. У меня тут в блоге простая картинка, а в исходной статье можно подёргать бегунок
Не всё пока идеально, огрехи на статичной картинке отлично видны — с кожей матроса случилось
В общем, необыкновенно практическая демонстрация того как нейронные сети могут улучшать качество изображения. Осталось
С днём Победы! ★
И ещё страховые доски Казани
Мой прошлый пост про страховые доски Казани заинтересовал ещё одного казанского коллекционера, который сам со мной связался и передал адреса ещё нескольких досок. Две разновидности мне уже попадались, а остальные вижу «в дикой природе» в первый раз.
Некоторые доски очень неудачно висят и чтобы их сфотографировать, пришлось одалживать довольно серьёзную оптику у моего приятеля (Р. Х., спасибо!), он же потом вытянул из равов то, что не совсем стыдно показывать.
Две доски уже мне знакомого общества «Россия»; разной формы — круглая и овальная. Общество учреждено 29 марта 1881 года, находилось
Три почти одинаковые (за исключением состояния) таблички «ЗАСТРАХОВАНО ВЪ СѢВЕРНОМЪ ОБЩЕСТВѢ». Опять же знакомое уже страховое общество. Такое название оно получило в 1879 при переезде из Петербурга в Москву.
Первый новичок — табличка «Русского страхового общества», ниже надписи указан год учреждения — 1867, но название, как на табличке, общество получило позднее — в 1896, базировалось
Звезда настолько сильно ассоциируется у меня с СССР, что я было подумал, что табличка советская. Но коллекционеры уверили меня, что это не так. Иногда звезда — это просто звезда.
Зато следующая табличка действительно советская, с серпом и молотом. Надпись по кругу видна плохо, там — «Государственное страхование». Такой дизайн табличек этой организации был
Кстати, если присмотреться, видно — раньше на этом месте висела другая табличка, проглядывает более светлое пятно. Судя по контуру, там раньше была доска «Российского транспортного и страхового общества».
Ну и звезда
Как проверить не битая ли картинка
По работе понадобилось из командной строки проверить несколько тысяч картинок на корректность — со смертью носителя часть картинок разрушилась. Чтобы их найти, придумался такой незамысловатый способ:
convert path_to_image null: 2>&- || echo File is corruptedЕсли картинка path_to_image разрушена, то этот однострочник выведет «File is corrupted».
Утилита convert входит в состав пакета «Imagemagick» и достаточно распространена.
Принцип понятен, наверное: я прошу утилиту сконвертировать файл, указанный первым параметром, в псевдоформат NULL (указан до двоеточия во втором параметре) — это специальный формат используется, когда результат конвертации не нужен — обычно для замера производительности.
Входная картинка полностью разбирается кодеком, если это не удаётся сделать, то convert поругается в поток вывода ошибок (который я закрыл) и вернёт код возврата отличный от нуля, на что среагируют две вертикальные черты, которые запустят вторую команду.
Конечно, картинка должна быть в формате, который утилита понимает, но всё хоть немного распростанённое туда входит.
«Мурзилка»
Пару месяцев назад наткнулся
Порылся в интернете, убедился, что экземпляры самые ходовые, но поиск прошёл не без пользы — положил себе в закладочки прекраснейший сайт «Журналы СССР», а там перешёл на архив журнала «Мурзилка» — в детстве мы его выписывали, смотрел его с большим удовольствием.
Центральным персонажем журнала был Мурзилка — такой жёлтый йети в берете, шарфе, с фотоаппаратом. Он там постоянно мелькал на страницах.
Архив на сайте аж с 1924 года, можно даже первый номер посмотреть, ну я и посмотрел. Оказывается эта стрёмная собака на скриншоте — Мурзилка образца 1924 года, привычный мне персонаж появился только в 1937 году.
Согласно этому апокрифу, Мурзилка — четвёртый щенок собаки Жучки, гадкий утёнок в семье:
Весь он был
какой-то лохматый, шершавый; на мордочке у него шерсть торчала вроде стариковской бороды; одно ухо висело вниз, другое — было поднято вверх.
Очень рад, что эту криповую собаку сменил жизнерадостный зверёк непонятной породы — у меня в детстве было меньше поводов вскрикивать в ужасе по ночам.