Архив за месяц: Октябрь 2018

Инструменты разные — методы похожие

Попробовал решить одну из рабочих задач, применив нелюбимый язык PHP в комплекте с современными инструментами — получилось близко к тому, что делал сравнительно недавно на перле, с некоторыми отличиями:

  • Вместо  перла — PHP,
  • Модули тоже лежат рядом со своим кодом, но управляются не картоном, а через composer,
  • Композер и тесты может запустить (composer test), и отладочный сервер (composer start). Но можно для однообразия для обоих языков сделать Makefile и выполнять нужные действия командой make. Например, у меня запуск тестов — всегда make test, чтобы не путаться.
  • Вместо Mojolicious::Lite — микрофреймворк Slim. Для быстрого старта — Slim-Skeleton.
  • В шаблонах вместо Embedded Perl — Twig.
  • Если сайт работает через PHP-FPM, то нет нужды пинать демона каждый раз, как обновится код — он сам обрабатывает подобную ситуацию. Развёртывание свежей версии простого веб-приложения сводится к трём действиям: обновление рабочей копии (svn up либо git pull), разрешение зависимостей (composer install) и на всякий случай запуск тестов.

Слон и код

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

Вынимаем фильтр из угла

Ситуация: стиральная машина Hotpoint Ariston AVTL 83 в процессе работы иногда пахнет палёным и в конце концов подыхает — приступаем к разборке.

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

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

Стиральная машина Hotpoint Ariston AVTL 83

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

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

Чтобы извлечь фильтр радиопомех, надо

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

Фильтр радиопомех

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

Фильтр радиопомех

и колодка, через которую к фильтру подключены провода

Колодка Колодка

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

Хотя можно поступить проще: сразу позвонить мастеру, объяснить ситуацию — он может и детали добыть, и на место их воткнуть.

Продолжение следует.

Кросспроектное связывание коммитов с задачами в Редмайне

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

Связи хранятся в таблице changesets_issue

changeset_id issue_id
24645 2224

Сопоставить номер связи с номером ревизии можно через таблицу changesets

id repository_id revision committer
24645 37 8801 as

Таблицы в MySQL Workbench

Для создания связи достаточно внести запись в таблицу changesets_issue, подставив в поле changeset_id правильное значение changesets.id — ссылки появятся при ближайшем посещении страниц. Привязать редмайновую задачу с указанным номером ко всем коммитам, в комментариях к которым есть этот номер, можно запросом


SET @issue_id = 1234;
    
INSERT IGNORE INTO changesets_issues
SELECT 
    id, @issue_id
FROM
    changesets
WHERE
    comments REGEXP CONCAT('.*#', @issue_id, '[^0-9].*');

Не стой под арендо́й

Дендрофобы, вырубившие полтора года назад под свой стеклянный сарай деревья возле памятника Курчатову, заканчивают стройку — забор убран, на сарай повешена табличка с адресом [проспект Ленина, 89а], таблички «Аренда» ещё нет, рядом расставлены знаки «Остановка запрещена» и пасутся эвакуаторы.

Склоняем точнее

Мы стали более лучше одеваться^W^W^W правильнее склонять имена с фамилиями. Вчера вышла свежая версия предназначенного для этого перлового модуля Lingua::RU::Inflect (он же есть и на гитхабе — чуть свеже́е, чем на CPAN).

Фрагмент документации модуля Lingua::RU::Inflect

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

Итак, в новой версии:

  • Закрыты все имевшиеся по состоянию на вчерашний день issues, в том числе
  • Исправлена проблема с экспортом всего возможного оператором — компилятор теперь не ругается на попытку экспортировать функции, убранные в другой модуль.
  • Имена с беглыми гласными (Лев, Павел) и некоторые фамилии на -ец (Песец, Писец, Боец и Отец) стали склоняться правильно — беглая гласная убегает, как ей и положено. Там, где убегать не положено (Швец, Жнец,  Надудеигрец и полный крах, крушение всех надежд — шесть букв, вторая И, но не фиаско) — не убегает.
  • Женские фамилии, оканчивающиеся на -ов, -ёв, -ин, -ий, -ый — похожие на мужские, но всё-таки женские — перестали склоняться.
  • Мужские фамилии, оканчивающиеся на -их и -ых, могут всё-таки склоняться: например, Бултых, Жмых, Отдых, Дитрих, Рерих, Ульрих, Фрейндлих и Эрлих склоняются, а Синих, Серых, Карих, Чёрных — нет.
  • Точнее определяются имена, нехарактерные для русских и не подпадающие под обычное правило: женские оканчиваются на -а и -я, мужские — на согласную. В списки исключений добавлено несколько десятков имён. Определитель теперь знает тюркоязычные и исландские отчества.

В итоге количество ошибок на тестовом наборе данных сократилось в 2–3 раза, до одной ошибки на 200–300 человек — есть неочевидные случаи, потому и оценка приблизительна. Двойные имена и фамилии пока слоняются неправильно — исправлю как-нибудь потом.

Суевериям назло

В 2012 году тринадцатый троллейбусный маршрут закрыли — якобы по просьбам водятлов, которым неудобно было парковаться на узенькой улице Сони Кривой. С тех пор движение троллейбусов по ней было редким — улица использовалась для оборота подвижного состава, возвращающегося с обеда. Вчера тринадцатый маршрут восстановили — он как и раньше идёт в объезд: с перекрёстка Братьев Кашириных × Молодогвардейцев в гору по Молодогвардейцев, затем по трём проспектам — Комсомольскому, Свердловскому, Ленина до парка, а обратно до Свердловского — по Сони Кривой.