[ Content | View menu ]

Онлайн обучение SQL

11.02.2008

Cooler пишет о сайтах «Упражнения по SQL» и  SQL Books, позволяющих систематизировать и проверить свои знания синтаксиса SQL и умения его использовать. Предлагается решить полсотни тренировочных задач по SQL разного уровня сложности и получить платный сертификат.

P.S. чтобы два раза не вставать :) завёл сбоку трансляцию моих starred items из google reader. Выглядит, может, не очень здорово, и иногда текст ссылки совершенно не отражает ее содержания (а иногда и вовсе ничего не отражает). Но, во-первых, в условиях, когда 80% этого ридера читается с мобильного телефона, лучшего решения, кажется, не придумаешь; во-вторых, ссылки, присутствующие в этом блоке, в большинстве своём соответствуют тематике блога и рекомендуются мной к прочтению. За качество отвечаю, другими словами.

Ссылки - 5 комментариев

50 лучших цитат про Linux

06.02.2008

«What happens when you read some doc and either it doesn’t answer your
question or is demonstrably wrong? In Linux, you say «Linux sucks» and go
read the code. In Windows/Oracle/etc you say «Windows sucks» and
start banging your head against the wall.»
— Denis Vlasenko on lkml

… и другие цитаты

linux - 9 комментариев

Linux kernel: построение списка совместимости устройств для своего ядра

30.01.2008

В предыдущей заметке был рассмотрен способ ручного определения совместимости драйвера с железом. Однако в случае, когда необходимо получить список полный всех устройств, с которым может работать наше многажды пропатченное и перекроенное ядро, лазить руками по каждому драйверу и смотреть, какие PCI и USB ids в него зашиты, очень неудобно.

На наше счастье, кое-кто (итальянец Giacomo Catenazzi) уже озаботился этой проблемой и в какой-то степени её решил. Встречайте: Linux Kernel Driver Database (LKDDb). Основная цель этого проекта, цитирую: «попытка построения понятной пользователю базы данных устройств и протоколов, известных ядру linux. База данных включает в себя цифровые идентификаторы железа, опции конфигурации ядра, необходимые для включения модуля в ядро, и названия модулей, получающихся на выходе. База составляется на основе исходников ядра и поэтому всегда актуальна»

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

Но нас в первую очередь интересует собственно база данных, lkddb.list – текстовый файл относительно простого для парсинга формата, на основе которого и строится работа программы. Разобраться в формате не составляет никакого труда. Приведу лишь пример записей для неоднократно здесь упоминавшегося драйвера sata_nv:

lkddb module libata "NVIDIA SATA support" :: CONFIG_SCSI_SATA_NV :: drivers/scsi/Kconfig
lkddb module sata_nv "NVIDIA SATA support" :: CONFIG_SCSI_SATA_NV :: drivers/scsi/Kconfig
lkddb pci 10de .... .... .... 0101.. :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de .... .... .... 0104.. :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 0036 .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 003e .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 0054 .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 0055 .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 008e .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 00e3 .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 00ee .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 0266 .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 0267 .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 037e .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c
lkddb pci 10de 037f .... .... ...... :: CONFIG_SCSI_SATA_NV CONFIG_SCSI :: drivers/scsi/sata_nv.c

Все строки в этом файле начинаются с lkddb; далее следует тип записи: pci, usb, ieee1394, eisa, pcmcia и т.д. для устройств, i2c, platform, fs или module для различной информации, связанной с самим ядром. Далее для pci-устройств идут device id, vendor id, device class; затем, через разделитель «::», опция ядра, которую нужно включить для того, чтобы данный модуль скомпилировался, а также опции, от которой зависит данная опция; и, наконец, файл, в котором был найден данный pci id.

lkddb.list может быть сгенерирован с помощью генератора, который, собственно, и является ядром программы. Нужно скачать последнюю версию, распаковать, указать в Makefile путь к исходникам своего ядра; для экономии 500 килобайт трафика можно в этот же каталог скопировать из /usr/share/hwdata файлы pci.ids и usb.ids, после чего выполнить команду make откинуться на спинку кресла и подождать две-три минуты, пока парсятся немаленькие исходники и генерируется БД. Возможно, потребуется еще кое-что подпилить напильником, в зависимости от ситуации.

