среда, 24 октября 2012 г.

First steps in mongoDB

Что такое MongoDB подробно описывать не стану. Упомяну лишь, что это NoSQL документо-ориентированная СУБД.
Вдруг появилась необходимость её использования. В качестве ОС - CentOS:


четверг, 3 мая 2012 г.

После обновления до Gnome 3.4 формы в Opera стали выглядеть странно

После обновления gnome до версии 3.4 input'ы и select'ы в "нестилизованных" формах в opera стали выглядеть довольно странно:



Причиной стала обновлённая Adwaita (используемая по-умолчанию theme) со своими стилями. В новых релизах оперы обещают эту проблему пофиксить.
Сейчас же проблема решается через выставление параметра "Dialog Toolkit" в единицу или в четыре. Т.е. открываем opera:config, в поиске вводим "Dialog Toolkit", выставляем требуемое значение, жмём "Save" и рестартуем оперу.



При значении "1" будет использоваться qt (в том числе и диалоги):

При значении "4" будет использоваться gtk

P.S. Решение подсмотрено здесь.

Update:
Opera обновилась до 11.64, но проблема не пропала. Зато после изменений "Dialog Toolkit" при значении, равном четырём, диалоги похожи на Win98, но при значении, равном двум, используется gtk и нормально отображаются формы на страницах.

четверг, 1 марта 2012 г.

Couchbase из исходников в arch linux

Появилась необходимость поставить couchbase, а так как под arch покетов нет, пришлось собирать из исходников.
Опишу сам процесс чего делал и чего получалось, есть моменты, которые лучше сразу сделать немного иначе, так что использовать статью как руководство получится только после полного прочтения. Итак, начнём.
$ wget http://packages.couchbase.com/releases/1.8.0/couchbase-server_src-1.8.0.tar.gz
$ tar xzf couchbase-server_src-1.8.0.tar.gz
$ cd couchbase-server_src

