Моно-но аварэ

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

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

В прошлой версии своей утилиты я сначала пытался файл открыть, если не получалось, то создать. Вообще, есть такой флаг O_CREAT, который можно указать в качестве режима открытия и если файл не существует, он создаётся. У меня не создавался. Я не понимал почему и понял лишь когда запустил strace. Оказалось, что константы, которые я взял откуда-то из недр своего Линукса, не соответствуют действительности. Скомпилировал небольшую программку на Сях и оттуда выдернул нужные значения, заработало как ожидается, минус один сисколл.

Вторая вещь — я очень давно не программирую на ассемблере и растерял большинство лучших практик. Вот например я не помню как лучше — когда подпрограмма сохраняет регистры, которая она портит или наоборот. Вроде первый вариант выглядит как-то универсальнее, но в моём случае придётся сохранять много регистров, которые я в реальности не занимаю. Так как программа у меня более чем обозримая (пара сотен строк) я остановился на втором варианте, в этом случае ничего лишнего я не делаю. Попутно ещё оказалось, что аналога команд PUSHA/POPA в 64-битном режиме нет (хаха), а это сохранение и восстановление всех регистров через стек одной командой, очень удобно, если мы не паримся над использованием памяти (всё-таки регистров уже немало и каждый по 8 байт).

Ну и последнее, самое интересное. Утилита работает с файлами, а файловые хендлеры надо где-то хранить. Файлов будет столько, сколько передаст пользователь через параметры. Тут две стратегии — ограничить количество входных параметров (пока я пошёл по этому пути) или более интересно — научиться динамически выделять память в системе. Я хочу второе. Из разной литературы я помнил, что есть некий mmap, которому можно скормить /dev/zero и получить область памяти, а есть куча, с которой тоже как-то можно работать.

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

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

Оставить комментарий

Вастрик-бокс

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

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

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

На зелёном ковре с белой разметкой дороги разложены сувениры: синяя закладка «MI CASA ES TU CASA», кинохлопушка, карта Литвы, польские деньги, магнит, открытки и фото.
Распакованный заряд непрактичности, сюрпризов и весёлого настроения

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

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

7 комментариев

Переезд на «Эгею»

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

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

Фотография: множество коричневых бумажных пакетов с надписями «SURPRISE» и «TAKEAWAY», разбросанных на зелёном ковре с белыми дорожками, рядом лежит лист бумаги с текстом.

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

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

Наверное пока не всё идеально, временно пропали страницы «Обо мне», «Прочтённое» и «99», но я надеюсь в скором времени справиться со всеми трудностями.

Логотип Docker: слово «docker» серым шрифтом и красный стилизованный символ кита справа на белом фоне.

Кроме того, я сменил хостинг. Уважаемые «Докеры» хостили меня бесплатно восемь лет, спасибо им за это огромное, при случае всем его рекомендовал и рекомендую. Однако пора и честь знать, в связи с переходом на другой движок мне нужны большие аппаратные ресурсы и мне кажется неправильным просить их у «Докера», не платя за это ни копейки. Сейчас я подселился на площадку внутри «Мастерхоста» к своим знакомым, надеюсь ресурсов всем хватит.

В конце хотел бы сказать спасибо Илье Бирману за консультации по движку!

27 комментариев

Дам пирожка

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

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

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

9 комментариев

DevelNext

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

Скриншот IDE DevelNext с окном приложения Pinger, показывающим логи проверки домена (MAK, Хост, ОС) и код PHP для обработки HTTP-ответа сервера.

Внутри у неё свой диалект ПХП (JPHP), написанный на Джаве. Отличия от обычного интерпретатора, в основном, в стандартных функциях — они присутствуют не все, но чаще всего есть какие-то аналоги. Актуальная на текущий момент версия поддерживает синтаксис ПХП 7.1.

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

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

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

Причём как оказалось, работать надо не просто в отдельном треде, так ещё и изменения интерфейса делать разрешается только через специальную обёртку — функции uiLater и uiLaterAndWait. Пример из документации:

$this->label->text = 'Поток выполняется...';

$thread = new Thread(function () {
    sleep(3); // ждем 3 сек.

    uiLater(function() {
        $this->label->text = 'Поток выполнен.';
    });
});

