05 июня 2008

Подчёркивания и красота

Всегда считал штуки типа __method__ в языках уродством, а частоту их использования - параметром, обратно пропорциональным общей красоте языка. Под красотой я тут понимаю и дизайн в т.ч. Ведь если это способ обзывания методов или особо важных переменных - есть пространства имён. Если это кейворд - нафига вообще эти крысиные хвостики, это уже кейворд...
Смотрю сейчас в БД - а там половина хранимых процедур хвостатая...

04 июня 2008

Google Reader, ещё -2 в карму

Недавно заметил, что у гугльридера ещё одно странное появилось, странное заключается в том, что Starred && Shared Items, если их застаррить или зашарить в Extended View, не отмечаются прочитанными при прокрутке. Страшно раздражает, дополняет мой список недостатков Google Reader.
Ещё одна не совсем понятная штука эти новые заметочки, которые "Share with note". Все вокруг сразу стали про какую-то социальность говорить. Нееет, вот если бы с помощью этого можно было обсуждать новости, и с каждой новой заметкой новость бы всплывала и можно было бы ответить на комментарий - вот это была бы социальность. А так - фигня какая-то.

03 июня 2008

gPodder и я в интернетах

Вот мы всё-таки пересеклись с Рахимом ака freetonik и он меня немножко поспрашивал, а я ему немного поотвечал про gPodder. Теперь меня ещё и в лицо знают на хабре Кстати, можете клюнуть в карму меня и его. Заодно можете подписаться на его замечательный блог о подкастинге.
Ждём-с несвежих помидоров.

01 июня 2008

Fucking nigga!

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

30 мая 2008

Opera && Gears

Opera extends Gears support
Вот прямо так и вижу, как благодаря этому наконец-то стану гугльридер читать в дороге...

27 мая 2008

Снова про кривизну мира.

Вот однажды привычно плевал ядом в файерфокс, а сегодня такую же картинку на том же месте мне выдал вебкит.

21 мая 2008

VerveEarth

Вот однажды SolarWind писал про VerveEarth, да и давно читаемый StraNNicK уже там.
А сегодня мне по этому поводу захотелось воскликнуть словами старого советского анекдота: "Рабинович! Я слышал, вы в партию вступили!" Ибо свалилось мне в ящик письмо с предложением вступить тоже и чудесным футером:

*This message is an unsolicited request that you join VerveEarth.com. Verveearth will only contact you at this email once in this regard. You can opt-out of future communications from VerveEarth by clicking the following link:

и ссылкой для отписки.
В связи с чем сразу несколько поводов закипеть.
1. Это уже спам.
2. Нафига мне ещё один большой брат.
3. Мой блог вообще не имеет никакого отношения к своему и моему географическому расположению.
4. Я чёртов мизантроп.
Так что вертел видал я в гробу этаких непрошенных стартаперов.

15 мая 2008

Консольности

Нашёл тут в собственных Starred Items ссылочку на пост про лучшие версии любимых консольных тулз для nix. От двух радостно визжа пускаю пузыри, всем остальным предпочитаю что-то другое.


ack
Даёшь рефакторинг! Идеальный вариант grep'а применительно к исходникам. Игнорирует версии, временные файлы, (не) видит файлы определённого языка (вроде все языки, на которых я пишу, покрыты). Совместим с грепом. Слов не хватает, такая прелесть.

htop
Опять радость. Сегодня по дороге слушал подкаст "L-talks"(да, вас слушают до конца, хотя в третий раз тематика этого опроса приелась), в котором упоминали про выход новой версии. Пользуюсь им очень давно, наконец-то вернули переключение номера отправляемого сигнала с цифровой клавиатуры, теперь послать kill -9 снова стало просто и быстро. В целом удобнее, нагляднее, лучше.

String!=Array и уникальность

Где-то наткнулся на предложение элегантно решить на любимом ЯП задачу подсчитать количество уникальных символов в строке.
На руби это вылилось в одну строку, хотя и сомнительную:

'asdasdadsadasdaffw'.split('').uniq.size

Сомнителен способ разбиения строки в массив. Ведь это поиск и только потом разделение. Стандартный метод to_a запихивает всю строку в один элемент массива (что довольно странно согласуется со способом адресации элементов строки подобно массивам, например str[5]). Можно итерироваться по строке, как по массиву, и складывать букавы во временный массив и считать, но бережный к кодировкам метод each_char есть только в 1.9 версии.
Больше всего удивляет именно to_a. Наводит на мысли об отсутствии единого дизайна. Или дыру в моей голове.

