Category: it

monster

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

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

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

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

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

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

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

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

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

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

Disclaimer: возможно, это только у меня так, однако вот тут тоже пишут про кнопки открытия и закрытия дверей.
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

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

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

Камрад 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. Работает только в консоли/терминале/или как там он называется в винде.
monster

zlib@openssh.com

После апгрейда сервера с sarge на etch беспомощные виндузные ssh-клиенты типа ShellGuard перестали заходить на этот сервер.

Оказалось, что Collapse )

Поэтому либо выключайте сжатие в клиенте, либо явно указывайте "Compression yes" на сервере в /etc/ssh/sshd_config.
monster

hdd juggling

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

Collapse )

monster

(unix filesystem) hard links и бэкапы

Для личных бэкапов кроме болванок DVD-R я использую USB2.0 3.5" HDD enclosure с винтом на 160 Gb внутри. Сливаю rsync'ом раз в сколько-Бог-на-душу-положит дней туда архив фоток и /home с рабочей+домашней машин и с бука. Раз в полгода еще и rootfs бэкаплю. Хранится это чудо в корпоративном сейфе на другом этаже. На мой любительски-сисадминский взгляд - разумно и эффективно.

И вдруг внезапно этот ext3-раздел в 160Gb оказывается забит доверху. Катастрофа!

Не хочется на бэкапном винте учинять разборки "а не стереть ли мне пару десятков гигов ерунды?". Кстати вспомнилось, что можно сэкономить место, превратив дублирующиеся файлы в "жесткие ссылки" (hardlinks, в противовес symlinks): само тело файла хранится лишь однажды, а из разных каталогов на его inode ссылаются "разные" файлы-имена. Осталось только найти на винте все эти дубли... Вот где можно самовыразиться wannabe-программеру! Какой простор для python-скриптинга!

Вот только есть уже такая утилита. И не одна. Хоть Гуглом не пользуйся.

Скачал первую, изучил, запустил. Освободил 8 гигов. Грустно.