kdebindings и ruby1.9

Злосчастное обновление ruby до 1.9 сломало не только watir, но и мои плазмоиды.

Полдня провёл в попытках разобраться с ситуацией – при загрузке rubygems вываливается трэйс, смысл которого в:
undefined method `synchronize’ for #<Mutex:0xab1cd2> .

Нашёл несколько сообщений с описываемой проблемой «встроенного ruby» , но решения по всей видимости нету.

Поэтому пришлось установить «старый» ruby и собрать kdebindings с ним:

tar -zxf kdebindings-*.tgz
cd kdebindings-*
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_KROSSRUBY=off -DENABLE_PYKDE4=off -DRUBY_INCLUDE_PATH=/opt/ruby4kde/lib/ruby/1.8/i686-linux/ -DRUBY_LIBRARY=/opt/ruby4kde/lib/libruby.so -DRUBY_EXECUTABLE=/opt/ruby4kde/bin/ruby ..
make && make install

watir и ruby1.9

В системе обновился ruby до 1.9 и после переустановки нужных gem-ов ВНЕЗАПНО обнаружилось, что watir не грузится.

/usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices/arglist-strategies.rb:152: warning: else without rescue is useless
/usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices.rb:1:in `require’: /usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices/arglist-strategies.rb:148: syntax error, unexpected ‘:’, expecting keyword_then or ‘,’ or ‘;’ or ‘\n’ (SyntaxError)
when 0: # This is not considered an error because another source

Решить «проблему» удалось редактированием нескольких файлов в /usr/lib/ruby/gems/1.9.1/gems/user-choices-1.1.6/lib/user-choices/ – в arglist-stragergies.rb, conversions.rb и sources.rb необходимо все конструкции вида when XXXX : заменить на when XXXX then

10.12.09  |  ,  | 3 comments

Unknown table engine ‘InnoDB’

Обновление mysql до 5.1 вылилось в такое вот сообщение.

Выполнение mysql -uroot -e”show engines” подтвердило – действительно unknown.

После разных пересборок, шаманств и плясок с бубном решение всё-таки нашлось – оказывается innodb теперь плагин и его надо загружать. Для чего необходимо добавить в строку запуска mysqld следующие параметры:

–plugin-load=innodb=ha_innodb.so;innodb_trx=ha_innodb.so;innodb_locks=ha_innodb.so;innodb_lock_waits=ha_innodb.so;innodb_cmp=ha_innodb.so;innodb_cmp_reset=ha_innodb.so;innodb_cmpmem=ha_innodb.so;innodb_cmpmem_reset=ha_innodb.so

Требуется регистрация

В последнее время пришлось несколько раз столкнуться с интернет-магазинами. Всякая мелочь (а приятно) и вот что хотелось бы “выхлопнуть” всем, с позволения сказать, разработчикам этих, с позволения сказать, сайтов…

Конечно хочется сказать, чтобы убили себя об встречный КаМАЗ Хочется заставить их попробовать купить в своих магазинах что-нибудь. Помучайтесь, гады!
Представь себя, неуважаемый разработчик, в супермаркете. Где тебе надо с полной тележкой всякой всячины выстоять получасовую очередь на регистрацию. Через полчаса твою тележку отнимут. И лишь потом ты снова насобираешь продукты и сможешь пойти на кассу. Весело? Абсурд?

Так за каким, прости, мужским половым ты требуешь от меня РЕГИСТРАЦИИ? Почему я должен ждать дурацкое подтверждение полчаса? Почему моя корзина снова ПУСТА?!?

Спроси у меня телефон для связи и извести продажную женщину(мужчину) о новом заказе и мы расстанемся друзьями. Зачем тебе ЗАРЕГИСТРИРОВАННЫЙ покупатель, который никогда к тебе больше не вернётся? Нравится мастурбировать на мои контактные данные? Сохрани их к себе, вместе с оформленным заказом, делай с ними всё что захочешь, но потом…

P.S.

Всё описанное не про какой-то конкретный магазин – они ВСЕ такие. За очень редким, но к счастью существующим исключением. Первое правило маркетинга по-русски – “Клиент прежде всего урод”…