После дюжины экранов отладочных сообщений будет создан нужный нам файл lkddb.list и, в качестве бонуса, около 35 мегабайт описаний модулей в формате HTML в папке web-lkddb. До создания HCL остаётся полтора шага, не составляющих проблемы для знакомых с основами shell-программирования — из конфигурационного файла ядра нужно извлечь список всех включённых опций и для каждой скопировать информацию из lkddb.list, попутно преобразовав PCI ID устройства (в процессе работы скриптов преобразованного в более читаемую форму) к человекочитаемому виду.

Следите за обновлениями :)

linux - 3 комментария

Linux kernel: определение совместимости драйвера с устройством

29.01.2008

Иногда бывает необходимо определить, поддерживает ли имеющийся драйвер некое устройство. Например, когда планируется установка новой сетевой карты на работающий сервер или запуск специально собранного ядра на сервере с новейшим RAID-контроллером.

Как обычно, имеется несколько способов решения.

Способ первый: списки совместимости железа (HCL, hardware compatible lists).

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

Можно обратиться к Linux Hardware Compatibility HOWTO, но на данный момент (январь 2008) последняя дата обновления этого документа — 22 мая 2007 года, т.е. по меркам развития технологий очень давно. Ещё я не нашёл там ни одного контроллера Serial ATA, которые в последнее время очень распространены. Тем не менее, если интересующее вас устройство присутствует в этом документе, то оно наверняка поддерживается вашим ядром.

Существует несколько десятков сайтов, имеющих своей целью собрать абсолютно всю информацию о совместимости различного железа с Linux. Как правило, информация на таких сайтах добавляется посетителями и имеет формат «такая-то штука заработала под таким-то ядром в такой-то ОС после таких-то манипуляций с modprobe.conf» и может быть неверной или устаревшей. Примером такого сайта может являться Linux on laptops, содержащий список ссылок на статьи и заметки на тему установки различных дистрибутивов Linux на ноутбуки.

Способ второй: ручная проверка PCI IDs.

Вышеописанный метод гугления может лишь дать представление о том, поддерживается ли данное устройство вообще. Ответ на вопрос «поддерживается ли данный девайс данным ядром» можете дать только вы сами :)

Каждое устройство, подключаемое через шину PCI, имеет 8-байтный код, называемый PCI ID (и еще 8 байт, называемые Vendor ID, но нас они не интересуют). Первые четыре байта означают производителя, оставшиеся — собственно код устройства. Существует единый список известных кодов устройств http://pciids.sourceforge.net, используемый, в частности, командой lspci для отображения читабельного писка установленного оборудования (однако факт включения устройства в этот список вовсе не означает, что оно поддерживается Linux’ом :))

Драйвера Linux «подцепляют» железо по его PCI ID; список совместимых с данным драйвером девайсов «зашит» в структуре pci_device_id, Например, в драйвере sata_nv версии 0.09 из ядра 2.6.15 эта структура выглядит таким образом:

static const struct pci_device_id nv_pci_tbl[] = {
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE2 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE3 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE3 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA,PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID<<8, 0xffff00, GENERIC },
{ 0, }
};

Поскольку драйвер sata_nv входит в состав ядра, то константы PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA и т.д. определены в файле /usr/src/linux/include/linux/pci_ids.h. Если же драйвер был скачан с сайта производителя, то необходимые константы могут быть переопределены в коде самого драйвера, grep вам в помощь :) Комбинируя значения этих констант со значением PCI_VENDOR_ID_NVIDIA, определённой в том же pci_ids.h, можно получить полный PCI ID устройства.

Эту же информацию можно извлечь из уже скомпилированного драйвера с помощью команды modinfo sata_nv, которая также выдаст список PCI IDs устройств, поддерживаемых данным драйвером. Есть еще файл /lib/modules/`uname -r`/modules.pcimap, содержащий сводную информацию о том, какие pci ids и vendor ids к какому модулю относятся, но в более подходящем для парсинга формате.Но в случае, если драйвер «вкомпилен» в ядро (например, в конфиге ядра (/usr/src/linux/.config или /proc/config.gz) указано CONFIG_SCSI_SATA_NV=y), то из скомпилированного ядра вытащить этот список очень проблематично . Хотя, наверно, как-то можно. Мне кажется, что проще залезть в исходники, надеясь, что в интересующей вас части они не изменились со времени последней компиляции.