$thread->start();

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

Диалоговое окно с сообщением: «This application requires a Java Runtime Environment 1.8.0» и кнопкой «OK».

К сожалению, сразу нашёлся баг — если на компьютере пользователя установлена Джава младше версии 1.8, программа запускаться отказывается. Автор «ДевелНекста» вызвался помочь исследовать эту проблему, надеюсь скоро исправит.

Разобрался: ларчик просто открывался! Я так был уверен, что должен получиться всего один файл, что не понял, что папку jre (где и лежит Джава) надо тоже копировать. Это уже менее интересно, конечно.

8 комментариев

Список книг

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

Скриншот профиля EvgenijStepanischev на livelib.ru: показаны книги с рейтингами, рекомендации друзей и раздел «Личный Топ 10 книг».

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

10 комментариев

«Спасибо»

Разворот учебника жестового языка: иллюстрации жестов «Здравствуйте», «До свидания», «Спасибо», «Извините», «Имя», «Профессия», «Специальность», «Кто» с подписями.

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

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

3 комментария

ProxyJump ★

Как-то писал заметку про .ssh/config и опцию ProxyCommand, а потом почти сразу после этого, перечитывая руководство по теме, наткнулся на схожую опцию ProxyJump:

Host 10.1.10.*
        IdentityFile ~/.ssh/id_rsa
        #ProxyCommand /usr/bin/ssh -W %h:%p bolk@rptn.tunnel
        ProxyJump rptn.tunnel

Возможности её у́же, зато пользоваться ею проще. Кроме указания в конфиге, её просто использовать и из командной строки, как ключ, причём цепочки выстраиваются очень просто:

ssh -J bolk.sed-php7:2258,rptn.tunnel 10.1.10.158

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

2 комментария

Греция

Ржавый белый пикап Nissan с зелёным кузовом и синим контейнером на заднем плане у белого здания с кондиционерами и лестницей.

В прошлом году мы были в Греции, на острове Крит. Греция — страна моего детства, в том смысле, что Зевс, Минотавр, Тесей, Геракл — все эти имена из книг, мультиков и фильмов моего детства. Не знаю мне ли так везло или в СССР действительно столько внимания уделяли греческим мифам, но я как-то постоянно с ними сталкивался.

Я долго колебался писать ли этот пост, но в конечном счёте подумал — почему бы и нет? Пусть будет.

Греция — 28 страна, где мы были. Возможно мой интерес к ней был сильно «перегрет» детскими переживаниями, но это единственная из 28 стран, которая мне не понравилась, сразу и, кажется, бесповоротно.

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

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

И дело даже не в бедности и заброшенности как таковой.

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

Возможно это пугает потому, что невольно примеряешь это на себя, на свою страну, задумываешься не случиться ли это и с нами… и что тогда будет?

10 комментариев

Особенность PHP 7.2 (и 7.1)

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

$arr = [[1]];
array_walk($arr, function(){});
array_map('array_shift', $arr);
var_dump($arr);

В ПХП 7.0 массив выведется в неизменном виде, а в версии 7.2 (и 7.1, как оказалось) единица исчезнет. Очевидно, что array_walk создаёт какие-то ссылки внутри массива, из-за чего array_shift начинает получать внутренний массив по ссылке и сдвигать. Но никаким другим способом (например, прямым созданием массива со ссылками) мне такое поведение получить не удаётся.

5 комментариев

Выделение памяти (ассемблер под Линукс)

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

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

Схема памяти процесса: сверху вниз — стеки, куча, данные, код программы; стрелки показывают направление роста стека и кучи.

Как я уже упоминал, есть два способа выделить память под Линуксом — sys_brk и sys_mmap. Второй способ используется, когда памяти надо выделить много, очевидно это не мой случай, поэтому я использовал вызов sys_brk. Этот вызов двигает границу так называемой «кучи» (Runtime heap на картинке) вверх (к старшим адресам) и в получившемся пространстве можно что-то хранить.

Код выглядит так:

mov rax, 12 ; sys_brk
xor rdi, rdi ; в rdi записываем ноль (получить текущий адрес)
syscall

cmp rax, 0
jl memory_error ; обработка выделения памяти