В папке уже лежит готовый Makefile, но путь для установки в нём прописан явно :(
Начал собирать (собственно собранное приложение сразу будет скопировано/установлено в указанную в makefile папку)
$ sudo make    # при сборке хочет много доступа, пришлось запускать из под sudo

Почти сразу посыпались ошибки об объявленных, но неиспользуемых переменных, при этом в первом месте ошибки использование переменной было внутри if'а, так что теоретически она могла и не использоваться, но просто убрать объявление переменной уже нельзя... Хорошо, в сообщении об ошибке есть намёк '-Werror=unused-but-set-variable', не помню уже как точно пишется, но как раз про объявленное и неиспользуемое. Так как использоваться результат сборки будет не на проде, сильно не заморачиваюсь и просто заменяю ключ на -Wno-error, чтоб warning'и оставались предупреждениями (а не ошибками).
$ sudo grep -Rl 'Werror' * | grep -Ei 'configure|makefile' | while read i; do sudo perl -i.bak -pe 's/-Werror/-Wno-error/g' $i; done

Сразу оговорюсь - постоянно сидеть под root'ом не люблю, а так как привилегий при сборке надо много, то и часть файлов уже доступны только root'у, поэтому дальше будет много sudo

Запускаю собираться дальше, вроде идёт нормально.
Отвалился при сборке memcached, пришлось memcached собирать отдельно. Он в соответствующей папке, так что
$ cd memcached
$ ./configure
$ make

Возможно, надо будет так же подправить -Werror на -Wno-error

Теперь обратно в couchbase-server_src и пробую дальше собрать. Теперь отваливается на том, что не может найти бинарники memcached. Ага, значит видит, что эта часть собрана и заново не начинает компилировать, но найти результат не может. Ну само собой, я же не указал --prefix при сборке memcached и он установился в саму систему, а не в ту папку, где его ищёт "сборщик" couchbase.
Дальше можно попробовать вычистить установленный memcached и собрать его с указанием правильного пути, либо... Я просто скопировал бинарник в папку, где его не мог найти "сборщик".

Опять запускаю sudo make
Теперь вываливается с ошибкой
"erlang not loading native code for module hipe_unified_loader: it was compiled..."
Немного погуглив и попробовав просто запустить erlang понимаю, что проблема в нём. Нахожу фразу "This was introduced in a change to the Erlang VM PKGBUILD for R14B04, which added the -enable-native-libs compile flag". Ясно, удаляю erlang, который поставился из репозитория, ставлю его из AUR. На всякий случай собрал пакет и с этим ключом и без него, установил тот, который был "с ключом".

Теперь наконец-то make доводит своё дело до конца. А я обращаю внимание, что couchbase собрался в /home/george/downloads/couchbase-server_src/install. Да, не самое удачное место для софта. Надо было, на самом деле, для начала попробовать просто скопировать содержимое этой папки куда-нибудь в /usr/share/couchbase и затем поправить все пути в конфигах... Но я (собрал же уже один раз) решил пересобрать всё предварительно изменив путь в makefile'е.

Увы, с ходу всё собираться не захотело и полезли новые ошибки :(
Ладно, решил ставить в /opt/. Распаковал исходники туда, указал в makefile путь /opt/couchbase, изменил -Werror на -Wno-error, запускаю
$ sudo make
Опять не собирается memcached. Не собирается и индивидуально из своей папки, вываливает ошибки типа
mv $(DEPDIR)/example_protocol_la-example_protocol.Tpo $(DEPDIR)/example_protocol_la-example_protocol.Plo
can't stat $(DEPDIR)/example_protocol_la-example_protocol.Tpo, no such file or directory
(пишу по памяти, так что могут быть не точности, но смысл должен быть понятен).

В m4 я не силён, не знаю почему .Tpo переименовываются в .Plo ещё до выполнения этой строчки, так что решаю простым добавлением конструкции
if test ! -f <файл>.Tpo; then cp <файл>.Plo <файл>.Tpo; else :; fi
в memcached/Makefile
Хорошо, что в vim'е макросы записывать просто и добавить такую конструкцию пришлось пару раз, во все остальные места vim добавил её сам.

Пересобирал ещё раз и просто в Makefile заменил строку `am__mv = mv -f` на `am__mv = cp -f`, чтобы он не ругался на отсутствующие файлы...
После этого memcached собрался нормально.
опять sudo make в couchbase-server_src и ошибка
"configure: error: `CPPFLAGS' was not set in the previous run"
Хм. Вижу в самом конце вывода "make[1]: Leaving directory `/opt/libvbucket'"
$ cd libvbucket
$ sudo ./configure --prefix=/opt/couchbase --disable-static --enable-shared --without-docs --no-create --no-recursion       # доп. ключи - это из последнего, что было в stdout перед ошибкой
$ sudo make
$ cd ../
$ sudo make

Дальше аналогичные ошибки для memcachetest и moxi. Решаются таким же образом, ключи для configure так же вываливаются в stdout перед сообщением об ошибке.

couchbase собрался.

UPD: Собрался, но запускаться отказался :( . Буду думать дальше...

четверг, 9 июня 2011 г.

OpenSUSE 11.4 и Samba

После обновления openSUSE до 11.4 столкнулся с неприятной особенностью - samba ни в какую не хочет работать. Настраивал и правкой конфига, и тыканием мышкой в ясте - самба настроена, всё указано правильно, но не работает. Просто не запускается ни в какую и всё тут. Запустив в interactive режиме получил ругань, что permission denied при попытке открыть secrets.tdb и passdb.tdb. И это при том, что самбу запускал из под рута и при debug level 3+ (третий и выше) она честно писала, что работает от имени uid=0.
Оказалось, всё дело в apparmor. Видимо, разработчики/мейнтейнеры openSUSE где-то недоглядели и по дефолтным профилям apparmor ограничивал доступ самбы к этим файлам. По-быстрому объяснить apparmor'у, что к этим файлам обращаться можно, не получилось, поэтому просто снёс его профили, касающиеся самбы. По-дефолту лежат здесь - /etc/apparmor/profiles/extras/.

пятница, 11 февраля 2011 г.

Python - первый блин без "Hello world"

Решил я как-то немного познакомиться с python'ом, но всё никак не было времени на это знакомство. Тут вроде время появилось, но банальные helloworld'ы писать не хотелось, а что-то придумать надо, но никак не идёт... Вспомнилось, что иногда мне нужен простой таймер на компьютере, чтобы я его запустил и он бы сам мне напомнил о себе по окончании отсчёта. Увы, так как я давно работаю только под linux, никаких готовых инструментов тогда не нашлось и приходилось обходиться однострочником на perl'е, который через заданное кол-во секунд запускал проигрывание мелодии, не могу сказать что мне это было сложно или неудобно, но хотелось обычной юзерской простоты - ткнул в пару кнопок мышкой и отсчёт пошёл.
Ну вот вроде все необходимое нашлось (время, желание, идея), пора приступать.
Бегло пробежался по http://python.about.com/od/gettingstarted/u/Basic-Python.htm. Потом изучил контент ещё по паре ссылок услужливо предложенных гуглом (сейчас уже не вспомню по каким). Вроде всё понятно, особо ничего сложного нет.

Убедился, что python и pygtk у меня установлен. Можно начинать пытаться что-то кодить. :)

Идея прогаммы простая: появляется окно, вводим время до окончания отсчёта, жмём "старт" и, когда таймер дойдёт до нуля, программа нам об этом должна сообщить.

На деле всё оказалось и сложнее и легче одновременно.
В пакет pygtk входит замечательная программка pygtk-demo, которая предоставляет набор разных небольших демок, описание к ним и исходники на python'е. Демок для первого знакомства вполне достаточно и писались они, скорее всего, разными людьми, так что подход к похожим вещам в них разный, что будет полезно новичку для ознакомления с разными стилями...
Так что в результате всё свелось к изучению готового кода и написанию своего с подглядыванием в pygtk-demo.

Так как после опыта кодинга на python'е прошло уже достаточно времени и я уже ничего не помню )) + дабы не усложнять и не удлинять описание, сразу перейдём к результату.

 Программка получилась достаточно простая, не затейливая, но вполне справляющаяся со своей функцией, ради которой она и писалась.
Выглядит так:
Сообщает о себя вылезанием на передний план и выдачей дополнительного окна с сообщением об оконченном отсчёте.
Думал добавить звуковое сопровождение, но оказалось что незаметно подкралось утро, хотя я и садился за это дело буквально на часик перед сном :), поэтому дальнейшее ковыряние оставил на потом. Собственно поэтому и пишу, что написание программки оказалось сложнее - время пролетело совсем незаметно, в результате на это первое знакомство ушло несколько часов, которые я вполне мог бы отсыпаться.
Ну и, собственно, получившийся код: прямая ссылка, либо через сокращалку http://goo.gl/h6Bia

среда, 9 февраля 2011 г.

"Flash block" в Opera

Блокировку флеша в опере можно включить кроме описанного ранее способа, ещё и простой галочкой в настройках самой оперы: