LINUX.ORG.RU

Сообщения geekless

 

Монтирование разделов, выполняемое из initrd

Несколько дней назад мы тут обсуждали пару сумасшедших идей.

По результатам этого обсуждения я набросал следующий драфт:

Монтирование разделов, выполняемое из initrd.

Если переменная fslayout не установлена, выполняется традиционный алгоритм монтирования:

1. В / монтируется устройство из переменной rootdev.
2. Анализируется файл /etc/fstab. Если в нём присутствует запись для /usr, /usr также монтируется.

Если переменная fslayout установлена, выполняется новый алгоритм:

Переменная fslayout содержит 1 или более описаний точек монтирования, разделенных запятой.

path:dev — монтировать dev в path
path1>path2 — вместо монтирования, создать симлинк path1 -> path2
path@dev — шорткат для /mountpoints/devbasename:dev,path>/mountpoints/devbasename/pathbasename (пример /boot@/dev/sda1,/etc@/dev/sda2,/usr@/dev/sda2). Если при выполнении этой команды каталог /mountpoints отсутствует, он будет создан.

Данные команды выполняются в том же порядке, в каком они следуют в fslayout. Повторные вхождения одной и той же команды игнорируются.

Если первой командой не является команда монтирования для пути /, / монтируется как tmpfs.

После выполнения этих команд выполняются следующие действия:
1. Если для пути /usr не была указана никакая команда, анализируется файл /etc/fstab. Если в нём присутствует запись для /usr, она выполняется.
2. Если для пути /boot не была указана никакая команда, анализируется файл /etc/fstab. Если в нём присутствует запись для /boot, она выполняется.
3. Если имя /bin отсутствует в файловой системе, выполняется создание симлинка /bin>/usr/bin
4. Если имя /sbin отсутствует в файловой системе, выполняется создание симлинка /sbin>/usr/sbin
5. Если имя /lib отсутствует в файловой системе, выполняется создание симлинка /lib>/usr/lib

Ожидаемый фидбек от треда:
1. Конструктивная критика.
2. Баттхерт любителей пофапать на FHS.

geekless
()

nilfs, насколько она стабильна?

Есть идея задействовать эту ФС для хранения часто модифицируемых данных, чтобы удобно было сгружать оттуда бэкапы: смонтировал чекпоинт, спокойно забекапил.

Вопрос в том, насколько она стабильна для боевого применения. Могут ли файлы в один прекрасный момент превратиться в тыкву?

Также реквестирую истории успеха/неуспеха.

geekless
()

[в гугле забанили] Как в Qt переключаются методы рендеринга?

Сабж.

geekless
()

[archlinux][kde] dolphin, kfilemetadatareader, ворнинги

Пользуюсь Dolphin-ом, установлены только его зависимости и ни единым кедопакетом больше. (Если надо список пакетов.) Когда Dolphin запущен, в xsession-errors постоянно валится вот это:

"/usr/bin/kfilemetadatareader(13656)" Soprano: "QLocalSocket::connectToServer: Invalid name" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Invalid iterator." 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "QLocalSocket::connectToServer: Invalid name" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "org.freedesktop.DBus.Error.ServiceUnknown - The name org.kde.nepomuk.services.nepomukstorage was not provided by any .service files" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Unsupported operation (2)": "Invalid model" 
"/usr/bin/kfilemetadatareader(13656)" Soprano: "Invalid iterator." 

Раздражает. Есть какой-нибудь способ объяснить ему, чтобы он так не делал?

 ,

geekless
()

Ctrl+F

Есть вещи, которые безмерно изумляют, и которым я не могу найти адекватного объяснения. Вот одна из них:

В Firefox, Opera, Chromium и возможно-любом-другом-браузере-тоже отсутствует сохранение истории поиска текста по странице. Если вы искали сначала AAA, потом BBB, а потом CCC, то ни AAA, ни BBB в гуе поиска не обнаружите. Вбивайте заново, ага.

Скажите, это эпидемия? Это заразно? Может ли это опасное забалевание перекинутся с браузеров на текстовые редакторы, на less и т.п.?

geekless
()

[gtk] Те самые диалоги, да-да

История первая.

Диалог открытия/сохранения файлов у Gtk. Ситуация: приложение не указало используемый каталог. Какой каталог должен быть отображен в диалоге? Здравый смысл подсказывает нам, что это должен быть current working directory. Так оно и работало.