; в rax у нас указатель на текущую границу кучи
; новый адрес нужно записать в регистр rdi
mov rcx, size ; количество хидеров файлов, которые надо хранить
lea rdi, [rcx * 8 + rax] ; каждый хидер занимает восемь байт
mov rax, 12 ; sys_brk
syscall

То есть получаем старый адрес, прибавляем сколько надо, устанавливаем новый адрес. Все менеджеры памяти Линукса (включая известнейший вызов malloc с Си), используют один из этих двух вызовов или их комбинацию.

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

Оставить комментарий

Правда выигрывает

Скриншот задачи «return true to win» с PHP-функцией foo($x), возвращающей true, если $x('gehr') === 'true', и полем ввода для вызова foo() с текущим счётом 9.

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

Мне пока не удалось победить уровнь №6 (30 символов против 22) и 10 (29 против 27), не хватило свободного времени на работе, чтобы додумать, попробую в выходные.

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

10 комментариев

Голод — не тётка

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

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

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

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

Есть ещё сложное понятие «взятое в руку неожиданно принесло мне дискомфорт».

Оставить комментарий

Видеокамера PXL-2000

Черная игрушечная видеокамера Fisher-Price PXL2000 с кнопками управления и логотипом на корпусе, лежащая на плетеной поверхности.

На картинке — восхитительно необычный гаджет 80-х годов — видеокамера «ПиЭксЭл-2000». Тогда это была довольно дорогая детская игрушка (изначально продавалась за 383 доллара, если перевести на современные деньги).

Необычна она тем, что записывала видео на обычные аудиокассеты.

Помещалось примерно 11 минут видео со звуком, качество видео, разумеется было так себе (разрешение — 120×90, 15 кадров с секунду). Видеомагнитофонов, которые бы проигрывали столь необычный формат не существовало — чтобы посмотреть записанное, камеру следовало подключить к телевизору.

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

Оставить комментарий

cjpeg-dssim

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

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

На «Маке» всё необходимое для работы утилиты для подбора элементарно ставится из «брю», вот результат обработки картинки из предыдущего моего поста:

$ ./cjpeg-dssim jpegoptim test/2018.02.17.1@2x.jpg
$ ll -h test
total 584
drwxr-xr-x+ 4 bolk  staff   128B 18 фев 12:09 .
drwxr-xr-x+ 7 bolk  staff   224B 18 фев 12:09 ..
-rw-------@ 1 bolk  staff   187K 18 фев 12:00 2018.02.17.1@2x.jpg
-rw-r--r--+ 1 bolk  staff   102K 18 фев 12:09 2018.02.17.1@2x_cjpeg_dssim.jpg

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

Обработка дополнительно утилитой jpegtran из пакета mozjpeg даёт ещё два килобайта экономии.

7 комментариев

Как читать меня через «Телеграм»

Скриншот Telegram-чата с ботом telefeedbot: сообщение о утилите cjpeg-dssim для автоматического подбора параметра качества JPEG, пример вывода команды и ссылка на bolknote.ru

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

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

Просто добавляете бота к себе, кидаете ему адрес моего сайта и он начинает присылать посты, по мере у меня их появления на сайте (правда с чудовищным отставанием, но куда спешить-то?).

7 комментариев

«История» — это когда?

Я вот тут задумался — «история», это для меня когда? 10-е годы — это конец царизма, Революция, вот это всё, 20-е — НЭП, 30-е — расстрелы и взорванные церкви, 40-е — война. Всё это «история».

А вот пятидесятые я историей уже не ощущаю, не знаю почему, возможно потому что в эти годы родились родители и они меня прочно связали с тем временем?

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

По дороге в кафе, где я часто обедаю, лежит вот такой люк под ногами (см. фотографию), почти каждый день на него наступаю, давно обращаю внимание на него — очень необычный логотип и незнакомая аббревиатура — «НКС».

Оказалось я каждый день наступаю на историю, «НКС» — это «Народный Комиссариат Связи», такое сокращение применялось с 1932 по 1946 года. А логотип позаимствовали у Шведско-Датско-Русского телефонного акционерного общества.

Таких люка, кстати, два в округе, в Казани они ещё пока встречаются и в других местах, но уже очень редко, не знаю куда деваются, «коллекционеры» что ли их тырят?

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