UPDATE: ещё один пост ненависти с более широким перечнем претензий.

08.09.09  |   | стань первым

IE8 и currentStyle

Новость одной строкой… Когда-то я рассказал как добавить border-spacing для IE используя свойство currentStyle.

Вчера, как многие знают, вышел IE8.Собственно на этом можно было бы многозначительно пост закончить…

В общем в IE8 более этот трюк не работает. В currentStyle не попадают неизвестные браузеру свойства. Изящного решения пока не нашёл – если уж пользовались им, то просто замените непонятные буквы в css на cellSpacing = <число> вместо вычислений, которые были раньше…

Update а вот переводная статья о других особенностях IE8

20.03.09  |  , ,  | стань первым

cdrom в virtualbox

Если вдруг у вас тоже случится такая напасть как пустой список устройств при выборе CD/DVD-ROM в свойствах виртуальной машины, просто остановите машину (если она всё ещё запущена), откройте xml-конфиг (предположительно ~/.VirtualBox/Machines/${PCNAME}/${PCNAME}.xml), найдите в нём строку <DVDDrive passthrough=”false” /> и замените на

<DVDDrive passthrough=”true”>
<HostDrive src=”/dev/hdc“/>
</DVDDrive>

Разумеется устройство вы должны указать своё, а не моё ;o)

P.S.

Seamless mode с VirtualBox просто восхитителен!

ты не один

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

В рамках работ по выводу одного “неповоротливого асфальтоукладчика” на земную орбиту были проведены ряд его модернизаций. Испытания на тестовом полигоне показали что машина стала ездить на порядок быстрее и было решено доработки включить в работающий прототип(вроде и не первая космическая, но уже есть чем гордиться!). Но на первом же серьёзном показе зверь-машина с чудо{вищным} грохотом рассыпалась у всех на глазах и я сел в лужу…

А теперь тоже самое, но по-русски, с выражением.
Имеются ряд весьма тяжёлых для веба запросов к БД, результат которых условно не меняется в течении небольшого промежутка времени. Кеширование промежуточных результатов в самой БД нагрузку сняло на СУБД, но скрипты продолжали исправно тягать данные и это порой занимало внушительное время. Было решено результаты эти кешировать на стороне веб-сервера. Как хранилище был использован apc.

Первоначальный вариант выглядел примерно так:

if (!$data = cache_get($key)) {
   $data = data_from_db();
   cache_set($key,$data,$expire_time)
}

Без излишеств, просто и со вкусом. Но позже выснилось что “всё не так просто” и в зависимости от некоторых космических характеристик и результатов выборки из базы будет меняется ещё одна переменная (меняется переменная… ого!).

if (!$data = cache_get($key)) {
   $data = data_from_db();
   cache_set($key,$data,$expire_time);
   $other_data = some_function($data,$env);
   cache_set($other_key,$other_data,$expire_time);
} else {
   $other_data = cache_get($other_key);
}

Аляповато, но, чёрт возьми, работает…
Работало…
Должно было по идее работать…
Но, почему-то оказавшись на боевом, изрядно нагруженном, сервере это не сработало. Вернее это работало…, но не всё время… По истечении $expire_time периодически пропадали данные для $other_key. При отключении и/или очистке кеша работоспособность восстанавливалась… Кто виноват? Что делать? Кто за всё это ответит?!? Пришлось срочно пошевелить опилками.

Как мы все наверное догадываемся – реальный сервер обслуживает нереально много клиентов, причём не по очереди. И нет совершенно никаких гарантий на то, что между записью $key и $other_key не встрянет какой-либо маленький, но шустрый процесс (хотя нам это и не особо страшно), так же нет никаких оснований полагать что между выборкой $key и $other_key кто-то умный и большой не очистит кеш (целиком, или только $other_key – в данном эпизоде это не имеет значения).
Оснований не было, но я был почему-то твёрдо уверен, что “это если и происходит, то с кем-то другим”. С пониманием проблемы конечно же пришло и простое решение, но ошибка, согласитесь, совсем не тривиальная.

Так что мораль сей басни: помни – ты не один!

23.09.08  |   | стань первым