пятница, 4 января 2008 г.

Tilda в gutsy

Многие, кто обновил feisty до gutsy, заметили довольно неприятный баг в tilda (из-за которого эта программа стала выглядеть намного менее привлекательной, чем раньше): через некоторое время вместо терминала tilda являла изображение серого прямоугольника.

Как оказалось, баг этот давно известен. Но самое интересное, что решение у него простое до смешного - переустановка с удалением пользовательских настроек.

Upd: Как оказалось, помогает это не всегда. Самое надежное - поставить tilda из репозитория Дениса Константинова.

среда, 2 января 2008 г.

Запускаем Sun Java Wireless Toolkit (WTK)

После установки WTK у меня не запускался ktoolbar, бодро сообщая: "java: xcb_xlib.c:82: xcb_xlib_unlock: Assertion `c->xlib.lock' failed"

Как обычно, решение легко гуглится - достаточно перед запуском ktoolbar сказать:
export LIBXCB_ALLOW_SLOPPY_LOCK=1

суббота, 8 декабря 2007 г.

tahoma.ttf

Недавно запустил winecfg и впал в ступор - вместо русских букв показываются точки. Оказалось, что из пакета msttcorefonts пропала tahoma. И теперь для правильной работы wine ее надо настраивать отдельно.
По-плохому можно просто найти и скачать.
По-хорошему - смотрим здесь.

понедельник, 19 ноября 2007 г.

Создаем локальный репозиторий gutsy

Хорошее руководство по созданию локального репозитория Ubuntu есть на форуме. Но стоит учитывать некоторые нюансы:

1. В gutsy сломан debmirror. Поэтому, перед началом выкачивания репозитория его надо исправить (так как там и указано - убрать один из двух "\n" на 793 строке).

2. Несмотря на исправление, первый раз debmirror лучше запускать с параметром --nocleanup - мало ли что ;-)

3. В gutsy появился еще репозиторий gutsy-proposed. Так что строка для выкачивания репозиториев gutsy i386 может быть такой:
/usr/bin/debmirror --nosource -m --passive --host=mirror.yandex.ru \
--root=:ubuntu --method=rsync --progress --nocleanup \
--dist=gutsy,gutsy-security,gutsy-updates,gutsy-backports,gutsy-proposed \
--ignore-release-gpg --section=main,restricted,multiverse,universe \
--arch=i386 gutsy-rep

После того, как debmirror заработает, параметр --nocleanup можно смело убирать.

4. Точно так же можно собрать репозиторий из среза на DVD. Достаточно скопировать в папку gutsy-rep папки pool со всех дисков - тогда выкачается только dists и обновления пакетов.

5. Выкачанный репозиторий можно подключать в sources.list по протоколу file://, а можно и нарезать на болванки. Тут тоже есть нюанс: после создания папок .disk, а в них - файлов info с описаниями дисков можно содержимое сразу записывать. Только стоит учитывать, что большинство программ записи по умолчанию скрывают папки и файлы, начинающиеся на точку и надо не забыть перенести их на диски вручную. А создание iso-образов позволяет не обращать внимания на это.

пятница, 5 октября 2007 г.

Универсальные списки в django

Django пропагандирует девиз "less code is better", благодаря которому есть такая штука, как generic views. Но generic views, уменьшая код на python, приводят к тому, что дублирование проявляется в шаблонах. Чтобы его не было, придется позаимствовать подход из интерфейса администратора django:

1. View должен оперировать собственно классом модели и его метаинфомацией:
def object_list(request, modelname):
model = get_model('', modelname)
return render_to_response('object_list.html',
{'fields': model._meta.fields,
'class_name': model._meta.verbose_name_plural,
'object_list': model.objects.all()})


2. Тогда в самом шаблоне можно не только строить цикл
for object in object_list
но и цикл
for field in fields

3. В этом случае так просто получить значение поля не получится и придется написать фильтр:
def display_value(model, field):
return getattr(model, field.name)
register.filter('display_value', display_value)

Соответственно в шаблоне можно использовать конструкцию:
object|display_value:field

4. Этот код прекрасно работает с обычными полями, но для списков выбора (choices) возвращает хранимое, а не отображаемое значение. Значит придется вытаскивать список выбора и находить по хранимому значению отображаемое:
def display_value(model, field):
stored_value = getattr(model, field.name)
if field._choices == []:
return stored_value
else:
return filter(lambda choice, value=stored_value:
choice[0]==value, field._choices)[0][1]

Можно конечно написать и именованную функцию (или вообще, применить обычный цикл вместо фильтрации).

понедельник, 3 сентября 2007 г.

Непогода для Висты

Моя жена привыкла смотреть прогноз погоды в Ubuntu при помощи скринлетов. Соответственно, когда у нее появился ноутбук с Вистой, то я поначалу даже обрадовался: "Не придется настраивать погоду, все будет работать из коробки".
Ага, разбежался... Как оказалось, "мини-приложение" погоды в Windows Vista просто не работает. Рецепт лечения вроде бы был найден, но... снова незадача. Единственный wlsrvc.dll, который я смог достать, был от Vista Business и на Vista Home Premium он ни в какую не заработал.
Вот такая она, самая удобная и привычная ОС от Microsoft...


PS. Все обновления Windows устанавливаются регулярно, но исправления пока не видно.

среда, 29 августа 2007 г.

Карта пользователей Ubuntu

Открылась карта пользователей Ubuntu. Отметился на ней. Правда, некто Tuggrik меня полностью перекрывает...
Для того, чтобы правильно ввести координаты на карте, достаточно найти себя на Google Maps и сказать "Проложить маршрут". Будут показаны две координаты: первую надо вводить в Lattitude, вторую - в Longitude.