LINUX.ORG.RU

Сообщения fat_angel

 

Разыскивается torrent-клиент умеющий обрезать длинные имена файлов в раздаче.

Форум — Desktop

Приветствую.

Возникла потребность закачать файл с неимоверно длинными именами файлов. Кто умеет?

fat_angel
()

А существует ли что-нибудь для качественной верстки формул окромя TeX и металлического набора?

Форум — Talks

Привет.

SUBJ. Открытое или закрытое, бесплатное или стоящее сотен нефти — пофиг, интересует сам факт наличия. TeX конечно классный результат выдает, но этот его макроязык расширений и заточенность под однобайтную кодировку заставляют плакать и звать маму.

fat_angel
()

[アニメ] Посоветуйте чего-нибудь в духе Patlabor

Форум — Talks

Ну и вообще что-нибудь в духе мастера Мамору, чтоб непременно была социально-политическая составляющая.

// GITS'ов уже видел

fat_angel
()

[LaTeX] Изменение геометрии страницы в определении стиля страницы

Форум — General

Приветствую.

Пытаюсь запилить для себя стиль страниц по ГОСТ 21.101–97 СПДС «Оосновные требования к проектной и рабочей документации». Вкратце, для тех кто не в курсе — это тот же ЕСКД, но с другими штампами, для строителей. Вот, что получилось

\documentclass[14pt,a4paper]{extarticle}

\usepackage{xltxtra}
\setmainfont{Linux Libertine O}

\usepackage{polyglossia}
\setmainlanguage{russian}

\usepackage{indentfirst}
\frenchspacing

% Поля страницы по ЕСКД
\usepackage[
    left=30mm,
    top=15mm,
    right=15mm,
    bottom=15mm,
    footskip=10mm,
    nohead,
    nomarginpar,
    driver=xetex
]{geometry}

% Создаем новые стили страницы
\makeatletter
\newcommand{\spds@titleheight}[1]{%
  \setlength{\textheight}{\paperheight}
  \addtolength{\textheight}{-#1}
  \addtolength{\textheight}{-30mm}
}

% Титульный лист
\newcommand\ps@spdstitle{%
    \spds@titleheight{0mm}
    \renewcommand{\@oddhead}{}
    \renewcommand{\@evenhead}{}
    \renewcommand{\@oddfoot}{%
        \unitlength=1mm
        \begin{picture}(0,0)(10,0)
            \linethickness{0.6mm}
            \put(0,0){\line(1,0){185}}
            \put(0,287){\line(1,0){185}}
            \put(0,0){\line(0,1){287}}
            \put(185,0){\line(0,1){287}}
        \end{picture}
        СПДС~— Титульный лист\hfill % Debug
    }
    \renewcommand{\@evenfoot}{}
}

% Первый лист — форма 5 по ГОСТ 21.101–97
\newcommand\ps@spdsformfive{%
    \spds@titleheight{40mm}
    \renewcommand{\@oddhead}{}
    \renewcommand{\@evenhead}{}
    \renewcommand{\@oddfoot}{%
        \unitlength=1mm
        \begin{picture}(0,0)(10,0)
            \linethickness{0.6mm}
            % Рамка
            \put(0,0){\line(1,0){185}}
            \put(0,287){\line(1,0){185}}
            \put(0,0){\line(0,1){287}}
            \put(185,0){\line(0,1){287}}
            % Штамп
            \put(0,25){\line(1,0){185}}
            \put(0,40){\line(1,0){185}}
            \put(0,30){\line(1,0){65}}
            \put(135,15){\line(1,0){50}}
            \put(135,20){\line(1,0){50}}
            \put(20,0){\line(0,1){40}}
            \put(40,0){\line(0,1){40}}
            \put(55,0){\line(0,1){40}}
            \put(65,0){\line(0,1){40}}
            \put(135,0){\line(0,1){25}}
            \put(150,15){\line(0,1){10}}
            \put(165,15){\line(0,1){10}}
            \put(10,25){\line(0,1){15}}
            \put(30,25){\line(0,1){15}}
            \linethickness{0.2mm}
            \put(0,5){\line(1,0){65}}
            \put(0,10){\line(1,0){65}}
            \put(0,15){\line(1,0){65}}
            \put(0,20){\line(1,0){65}}
            \put(0,25){\line(1,0){65}}
            \put(0,35){\line(1,0){65}}
        \end{picture}
        СПДС~— Основная надпись по форме 5\hfill % Debug
    }
    \renewcommand{\@evenfoot}{}
}
\makeatother

\begin{document}

\thispagestyle{spdstitle}

Тестовый текст в начале страницы.

\vfill

Тестовый текст в конце страницы.

\newpage
\pagestyle{spdsformfive}
%\newgeometry{bottom=55mm}

Тестовый текст в начале страницы.

\vfill

Тестовый текст в конце страницы.

\newpage
Тестовый текст в начале страницы.

\vfill

Тестовый текст в конце страницы.

\newpage
Тестовый текст в начале страницы.

\vfill

Тестовый текст в конце страницы.

\end{document}

Все более-менее работает, но в зависимости от формы штампа должна меняться высота текстового поля, за что отвечает служебная команда \spds@titleheight{}. Она и меняется, но для следующей за текущей страницы. А вот как сделать так, чтоб высота изменялась немедленно?

Можно, конечно, запилить для каждой формы штампа отдельную команду, которая сначала будет дергать \newgeometry{} из пакета geometry с нужными параметрами, а потом будет устанавливать стиль страницы, но выглядит это уж больно костыльно. Может есть способ довести до ума стиль страницы?

P.S. Компилировать XeLaTeX'ом или переделать преамбулу.

 

fat_angel
()

Замечательная цитата про лютый ужас верстки 14 кеглем с 1.5 интервалом

Форум — Talks

Читаю документацию к \ConTeXtу и наткнулся на прекрасную цитату:

In books meant for children we often find a somewhat bigger typeface,
for instance because we are convinced that this enables them to read
the book themselves. On the other hand, I can also imagine that it is
a cheap way to increase the number of pages. Unfortunately scaling
up will also uncover the lack of quality of the typesetting used and/or
the lack of typographic knowledge of the user of such a system.


Мой, очень вольный, перевод для Ъ:

В книгах для детей мы часто можем встретить, к примеру, увеличенные шрифты, поскольку мы убеждены, что это позволяет им читать книги самостоятельно. С другой стороны, я так же могу представить, что это простой путь увеличения количества страниц. К сожалению увеличение так же открывает отсутствие качества верстки и/или отсутствие познаний в типографике у пользователя таких систем.

fat_angel
()

А что случилось со scribus.net и fontmatrix.net?

Форум — Talks
fat_angel
()

LaTeX VS ConTeXt — где проще создать очень хитрое оформление?

Форум — Development

Приветствую.

Возниклла задача написать пояснительную записку к проекту в соответствии с требованиями СПДС. Вкратце нужны рамки как в eskdx, но с другими угловыми штампами, да и вообще этот eskdx мне не очень нравится — какой-то топорный. Поэтому, скорее всего, мне придется создавать новый класс для LaTeX (возможно переплив eskdx). Или может проще взять ConTeXt, который, как я понял, как раз и создавался для быстрой верстки документов с очень нетривиальным форматированием.

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

fat_angel
()

[ШГ] Нарисовал, тут вот, отрытую версию шрифтов по ГОСТ 2.304-81

Форум — Talks

Приветствую.

Решив не бросать слов на ветер, запилил первую версию шрифтов по ГОСТ 2.304-81 «Шрифты чертежные», за символическим номером 0.0.1. Пока есть только прямое начертание типа А. Тип Б и наклонные начертания обоих типов запилю позже, как разберусь с этим.

На данный момент прорисованы basic latin, кириллица — 66 букв и греческий без диакритики, а также небольшое количество специальных символов. Кернинг находится в начальной стадии.

Нужны люди, заинтересованные в свободной реализации этого шрифта, для советов относительно кернинга и дизайна некоторых глифов. Мое мыло есть в свойствах fonforge'вского файла и соответственно должно быть в otf.

Еще интересно мнение публики о том, где лучше всего запилить проект? Всякие гитхабы с корзинами битов подходят слабо, поскольку засовывать бинарные данные в VCS IMHO глупо. Склоняюсь в стороны гуглокода, но корпорация добра немного пугает.

Лицензия SIL OFL.

Скачать бесплатно и без регистрации: otf & sfd, скрин для Ъ 1, скрин для Ъ 2

P.S. Для шрифтотроллей aka megabaks & co хочу уточнить, что шрифт ни разу не для экрана, но для печати.

 

fat_angel
()

Свободные реализации шрифтов по ГОСТ 2.304-81 «Шрифты чертежные»

Форум — General

Приветствую.

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

fat_angel
()

Самый бесполезный модератор

Голосования — Голосования

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

  1. Кто здесь? 654 (68%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. Kirill A Korinskiy (catap) 124 (13%)

    ************************************************************

  3. Андрей (Shaman007) 122 (13%)

    ***********************************************************

  4. Василий (mono) 103 (11%)

    **************************************************

  5. Тёма (JB) 99 (10%)

    ************************************************

  6. Тимур Давлетшин (timur_dav) 97 (10%)

    ***********************************************

  7. Александр Наталенко (post-factum) 86 (9%)

    ******************************************

  8. Слава Поздняков (Pi) 84 (9%)

    *****************************************

  9. annoynimous (annoynimous) 77 (8%)

    *************************************

  10. Тим (hibou) 72 (8%)

    ***********************************

  11. Ben Aceler (Aceler) 69 (7%)

    *********************************

  12. Dmitry A. Koptev (Dimez) 63 (7%)

    ******************************

  13. Sergey V. Udaltsov (svu) 52 (5%)

    *************************

  14. Михаил (anonymous_incognito) 52 (5%)

    *************************

  15. Другой вариант ответа (указать в комментариях) 41 (4%)

    ********************

Всего голосов: 1795, всего проголосовавших: 960

 

fat_angel
()

Что это делает на главной странице?

Форум — Linux-org-ru

Shaman007 тебе не стыдно http://www.linux.org.ru/polls/polls/6967616?

Какой следующий опрос на очереди? Самый ненужный дистрибутив? Самое ненужное DE?

fat_angel
()

[iptables] Какие порты использует jabber'овский jingle?

Форум — Admin

Мое гугл-фу сегодня совсем никуда не годится. Какие входящие порты следует открывать для нормальной работы протокола Jingle (видео-аудио-файлообмен через jabber). Если это важно то клиент Gajim.

 

fat_angel
()

[iptables] DROP vs. REJECT

Форум — Admin

Приветствую.

Что лучше применять к «левым» пакетам — DROP или REJECT. Если я правильно понял из подобных обсуждений, при DROP у какера Васи будет висеть незакрытое соединение. При REJECT происходит корректное закрытие. Так что лучше?

При этом на моей машине соответствующее соединение закрывается при любом способе сброса пакета, правильно?

 

fat_angel
()

[Gentoo][Ruby][Hate] Когда уже размаскируют Ruby 1.9?

Форум — Talks

Решил значит я потыкать палочкой ruby. Тыкать дохлый 1.8 не хочется, а 1.9, как выяснилось, даже не думают размаскировывать. Все это, если я правильно понял, в основном из-за того, что мейнтейнеры гонятся за возможностью безпроблемного сосуществования 1.8 и 1.9. И это не смотря на то, что 1.8 скоро совсем перестанут поддерживать.

Я еще могу понять ситуацию с пистоном, где для тройки нет многих библиотек, но тем не менее тройка размаскирована. А рубин 1.9 в котором, если верить аналитикам, почти все библиотеки портированы — замаскирован.

И таки да, это нытик тред. Размаскировать ручками я конечно могу, но головная боль же…

 , ,

fat_angel
()

[sqlite] Как узнать значение primary key для новой записи?

Форум — Development

Привет.

Разбираюсь с SQL. Для связывания разных таблиц между собой решил использовать значение их primary key.

Вопрос в том, как узнать значение этого самого primary key для только что добавленной записи (INSERT). Или лучше его указывать вручную при INSERT? Но тогда как его определить? Если брать `SELECT max(id) FROM db_table` то при частом добавлении-удалении записей счетчик может переполнится. Можно взять первый индекс за которым есть пропуск, но каким запросом его найти?

Или может я вообще неправильно поступаю, используя primary key в качестве индекса в таблицах?

 

fat_angel
()

[PyGTK] Чтение больших файлов — как правильнее.

Форум — Development

Приветствую.

Интересует вопрос как лучше организовать чтение больших текстовых файлов в PyGtk, чтоб не замораживался интерфейс. Для определенности будем считать большим файл объема в 20-30 Мб.

На данный момент в голове крутятся идеи с потоками (threading.Thread) и чтением маленькими кусками с вызовом gtk.main_iteration() между чтениями. Также подумывал об использовании gio.File() с его async методами, но так и не нашел способа сделать seek по файлу при async чтении (нужно для дочитывания лог-файлов). К тому же для чтения сжатых файлов надо ставить gvfs которая в большинстве дистрибутивов тянет пол гнума.

Ваши идеи?

 

fat_angel
()

[GTK] Как вызвать GtkEntryCompletion?

Форум — Development

Приветствую.

Интересует вопрос как можно вызвать GtkEntryComletion ручками? В первую очередь интересует popup completion. Это нужно для реализации автодополнения по Tab (или любому другому сочетанию клавиш).

Пробовал дергать метод gtk_entry_completion_complete() (правда через pygtk) — ничего не происходило. Да и судя по документации он просто обновляет список предложений для автодополнения.

Или, мне сейчас подумалось, я все делаю не правильно, и надо не вызывать автодополнение, а всего лишь разрешать/запрещать его, при нажатии соответствующей комбинации клавиш?

 

fat_angel
()

[pygtk] Создание собственных моделей для gtk.TreeView

Форум — Development

Приветствую.

Пришел к мысли, что копировать данные в gtk.ListStore или gtk.TreeStore во многих случаях неэффективно. Захотел создать свою собственную модель. В сети есть куча примеров этого с использованием gtk.GenericTreeModel, однако как выяснилось его выпилили в 3-м pygtk. Соответственно, чтоб поменьше портировать в будущем я хотел бы создать свою новую модель на основе gtk.TreeModel. Это реально? Если да то поделитесь советом или киньте пример кода.

 

fat_angel
()

[gtk][pygtk] Неправильная реакция на обработчики сигналов «test-collapse-row» и «test-expand-row» виджета gtk.TreeView

Форум — Development

Приветствую.

При реализации «ленивого» дерева обнаружил, что виджет gtk.TreeView неверно реагирует на возвращаемые значения обработчиков сигналов «test-expand-row» и «test-collapse-row». В документации говорится, что узлы дерева раскрываются и закрываются если обработчики этих сигналов возвращают True. На деле все происходит с точностью до наоборот — возвратишь True получишь фигу, возвратишь False получишь желаемый результат.

Вот тестовый код:

import gtk


class MyTreeView(gtk.TreeView):
    __gsignals__ = {
        "test-expand-row": "override",
        "test-collapse-row": "override"
    }

    def __init__(self):
        model = gtk.TreeStore(str)
        super(MyTreeView, self).__init__(model)

        # Fill model
        for i in range(5):
            parent = model.append(None, ("Parent %d" % i,))
            for j in range(4):
                model.append(parent, ("Child %d" % j,))

        # Create column and cellrenderers
        column = gtk.TreeViewColumn()
        self.append_column(column)
        renderer = gtk.CellRendererText()
        column.pack_start(renderer, True)
        column.set_attributes(renderer, text=0)

        self.set_headers_visible(False)

    def do_test_expand_row(self, iter, path):
        return False

    def do_test_collapse_row(self, iter, path):
        return True

def main():
    window = gtk.Window()
    window.set_title("TreeView Signals Test")
    window.set_default_size(600, 400)
    window.connect("destroy", gtk.main_quit)
    sw = gtk.ScrolledWindow()
    tree = MyTreeView()
    sw.add(tree)
    window.add(sw)
    window.show_all()
    gtk.main()

if __name__ == '__main__':
    main()

У меня узлы дерева распахиваются, но закрыться не в состоянии, хотя должно быть наоборот! Версия pygtk 2.24.0.

Если не мудрить с __gsignals__ и воспользоваться connect() результат аналогичен:

import gtk


class MyTreeView(gtk.TreeView):
    def __init__(self):
        model = gtk.TreeStore(str)
        super(MyTreeView, self).__init__(model)

        # Fill model
        for i in range(5):
            parent = model.append(None, ("Parent %d" % i,))
            for j in range(4):
                model.append(parent, ("Child %d" % j,))

        # Create column and cellrenderers
        column = gtk.TreeViewColumn()
        self.append_column(column)
        renderer = gtk.CellRendererText()
        column.pack_start(renderer, True)
        column.set_attributes(renderer, text=0)

        self.set_headers_visible(False)

        self.connect("test-expand-row", self.__test_expand_row)
        self.connect("test-collapse-row", self.__test_collapse_row)

    def __test_expand_row(self, widget, iter, path):
        return False

    def __test_collapse_row(self, widget, iter, path):
        return True

def main():
    window = gtk.Window()
    window.set_title("TreeView Signals Test")
    window.set_default_size(600, 400)
    window.connect("destroy", gtk.main_quit)
    sw = gtk.ScrolledWindow()
    tree = MyTreeView()
    sw.add(tree)
    window.add(sw)
    window.show_all()
    gtk.main()

if __name__ == '__main__':
    main()

 ,

fat_angel
()

[pygtk] Пара проблем при использовании gio.FileMonitor

Форум — Development

Приветствую.

Вот решил переписать свой виджет дерева директорий на gio и заодно добавить в него автоматическое обновление при изменении в структуре директорий. Для реализации автообновления решил заюзать gio.FileMonitor и вот тут-то у меня возникли проблемы.

Во-первых т.к. gio.FileMonitor не умеет следить за изменениями в директориях рекурсивно, его приходится вешать на каждую директорию отображаемую в дереве. Соответственно при удалении директории обработчик сигнала «changed» вызывается 2 раза, один раз от монитора удаленной директории, а второй от монитора родительской директории. Это конечно не большая проблема, но может можно как-нибудь решить?

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

Кстати еще заметил странное поведение обработчика сигнала «test-expand-row» виджета gtk.TreeView. В документации написано, что раскрытие происходит если он возвращает True. На практике все с точностью до наоборот.

Вот код:

import glib
import gtk
import gio


class DirectoryTree(gtk.TreeView):
    __gsignals__ = {
        "test-expand-row": "override"
    }

    def __init__(self, uri, show_hidden=False):
        model = gtk.TreeStore(gio.File, gio.Icon, str)
        super(DirectoryTree, self).__init__(model)
        self.__show_hidden = show_hidden
        self.__uri = uri
        self.__gemblem_noread = gio.Emblem(gio.ThemedIcon("emblem-noread"),
                gio.EMBLEM_ORIGIN_LIVEMETADATA)
        self.__gemblem_symlink = gio.Emblem(gio.ThemedIcon(
                "emblem-symbolic-link"), gio.EMBLEM_ORIGIN_LIVEMETADATA)
        
        column = gtk.TreeViewColumn()
        
        renderer = gtk.CellRendererPixbuf()
        column.pack_start(renderer, False)
        column.set_attributes(renderer, gicon=1)
        renderer = gtk.CellRendererText()
        column.pack_start(renderer, True)
        column.set_attributes(renderer, text=2)

        self.set_headers_visible(False)
        # Sort files by their names
        model.set_sort_column_id(2, gtk.SORT_ASCENDING)
        self.append_column(column)

        # Create root item
        gfile = gio.File(uri)
        title = gfile.query_info("standard::display-name").get_display_name()
        gicon = self.__get_emblemed_icon(gfile)
        iter = model.append(None, (gfile, gicon, title))
        self.__install_gfile_monitor(gfile, iter)
        model.append(iter)
        self.__check_for_subdirs(iter)

    def __check_for_subdirs(self, iter):
        model = self.get_model()
        gfile = model.get_value(iter, 0)
        try:
            gfinfos = gfile.enumerate_children("standard::type")
            for i in gfinfos:
                if i.get_file_type() == gio.FILE_TYPE_DIRECTORY:
                    return
        except gio.Error:
            pass
        model.remove(model.iter_children(iter))

    def __install_gfile_monitor(self, gfile, iter):
        monitor = gfile.monitor()
        monitor.connect("changed", self.__on_gfile_changed, iter)

    def __on_gfile_delete(self, parent, gfile):
        model = self.get_model()
        child = model.iter_children(parent)
        if child is None:
            return
        if model.get_value(child, 0) is None:
            glib.idle_add(self.__check_for_subdirs, parent)
        else:
            while child:
                stored_gfile = model.get_value(child, 0)
                if gfile.equal(stored_gfile):
                    model.remove(child)
                    child = None
                else:
                    child = model.iter_next(child)

    def __on_gfile_create(self, parent, gfile):
        model = self.get_model()
        try:
            gfinfo = gfile.query_info("standard::type,"
                    "standard::display-name,standard::is-hidden")
        except gio.Error, e:
            return
        if gfinfo.get_file_type() != gio.FILE_TYPE_DIRECTORY:
            return
        # Not show hidden items if we not want them
        if not self.__show_hidden and gfinfo.get_is_hidden():
            return
        child = model.iter_children(parent)
        if child is None:
            model.append(parent)
        elif model.get_value(child, 0) is not None:
            gicon = self.__get_emblemed_icon(gfile)
            title = gfinfo.get_display_name()
            child = model.append(parent, (gfile, gicon, title))
            self.__install_gfile_monitor(gfile, child)
            model.append(child)
            glib.idle_add(self.__check_for_subdirs, child)

    def __on_gfile_changed(self, monitor, gfile, other_gfile, event_type, iter):
        if event_type == gio.FILE_MONITOR_EVENT_CREATED:
            self.__on_gfile_create(iter, gfile)
        elif event_type == gio.FILE_MONITOR_EVENT_DELETED:
            self.__on_gfile_delete(iter, gfile)

    def __get_emblemed_icon(self, gfile):
        gfinfo = gfile.query_info("standard::icon,standard::is-symlink,"
                "access::can-read,access::can-write")
        if not gfinfo.get_attribute_boolean("access::can-read"):
            gicon = gio.EmblemedIcon(gfinfo.get_icon(), self.__gemblem_noread)
        elif gfinfo.get_attribute_boolean("standard::is-symlink"):
            gicon = gio.EmblemedIcon(gfinfo.get_icon(), self.__gemblem_symlink)
        else:
            gicon = gfinfo.get_icon()
        return gicon

    def __fill_model(self, iter):
        model = self.get_model()
        gfile = model.get_value(iter, 0)

        gfinfos = gfile.enumerate_children("standard::type,standard::name,"
                "standard::display-name,standard::is-hidden")
        for i in gfinfos:
            if i.get_file_type() != gio.FILE_TYPE_DIRECTORY:
                continue
            # Not show hidden items if we not want them
            if not self.__show_hidden and i.get_is_hidden():
                continue
            child = gfile.get_child(i.get_name())
            gicon = self.__get_emblemed_icon(child)
            title = i.get_display_name()
            child_iter = model.append(iter, (child, gicon, title))
            self.__install_gfile_monitor(child, child_iter)
            model.append(child_iter)
            glib.idle_add(self.__check_for_subdirs, child_iter)

    def do_test_expand_row(self, iter, path):
        model = self.get_model()
        child = model.iter_children(iter)
        if model.get_value(child, 0) is None:
            model.remove(child)
            self.__fill_model(iter)

def main():
    window = gtk.Window()
    window.set_title("Directory Tree")
    window.set_default_size(600, 400)
    window.connect("destroy", gtk.main_quit)
    sw = gtk.ScrolledWindow()
    dirtree = DirectoryTree("file:///")
    sw.add(dirtree)
    window.add(sw)
    window.show_all()
    gtk.main()


if __name__ == "__main__":
    main()

 

fat_angel
()

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