Потом пришел добрый человек и решил облегчить жизнь людям, которые про такое понятие как cwd, никогда ничего не слышали. (Гном же для «просто пользователя», вы в курсе. Так, кто сейчас выкрикнул «Gtk — это не гном»? Cядь, заткнись и читкани HIGца, твое мнение никого не волнует.) Добрый человек реализовал запоминание последнего использованного каталога:

case RELOAD_EMPTY:
- /* The user didn't explicitly give us a folder to
- * display, so we'll use the cwd
+ /* The user didn't explicitly give us a folder to display, so we'll
+ * use the saved one from the last invocation of the file chooser
*/
- current_working_dir = g_get_current_dir ();
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl),
- current_working_dir);
- g_free (current_working_dir);
+ folder = get_file_for_last_folder_opened (impl);
+ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), folder, NULL);
+ g_object_unref (folder);

Ок, выглядит разумно, по крайней мере. Дальше веселее.

В тот же день (буквально; история коммитов не врёт) пришел другой добрый, но глупый человек (или умный, но злой? нельзя же быть настолько глупым?). И сделал это:

case RELOAD_EMPTY:
- /* The user didn't explicitly give us a folder to display, so we'll
- * use the saved one from the last invocation of the file chooser
- */
- folder = get_file_for_last_folder_opened (impl);
- gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), folder, NULL);
- g_object_unref (folder);
+ recent_shortcut_handler (impl);
break;

------------------------------------------------

История вторая.

Допустим, мы сошли с ума и решили попользоваться этим вашим списком recently used. Пусть это будет какой-нибудь, прости господи, Totem. Пусть мы вчера смотрели в нём /media/data/Видео/Unforgettable/Unforgettable.S01E07.HDTV.XviD-ASAP.avi. Сегодня мы желаем посмотреть — правильно! — /media/data/Видео/Unforgettable/Unforgettable.S01E08.HDTV.XviD-ASAP.avi. И вот мы открываем этот диалог, видим список недавно использованных файлов с пунктом Unforgettable.S01E07.HDTV.XviD-ASAP.avi на первом месте, иии...

А? Что-что? Кто там из угла робко бормочет «щелкнуть правой кнопкой и выбрать в контекстном меню Open Folder»? Нет такого пункта, запомни! Пришло время пересмотреть седьмую серию! Седьмая серия сама не пересмотрится!

------------------------------------------------

История третья.

В настройках объекта, отвечающего за отображение recently used есть такая опция show_not_found. Вполне логично, что её имеет смысл всегда держать выключенной, потому что имена удаленных файлов вряд ли кому-то могут понадобиться в этом списке.

Вот только в виджете GtkRecentChooserMenu эта опция не работает. Если вы пользовались gnome-panel, то вы видели этот виджет — это то самое подменю с недавними документами в главном меню гнома. И несуществующие файлы вы в нём тоже наверняка видели, да-да.

Я наткнулся на эти грабли при попытке добавить поддержку списка recently used в меню lxpanelx. Для обхода бага пришлось сделать кустомный фильтр и фильтровать файлы вручную. (Кстати, при этом фильтр поначалу сегфолтился, потому что Gtk зануляет поле, которое не должно занулять, и для обхода и этого бага тоже пришлось пошаманить.)

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

Ну про то, что из этого меню тоже невозможно перейти в каталог, где находится файл, — это и вовсе мелочи, чтоб об этом говорить...

------------------------------------------------

Боженька, убей их всех!

 

geekless
()

Тулкиты, двойная буферизация, backing store

Если взять окно Firefox и повозюкать по нему другим окном, то вы не увидите никаких артефактов перерисовки окна.
Если взять окно Dolphin, то, аналогично, не будет никаких артефактов.
Если взять любое приложение на Gtk, то будет виден этот тихий ужас, когда обновляемая область окна сначала заливается цветом фона, а уже потом с ощутимой задержкой на ней появляется актуальное содержимое.
Почему?

Потому что Firefox и Qt буферизуют результат рендеринга окна и при последующих Expose не отрисовывают его заново, а просто копируют пиксели из буфера. Gtk так не делает.

Очевидно, что хранение пререндеренного пиксмапа и последующий рендеринг из него — более дешевая операция, чем постоянная перерисовка 100500 виджетов. Когда-то у xorg была поддержка backing store, решающая именно эту проблему: графический сервер мог сохранять содержимое окон и использовать его для отрисовки при изменении расположения окон. Сейчас эта фича объявлена устаревшей и выпилена. Лол, ок. Задача-то никуда не делась. Значит, этим должны заниматься тулкиты.

