LINUX.ORG.RU

Сообщения kondor

 

JavaScript: как создать поддерево элементов по строке?

Господа, как в JS сделать примерно следующее?

var data = "<ul><li>Item</li></ul>";

document.getElementById("target-element").appendChild(document.create_???_Node(data));

Чтобы добавленная строка data добавлялась в качестве поддерева:

target-element
  |
  *--* ul
     |
     *--* li
         |
         *--* Item

createTextNode() не подходит, т.к. вставляет строку as is. Может есть стандартные средства? Или хотя бы сторонняя библиотека?

Спасибо.

P.S. В JS не разбираюсь, но возникла задача, которую надо решить с использованием оного.

kondor
()

Истории успеха проприетарных продуктов?

Что-то мне тут любопытно стало: кто знает какие программные продукты, изначально разрабатывавшиеся как проприетарные, которые через какое-то время стали OpenSource и при этом остались вполне успешными и не ушли в небытие?

На ум приходит только VirtualBox, но наверняка есть и другие. Какие?

kondor
()

python && tk: как правильно упаковывать виджеты

Решил поиграться с Python + Tk, но что-то буксую на правильной упаковке виджетов. Код ниже.

После запуска приложение выглядит так. Что сразу анноит:

  1. Центрирование Label+Entry происходит по вертикали. Хочу чтобы каждая пара Label+Entry была «прижата» к верху и чтобы между парами не было таких огромных пустых пространств.
  2. При растягивании окна получается вот такая фигня. Как сделать хотя бы «резиновую» упаковку, чтобы размеры виджетов также увеличивались пропорционально (а-ля Qt, при помещении в layout'ы) и не было этих некрасивых пустых пробелов до границ окна?
  3. При уменьшении размеров окна получается вот такое. Как запретить, чтобы виджеты «не терялись» при ресайзе, кроме как делать fixed size окна?

Продолжаю читать документацию по Tkinter, буду благодарен если не только ткнёте носом в ошибку, но еще и объясните немного :). Спасибо.

#!/usr/bin/env python

import Tkinter as Tk

def main():
    root = Tk.Tk()
    root.title("Python::Tk test")

    fr1 = Tk.Frame(root)
    l1 = Tk.Label(fr1, text = "Label 1")
    e1 = Tk.Entry(fr1)
    l1.pack(side = Tk.LEFT)
    e1.pack(side = Tk.LEFT)
    fr1.grid(row = 0, column = 0, columnspan = 2, padx = 10)

    fr2 = Tk.Frame(root)
    l2 = Tk.Label(fr2, text = "Label 2")
    e2 = Tk.Entry(fr2)
    l2.pack(side = Tk.LEFT)
    e2.pack(side = Tk.LEFT)
    fr2.grid(row = 1, column = 0, columnspan = 2, padx = 10)

    fr3 = Tk.Frame(root)
    l3 = Tk.Label(fr3, text = "Label 3")
    e3 = Tk.Entry(fr3)
    l3.pack(side = Tk.LEFT)
    e3.pack(side = Tk.LEFT)
    fr3.grid(row = 2, column = 0, columnspan = 2, padx = 10)

    quit = Tk.Button(root, text = "Quit")
    quit.grid(row = 5, column = 0, sticky = Tk.W + Tk.S)

    blah = Tk.Button(root, text = "Blah!")
    blah.grid(row = 5, column = 2, sticky = Tk.E + Tk.S)

    canvas = Tk.Canvas(root, width = 500, height = 500, bg = "white")
    canvas.grid(row = 0, column = 3, columnspan = 4, rowspan = 4)
    
    root.mainloop()

if "__main__" == __name__:
    main()
kondor
()

Как «расшарить» pulseaudio с chroot?

Есть хостовая машина с Ubuntu с работающим pulseaudio. На ней в chroot запущена еще одна инсталляция с Ubuntu, в которой крутится некая программа. Этой самой программе нужен доступ к звуковой подсистеме машины для создания неких звуковых уведомлений, однако подсистема часто используется хостом (через pulseaudio), из-за чего программа весело сообщает о "sound output error".

Как можно сделать, что бы вся работа со звуком в chroot шла через хостовый pulseaudio? Сама программа позволяет выбирать устройства вывода. Или это принципиально невозможно? Какие еще есть альтернативы?

Спасибо.

kondor
()

RMS и EULA

Интервью RMS журналу PCA

I received an EeePC as a gift, but I could not run it because my conscience will not let me agree to the EULA. Finally, I asked someone to install a free GNU/Linux distro so the machine could be used.