8 комментариев

Проблема при апгрейде Постгреса

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

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

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

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

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

А когда восстанавливались из дампа, вот что пошло не так:

sed=> CREATE INDEX du_uid_did ON document_user USING btree (user_id, document_id);
ERROR: temporary file size exceeds temp_file_limit (4194304kB)

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

2 комментария

С личных наблюдений

Скриншот заказа №503298869264702 от 10 июля 2017 г. на автомобильное зеркало заднего вида Easy View за 291,84 руб. от магазина VODOOL Automobile Store на iTaо.com.

Никак не могу понять почему мы утрачиваем предлог «из». Я слышу его в речи всё реже и реже, да и письмо страдает. «Пришёл с магазина», «прилетел с Москвы», «с письма скопировал». Как-то всем нормально, может зря парюсь?

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

14 комментариев

Дозиметр

Радиометр SOEKS QUANTUM показывает уровень радиации 0,07 мкЗв/ч, статус «радиационный фон в норме», время 09:33, заряд батареи и режим «Меню».

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

На фотографии подарок собственной персоной — «СОЭКС Квантум». Выдаёт сводную оценку по трём видам излучений — β, γ и рентгеновскому, а так же умеет показывать накопленную радиацию.

Работает от двух батареек или от аккумуляторных элементов, время непрерывной работы прибора от источника питания 1000 мАч не менее 700 часов!

Пока не удалось прошить новой прошивкой (и даже понять есть ли обновление) — софт под «Мак» прибор не видит вообще, надо Винду искать.

5 комментариев

Танковое училище

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

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

Музей преотличный и на территории интересно — аккуратные танки, аккуратный снег, аккуратные жёлтенькие здания в стиле готики — строили немцы в 20-е годы. Тогда там располагался танковый центр «Кама», совместный советско-германский проект, созданный для обхода Германией Версальского договора 1919 года — по нему Германии запрещалось иметь современное оружие.

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

Сейчас там — «Казанское высшее танковое краснознаменное командное училище» (КВВКУ).

Оставить комментарий

Неизвестная часовня в танковом училище

Кирпичная часовня с арочным входом, колоколами и мемориальной плитой в снежном дворе; вид сбоку показывает крышу с сосульками, деревянную дверь и табличку «2/29» на стене.

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

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

Аэрофотоснимок военного объекта с красной стрелкой, указывающей на одно из зданий в центре комплекса, окружённого дорогами и полями.

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

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

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

Оставить комментарий

Азбука Морзе на R

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

Скриншот кода на R: функция setMethod для морзе, вызов morse(), инициализация init() и вывод закодированной фразы "What hath God wrought?" в виде точек и тире.

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

Обратите внимание, это не строка, это выражение языка «Эр», которое, будучи выполненным, выводит закодированную строку:

Текст на чёрном фоне: строка азбуки Морзе и фраза «WHAT HATH GOD WROUGHT?» с курсором ввода.

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

У объекта, хранящегося в точке перекрыты унарные и бинарные плюс и минус (а так же специальный метод show, чтобы вывести хвост на экран), поэтому когда мы этими операторами записываем код Морзе, например, так:

++++-.++---.

На самом деле «Эр» видит код как-то так:

+(+(+(+(-.)))) + +(-(-(-.)))

Унарные операторы применяются к объекту, который копит в своём стеке факт применения и порядок, в котором это было сделано, потом то же делается для второго объекта и в конце применяется бинарный оператор, который выводит на экран левый аргумент и создаёт новый объект из правого.

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

То, что получилось лежит на гитхабе. Там же лежит метод toMorseStr, которым можно перекодировать любую латинскую фразу в нужную последовательность.

Оставить комментарий

Подпевай!

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

Некоторые английские песни я распеваю по памяти, но бывает в машине услышишь что-то новое, незнакомое, что понравилось. Я обычно открываю «Шазам», смотрю что за песня и гуглю слова.

Скриншот приложения «Under» с текстом песни на английском: «Don't say it's over», «Underneath the ground», «Only you can send me under...» и кнопкой «УСТАНОВИТЬ» из Google Play.

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

Восторг! Молодцы!

3 комментария

← сюда туда →