Теперь самое интересное: Gtk имеет поддержку двойной буферизации при выводе. Её предназначение в исключении «моргания» отрисовки интерфейса. Когда тулкит получает Expose, он создаёт пиксмап, равный по размеру обновляемой области. Весь рендеринг производится в этот пиксмап. После окончания рендеринга, содержимое пиксмапа копируется в окно одной командой (чем и обеспечивается отсутствие моргания), после чего пиксмап уничтожается.

Очевидно, что на самом деле вместо этой недоделанной двойной буферизации нам нужна полноценная буферизации всего содержимого окна в постоянно существующем пиксмапе. Реальный код перерисовки должен выполняться только при явном запросе со стороны виджетов, Expose же со стороны сервера должен всегда обрабатываться единственной операцией «скопировать пиксели».

Это я всё к чему. Очень чешутся руки взяться за допилку Gtk, и чем дольше я имею с ним дело, тем сильнее. Пока гномеры ваяют очередную ненужную DE, их тулкит продолжает оставаться изрядным говном. Лучше бы на тулкит силы направили.

Отговорите меня, кто-нибудь.

geekless
()

vala + libwnck = lxpanel2

23 часа назад Hong Jen Yee закоммитил начальные сорцы lxpanel2. Всё полностью переписано на vala, с нуля. Для таскбара используется libwnck.

Что-то мне подсказывает, что в перспективе LXDE скатится в третьегном^Wнефункциональное тормозное говно.

 ,

geekless
()

[потаённых желаний тред] игра вашей мечты

Идея треда навеяна случайной фразой. Итак, $username, ты когда-нибудь мечтал создать самую-самую-самую лучшую/интересную/трушную компьютерную игру? Рассказывай. В каком жанре? Что там должно быть? Кто будет набигать? Можно ли грабить корованы? Не стесняйся, пиши, как есть.

Линукс тут при том, что под линукс не хватает нативных игр.

geekless
()

GUI-овый аналог xwininfo

Существует ли графический аналог для xwininfo -tree -root? Чтоб показывало дерево окон, их аттрибуты и свойства.

geekless
()

[gtk] Как выполняется маршрутизация button press/release от GdkWindow до конкретного GtkWidget?

Как известно, Gtk может использовать одно окно графической системы для отображения произвольного дерева виджетов. Когда от окна поступают сообщения типа button press/release, сигнал от GdkWindow пересылается тому GtkWidget, в пределах которого в данный момент находится мышь.

Вот не могу в сорцах gtk найти код, выполняющий эту маршрутизацию. Подскажите, куда копать.

 

geekless
()

[ld] Игнорировать undefined reference по списку

Требуется при линковке программы игнорировать некоторые undefined symbols. При этом, на другие undefined symbols (вне указанного списка) надо выдавать ошибку.

Т.е. по сути нужно, чтобы линковщик «увидел» виртуальную разделяемую библиотеку. Библиотеки самой нет, а символы из неё — есть.

Как?

 

geekless
()

[ruby][python] Кто быстрее, черепаха или улитка?

Я тут позапускал тестирования производительности интерпретаторов и вот что намерил:

~/git/io$ python2 samples/speed/speed.py

Python localAccesses       := 33.54
Python localSets           := 29.58

Python slotAccesses        := 8.45
Python slotSets            := 7.29

Python blockActivations    := 2.99
Python instantiations      := 2.34
Python version := "2.7.2 final 0"

// values in millions per second
~/git/io$ python samples/speed/speed.py

Python localAccesses       := 38.50
Python localSets           := 31.03

Python slotAccesses        := 7.78
Python slotSets            := 7.46

Python blockActivations    := 2.80
Python instantiations      := 3.41
Python version := "3.2.2 final 0"

// values in millions per second
~/git/io$ ruby-1.8 samples/speed/speed.rb

Ruby localAccesses       := 10.70
Ruby localSets           := 8.12

Ruby slotAccesses        := 5.85
Ruby slotSets            := 5.54

Ruby blockActivations    := 2.33
Ruby instantiations      := 1.83
Ruby version := "1.8.7"
// values in millions per second
~/git/io$ ruby samples/speed/speed.rb

Ruby localAccesses       := 63.57
Ruby localSets           := 38.74

Ruby slotAccesses        := 13.44
Ruby slotSets            := 27.92

Ruby blockActivations    := 8.63
Ruby instantiations      := 2.67
Ruby version := "1.9.3"
// values in millions per second

Цифры говорят сами за себя. Срач, гоу.

 ,

geekless
()

[лоргугл][FF] Аддон для блокирования части API JS