Собственно определение совместимости драйвера с устройством состоит из двух этапов:

  1. выяснение PCI ID данного контроллера. Можно поискать его название, указанное в прилагаемой документации или на чипсете, в файле /usr/share/hwinfo/pci.ids (не забывайте его периодически обновлять с сайта http://pciids.sourceforge.net.) или на сайте производителя устройства. Если устройство уже подключено, то поможет команда lspci -nn
  2. проверка вхождения этого PCI ID в драйвер. Тут можно либо лезть в исходники драйвера, как описано выше, либо воспользоваться командой modinfo driver_name.

Однако следует помнить, что возможна ситуация, когда драйвер подцепляет устройство, но работает с ним некорректно. Тут уж ничего не попишешь, нужно искать решение в другом месте.

Бонус для тех, кто дочитал до этого места. Если у вас есть устройство, при загрузке оно почему-то не подцепляется автоматически и вы не знаете, какой драйвер с ним работает, вам поможет сервис Debian GNU/Linux device driver check page (никогда не устану ссылаться на эту страницу!). Он принимает вывод команды lspci -n и сообщает, какие драйвера подходят для имеющихся устройств. Можно просто указать PCI ID и это сработает.

linux - 4 комментария

Harris’ Lament

20.01.2008

В промежутках между зачётами и экзаменами неспешно тружусь над переводом пары заметок для этого блога. В процессе перевода иногда обнаруживаются удивительные вещи. Так, в Squid FAQ ответ на вопрос «Why is it called Squid?» звучит как «Harris’ Lament says, «All the good ones are taken.» и почти во всех русских переводах (1, 2, 3) эта фраза переведена дословно: «Harris’ Lament говорит – «Все лучшие названия расхватали». Предполагается, что этот Ламент — разработчик Squid’а или что-то около того.

Однако, если поискать как следует, выясняется, что человека с таким именем в природе не существует. В 80-х годах в Америке с большим успехом был показан полицейский сериал под названием «Barney Miller», одного из героев которого, вежливого негра афро-американца, звали Ronald Nathan Harris. Однажды он пытался найти себе хорошую квартиру в Нью-Йорке и, когда его спрашивали об успехах на этом поприще, он удручённо отвечал: «Все хорошие уже заняты…»

Эта фраза стала популярным афоризмом, который известен как «Жалоба Харриса» (Harris’ Lament) и применяется в случаях, когда необходимо описать врождённую нехватку какого-либо ресурса — например, квартир в Нью-Йорке, приличных бойфрендов для нью-йоркских барышень или хороших названий для программ в мире Unix, как в данном случае.

Поэтому правильный перевод вышеупомянутой фразы примерно таков: «Как гласит Жалоба Харриса, «Все хорошие уже заняты».

По материалам Википедии.

Разное - 3 комментария

Постновогоднее ссылкокидательство

09.01.2008

Звёзды расположились таким образом, что мы забыли заплатить за интернет в конце декабря, и до 7 января включительно я не знал, как в винде починить сломавшийся доступ к сети через телефон с помощью Bluetooth (надо было в устройствах включить специальный драйвер для виртуального сетевого интерфейса, используемого для Bluetooth). Поэтому доступ в интернет был только с телефона через Opera Mini, а там особо не развернёшься, даже хвалёный Google Reader мало чем помог (не считая пометки наиболее интересных постов звёздочкой для последующего прочтения). Сегодня с утра, придя на работу, обнаружил 250 непрочитанных сообщений. С этим однозначно надо что-то делать :)

Посему выношу несколько лучших ссылок в этот пост, а остальные mark as read и unsubscribe.

10 советов по оптимизации БД от разработчика высоконагруженной базы данных (по ссылке с opennet, англ.). В оригинале про MS SQL, но большая часть советов универсальна для всех БД.

Руководство по тюнингу TCP стека FreeBSD (по ссылке с opennet, 100 кб pdf, англ.)

Коллекция полезных утилит на Perl. Коллекция статей, руководств и примеров про Perl.