Все-таки, RMS бесподобен!

kondor
()

Apache, 304

Есть примитивный репозиторий .deb пакетов, состоящий собственно из Packages.gz, Packages.bz2 и самих файлов.

Когда скачиваешь Packages.* напрямую, например, с помощью wget/curl, Apache отдает файл со статусом 200. Когда GET делает 'Debian APT-HTTP' файл отдается со статусом 304 (Not Modified) — и соответственно, удаленный клиент не знат, что есть обновления.

Что быстрее всего и как в данном случае можно поправить: репозиторий или настройки сервера (.htaccess), что бы отдавался честный 200, ибо файл действительно изменился? Спасибо.

На ум приходит пока w/a в виде cgi-скрипта, который будет подставлять свои хидеры и отдавать сам файл.

kondor
()

Не работает hibernate

Имеется: Ubuntu 8.10, lvm

Хочу сделать encrypted swap для машинки (/home уже зашифрован), для чего сделал следующее:

Сделал том на LVM, зашифровал его (luksFormat), открыл, сделал mkswap, закрыл и обновил файлы:

/etc/crypttab:

homevolume  /dev/sys-vol/home    none   luks,retry=3
swapvolume  /dev/sys-vol/swap    none   luks,retry=3,swap

/etc/fstab:

...
/dev/mapper/swapvolume   none  swap  sw  0  0

Ну и на всякий случай сделал:

update-initramfs -k all -c; reboot

При загрузке все Ok — спрашивает пароли. При попытке сделать hibernate, пишет в консоль:

[ 1234.5678 ] PM: Cannon find swap device, try swapon -a

и возвращает в гномовскую сессию. Что я тут не докрутил, что бы работал hibernate на зашифрованный swap?

mount | grep swap | wc -l возвращает 0, /dev/mapper/swapvolume существует.

Спасибо.

P.S. До этого, на незашифрованном swap, hibernate работал «на ура».

kondor
()

GtkTreeView/C: как расположить столбцы?

Есть GtkTreeView с GtkListStore в качестве модели. Состоит из трех столбцов с соответствующими renderer'ами: GtkCellRendererText, GtkCellRendererPixbuf, GtkCellRendererPixbuf.

+-------+----+----+
| text | p1 | p2 |
+-------+----+----+

Как сделать, что бы крайние два столбца c GtkCellRendererPixbuf были выравнены по правую сторону (прижаты к правой стороне), а все остальное пространство было занято столбцом с GtkCellRendererText с выравниванием по левой стороне?

Столбцы добавляются с помощью gtk_tree_view_insert_column_with_data_func().

Спасибо.

>>>

kondor
()

Еще один IM

cut-here >>>

http://habrahabr.ru/blogs/im/42639/#habracut

MDC – мультипротокольный клиент обмена сообщениями с поддержкой операционных систем Windows, Linux, MacOS X и протоколов ICQ, Mail.Agent, Jabber, AOL

# Хранение истории переписки на сервере;
# Переносимость;
# Поддержка основных протоколов обмена сообщениями. Сейчас MDC поддерживает такие протоколы, как ICQ, AOL, Mail.Agent, Jabber (плюс Gtalk и Я.Online). В ближайшее время бета-версия MDC выйдет с поддержкой протокола MSN.
# Объединение контактов (метаконтакты). Это ещё одна полезная фишка, которая позволяет объединять контакты одного и того же человека из разных систем обмена сообщениями, что позволяет как минимум не задуматься о том, каким протоколом пользуется Ваш собеседник.

<<< cut-here

>>>

kondor
()

Gtk/C: как расположить тулбары?

Привет,

Делаю три, рядом расположенных, toolbar'а:

GtkWidget* main_vbox = gtk_vbox_new(FALSE, 0);
GtkWidget* toolbar_hbox = gtk_hbox_new(FALSE, 0); // HBox будет "держать" данные тулбары
...
// HPaned --, основная, рабочая зона программы
gtk_box_pack_start(GTK_BOX(main_vbox), hpaned, TRUE, TRUE, 0);

// Сами тулбары, собственно
gtk_box_pack_end(GTK_BOX(main_vbox), toolbar_hbox, FALSE, TRUE, 0);

// First
GtkWidget* toolbar1 = gtk_toolbar_new();
gtk_box_pack_start(GTK_BOX(toolbar_hbox), toolbar1, TRUE, TRUE, 0);

