Архив рубрики ‘IT’

Обнаружил, что при майской миграции bash.altlinux.org с SQLite на MySQL побились кавычки и некоторые другие спецсимволы. Дело в том, что тогда я не придумал ничего лучше, чем снять дамп БД и каким-то кривым скриптом с StackOverflow сконвертить его в дамп для MySQL.

Некоторое время я медитировал над скриптом и обоими вариантами дампа, в итоге придумал способо лучше. Поскольку старая SQLite-база локально осталась, я переключил локальную копию сайта обратно на SQLite и слил нужные данные через интерфейс ORM прямо из ipython. После чего через pickle перенёс их на рабочий сайт и аналогично через ipython обновил записи правильными данными. Похоже, что при наличии готовой универсальной обёртки к разным СУБД (в данном случае SQLAlchemy, но это наверно необязательно должна быть ORM) именно её и надо использовать для конвертации.

Некоторое время назад я стал получать почту со своего сервера не по POP3, а по IMAP. С клиентской стороны ничего не изменилось: письма по прежнему передавались поштучно procmail и раскладывались по ящикам. На сервере лежали только те письма, которые ещё не были переданы на десктоп, и потому при недоступности основной системы можно было легко увидеть всю неполученную почту (но без всякой сортировки, в одном ящике). Не устраивало в 1-ю очередь отсутствие сортировки по ящикам прямо на сервере и вытекающая отсюда бессмысленность сохранения почты на сервере. При этом IMAP позволяет иметь на сервере несколько ящиков и видеть их в клиенте, но нормальных способов получить локальную копию всех писем с такой же структурой папок, похоже, нет. Обычные решения заключаются в обычном скачивании писем локально с сохранением структуры и указании в почтовом клиенте этих локальных папок. Из нужного софта я слышал только про OfflineIMAP, но он уже помер, потому я решил попробовать mswatch+mbsync.

Continue reading ‘Offline IMAP на mswatch+mbsync’ »

В Fortunator я решил попробовать HTML5. Я о нём мало что знал и боялся, что результат не будет работать на многих браузерах, но решил изучить вопрос. Как оказалось, поддержка HTML5 вполне повсеместна (по крайней мере, незнакомые фичи ничего не ломают) и уже есть рекомендации использовать некоторые конструкции HTML5 (начиная с доктайпа) всегда, что уже даже делает Google. Я же решил использовать по максимуму всё, что можно, учитывая минималистичность разметки и функциональности сайта и отсутствие нужды поддерживать какие-либо браузеры (впрочем, в Chromium, FF и Opera я всё равно не увидел проблем).

Что было использовано:

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

This is going into Mstone-X until we have a UI design that satisfies our other Chrome constraints (not prompting, etc), and it’s not something that is currently on our list. We do understand it’s a commonly requested feature however so it is possible we’ll consider it in the next 6-12 months.

Комментарий неплохо показывает отношение к пожелалкам, причём для Linux-версии (специфичные фичи либо фичи, которые есть только в вендоверсии) всё ещё плачевнее из-за недостатка девелоперов.

Наконец-то написан и открыт цитатник ALT Linux, пока что только с цитатами с IRC-канала (aka пакет fortunes-ALT-irc) и без голосования, зато с поиском и экспортом.

Самым сложным и интересным был импорт старых цитат. Хотелось хоть как-то близко к реальности выставить время добавления, тем более что некоторая информация об этом есть: для последних нескольких лет — дата коммита пачки из нескольких цитат в git (погрешность — пожалуй, в большинстве случаев меньше недели), для более ранних — дата сборки очередной версии пакета, видимая тоже как дата коммита, но с гораздо большей погрешностью (не берусь оценить навскидку, скорее всего не меньше полугода для самых ранних цитат каждого коммита). Задача осложена тем, что поверх уже закоммиченных цитат могли коммититься изменения форматирования и т.д., поэтому в лучшем случае blame для разных строк одной цитаты может показать разные даты, в худшем — одну неправильную. К счастью, у blame есть ключ -w, отключающий сравнение пробельных символов, а в случае разных дат можно брать самую раннюю. Дальше была проблема разбора данных blame из кода. Обёртка из GitPython то ли не работает вообще, то ли что, но нужного я от неё добиться не смог. Я несколько раз метался между использованием/исправлением/изменением этой обёртки и ручным разбором машинночитаемого вывода blame, но в итоге всё-таки вернулся к первоначальной идее парсинга обычного вывода blame в лоб регексами (да, это ужасно, и всё было бы вообще замечательно и даже без регексов, если бы не столбец с именем автора, содержащий неэскейпнутую произвольную строку с пробелами, отключаемый только вместе со столбцом даты). Получившиеся даты, конечно, неточны, но лучше вряд ли получится.

За последние пару дней узнал две удививших меня вещи, близких по тематике.

Во-1-х, сборка Psi+ под альт не просто есть, но находится в стороннем репо. Это на моей памяти первый прецедент выкладывания apt repo для ALT, за исключением репо членов ALT Linux Team и связанных с ними организаций (я о unsafe.ru, Etersoft и всяких репо с тестовыми версиями на people и около), да ещё и указанный в виде строки для sources.list на официальном сайте софтины.

Во-2-х, Opera для Debian распространяется не только с ftp, но и в виде apt repo. Более того, этот репо предлагается вписать в sources.list.d при установке .deb, скачанного руками с сайта. У Virtualbox, впрочем, тоже есть репозитории для Debian/Ubuntu.

Поставил дебиан. Пока что на ноут. Пока что в дуалбут.

Начал читать SICP. Посоветуйте удобный интертрепатор Scheme, кстати?

Неделю страдал от того, что на VPS почти кончился диск. Сейчас захожу в панельку и случайно замечаю «You have allocated 75% of storage». Вспоминаю, что да, в апреле увеличивали всем доступное место, но тогда мне его не было надо, и я не знал, что его надо выделять вручную. А как понадобилось — я, естественно, и не вспомнил об этом.

TWIMC: ключ 1166B795 просьба считать недействительным (сертификат отзыва будет опубликован через некоторое время), использовать необходимо ключ 2866F3C1 (отпечаток A922 59C8 38CC 9D28 BC09 7D3C E8A1 F359 2866 F3C1). Ключ можно получить тут, в alt-gpgkeys (через некоторое время, опять же) либо на серверах ключей командой gpg --recv-key 2866F3C1

UPD: старый ключ отозван.