68 свободных электронных книг про GNU/Linux (англ.)

VirtualBox – свободный пакет виртуализации

Сервис Feedjit: виджеты для отображения релевантных и популярных постов

Причины, по которым нельзя использовать rm -rf * и find для очистки /tmp от мусора (англ.) Статья 1996 года, но некоторые идеи не потеряли своей актуальности.

Работа в bash в режиме редактирования vi (англ.)

Изменение размера партиции и раздела в FreeBSD — очень не хватало такого руководства в своё время.
Как заставить работать карточку на чипсете Atheros под FreeBSD

Чуваки собрали ядро 0.01 под GCC4 и запустили его под QEMU

IT-компания, которую ненавидят больше всего. И вовсе даже не Microsoft :) (очередная реклама Asus EEE PC, когда в Россию их завезут уже?!)

Мелкие полезности от Странника

Ссылки - 1 комментарий

Постописательство: лучшие посты

22.12.2007

Наконец подошёл к концу первый тур конкурса постов на тему «самый интересный/полезный сайт 2007 года», в котором я тоже принимаю участие. По правилам конкурса во втором туре необходимо рассказать о нескольких наиболее понравившихся постах. Чем я и занимался последние два вечера :) шутка ли — еще раз прочитать 83 поста и выбрать из них не более десятка лучших! Тем не менее, кое-что отобрал. Заранее прошу прощения у всех, кто не попал в этот список, но конкурс есть конкурс.

Значительная часть присланных на конкурс постов посвящена многочисленным возможностям сервисов Google. Если бы этот конкурс был конкурсом на самый лучший сайт, а не на лучший текст о лучшем сайте, то Google, несомненно, победил бы.

Вторым по популярности сайтом оказался распределённый коллективный ресурс, состоящий из собственных блогов авторов. Они (блоги) заставляли своих несчастных авторов следить за посещаемостью, писать посты, правильно организовывать своё время с целью уделить побольше внимания своему сайтику, разбираться в PHP-программировании и лже-искусстве под названием SEO и всячески способствовали развитию личности своих владельцев. Уважаю, поскольку сам такой. В этой номинации необходимо в первую очередь отметить Александра Мальцева, причём не столько за его пост о Магазете (отличный, кстати, сайт, оставляет очень позитивное впечатление), сколько за его настойчивость в самопиаре :)

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

Теперь по порядку.

Берт, серьёзно пострадавший от Гугла, по всей видимости, подвержен стокгольмскому синдрому. И в другом своём внеконкурсном посте делится способом уменьшения страданий от Google Reader’а.

Ещё про Gmail.

Благодаря посту Александра Мэкаля я познакомился с отличным сервисом укрощения длинных ссылок b23.ru. Не люблю всякие файло- и ссылкообменные штуки, но тут не сдержал своего восторга. Чего стоит самая первая по популярности ссылка! И вторая.

Не могу не отметить текст «Похмельный синдром веба», с призывом оставить суетливый вебдваноль в покое и посетить самый бесполезный сайт. И правильно.

Сайт для гопников с тремя высшими образованиями.. По ссылке, разумеется, не сам сайт, а пост о нём.

Благодаря посту «Radio-T – образование начинающего гика» подсел на подкасты.

Как транслировать всё, что угодно, в RSS. Если бы я был единственным членом жюри, отдал бы первый приз без вопросов. Сам блог примечателен тем, что, несмотря на расположение на народе, является полноценным блогом — с RSS, комментариями, блогроллом и регулярными постами. Подписался. Dan Rastor’у, зачот, что я могу ещё сказать.

О двух потрясающих воображение виртуальных музеях поведали Электрическая кошка и Правда жизни.

Неплохой обзор мобильных сервисов. Которые, кстати, можно использовать, загружая в боковую панель браузера.

Желаю всем удачи!

Ссылки - 5 комментариев

Киберсквоттинг в законе

21.12.2007

