fossplanet.ru: Архив
2007-10-01 - 2007-10-31
Интересную тему подняли в #d-r:
<ilyak_> В shell всё более чувствуется потребность в ключе -j для цикла for
<ilyak_> В связи с тем, что ядрышек-то всё больше
...
<ilyak_> thresh: Я пока не придумал простого способа &ить for
<ilyak_> Если он есть - буду рад услышать
<ilyak_> Хотелось бы, при этом, чтобы сразу 500 процессов не форкались, а в
порядке общей очередит
<dottedmag> ilyak_: ммм. какой очереди? т.е. если есть 8 CPU, чтобы по 8
форкались, отрабатывали, а на место их - новые... Так?
<ilyak_> dottedmag: Да
Готовых примитивов, которые вполне могут распараллеливаться, не так уж и много - for, for in, пожалуй и всё, остальное надо сооружать ручками из & и wait.
Сразу всплыла идея сделать шелл на идеях эрланга (или даже на VM эрланга), добавив примитивы send и recieve (spawn уже есть), а также супервизоры a-la Erlang.
Состряпал за полчаса web-мордочку для управления tvtime:
http://tvtime-web.dottedmag.net/Если кому пригодится - хорошо. Патчи, как всегда, welcome.
Заглянул случайно в какую-то баталию между теми, кто с магазинов с электронными книжками деньги наваривает, и теми, кто скриптами выложенные "для чтения" книжки обратно в нормальный offline-формат перегоняет.
Ужасно умилил довод (вероятно, рассчитанный на особо тупоголовых людей) "тех, кто наваривает": "вы книжку покупаете за 20 рублей, а на написание скрипта скачивания потратите своё время, которое больше, чем эти 20 рублей стоят". То ли у них действительно отсутствует мозг (если они в этот довод верят), то ли они пытаются эту мысль в голову тем, кто думать не умеет, вложить. Скрипт-то пишется один раз, а стянуть с его помощью можно хоть всю библиотеку (прикинем по fictionbook'у, пусть даже 50% книг из 12000 предложенных там в public domain - всё равно на 120 тысяч).
Заинтересовала меня такая вещь, как Zeroconf. Краткая выжимка из
Zero Configuration Networking: TDG.
Zeroconf состоит из трёх частей:
- Link-local IP address - автоматический выбор IP-адреса при отсутствии DHCP или статической конфигурации IP. Работает путём "выбрали, ARP-ом попробовали, что никого по этому адресу нет, ARP-ом объявили, что теперь это наш".
- mDNS. Почти обычный DNS, но работающий не с центральным сервером, а с помощью link-local multicast - каждая машинка в подсети отвечает на мультикаст-DNS-запросы со своим именем. Отвечает, опять же, мультикастом. Работает для специально выделенного псевдо-TLD .local.
- DNS service discovery. Соглашение на SRV-записи DNS, позволяющее публиковать и искать сервисы по их именам. В совокупности с mDNS позволяет перечислять сервисы в локальной сети (mDNS-запрос без конкретного адресата "дайте мне SRV-запись _workstation._tcp" вернёт ответы от всех mDNS-серверов, эффективно перечислив все Zeroconf-машинки в сети, аналогично с принтерами для _ipp._tcp и так далее). В дополнение специфицируется работа со статическими DNS-серверами, позволяющая достичь того же сервиса.
mDNS и DNS-SD могут работать без Link-local IP address - DHCP или ручная конфигурация ничем не мешают.
DNS-SD может работать без mDNS, но тогда DNS-серверу неплохо бы поддерживать расширения для динамического добавления/удаления ресурсов и нотификации о таковых событиях (расширения входят в спецификацию DNS-SD), так что с mDNS работать проще.
Чего этим можно добиться?
- Link-local addresses и mDNS упрощают администрирование мелкой сети.
- DNS-SD позволяет публиковать ресурсы сети в удобном для использования виде (a-la SMB share browser, но "типизированнее"). Интересные (для меня) типы, на данный момент определённые в реестре сервисов: HTTP (втч отдельные страницы, есть модуль для Apache), WebDAV, FTP, ssh, Postgresql (да, даже постгрес :), Jabber, SMTP (submission), IMAP4, IPP
Как это реализуется в Linux?
- Link-local IP address - DHCP-клиентом и небольшой поддержкой в ядре.
- mDNS и DNS-SD - avahi-daemon
- Разрешение .local-адресов - libnss-mdns
Дописал сегодня софтинку для поддержки
Google Safe Browsing API в Squid - squid-gsb. Документация и инструкции по установке находятся у меня на
домашней странице. Поскольку я "ленив", то для разработки использовал Boost по полной программе. В принципе, можно почти все переписать без использования Boost, но тогда надо будет подумать как сделать этот софт кросс-платформенным.
В комментариях одного из френдов попался
идейный скрипт, превращающий компьютер с CD/DVD-приводом в часы с кукушкой. Особенно эффектно пустить этот скрипт на нескольких рядом стоящих серверах. Впечатляюще должно быть.
!
catch snmp if snmpTrapOID=linkDown if community=dlink500T
exec eject
!
catch snmp if snmpTrapOID=linkUp if community=dlink500T
exec eject -t
!
events
snmp
Правильная архитектура делает простыми довольно неожиданные вещи. Поэтому пока взрослые и серьёзные дяди обсуждают её необходимость, мы ей вовсю пользуемся. Вот отрывок кода открывает и закрывает CDROM на рабочей станции в ответ на падение и поднимание ADSL-канала на моём домашнем шлюзе...
Нет, конечно, и мониторинг событий, и сигналы, и фоновые задачи я делал не для шуток с cdrom'ом :) И уж точно не для этого раскапывал netlink и snmp/asn1. Некоторые вполне рабочие примеры можно глянуть на wiki проекта. В двух словах -- это унифицированный механизм реакции на события как на хосте, так и на других машинах. Мы всё ближе к HA, и это радует. Следующий шаг -- inotify и xen... И очередной приступ документирования. Никто не желает помочь? ;)
ТЗ: в дистрибутиве должна быть поддержка Python версий 2.4 и 2.5. Причём лучше так, чтобы можно было одновременно ставить и тот, и другой и переключаться на лету. Вопрос: Gentoo или Debian? Пока склоняюсь ко второму варианту.
Назад