среда, 25 ноября 2009 г.

Разрешение экрана в virtualbox без guest additions

Я пользуюсь virtualbox с убунтой для разработки. По какой-то причине установка guest additions заставляла видеодрайвер работать медленно и странно. Без этих дополнений не устанавливался родной размер ноутбучного экрана для гостевой ОС, приходилось работать "в окошке". Наконец, я нашёл способ это исправить:


oleg@devel:~$ xrandr
Screen 0: minimum 64 x 64, current 1024 x 768, maximum 32000 x 32000
VBOX1 connected 1024x768+0+0 0mm x 0mm
1360x768 59.8
1152x864 60.0
1024x768 60.0*
800x600 60.3
640x480 59.9

oleg@devel:~$ xrandr --newmode my_mode 83.46 1280 1344 1480 1680 800 801 804 828 -hsync +vsync
oleg@devel:~$ xrandr --addmode VBOX1 my_mode


После чего иксы мигают, а в диалоге Screen resolution появляется искомый размер 1280x800.

воскресенье, 20 сентября 2009 г.

Hoptoad + redmine

Во-первых, есть отличный баг-трекер/вики/браузер исходников redmine. Он почти так же крут, как google code, но в отличие от него можно поставить на свой сервер и никому не показывать. Он на рельсе, так что "свой сервер" должен рельсу поддерживать.

А раз уж у вас есть свой сервер с рельсой, прикольно сделать чтобы все exception вашего веб-приложения сами собой приходили в виде issue вам на трекер. Для этого люди придумали hoptoad и его интеграцию с redmine.

1. Гуглим redmine hoptoad, ставим на redmine соответствующий плагин, настраиваем как там сказано (сгенерировать и записать API key).

2. Добавляем в редмайне в общих настройках новый трекер (рядом с "ошибка", "улучшение", "поддержка" в моем русском варианте я добавил "Exception"). Добавляем этот новый трекер в ваш проект на редмайне (вы же его уже создали?) - там галка внизу.

3. Теперь ставим плагин redmine_notifier на ваше приложение (в котором мы ловим баги). В /config/initializers/hoptoad.rb пишем примерно так:

HoptoadNotifier.configure do |config|
config.api_key = {
:project => 'my_project', # id проекта в редмайне
:tracker => 'Exception', # созданный специально для хоптоада трекер
:api_key => 'ZgNIolfoWDTKQTwDX5qP', # сгенерированный api key
:category => 'Development', # или что угодно
:assigned_to => 'oleg', # кому назначить задание
:priority => 5 # высокий
}.to_yaml

config.host = '...'
config.port = 80 # или где у вас там
config.secure = false
end


4. Тестируем все, запустив
rake hoptoad:test RAILS_ENV=production
- видим новый issue. Ура!

воскресенье, 22 марта 2009 г.

Оптимизация ubuntu

Начитавшись всяких статей, полез совершенствовать линукс. Убил одну убунту и три дня времени. Ниже читаем, чего не надо делать:)

Вот статья, которой я руководствовался: ускоряем debian. Так как убунта это дебиан, подходит.

1. Пересборка ядра. Само по себе не очень нужная новичку вещь, но без него не работает пункт 2 - переход на ext4. Ядро 2.6.28 скачал с kernel.org, маленько сконфигурил (собственно поддержку ext4), собрал, поставил, увидел что нет wifi адаптера, загрузился со старого, еще раз сконфигурил, собрал, готово.
При попытках лезть глубже и отключать ненужное - что-то слетело, так что пока оставил это веселое занятие.

2. Переход на ext4. Тут всё по инструкции. Откатить раздел обратно в ext3 не удается, так что с ядром без поддержки ext4 - бессмысленно. Ну и не забыть оставить /boot отдельным ext2 разделом.

3. Переход на apt-build. Незачёт. Если сборка ядра - это пара часов и пара гигабайт, то apt-build world не отработал за сутки и съел семь гигов на исходники и компиляцию, после чего был уничтожен. Так что из убунты генту не получается. И слава богу: установить любую программу за секунды из репозитория без ползанья по интернету, скачивания, инсталляции - один из главных плюсов линукса с вменяемым менеджером пакетов.

4. upstart вместо init. Поставить поставил, но конфигурацию пока отложил.

Итог: немного опыта:)

среда, 4 марта 2009 г.

Centos

Может, этот дистр и хорош для серверов с точки зрения безопасности или еще чего-то, но работать довольно неудобно. Во-первых, apt и deb лучше yum и rpm (имхо), ко вторым надо как-то вручную дописывать репозитории, почему всего и сразу нет в главном? И почему там руби, к примеру, 1.8.5, хотя уже сто лет как стабилен 1.8.6?