Существует ли аддон для FF, который позволяет блокировать часть вызовов API жабаскрипта выборочно для отдельный сайтов?

Как минимум, нужно две фичи:

1. Уметь по запросу показывать информационное окошко «Скрипты на этой странице используют следующие вызовы API: ...»

2. Позволять составлять правила вида «регэксп для url -> список блокируемых функций».

 

geekless
()

А почему невозможно увидеть все треды через «Сообщения $username»?

Раньше вроде можно было открыть линк вида www.linux.org.ru/people/geekless/ и увидеть все треды. Теперь там только последние N тредов и отсутствует ссылка, чтобы листать дальше.

Баг? Фича? У меня глюки?

Перемещено maxcom из linux-org-ru

geekless
()

[вброс][некрофилия][вещества] N идей из Windows 98, о которых стоило бы знать разработчикам современных DE.

Теги столь исчерпывающи, что остальную часть заголовка можно было бы и не писать. Как страшно жить: зачем столько пить и зачем писать такие статьи?

Для !Ъ: Ссылка.

Для Ъ: можете просто написать гневный коммент, вы всё равно ничего не читаете.

Обсуждаем. Ругаем ТСа. Совершаем неприличные действия с птицами.

P.S.

А теперь о хорошем, светлом, радостном. Вот эта страница блога — отныне официальная главная страница официального сайта LXPanelX. Там будет собираться сводная информация по проекту, ссылки на документацию (когда она будет написана) и всё остальное. Спрашивайте ваши ответы, отвечайте ваши вопросы.

 , ,

geekless
()

[лоргугл] Нормальные приложения для рисования диаграмм есть какие?

Собственно, сабж.

Ну и второй вопрос, риторический: это нормально, что в 2012 году ни LODraw, ни Dia не умеют такую вещь как «назначить выделенным элементам одинаковую ширину»? Всё настолько плохо, да?

 

geekless
()

[лоргугл] Внезапно, текстовые редакторы

Собственно, да: лоргугла тред, чтобы составить список. Давайте поговорим о велосип^Wредакторах. Итак, какие вы знаете текстовые редакторы, которые подходят под следующие условия:

  • Графический интерфейс, не консолька.
  • Не emacs (и не клоны/производные).
  • Не vim (и не клоны/производные).
  • Не на виджете от gtksourceview, scite или kwrite.
  • Не говно мамонта из эпохи однобайтовых кодировок.
  • Расширябельные/скриптуемые.

Спрашиваю чисто для расширения кругозора.

P.S. Разумеется, под GNU/Linux, не под оффтопик. Странно, что на форуме о Linux приходится писать такое уточнение. :}

 

geekless
()

[радости тред]3.2 и 12309

Снял двухмегабайтовые ограничения на буфер записи:

[root ~]# echo 50 > /proc/sys/vm/dirty_background_ratio 
[root ~]# echo 50 > /proc/sys/vm/dirty_ratio 

Запустил dd. Типичные размеры буферов во время копирования:

$ egrep 'Dirty|Writeback:' /proc/meminfo 
Dirty:            333220 kB
Writeback:         24764 kB

Скорость:

$ dd if=/dev/zero bs=1M > ~/tmp/blob
dd: запись «стандартный вывод»: На устройстве кончилось место
4511+0 записей считано
4510+0 записей написано
 скопировано 4729249792 байта (4,7 GB), 108,881 c, 43,4 MB/c

Тормозов нет. Вообще нет. Это успех, господа.

P.S. Для тех, кому 3.2 не помог, обещают ништяки в 3.3:


Fixes for those went into 3.3-rc1. Quoting from this weeks LWN.net kernel page
(I'm quite sure Jonathan won't mind):

"""
There have been some significant changes made to the memory compaction code to
avoid the lengthy stalls experienced by some users when writing data to slow
devices (USB keys, for example). This problem was described in this article
(http://lwn.net/Articles/467328/), but the solution has evolved considerably.
By making a number of changes to how compaction works, the memory management
hackers (and Mel Gorman in particular) were able to avoid disabling synchronous
compaction, which had the unfortunate effect of reducing huge page usage. See
this commit (
http://git.kernel.org/linus/a77ebd333cd810d7b680d544be88c875131c2bd3 ) for a
lot of information on how this problem was addressed. 
"""

 

geekless
()

[gtk] balloon messages

Есть ли сабж в gtk (или в виде сторонней библиотеки для gtk)? В справочнике API не нашел, нагуглить не удалось.

 

geekless
()

RSS подписка на новые темы