19 мая 2009 г.

Файловые менеджеры linux

Просто ссылки, выбираем на вкус и цвет.
1. Nautilus, http://live.gnome.org/Nautilus (desktop)
2. Dolphin, http://dolphin.kde.org/ (desktop)
3. Konqueror, http://www.konqueror.org/ (desktop)
4. Thunar, http://thunar.xfce.org/index.html (desktop)
5. PCManFM, http://pcmanfm.sourceforge.net/ (desktop)
6. Krusader, http://www.krusader.org/ (GUI)
7. Xfe, http://roland65.free.fr/xfe/ (GUI)
8. ROX-Filer, http://roscidus.com/desktop/ROX-Filer (desktop)
9. Midnight Commander, http://www.midnight-commander.org/ (console)
10. Vifm, http://vifm.sourceforge.net/ (GUI)
11. GNOME Commander, http://www.nongnu.org/gcmd/ (GUI)
12. emelFM2, http://emelfm2.net/ (GUI)
13. Tuxcommander, http://tuxcmd.sourceforge.net/ (GUI)
14. Double Commander, http://doublecmd.sourceforge.net/ (GUI)
15. FlyBird, http://fly-bird.org/ (GUI)
16. gentoo, http://obsession.se/gentoo/ (GUI)
17. Worker, http://www.boomerangsworld.de/worker/ (GUI)
18. lfm - Last File Manager, http://www.terra.es/personal7/inigoserna/lfm/
(console)
19. Filerunner, http://linux.maruhn.com/sec/filerunner.html (GUI)
20. BeeSoft Commander, http://www.beesoft.org/ (GUI)
21. Necromancer's DOS Navigator, http://ndn.muxe.com/ (console)
22. FileCommander, http://silk.apana.org.au/fc2development.html (console)
23. FDclone, http://hp.vector.co.jp/authors/VA012337/soft/fd/ (console)
24. FileRunner, http://www.cd.chalmers.se/~hch/filerunner.html (GUI)
25. Desktop File Manager, http://www.kaisersite.de/dfm/ (desktop)
26. TKDesk, http://tkdesk.sourceforge.net/ (desktop)
27. muCommander, http://www.mucommander.com/ (GUI)
28. XNC - X Northern Captain, http://www.xnc.dubna.su/ (GUI) (похоже, разработка прекращена)

Из двух-панельных я использовал mc (ставлю всегда), krusader (в KDE), gnome commander (в Gnome).

Кто знает еще какие?

Управление модулями апача 2 в дебиане

Постоянно забываю утилиты для управления модулями apache2 в дебиане (ибо редко я его настраиваю). Сделаю заметку.

a2enmod: включить модуль апача (ничего особенного он не делает, создает ссылки на модуль .load и .conf файлы в папке mods-enabled).

Например, включить модуль rewrite:
#a2enmod rewrite

a2dismod: делает вещи обратные a2enmod
Например для отключения модуля:
#a2dismod rewrite

Эти утилиты без параметров выдают список модулей, которые можно активировать в случае a2enmod и список модулей, которые можно деактивировать в случае a2dismod.

17 мая 2009 г.

Создание загрузочной флешки из img образа в windows

Утилитка, которая корректно залила образ *.img linux на флешку из под windows:
UNetbootin.
Рекомендую.

1 апреля 2009 г.

Байка

Задались мы тут семейством вопросом слова "байка". Мне казалось, что это сказка, полностью лишенная реальной подосновы. Начали спорить.
В итоге - википедия говорит, что
Байка — юмористический рассказ, как правило, основанный на реальных событиях. Достоверность байки несколько выше, чем анекдота, но это не исключает литературных приёмов, с помощью которых рассказчик подаёт байку в желаемом виде.
, а вот словарь Ожегова, что
БАЙКА2, -и, ас. (разг.) Побасенка, выдумка, басня (во 2 знач.).Охотничьи байки. Что-то не похожа эта б. на правду.