12 мая 2008

Мужикальная пауза

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

Awk: панк
С: классический хард-рок
C++: heavy-metal
Ruby: брит-поп, nu-metal
Shell: русский рок

06 мая 2008

midori 0.18

Тихо и незаметно обновился браузер midori до версии 0.18, что делает меня невероятно счастливым, гладким и шелковистым, и вот почему.
Midori - самый простой и идейно правильный способ использовать движок webkit на Linux с минимумом зависимостей. Никакого гнома, как в случае с эпифани или толстой библиотеки, как с Qt 4.4. С другой стороны большой минус - проект сырой и пестрит недоделками. Так вот в версии 0.18 закрыли самую раздражающую меня - размер шрифта теперь можно менять.
А с чего такая страсть к webkit'у? Потому что это единственный движок, который правильно и быстро умеет показывать Google Reader. Будем честны - Firefox - никудышный и медленный сам по себе браузер, умеющий тормозить на ровном месте, Опера, хоть и быстра и точна в рендеринге, на Google Reader смачно садится в лужу по обоим параметрам. Так что midori - идеальный браузер-для-Google.
Ждём поддержки куков и (proxy|cache). Но это уже удобства.

03 мая 2008

Смените ваш Firefox на браузер...

Вот тут почти вышла Qt4.4, и в changelog'е тролтековцы льют бальзам на моё сердце:


**********************
* A NOTE ON BROWSERS *
**********************

Please note that Firefox 2.0.0.13 does not display significant portions of
this page. Please use IE, Opera or Safari to view this URL instead.

Грамотность мата

Хорошо как сказано, чётко и по делу. Только не восклицание, а междометие это называется.

25 апреля 2008

nxfree && nxclient

Замечательно. При включении USE флага ствится клиент nxclient, который блокирует сервер. Первый раз вижу такой бред:

[0:0]init.d> E -av nxserver-freenx
These are the packages that would be merged, in order:

Calculating dependencies... done!
.....
[ebuild R ] net-misc/nxserver-freenx-0.7.2-r2 USE="arts nxclient* -cups -esd" 0 kB
[ebuild N ] net-misc/nxclient-3.2.0 3,773 kB
[blocks B ] net-misc/nxclient (is blocking net-misc/nxserver-freenx-0.7.2-r2

Что-то не то творится в датском королевстве. Хорошо хоть, на машине, на которой предполагается запускать клиента, стоит убунту.

22 апреля 2008

Udev usb-flash automount

Организовал монтирование флешек с помощью udev + /etc/fstab. Причин для такого подхода несколько:
1. Ужасный экспириенс от демонов автомонтирования в suse (и ещё более ужасный - от mandriva)
2. Любовь к юниксвею и бритве Оккама
3. Особенности опций mount (8)
4. Я отставший от жизни маргинал и не знаю, как это делается в правильных остальных дистрибутивах
Реализуется всё один правилом для udev:


1 kernel=="sd[a-z]", name="%k", symlink+="usb%m", group="users"
2 action=="add", kernel=="sd[a-z][0-9]", symlink+="usb%n", group="users", name="%k"
3 action=="add", kernel=="sd[a-z][0-9]", run+="/bin/mkdir -p /mnt/usb%n"
4 action=="add", kernel=="sd[a-z][0-9]", run+="/bin/sed -i '$a\/dev/%k /mnt/usb%n vfat rw,noauto,noexec,nodev,noatime,users,iocharset=koi8-r,codepage=866,uid=1000,gid=100 0 0' /etc/fstab"
5 action=="add", kernel=="sd[a-z][0-9]", run+="/bin/mount /dev/%k"
6
7 action=="remove", kernel=="sd[a-z][0-9]", run+="/bin/umount -l /dev/%k"
8 action=="remove", kernel=="sd[a-z][0-9]", run+="/bin/rmdir /mnt/usb%n"
9 action=="remove", kernel=="sd[a-z][0-9]", run+="/bin/sed -i '/\/dev\/%k.*/d' /etc/fstab"

идея которого проста - при появлении устройства создавать для него строку в /etc/fstab (потому что только так можно заюзать опцию users, позволяющую омонтировать устройство кому угодно, а не только руту, от имени которого оно будет смонтировано udev'ом) и монтировать, при извлечении - удалять строку.
Юзабельность - отличная. Само монтируется, при наличии нормального DE можно добиться создания ярлычков и открытия окон, легко отмонтируется (из трея например штуками типа kwikdisk).

Пугливый питон

File "/usr/lib/python2.5/encodings/koi8_r.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position 19: character maps to

Знакомо? А всё потому, что какой-то имбецил решил, будто мне, как пользователю, будет очень приятно, если программа, автор которой не подозревает о существовании кодировок, отличных от utf8, будет валиться из-за того, что стандартный модуль написан по принципу юнит-теста "Fail first".
А вот ежели заменить в этом пресловутом koi8_r.py errors на 'ignore' (то есть независимо от того, как предполагает это делать разработчик, игнорировать все ошибки), то всё работает (грязный хак, ибо накипело). "Выполняется любой ценой", что и есть, мать их, правильное поведение для пользовательского приложения.
Вот представим себе ушастого, вчера оторвавшегося от подола матушки-винды, пользователя. Запускает он программу, а там такое. Плюнул, ушёл. Или полез докапываться до истины, написал разработчику. Тот ни в зуб ногой, типа моя твоя не понимайт. И он таки прав, у него такая ситуация принципиально не возникает, потому что он, например, говорит на iso-8859-1. Плюнул, ушёл.
Ненавижуидиотов.

16 апреля 2008

Про GIMP

Второй раз уже в ридере пробегает новость (вторая - вот эта, первую уже потерял) заставляющая вспомнить байку от sdfgh153:

Жена недавно огорошила. Показывает мне две фотки, и спрашивает - мне пойдёт такая причёска? Присмотрелся - видно, что это оригинал и концепт, но отредактировано чистенько так. Спрашиваю - как сделала? А она мне на иконку GIMP показывает - в этом, мол, нарисовала на мах.

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

Сайт для расширения сознания

Категорически пропустив торжественный вынос тела (чтобы низко не летало), сообщаю вам пренеприятнейшее известие: запущен defun.ru. Памятуя о том, что даже мимолётный трёп в джаббере с одним из основателей расширил моё сознание настолько, что оно ускорило один из моих прототипов в 3500 раз, - настоятельно рекоммендую.
Расширивать и углубливать!

03 апреля 2008

Я не люблю Google Reader за

Про преимущества гугльридера понаписано немало, про недостатки молчат почему-то. А переодически возникающие раздражения забываются, а осадочек остаётся. Так вот чтобы не забыть и, возможно, как-то побороть, напишу про то, что мне не нравится в Google Reader.
Чертовски медленный. Достаточно быстро он работает только в webkit based браузерах, и, с большой натяжкой, в последних публичных бетах огнелиса(в котором переодически отваливаются кейбиндинги). Это для меня огромный минус, ибо для меня http=opera.
Отсутствуют фильтры. Из-за этого некоторые ленты читать невозможно, ибо информационный overhead, который ничем не отсекается. Сторонние сервисы фильтрации либо убоги, либо не работают с кириллицей. Or both. Довольно странно, с учётом того, что в rss используется utf.
Дубликаты. Есть блоги, есть планеты блогов, есть непустое пересечение блогов и планет. Отписаться от чего-то одного тоже нельзя, ибо перекрываются не всегда полностью. Например, из этого блога только часть постов уходит в планету Runix (посты с тэгом linux). Человек, читающий и планету и меня мои посты с тэгом linux будет видеть дважды. Или даже трижды, с учётом следующего пункта.
Shareflood. Друзья расшаривают посты, которые ты читаешь и сам. Самый яркий пример - bash.org.ru.

02 апреля 2008

Запросы. Хранимые процедуры. Производительность.

Пост сквозь спички в глазах, потому сумбурный.
В ходе эксперимента установил, что запросы (на чистом sql) выполняются немного медленнее, чем хранимые процедуры.
Есть запрос, есть хранимая процедура, которая в цикле возвращает результаты того же запроса построчно (RETURN NEXT). Запрос выполняется за 75-85 мс с вероятностью 75% (приблизительно), процедура - 55-75 мс. К чему бы это?
Ладно, если уж пишется спагетти-код, то на эту мелочь можно и закрыть глаза. Интереснее следующее - первое выполнение запроса занимает около 450 мс, что закономерно, ибо составляется план выполнения запроса. При создании процедуры план (как я понимаю) сохраняется вместе с ней. Вопрос в том, насколько часто при использовании чистого запроса будет составляться его план? Если используется много чистых запросов? Много серверов приложений?