Во-вторых, у рута почему-то /sbin и /usr/sbin не в $PATH - мелочи, а неприятно.

пятница, 20 февраля 2009 г.

Сохраняем пароль от веб-морды д-линка в firefox

Мне давно не нравилось, что некоторые устройства d-link с веб-интерфейсом имеют слишком сложную страницу входа — как результат, фаерфокс не сохраняет пароль, вот тут:
Происходит это потому, что вместо семантически верного submit тут стоит button с каким-то навороченным джаваскриптом и момент сабмита, когда фаерфокс предлагает сохранить пароль, он почему-то пропускает. Что делать? Да подправить страницу чтобы в ней был сабмит, например, с помощью firebug:

Нажимаем на новую кнопочку — и вуаля, предложение "вы хотите сохранить пароль?"

вторник, 13 января 2009 г.

xserver на windows

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



Слева внизу: кнопка "пуск". Справа внизу: видно запущенный Xming. Слева вверху: окно запущенного приложения.

среда, 26 ноября 2008 г.

Просмотр методов класса в ruby

Любой руби-класс наследуется от Object и умеет отвечать на запрос "methods" выдавая список своих методов. Я часто использую такой список при отладке. Однако, он сильно замусорен методами самого Object:

>> Object.new.methods
=> ["inspect", "to_yaml_style", "to_query", "require_or_load", "tap", "silence_stderr", "stubba_object", "clone", "to_matcher", "copy_instance_variables_from", "decode64", "public_methods", "__send__", "object_id", "instance_variable_defined?", "require_library_or_gem", "equal?", "freeze", "daemonize", "extend", "subclasses_of", "debugger", "send", "methods", "to_yaml_properties", "acts_like?", "blank?", "silence_stream", "to_json", "hash", "decode_b", "method_exists?", "dup", "to_enum", "dclone", "instance_variables", "eql?", "reset_mocha", "instance_eval", "id", "returning", "breakpoint", "singleton_methods", "load", "taint", "unloadable", "send!", "duplicable?", "stubs", "instance_variable_get", "frozen?", "enum_for", "display", "instance_of?", "method", "to_a", "__is_a__", "stubba_method", "`", "instance_exec", "type", "instance_values", "require_dependency", "protected_methods", "==", "suppress", "require", "===", "with_options", "instance_variable_set", "respond_to?", "kind_of?", "remove_subclasses_of", "extended_by", "expects", "to_s", "taguri", "gem", "silence_warnings", "enable_warnings", "to_param", "class", "encode64", "require_association", "instance_variable_names", "private_methods", "=~", "tainted?", "__id__", "taguri=", "untaint", "nil?", "mocha_inspect", "b64encode", "mocha", "is_a?", "to_yaml", "extend_with_included_modules_from", "__metaclass__"]


Найдите десять отличий (мне захотелось узнать что умеет класс Exception):

>> Exception.new.methods
=> ["inspect", "to_yaml_style", "to_query", "require_or_load", "tap", "silence_stderr", "stubba_object", "clone", "to_matcher", "copy_instance_variables_from", "decode64", "copy_blame!", "public_methods", "__send__", "object_id", "instance_variable_defined?", "require_library_or_gem", "equal?", "freeze", "daemonize", "extend", "subclasses_of", "debugger", "send", "methods", "to_yaml_properties", "acts_like?", "blank?", "silence_stream", "exception", "to_json", "hash", "decode_b", "framework_backtrace", "method_exists?", "dup", "to_enum", "dclone", "blame_file!", "instance_variables", "eql?", "reset_mocha", "id", "instance_eval", "breakpoint", "clean_backtrace", "returning", "singleton_methods", "message", "load", "taint", "unloadable", "send!", "to_str", "duplicable?", "stubs", "instance_variable_get", "frozen?", "enum_for", "display", "instance_of?", "clean_message", "method", "to_a", "blamed_files", "__is_a__", "stubba_method", "`", "instance_exec", "type", "instance_values", "application_backtrace", "require_dependency", "protected_methods", "==", "suppress", "backtrace", "require", "===", "with_options", "instance_variable_set", "respond_to?", "kind_of?", "remove_subclasses_of", "extended_by", "expects", "taguri", "describe_blame", "to_s", "gem", "silence_warnings", "enable_warnings", "to_param", "class", "encode64", "require_association", "instance_variable_names", "private_methods", "=~", "tainted?", "__id__", "taguri=", "set_backtrace", "untaint", "nil?", "mocha_inspect", "b64encode", "mocha", "is_a?", "to_yaml", "extend_with_included_modules_from", "__metaclass__"]