Я верю Ожегову. А вы?

15 марта 2009 г.

Архивирование системы или бекап в debian linux

Сделаю заметочку на будущее, чтобы в очередной раз не вспоминать скрипты :)

dmpfile=backup.tar.bz2
srcdir=/
trgdir=/share
cd $trgdir && tar -cfj $dmpfile --exclude-from=/exclude_back $srcdir

Скрипт переходит в директорию куда надо сохранить архив, и выполняет tar.

--exclude-from - берем список исключений из файла в корне (сам скрипт тоже в корне)

# cat exclude_back
/proc
/mnt
/var/run
/dev
/sys
/home/repo
/share

Последние две - мои директории.

11 марта 2009 г.

Контекстные процессоры Django

Как пишет django book

Для обработки шаблона вам необходим контекст. Обычно это экземпляр django.template.Context, но в поставку Django также входит специальный подкласс — django.template.RequestContext, который работает немного иначе. Класс RequestContext по умолчанию добавляет группу переменных в контекст шаблона - такие как объект HttpRequest или информацию о текущем пользователе.


Класс RequestContext и контекстные процессоры были созданы для решения этой задачи. Контекстные процессоры позволяют вам указывать ряд переменных, которые будут устанавливаться автоматически для каждого контекста, без необходимости их указания в каждом вызове render_to_response(). Надо лишь использовать RequestContext вместо Context при обработке шаблона.


То есть, собственно говоря, для чего на нужны контекстные процессоры?
Контекстный процессор принимает объект HttpRequest и возвращает словарь переменных для его последующего использования в контексте шаблона.
То есть, для поставленной перед собой задачи - вывод дополнительной информации в любых шаблонах он справляется.

В django книге описано, как создавать свои глобальные процессоры.

Есть еще варианты - http://softwaremaniacs.org/forum/django/1439/

3 марта 2009 г.

Django. Валидация формсетов. Часть вторая

При использовании двух формсетов в одном виде возникает следующая проблема валидации:
1. Валидация формсета проходит следующим образом:
а)Валидируются все формы, входящие в рамки:
self._total_form_count = self.management_form.cleaned_data[TOTAL_FORM_COUNT]
б)экстра-формы, в которых нет вообще никаких данных игнорируются.
2. В связи с синхронным использованием двух формсетов может возникнуть следующая проблема:

У одного формсета валидируются, например, 1,2 и 5 форма, а у другого только 1,2, в связи с тем что у второго формсета 5 форма пустая.

Вот эту проблему и попытаемся сегодня решить.

Начало функции, отвечающей за валидацию вормы (валидация формсетов - это просто валидация каждой формы в формсете)

208 def full_clean(self):
209 """
210 Cleans all of self.data and populates self._errors and
211 self.cleaned_data.
212 """
213 self._errors = ErrorDict()
214 if not self.is_bound: # Stop further processing.
215 return
216 self.cleaned_data = {}
217 # If the form is permitted to be empty, and none of the form data has
218 # changed from the initial data, short circuit any validation.
219 if self.empty_permitted and not self.has_changed():
220 return

Как написано в комментариях в коде - если форме разрешено быть пустой, прекращаем всякую валидацию. Значит, наша задача, привести свойство empty_permitted или метод has_changed() для каждой формы в каждом формсете к единому синхронному виду.

Переопределяем функцию has_changed(), в обоих классах, в котором мы описываем формы, использующиеся в формсетах:

def has_changed(self):
"""
Returns True if data differs from initial.
"""
if hasattr(self, 'is_change'):#проверяем, если наш динамический атрибут is_change
return True
else:
return bool(self.changed_data)


Дальше ясно - создаем динамический новый атрибут для объекта формы в случае, если в формсетах две синхронные формы имеют разные зачения has_changed(), в итоге, они станут иметь одинаковые. Ес-но, это надо проделать до валидации формсетов.