// Second
GtkWidget* toolbar2 = gtk_toolbar_new();
gtk_box_pack_start(GTK_BOX(toolbar_hbox), toolbar2, TRUE, TRUE, 0);

// Third
GtkWidget* toolbar3 = gtk_toolbar_new();
gtk_box_pack_end(GTK_BOX(toolbar_hbox), toolbar3, TRUE, TRUE, 0);

В итоге получаю то, что изображенно на http://xs232.xs.to/xs232/08420/actual394.png. Надо, что бы крайний тулбар был выравнен по правому краю, как на http://xs232.xs.to/xs232/08420/desired510.png.
Как это сделать?

Спасибо.

>>>

kondor
()

GtkListStore/GtkTreeModel: вопросы

В силу того, что код для изучения, использующий GtkListStore попадается противоречивый, у меня возникло пара вопросов:

1. Как надо правильно освобождать память из под элементов в GtkListStore в конце работы? gtk_list_store_clear()? Встретил код, где итеративно с помощью gtk_tree_model_get() берутся элементы и им делается g_free() -- но, насколько я понимаю, удаляются только копии элементов, а не сами элементы.

2. Что происходит с предыдущим элементом в GtkListStore, когда я делаю gtk_tree_model_set() по существующему итератору? Ведь память из под него не освобождается? Как правильно удалить предыдующий элемент в модели перед тем как задать новый на его место?

Нужно для подобного, что бы избежать утечек памяти:

GtkTreeIter iter;
struct MyData* data;
...
// Get item
gtk_tree_model_get(model, &iter, 0, &data, -1);

// set new name
g_free(data->name);
data->name = generate_name();

// Update item
gtk_tree_model_set(model, &iter, 0, data, -1);

free_my_struct(data);

Использование gtk_list_store_remove() для этого выглядит несколько брутально, ибо придется городить нечто для случаев, когда заменяется первый/крайний элемент.

Спасибо.

>>>

kondor
()

GtkTreeSelection: выделить строку

Меняю строки в моделе местами:

     next_iter = gtk_tree_iter_copy(&current_iter);
     gtk_tree_model_iter_next(model, next_iter);
 
     gtk_list_store_swap(GTK_LIST_STORE(model), &current_iter, next_iter);

И хочу, что бы выделение перемещалось вместе с перемещенной на 
позицию вниз строкой.

GtkTreeSelection* selection = gtk_tree_view_get_selection(
                                       GTK_TREE_VIEW(tree_view));
gtk_tree_selection_select_iter(selection, next_iter);

Но проблема в том, что выделение как оставалось на одном месте,
так и остается. Вместо next_iter пробовал &current_iter --
но результат один и тот же. Что я делаю не так?

Спасибо.

P.S. Данные действия производятся в обработчике сигнала 'activate' 
наследника GtkCellRendererPixbuf.

>>>

kondor
()

GtkTreeIter: узнать о предыдущем и следующем элементах

Есть GtkTreeCellDataFunc. Внутри ее доступны: GtkTreeViewColumn, GtkCellRenderer, GtkTreeModel, GtkTreeter. Как правильно узнать, имеются ли у текущего элемента prev и next sibling элементы?

Это продолжение вопроса; нужно для того, чтобы правильно расставить управляющие pixbuf'ы во View для первого и крайнего элементов соответственно.

Пока удалось только найти gtk_tree_model_iter_next(). Но у этого варианта отсутствует парная _prev() функция + выглядит данный подход как-то криво.

Спасибо.

>>>

kondor
()

GtkTreeView: как сделать следующий View наиболее правильно?

Надо сделать View вида:

+--------+--------+-----+
| data11 | data12 |  ↓  |
+--------+--------+-----+
| data21 | data22 | ↑ ↓ |
+--------+--------+-----+
| data31 | data32 | ↑   |
+--------+--------+-----+

где:
 data* -- значения, берущиеся из модели
 ↑ и ↓ -- управляющие Pixbuf'ы. При клике на один из них строка 
соответственно перемещается на уровень выше или ниже соответственно.

Как наиболее правильно представить и реализовать эти arrows связанные с GtkTree?

Пока придумал, что под каждую из стрелок сделать свой GtkCellRendererPixbuf.
Но есть мысль, что такой подход, возможно, крив/неправилен с точки 
зрения построения UI в Gtk. Плюс, возможно этот элемент UI будет 
выглядеть внешне не особо красиво. 

Спасибо.

>>>

kondor
()

Подскажите железку для домашнего сервера

Есть пара SATA винтов с файлопомойкой, воткнутые в десктоп, который выполняет также и функцию сервера.

Надо: вынести функционал сервера (webserver, torrent, e-donkey) в отдельную железку -- максимально маленькую, тихую, беспроблемную и дешевую :); железка должна позволять поставить полноценный линукс, с которым можно вытворять что угодно. Подключение к сети: ethernet.

Мысли: купить б/у eee pc с разбитым дисплеем, завернуть винты в usb-боксы и подключить к eee pc. Единственный вопрос: обеспечить корректное выключение системы при потери электричества.

Но, традиционно, не хочется изобретать очередной велосипед. Может есть уже готовые и недорогие варианты? Интересуют конкретные вендоры и модели. Парится со сборкой отдельной машинки на базе PC нет ни желания, ни времени.

>>>

kondor
()

Наследование класса в Gtk (GtkCellRendererPixbuf)

В продолжение вопроса: хочу создать класс-наследник GtkCellRendererPixbuf, который бы генерил сигнал при клике на него.

Вот что с ходу вышло (pastebin, класс CellRendererPixbuf):
CellRendererPixbuf.h
CellRendererPixbuf.c

И застрял на том, что не понимаю, как надо emit'ить сигнал. Подскажите, пожалуйста, как это делается? В исходники GtkCellRendererToggle смотрел, но запутался. Заодно, если не сложно, посмотрите на код -- все ли верно написал. Спасибо.


P.S. Копипаст утомляет, что бы сделать примитивнейший класс-наследник; либо я просто пока не умею готовить Gtk :).

>>>

kondor
()

python и libxml2: парсинг с валидацией

Кто имел дело с libxml2, скажите, умеет он умеет парсинг с валидацией по схеме? Отсутствующая валидация настолько скудна, что я мог и прозевать такой функционал.

Есть: исходный документ, соответствующая схема.
Нужно: отпарсить документ по заданной схеме и иметь возможность получать дефолтные (заложены в схеме) значения атрибутов.

Вот такое не работает:

schema_parser_ctx = libxml2.schemaNewParserCtxt("/path/to/schema.xsd")
schema = schema_parser_ctx.schemaParse()
valid_schema = schema.schemaNewValidCtxt()

doc = libxml2.readFile("/path/to/doc.xml", None, libxml2.XML_ERR_WARNING)
doc.schemaValidateDoc(valid_schema)
# далее идет перебор элементов

Спасибо.

>>>

kondor
()

GtkCellRendererPixbuf: обработать clicked

GtkCellRendererPixbuf не имеет сигналов вовсе. Нужен аналог сигнала clicked: т.е. обработать клик мышкой на данную ячейку (картинку). Какие есть менее трудоемкие (без создания нового класса) и прямые способы? Возможно что-то с event'ами?

>>>

kondor
()

[специалистамЪ] О ноутбуках

Специалисты ЛОРа, требуется ваша консультация ;).

1. Имеет ли смысл вкладывать значительные (up to $1.7k-$2k) финансовые средства на покупку ноутбука? При условии:
* что ноут будет первое время заменой десктопу
* данная сумма является заметной частью бюджета
* покупатель не крутой бизнесмен :)

Движет желание получить качественную и надежную машинку с потенциалом на ближайшее время как в плане дестопа, так и в плане мобильного компьютера. Если что, речь идет о ThinkPad T61.

2. Является ли наличие предустановленной ОС обязательным в случае гарантийного случая? Т.е. если там увидят Linux, могут отказать в ремонте?

3. И есть ли предпосылки, что стоимость данного ноута может заметно упасть в ближайшие полгода-год?

Спасибо.

>>>

kondor
()

Gnome: Отсутствует принтер в Qt-приложениях

Ubuntu 8.04, Gnome

Во всех Qt (v3.xx, v4.xx) приложениях Print Dialog показывает отсутствие принтера (http://img134.imageshack.us/img134/474/qtprintdialogdm6.png). Уже порядком надоело делать print-to-postscript, после чего выполнять печать из Evince :).

Принтер сетевой, в CUPS (http://localhost:631) присутствует:

Description: LaserJet P2015
Location: ***
Printer Driver: HP LaserJet P2015 Series Postscript (recommended)
Printer State: idle, accepting jobs, published.
Device URI: hp:/net/HP_LaserJet_P2015_Series?ip=***.***.***.***

Как добавить принтер для Qt приложений? qtconfig такого функционала не предоставляет.

Спасибо.

>>>

kondor
()

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