А теперь вспомним, что массивы руби перегружают оператор вычитания:
>> Exception.new.methods - Object.methods
=> ["copy_blame!", "exception", "framework_backtrace", "blame_file!", "clean_backtrace", "message", "to_str", "clean_message", "blamed_files", "application_backtrace", "backtrace", "describe_blame", "set_backtrace"]


Ну как, удобнее? :)

Я использовал Object.methods, а не Object.new.methods, потому что Object.methods это методы экземпляра объекта Class... который сам унаследован от Object.

суббота, 22 ноября 2008 г.

Экономим экранное пространство в firefox

Если вам жалко тратить половину экрана на бесполезные панельки, вот идея про закладки:



было



стало


Можно убрать или по крайней мере сильно укоротить названия ссылок на панельке фаерфокса (по умолчанию туда пишется title страницы). Непривычные иконки можно оставить с подписями.

Ну и можно поискать тем оформления firefox поменьше размером, например whitehart.

P.S. Изобретателей стандарта анимированных favicon (в третьем фаерфоксе можно использовать гифки) поубивал бы. Только там баннеров не хватало.

среда, 19 ноября 2008 г.

Перенос ubuntu с wubi-установки на реальный раздел диска

Убунтовский инсталлятор wubi честно предупреждает о (немногочисленных) недостатках такой установки: чуть замедленные дисковые операции и, главное, невозможность использования спящего режима. Добавлю к этому отказ грузиться если хост-система (windows) завершилась некорректно и на NTFS-диске ошибки. Что ж, очень разумно со стороны убунты не лезть на раздел с ошибками.

Как только эти недостатки станут значительными - пора задуматься о переносе убунты на настоящий раздел диска.

Линукс-гуру могут заявить, что нормальной установке нужно по меньшей мере пять разделов - /, /home, /var, /boot и swap, но, во-первых, им не нужно это руководство, а во вторых - у меня тут не сервер, а простой ноутбук, и я предлагаю обойтись двумя разделами - / и swap.

Создать их предлагаю из винды каким-нибудь инструментом (я использовал partition expert). Линуксовый gparted вроде бы не умеет ресайзить NTFS-диски, а именно от такого и хочется "отгрызть кусочек".

0. Дано: windows vista на primary загрузочном разделе диска, ubuntu 8.10 на файле-образе c:\ubuntu\disks\root.disk. Вероятно, инструкция сработает и для других систем.

1. Итак, создаем primary-раздел под файлы, отформатированный в ext3 (или другую вашу любимую ФС) размером не меньше чем файл-образ C:\ubuntu\disks\root.disk (я помещался в 4.5 гиг) и раздел под своп (тип linux swap, размер исходя из объема оперативки найдите в гугле, я использовал 512мб). Насчёт обязательности primary я не уверен.

2. Перезагружаемся в убунту (старую) и устанавливаем пару необходимых для переезда пакетов (lvpm надо найти на http://lubi.sourceforge.net/lvpm.html и скачать, берите версию поновее):
sudo apt-get install gparted
wget http://puzzle.dl.sourceforge.net/sourceforge/lubi/lvpm_96_all.deb
sudo dpkg -i lvpm_96_all.deb

3. Запускаем gparted
sudo gparted




Смотрим, под каким именем появился новый линуксовый раздел, у меня это было /dev/sda4 (1 - recovery раздел ноутбучного диска, 2 - windows, 3 - extended, где лежит linux swap и раздел с данными, 4 - пятигиговый раздел под линукс, 5 - swap, 6 - данные, второй нтфс раздел). Цифру 4 хорошенько запоминаем, пригодится. Больше низачем нам gparted не нужен, если, конечно, вы не решили использовать его вместо виндовых программ для нарезки диска. Закрываем.

4. Запускаем наш грузовик для переезда
sudo lvpm



Интерфейс весьма минималистский, зато делает (почти) всё что от него нужно. Выбираем что делать (transfer) и куда (sda4 или какую там цифру вы запомнили).



Дальше он честно пишет, что переезд - дело долгое, и можно наконец-то откинуться на спинку стула (tm).





5. По идее, как только вы увидели сообщение о завершении копирования, можно перезагрузиться и радоваться жизни. Однако, в моем случае новый линукс сразу не загрузился (старый "виртуальный" с образа c:\ubuntu\disks, конечно, не пострадал). Так что исправлять ошибку загрузчика GRUB "Error 17: Cannot mount selected partition" придется со старой системы.

Монтируем новую ФС (все следующие команды под su или sudo):
mkdir /newlinux
mount /dev/sda4 /newlinux
vi /newlinux/boot/grub/menu.lst

находим там строки с (/host/ubuntu/disks/) и меняем на (hd0,3). Здесь 3 - это запомненная четверка sda4 минус один (тут разделы диска считают с нуля). Менять надо все строки, в том числе закомментированную
# groot=(hd0,3)

потому что этот файл потом будет обрабатывать робот update-grub и смотреть именно на комменты.

Ну и не удаляйте строки с загрузкой виндов - скорее всего, это что-то вроде
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda2
title Windows Vista
root (hd0,1)
savedefault
chainloader +1



На этом всё, можно перезагружаться в новый линукс. Все файлы и настройки будут как в старом, отличить на вид не удастся, проверяем /etc/fstab чтобы удостовериться (кроме того, на новой системе на будет установлено lvpm - а если его все-таки установить, он скажет, что умеет запускаться только с loopback установок и будет прав).

Старая установка по-прежнему доступна из виндового загрузчика, теперь можно её удалить (панель управления - установка и удаление программ - ubuntu), а можно не трогать - две системы теперь независимы.

вторник, 11 ноября 2008 г.

Слишком высокие шрифты NetBeans 6.1 в Ubuntu 8.10

Проблема, на которую я потратил пару часов поиска.

Свежеустановленный NetBeans на свежеустановленной убунте выглядит вот так:


Во всех элементах управления и редакторе просто чудовищные междустрочные отступы. Они не убираются в настройках. В сети советуют менять скины приложения - у java для этого какие-то специальные форматы. Не помогает.

Все бы ничего, но у меня ноутбук с "широким" (то есть - низким) экраном. И всего 15 строк кода на экране - это явно маловато.

Проблема в том, что на новой убунте сразу после установки нет проприетарных библиотек. Каждый волен их поставить после. Первой такой библиотекой стали родные драйвера для видеокарты - с ними заработал compiz fusion.

Второй библиотекой стала настоящая JDK - вместо поделки openjdk, которая так коряво работает с интерфейсом.

sudo apt-get install sun-java6-jdk
sudo vi /etc/netbeans.conf

В этом файле меняем

netbeans_jdkhome="/usr/lib/jvm/java-6-openjdk"

на

netbeans_jdkhome="/usr/lib/jvm/java-6-sun"


И волшебным образом приобретаем нормальный вид:

вторник, 4 ноября 2008 г.

Дружественная система

Пришлось поставить линукс на ноутбук.

Места на диске вместе с вистой довольно мало, дай, думаю, не буду его резать, а поставлю на виртуальную машину. Поставил качаться убунту 8.10, пошёл читать описания виртуальных машинок. Выбрал virtualbox, а тут нарезанная уже убунта и говорит человеческим голосом:
- А у меня прикольный инсталлер теперь есть - из-под винды прямо. Без переразметки диска.

Прикольно, думаю. Ну и нажал. А он взял и правда без вопросов поставился. В виндовом boot.ini прописал строчку "ubuntu" и поднимается оттуда. Я не знаю как, но это работает! То есть по сути они встроили офигенное решение по виртуализации прямо в систему. Ценой заявленной "чуть меньшей производительности дисковых операций", правда.

Для "ноутбука разработчика" пойдёт. Работает всё из коробки. На диске пишет что занято 2.5 гб из 4.3 (он весь размещен в файле-образе в НТФС c:\Ubuntu\disks).

Для наведения красоты решил малость удалить ненужного из системы. Рука уже потянулась к bluetooth, но я вспомнил что это ноут и тут BT как раз есть. Работает. Будет аварийный инет через телефон:) Сейчас еще трехмерный рабочий стол посмотрю - давно хотел, а на виртуалке бы не стал наверное.

На второй день, когда я решился написать этот пост, я понял, что у меня нету русской раскладки. Вот, уже есть. С переключением по caps lock:)

суббота, 24 мая 2008 г.

Мультимедиа

Сегодня в нашей программе: просмотр фильмов и запись DVD.

Первая задача - запустить обыкновенный avi файл с субтитрами в srt. Самый простой "текстовый" mplayer субтитров, очевидно, не поймёт - думал я. Поэтому запас еще totem и vlc.

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

Запись DVD тоже удивила только одним: записанный на 4х (перестраховался я, думал, медленная машина) скорости диск оказался на ощупь холодным, а не как обычно - тёплым.