Некто Фрэнк Рэдмонд из города Лондона был недоволен тем, как лечили его дочь в лондонской больнице Chelsea and Westminster Hospital NHS Foundation Trust, сайт которой располагается по адресу www.chelwest.nhs.uk. Он создал сайт www.chelwest.com, на котором разместил свои претензии к этой больнице. Больничному начальству это, естественно, не понравилось, и они обратились во Всемирную Организацию Интеллектуальной Собственности (ВОИС, WIPO по-английски) с просьбой вернуть им домен, аргументируя жалобу тем, что слово Chelwest является их общеупотребительным названием и никто не имеет права его использовать, особенно в зоне .com, потому что это может привести к неприятным последствиям (например, затруднением доступа к их официальному сайту тем, кто в нём срочно может нуждаться). Они особо упирали на то, что несколько хостинговых компаний уже удалили со своих серверов предыдущие сайты Фрэнка Рэдмонда. Ну и репутация подмачивается.

Фрэнк отвечал на эти обвинения, что слово «Chelwest» не является ничьим зарегистрированным торговым знаком и каждый может использовать это слово, как ему вздумается; что любой желающий попасть на официальный сайт больницы, очутившись на chelwest.com, сразу же поймёт, что это НЕ официальный сайт и продложит поиск; решающим аргументом оказалось то, что этот сайт не предназначен для извлечения выгоды, а служит исключительно для выражения мнения Фрэнка о больнице.

Специальная комиссия ВОИС внимательно рассмотрела правила разрешения доменных споров применительно к этому случаю и пришла к выводу, что если:
- доменное имя используется только для обоснованной критики владельца торговой марки,
- владелец домена не собирается извлекать из сайта коммерческой выгоды,
- для посетителя «ложного» сайта очевидно, что это не официальный сайт,
- владелец домена не зарегистрировал еще различных доменов на основе этой торговой марки (например, chelwest-online.com, chelwest-london.com и т.д.),
- в случае, если данное доменное имя очевидно для данной марки (например, как в данном случае логично написать www.chelwest.com и уже потом искать сайт больницы в гугле), на сайте указана ссылка на официальный сайт владельца торговой марки;
- на всю почту, предназначенную для настоящего владельца торговой марки, приходит ответ «вы не туда пишете»,
то владелец домена имеет полное право его использовать и высказывать своё мнение. Поскольку данный случай полностью подходит под данные условия, то истцу (т.е. больнице) было отказано в иске и домен остался у Фрэнка Рэдмонда.

Официальная информация об этом деле (англ.)
Новость на zdnet.co.uk (тоже англ.)
Немного на эту тему по-русски

P.S. список самых лучших постов с конкурса «постописательство – 2007″ от ИШ на подходе, ждите :)

Ссылки - 2 комментария

Сервисы Google: неочевидные преимущества

12.12.2007

Этот пост написан в рамках конкурса «Новогоднее постописательство — 2007«.

Близится к концу 2007 год, а значит, пришла пора подводить итоги. Хороший повод написать пару-тройку заметок на тему лучших и худших в этом году :)

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

В этом году я заново открыл для себя сервисы Гугла — Gmail и Google Reader. Гугловской почтой я пытался пользоваться и раньше (предыдущая попытка — 2 года назад, во времена их первых бет), но как-то не пошло в то время. Идеологию неудаления писем, использования меток вместо папок, а также веб-интерфейса вместо оффлайн-клиента надо было еще воспринять, к чему я не был готов, и использовал TheBat! в совокупности с отечественными почтовыми службами. Потом с подачи Лены [info]barbastello завёл себе ящик на гугле, перенаправил туда все важные старые ящики, переподписал все нужные рассылки и теперь пользуюсь только этим сервисом. Из неочевидных достоинств можно отметить прекрасно работающий в lynx HTML-вариант интерфейса. Из очевидных, кроме общеизвестных — отличный клиент для мобильного телефона. Не без недостатков, конечно, но свою основную работу — показывать новые письма и быстро отправлять ответы — этот клиент выполняет на отлично.

Второй по очереди, но номер один по полезности (и, собственно, основной предмет написания этого поста) — Google Reader. К нему я тоже пришёл не сразу. Сначала я долго искал подходящий оффлайн-клиент, основное требование к которому было максимально экономить трафик — не качать каждый раз весь feed целиком, а в обязательном порядке посылать в заголовке if-modified-since. Правильные движки (wordpress в этом отношении, к сожалению, слабоват, но тут выручает feedburner) умеют отвечать на этот заголовок «not modified» и тем самым тоже экономить себе трафик :) Пару лет с переменным успехом пользовался Abilon’ом (после нескольких месяцев работы накопился большой архив фидов и он заглючил; разработчики его забросили, поэтому многочисленные ошибки до сих пор не исправлены), Omea Reader (тянет за собой .net framework и тяжеловат на подъём, как мне показалось). В промежутках пробовал Яндексовскую ленту, но ее неинтуитивный интерфейс меня не впечатлил. Наверно, пользоваться ей всё-таки можно, но надо привыкнуть. В конце концов, наплевав на трафик, остановился на встроенном RSS-агрегаторе Thunderbird.

Наконец (и то после нескольких подходов) начал пользоваться Google Reader’ом. Через пару недель изначально настороженное отношение к очередной онлайн-читалке сменилось восторгом и полным переносом туда всех фидов. Во-первых, понравился удобный двухколоночный интерфейс и логика работы с метками. Во-вторых, также как и у gmail, есть облегчённый вариант без javascript, что позволяет читать новости даже из lynx и с относительно устаревшего мобильного телефона (у меня Sony Ericsson z530i). В-третьих, экономия трафика всё-таки налицо — даже если из собственного агрегатора раз в несколько часов спрашивать, имеются ли обновления у полусотни фидов, трафика уйдёт гораздо больше, чем если просто заходить в Google Reader раз в час и посмотреть, не написал ли кто-нибудь чего-нибудь нового. В-четвёртых, в случае подписки на часто обновляемый фид, содержащий большое количество записей, велик риск потерять часть записей при большом интервале между двумя скачиваниями фида. Чтобы такого не происходило, приходится оставлять агрегатор включенным на длительный период, что чревато перерасходом трафика. Гугл же меняет частоту скачиваний фидов в зависимости от частоты их обновлений, сводя потери к минимуму.

Из прочих достоинств, отличающих Google Reader от его альтернатив:

  • доступный архив сообщений нового потока
  • недавно появившаяся кнопка «Discover», позволяющяя найти потоки, похожие по тематике на фиды, на которые вы уже подписались
  • фирменный поиск по фидам
  • возможность особо отметить понравившиеся новости («add star»)
  • возможность расшарить новость (при этом автоматически создаётся RSS расшаренных новостей, с которым можно сделать всё, что угодно, например, подписаться тем же Reader’ом или добавить этот RSS в блогролл на своём блоге)

И множество других преимуществ, благодаря которым этот сервис становится стандартом в своей нише.

Без рубрики - 13 комментариев

Торговые марки или Как нельзя называть свою программу

11.12.2007

В рабочей беседе всплыл факт, что нельзя употреблять в названии продукта слово sniffer, поскольку «sniffer» — это зарегистрированная торговая марка какой-то западной конторы. Заинтересовался, полез в гугл за подробностями.

Обнаружил, что, во-первых, Sniffer (с большой буквы) — это действительно зарегистрированная торговая марка компании Network Associates, в то время как sniffer с маленькой буквы — общее обозначение программ для перехвата и анализа трафика.

Во-вторых, обнаружил чудесный PDF-документ с исчерпывающим списком торговых марок Network Associates. В мире доменов такое поведение называется киберсквоттинг и карается в лучшем случае общественным порицанием. В оффлайне это, видимо, в порядке вещей.

Итак, нижеследующие слова и словосочетания нельзя использовать в названиях программных продуктов, поскольку они принадлежат вышеупомянутой компании (неполная выборка из документа)

ACTIVE FIREWALL
CERTIFIED NETWORK EXPERT, CNX
CNX CERTIFICATION CERTIFIED NETWORK EXPERT AND DESIGN (очередное масло масляное)
CLEAN-UP, CLEANUP WIZARD
DESIGN (STYLIZED N) (видимо, буква N как-то акцентирована)
DISTRIBUTED SNIFFER SYSTEM
FIRST AID
GMT (они охренели, да)
GUARD DOG
HELPDESK
MAGIC SOLUTIONS (и ещё полдюжины словосочетаний со словом Magic; подозреваю, что сама буква M в Mcafee именно Magic и обозначает)
NET TOOLS
NETSTALKER
NUTS & BOLTS
OIL CHANGE
PRIMESUPPORT
REMOTE DESKTOP
SNIFFER
STALKER (именно поэтому игра называется S.T.A.L.K.E.R, а не Stalker)
TOTAL NETWORK SECURITY
UNINSTALLER
VIRUSSCAN

