Category: it

monster

админом, не программистом

Супруга как-то жаловалась, что не может пользоваться своей старой почтой с телефона, потому что спама много и всё тормозит. Почтовый ящик очень старый и нужный, а сервер спам фильтровать не умеет. Я посмотрел, предложил периодически фильтровать внешней утилитой.

Прямо загорелся: запилю, мол, проект "внешний антиспам-фильтр для IMAP папок", да вот только он уже существует: IMAP Spam Be Gone. На питоне написан, между прочим. Использует SpamAssassin, умеет для обучения скормить ему spam/ham прямо из соответствующих папок IMAP-сервера.

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

Оригинал этой записи в DreamWidth (comment count unavailable комментариев)
monster

переехал во Владивосток

Вот, переехал.

Уволился из ТТК (после 16 лет, Карл!), собрал нехитрые пожитки (ха-ха три раза), и своим ходом, на своей верной Ками за три дня приехал в славный город Владивосток. Три с лишним тысячи километров, не просто так! Сынище мой штурманом отлично себя проявил, отлично доехали.

Тут жара и днем, и ночью, море относительно теплое, и хочется жить и трудиться, но к завтраку это проходит....

Отпуск себе устрою на некоторое время, а потом буду работу искать, я ж теперь Python-разработчик и DevOps, хватит уже админствовать, неинтересно.

Такие дела.
monster

ошибка в инструкции — программирование брелока tomahawk TW-9030

Так, это важно, пусть кто-нибудь найдет потом это поиском. Томагавк, Tomahawk, 9030, TZ-9030, TW-9030.

В инструкции (PDF) к дешевенькой автосигнализации Томагавк TW-9030 в пункте 31 "Программирование новых брелоков" на стр.20 грубая ошибка: на новом брелоке нужно одновременно нажимать и держать не кнопки "багажник" и "звук", а "открытие" и "закрытие".

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

Что интересно, в напечатанной инструкции, которой уже лет семь, — та же самая ошибка.

Disclaimer: возможно, это только у меня так, однако вот тут тоже пишут про кнопки открытия и закрытия дверей.
monster

дыбр про железки

Мечты сбываются — выходит Raspberry Pi 3, для энергетически эффективного и бесшумного домашнего сервера выбор железа всё больше и больше.

Примерно год назад я купил ODROID-C1, специально для HD IPTV и фильмов. Потому что Raspberry Pi model B не справлялся с HD-каналами даже с оптимизированным дистрибутивом OpenELEC, а до выхода Raspberry Pi 2 я не дождался буквально пары недель. Жалел потом: Rpi2 как специализированный медиа-плеер подошел бы куда лучше, у него и коммьюнити больше, и с HDMI-CEC проблем нет.

А сегодня я случайно узнал, что у Одроида сетевой порт — гигабитный, и это сразу его полностью реабилитирует: можно дополнительно использовать как роутер. SATA, правда, нету, поэтому NAS из него плохой, Banana Pi подошел бы больше. Ну или Cubietruck, который существенно дороже.

Еще у меня есть кубиборд2, валяется без дела уже года полтора, под VPN/роутер планировался. Его теперь воообще некуда применить, получается. Я ж как-то обещал себе сначала использовать с пользой уже имеющиеся железки, а потом уже покупать новые... Впрочем, при нынешнем курсе жаба давит что-либо покупать.
monster

стэнфордский курс по алгоритмам

Закончил еще один онлайн-курс, на этот раз по алгоритмам, стендфордский, by Tim Roughgarden. Для истории: Statement Of Accomplishment (PDF)

После этого курса и курса по крипто сложилось впечатление, что Стенфорд из всех присутствующих на курсере университетов оптимально сочетает глубину и простоту изложения своих предметов, не перегружая лишним и не упуская нужного. Их курс по автоматам (конечные автоматы, регулярные выражения etc), кстати сказать, ведет Джеффри Ульман, автор Dragon Book, и курс по компиляторам тоже. Я просто не смог пройти мимо, записался, учу.



А именно про этот курс хорошо написала уважаемая a_d_astra еще в 2012-м году, жаль я не читал ее тогда :-)

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

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

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

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

Там весь смысл квиксорта в том, чтобы выбирать pivot-элемент и уже относительно его перебрасывать остальные элементы сортируемого подмножества массива. Седжвик-то знаменит уже тем, что предложил для pivot выбирать медиану из первого, последнего и среднего элементов подмассива на каждом этапе, а Tim Roughgarden ни разу не упомянул его, медиана только в домашнем задании как один вопрос мельком проскочила. Тщательно везде упоминал авторов, когда и кто что изобрел, а Седжвика прокинул :-) Доказывал корректность алгоритма при случайном выборе pivot-элемента, он же по теории игр специалист, а кому он нужен, этот случайный выбор? Никто и никогда его в квиксорте не реализует, не практично. А медиана — практично. Академический снобизм, формальные доказательства против плебейских эвристик?..

А! Стенфордский же курс на неделю позже Принстонского начался, так за месяц где-то опрос приходил от Стенфорда, и вопрос в нем был, мол, записались ли вы на другой курс по алгоритмам? Это я цитирую. Даже соврать хотел, мол, не-не-не, я верен Стенфорду и только ему.

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

еще про todo и синхронизацию

Снова по поводу ToDo и пр. (см.предыдущий пост).

Есть такой онлайновый SyncML сервер/сервис Memotoo, годный на то чтобы синхронизировать адресную книгу между телефоном и вообще чем угодно. Типа MyFunambol, только через веб управляется намного удобнее, и вдобавок к контактам и календарю еще и синхронизацию задач понимает.


Memotoo продвинут


В бесплатном варианте Memotoo сильно ограниченный, мои 400 контактов туда уже не помещаются. Оплатил через Paypal $4.5 за месяц, чисто в тестовых целях. Очень оказалась удобная вещь, с ее помощью наконец-то упорядочил свои контакты, когда на другой телефон переезжал. На Фунамбол-то только бэкапил, а тут прямо с веба все поля позаполнял, поисправлял, залил обратно в телефон — красота.

Потом синхронизировал с Evolution, для этого есть специальный пакет syncevolution и морда к нему sync-ui. Тут и полезли косяки: поля с Джаббером и ICQ, внесенные в контакт на стороне Evolution, были напрочь вырезаны при модификации на стороне Memotoo. Ну вот как это называется?! Если закинули при синхронизации неизвестное тебе поле X-JABBER, — так будь добр, оставь его в контакте, ты ж сервер SyncML всё-таки, должен чужие атрибуты уважать! Платить французам за Memotoo резко расхотелось.

Продолжил бороться с задачами. Ну, думаю, если через web неудобно задачи править, — буду править на десктопе и синхронизировать с RememberTheMilk. Ага, щаззз!

Написанная в духе GTD питоновская Getting Things Gnome при первичной „медленной” синхронизации с RememberTheMilk принимает все задачи в Unicode-escaped виде, сплошные "\u0423\0478" вместо русских букв. Если потом сдуру засинхронизировать задачи обратно — поздравляю, вы испортили свои задачи в RTM. Прямо как я.

С задачами, созданными изначально в GTG, другая проблема: примечания к задаче в соответствующие Notes у RememberTheMilk не попадают. Писал-писал свои соображения на полэкрана — и потерял их при синхронизации. Просто замечательно.

Еще GTG умеет синхронизироваться с Evolution, это ему в плюс. И даже Notes при этом не теряет, ура. Но для перебросания задачи из GTG в Evolution надо лезть в меню, а чтобы потом из Evolution оно попало куда-то в интернет и забэкапилось — запускать отдельную syncevolution. А чтобы из SyncML-сервера потом оно попало в телефон — на телефоне надо запускать синхронизацию. Очень удобно, офигеть, дайте две.

Ближайшая альтернатива GTG на линуксовом десктопе, умеющая работать с RTM, — Tasque. Бледненькая, надо признать, неудобная, еще и написана на Mono. Пришлось вернуться к GTG. Попытался настроить свежайшую версию из репозитория — не показывает RTM как backend. Ужас.

Зато в GTG можно передавать имя текущей задачи в программу учета времени Hamster. Как-то даже не ожидал я, что можно так ненапряжно контролировать время, обычно это такой геморрой. Надо будет обязательно попробовать.

А пока решил от RTM и Memotoo отказаться. Вот Hamster, GTG и Evolution вполне можно использовать на работе и дома. Задачи забрасывать в Evolution простейшим джаббер-ботом. А вот телефон синхрить нечем, свой собственный SyncML-сервер на основе исходников Funambol пока поставить не удалось. Снова в поиске единого центра для синхронизации...
monster

linux router project revisited

Отличная вещь все-таки технический прогресс. За две тысячи рублей можно купить WiFi-маршрутизатор, перешить его на OpenWRT/DD-Wrt и получить дома постоянно включенный сервер, бесшумный, маленький, потребляющий 10 ватт. При этом он останется маршрутизатором и даже — та-дааа! — точкой доступа.

Даже на железный медиа-плеер вроде WDTV можно поставить альтернативную прошивку, сделав его хоть телефонной станцией. Для особо увлеченных выбор мелкого железа вообще не ограничен: от SKU 26320 на SnakeOS до Arduino и монстров типа такого.

А вот в те времена, когда еще не было такого понятия как «вайфай», мы собирали раутеры из обычных компов. Главными преимуществами такого самосбора была дешевизна и ремонтопригодность: любой их компонент можно было купить в любом компьютерном магазине. Линукс, который унутре, уже тогда позволял наворачивать любые схемы и конфигурации, от мощного BGP-раутера до копеечного, загружаемого по PXE бездискового шейпера на кучу интерфейсов.

Из строя выходили чаще всего блоки питания и жесткие диски. Для пущей надежности вместо дисков мы ставили флешки и переходили на дистрибутивы, не требующие постоянно доступного на запись носителя. Сначала LRP (Linux Router Project), потом LEAF, потом его uClibc-версия. Пробовали даже debian-router. А потом пришел OpenWRT и убил их всех. Недолог был век писюков-маршрутизаторов, лет пять-шесть.

Собственно, к чему я завел эту мемуарщину?
Если у вас осталось где-то x86 железо в виде маршрутизатора или мелкого embedded-сервера — посмотрите, какая есть ВЕЩЬ: Voyage Linux. Чистый Debian, корневая файловая система монтируется в режиме «только чтение», /var/* и /tmp в памяти в виде tmpfs, для изменения конфигурации достаточно перемонтировать read-write, а потом обратно. Грузится через GRUB, обновляется через apt-get. Никаких танцев с бубном, стандартный Debian!



Обновлял тут один очень старый vpn-сервер, Вояж влез на Compact Flash 256MB (подключена как диск через пассивную схемку CF-IDE, на фото вверху), еще осталось свободно 118MB. Сверхнадежно! Можно обойтись без физического доступа еще несколько лет.

Дома планирую из старой платы Via Eden с корпусом ITX сделать медиасервер/HTPC вообще без движущихся деталей: блок питания ноутбучного типа, у проца пассивное охлаждение, а rootfs на флешке.

(голосом Друпи) Ай эм хэппи.
monster

управление трафиком

Данная запись будет интересна не всем.

Камрад alogic таки сподвиг меня рассказать об управлении входящим трафиком в linux.

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

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

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

Ладно, слишком длинное вступление. Под катом треп про управление только входящим трафиком, ingress policing. Рецепты для управления исходящим стоит искать на Linux Advanced Routing and Traffic Control, эта магия уже общеизвестна.

Collapse )
Надеюсь это кому-нибудь пригодится.
monster

в помощь сидеру

Написал питоновский скрипт, который заменяет torrents.ru на rutracker.org внутри бинарных торрент-файлов.

Лежит здесь: retr.py (2Кб, 53 строки кода). Импортирует модуль bencode из bittorrent или bittornado.

Перекодировал свои 150+ файлов, полет нормальный. Под Windows не проверял пока не победил тоже заработало.

Upd. Совместно с nepilsonis добавили перекодирование переменных comment и publisher-url

Upd.2 Cкомпилил py-installer'ом windows-версию, тех кому лень поставить Питон целиком. Потребуется Python26.dll, 2.0MB, и собственно retr.exe, 646KB. Работает только в консоли/терминале/или как там он называется в винде.