С горя пошёл искать чего-нибудь странного и неожиданного - и таки вот: gnome tetris имеет больше десяти уровней! На десятом кубики летят не очень быстро, но он быстро заканчивается:)

среда, 14 мая 2008 г.

Про игрушки

Текстовые игры живы! Вот, например, юниксовый нетхак. Который продолжает зачем-то в наш HD-век развиваться и даже даёт побеги (slashem, например). Совершенно чумовые игрушки, там реально всё со всем может взаимодействовать, потому что авторы много думали и много писали.

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

четверг, 8 мая 2008 г.

Фото

Ещё одной задачей было получить фотки с цифрового фотоаппарата. При его подключении дебиан мигал лампочками и говорил "я вижу камеру! получить снимки?" - но, к сожалению, ничего получать не получалось.

Нашёл, что с кэнонами работает gthumb (sudo apt-get install gthumb), и правда, показывает этакое окошко с превьюшками, что импортировать, что не трогать. Сойдёт для сельской местности.

А потом я понял, что импортировать фотки с фотика можно и пикасой. Не знаю, сама она такая умная или всё же тянет libgphoto2, которую поставил gthumb.

среда, 7 мая 2008 г.

icq

А вот асечный клиент до сих пор разыскивается.

Хочу немногого (XXI век на дворе или нет?): чтобы писать и получать сообщения по-русски (интерфейс не важно на каком языке, лучший - чтоб не видно было), чтобы передавались файлы хотя бы с некоторыми другими клиентами (по убыванию частоты среди моих контактов: qip, icq5, miranda), и чтоб работал. Всё. Смайлики, статусы, поддержка восьми других протоколов, плагин для синхронизации с кофеваркой - в топку.

Да, совсем забыл: для линукса.

Протестированы:
  1. gaim/pidgin не получает сообщения из оффлайна по-русски от некоторых клиентов. Прблема в кодировке. Пробую дорабатывать напильником. Вроде с некоторыми клиентами получается, если поставить кодировку "windows-1251". Что будет с юникод-клиентами - неясно. Передача файлов есть, хоть и по одному только.
  2. kopete. Какой-то кривой и по этим пунктам не работает. Хотя красивее.
  3. любимый qip под вайном. С кодировками не дружит.
  4. qip infium под вайном же. Разработчики, кажется, закрыли его тестирование, и скачать работающую без какого-то специального квип-аккаунта версию не удалось. в топку.
Так что пока тестируем пункт 1. И не обижаемся, если я не могу вам ответить:)

.торрент

И про мюторрент, вдогонку.

Сначала я хотел написать, какая у дебиана клёвая система пакетов apt. Не, она правда очень клёвая: с родных репозиториев можно скачать почти всё, а что нельзя - можно со сторонних (как x neural switcher например). То есть захотелось мне поставить, например, битторрент-клиент азуреус. И не надо по привычке гуглить азуреус, лезть по ссылке на sourceforge, выбирать платформу, качать и ставить. надо написать

$ sudo apt-cache search azureus

(это чтобы удостовериться, что он есть в репозитории и узнать точное имя), а потом

$ sudo apt-get install azureus

и всё. Следующая команда уже

$ azureus

Но сейчас не об этом.

При всём опенсорсе количество программ не переходит в качество. Оно и понятно - кому охота дорабатывать юзабельность написанного для себя клиента. И из-за этого трудно найти торрент или вот icq клиент, чтобы он нормально общался со своими виндовыми собратьями.

Так, bittorrent (динозавр-основатель!), rtorrent, qtorrent не поддерживают обычный DHT, а азуреус, который вообще на джаве и мультиплатформенный, к сожалению, давно развивает свою ветвь этого протокола (azureus вместо mainline). Ещё пытался проверить aria2, но она полчаса выделяла себе место под торрент, и я уже успел воплотить следующее решение.

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

Googled wine

Пробую я тут много приложений на вайн устанавливать. Вайн - это такой почти эмулятор виндоуса под линукс (на самом деле, это "уровень совместимости" а не эмулятор, кто понимает). Некоторые программы встают легко, например мюторрент, некоторые - криво (например, квип), а с пикасой получилась интересная штука.

Просто так она не запускается. Но если погуглить "picasa wine", открываются страницы самого гугла, где сказано, что "под обычным вайном мы не работаем, но мы его обработали напильником и теперь предлагаем вам его скачать". Ну да, 20 мегабайт вместо пяти за пикасу + "googled wine". Но ведь это проще чем портировать целиком такой продукт на линукс.

Ставится. Работает. Молодцы.