Конечно, до Microsoft, которая взяла и зарегистрировала торговую марку «окна» по всему миру, им далеко, но зарегистрировать торговую марку, совпадающую с общеупотребительным сокращением GMT — не меньшее свинство, я считаю.

Для сравнения уровня наглости: список зарегистрированных торговых марок Microsoft

MCAFEE®, ACTIVE FIREWALL®, CERTIFIED NETWORK EXPERT®, CNX®, CNX CERTIFICATION CERTIFIED NETWORK EXPERT AND DESIGN®, CLEAN-UP®, CLEANUP WIZARD®, DESIGN (STYLIZED N)®, DISTRIBUTED SNIFFER SYSTEM®, FIRST AID®, GMT®, GUARD DOG®, HELPDESK®, MAGIC SOLUTIONS®, NET TOOLS®, NETSTALKER®, NUTS & BOLTS®, OIL CHANGE®, PRIMESUPPORT®, REMOTE DESKTOP®, SNIFFER®, STALKER®, TOTAL NETWORK SECURITY®, UNINSTALLER®, VIRUSSCAN® – зарегистрированные торговые знаки Network Associates®

Windows® — зарегистрированный торговый знак Microsoft®

work - 0 комментариев

Особенности российского ебизнеса

29.11.2007

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

По моим ощущениям, онлайн-рынок перевозок уже в то время был весьма конкурентный и насыщенный, все крупные ниши были заняты и придумать что-то новое было достаточно сложно. Эти люди, не мудрствуя лукаво, сделали сайт с банальной доской объявлений, а проблему его наполнения в лучших традициях web2.0 переложили на плечи пользователей и конкурентов. Пользователи заполняют сайт путём размещения заявок на перевозки; конкуренты же присылают рассылку с обновлениями своей доски на специально заведённый для этой цели почтовый ящик на mail.ru; эти письма парсятся перловым парсером (use HTML::TreeBuilder и т.д., сам писал :)) и заявки с сайта конкурентов нагло добавляются в базу, тем самым обеспечивая по две-три дюжины новых обновлений в день. Более того, эта же уворованная инфа рассылается подписчикам по email’у.

Этот сайт жив и посейчас, и информация всё еще добавляется моим чудо-скриптом. Вот такой у нас бизнес. Вот такой вот, блин, веб-два-ноль.

work - 2 комментария

Несколько советов по bash-скриптингу

27.11.2007

Tips от Madskull’a: bash, в т.ч.:

  • ожидание запущенных в фоне задач
  • прерывание по таймеру (SIGALRM)
  • параметры в скриптах и функциях
  • работа с массивами
  • перехват прерываний с помощью trap
  • как сделать прогрессбар в bash-скриптах
  • чтение конфигов из скрипта
  • работа со строками без использования внешних утилит типа sed и awk
  • подстановка параметров
  • использование getopts в shell-скриптах
  • специальные переменные, цвета ECHO, спецсимволы
  • краткое описание некоторых полезных утилит

linux, Ссылки - 1 комментарий

Работа с историей команд в bash

26.11.2007

Оригинал: bash tips and tricks

Для непосвящённых, bash — это оболочка по умолчанию во многих дистрибутивах Linux, включая Fedora, Ubuntu, Redhat и т.д. и т.п. Если вы используете ОС, основанную на Linux, есть вероятность, что вы используете именно bash. Поэтому ниже я сделал обзор некоторых часто встречающихся неудобств, а также простых способов их избежать.

1. Забытая история bash.
Если вы открыли терминал и печатаете там команды, потом открыли еще один, немного его поиспользовали, то новый терминал не «вспомнит» ни одной команды, напечатанной в первом. Вдобавок, при закрытии первого терминала второй перезапишет все команды в истории, введённые в первом. Вдвойне досадно!

Это происходит потому, что история bash сохраняется только когда вы закрываете терминал, а не после каждой команды. Чтобы исправить такое поведение, добавьте в ~/.bashrc строки:

shopt -s histappend
PROMPT_COMMAND=`history -a`

Это заставит bash дополнять историю вместо того, чтобы перезаписывать её: каждый раз, когда показывается приглашение командной строки, последняя команда добавляется в историю.

2. Опечатки в названиях каталогов при cd.

Добавьте в ваш .bashrc:

shopt -s cdspell

Теперь небольшие опечатки типа ect вместо etc будут игнорироваться.

3. Дублирующиеся команды в истории bash.

Я часто набираю cd .. много раз подряд, и потом, когда я нажимаю кнопку «вверх», чтобы возвратиться к предыдущим командам, я не хочу, чтобы мне напоминали о моих не слишком элегантных экскурсиях по файловой системе.
Добавьте в .bashrc:

export HISTCONTROL="ignoredups"

Или даже так:

export HISTIGNORE="&:ls:[bf]g:exit"

Это заставит bash игнорировать дупликаты, так же как ls, bg, fg и exit, делая историю чище.

4. Многострочные команды в истории.
Добавьте

shopt -s cmdhist

в .bashrc, тогда bash будет преобразовывать многострочные команды в одну строку для упрощения редактирования.

5. Советы из комментариев.

Нажмите Ctrl+R в bash, начните печатать и вы сможете найти введённую когда-то команду гораздо проще, чем нажимая 300 раз «вверх».
Или используйте

history|grep "foo"

для поиска «foo&qyot; в истории команд.

cd -

переход в предыдущую директорию — полезно, если вы хотите куда-то сходить что-то поменять, а потом быстро вернуться обратно.

Предположим, что нужно выполнить несколько команд подряд с каким-то объектом:

touch file
ls file
echo 1 > file
rm file

Вместо того, чтобы каждый раз набирать file, достаточно нажать «Esc .», и аргумент из предыдущей команды подставится автоматически.

Главный совет.

Почитайте man shopt, найдёте много полезного :)

В заключение.

Вот несколько советов, как сделать историю bash более управляемой. Если у вас есть еще советы, добавляйте их в комментарии к оригинальной статье или сюда.

lifehack, linux - 2 комментария

Изменение цвета фона konsole при выполнении команды sudo

В продолжение темы konsole + dcop.

В konsole есть механизм сохранения сессий (или сеансов, кому как нравится). Сразу после установки имеется несколько предопределённых сеансов: shell, midnight commander, root shell, root midnight commander. Они отличаются друг от друга, во-первых, командой, выполняющейся при запуске (sudo -s, mc или sudo mc), во-вторых, жёлтым цветом фона рутовой консоли — чтобы root не зевал и не написал случайно что-нибудь деструктивное.

Изменение цвета фона рутовой консоли — хорошая идея, однако переключаться в рутовую консоль путём вызова соответствующего сеанса (пусть даже с помощью горячих клавиш) не всегда удобно. Гораздо чаще используется команда sudo. Было бы неплохо менять цвет консоли и при её вызове.

С помощью dcop реализовать это очень просто:

#!/bin/bash
test -z "$KONSOLE_DCOP_SESSION" || dcop $KONSOLE_DCOP_SESSION setSchema BlackOnLightYellow.schema
sudo $*
test -z "$KONSOLE_DCOP_SESSION" || dcop $KONSOLE_DCOP_SESSION setSchema LightPicture.schema

Вместо LightPicture.schema нужно написать свою любимую схему konsole. Скрипт можно сохранить под любым названием (например, sudo.sh) в каталог ~/bin, а в .bashrc назначить alias для sudo:

alias sudo='~/bin/sudo.sh $*'

Теперь при запуске sudo с любыми параметрами (sudo -s, sudo whoami и т.д.) консоль будет менять цвет фона на жёлтый на время выполнения.

P.S. поздновато я DCOP’ом начал проникаться — в KDE4 его заменит D-BUS.

lifehack, linux - 1 комментарий

Задачка про bash для собеседований

22.11.2007

Не выполняя этот код (bash), попробуйте догадаться, что он выдаст:

f() { return 2; } && g() { f || return; } && g || echo $?

Народ несёт пургу

по ссылке от azalio

linux - 2 комментария