Разыскивается torrent-клиент умеющий обрезать длинные имена файлов в раздаче.
Приветствую.
Возникла потребность закачать файл с неимоверно длинными именами файлов. Кто умеет?
Приветствую.
Возникла потребность закачать файл с неимоверно длинными именами файлов. Кто умеет?
Привет.
SUBJ. Открытое или закрытое, бесплатное или стоящее сотен нефти — пофиг, интересует сам факт наличия. TeX конечно классный результат выдает, но этот его макроязык расширений и заточенность под однобайтную кодировку заставляют плакать и звать маму.
Ну и вообще что-нибудь в духе мастера Мамору, чтоб непременно была социально-политическая составляющая.
// GITS'ов уже видел
Приветствую.
Пытаюсь запилить для себя стиль страниц по ГОСТ 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'ом или переделать преамбулу.
Читаю документацию к \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.
Мой, очень вольный, перевод для Ъ:
В книгах для детей мы часто можем встретить, к примеру, увеличенные шрифты, поскольку мы убеждены, что это позволяет им читать книги самостоятельно. С другой стороны, я так же могу представить, что это простой путь увеличения количества страниц. К сожалению увеличение так же открывает отсутствие качества верстки и/или отсутствие познаний в типографике у пользователя таких систем.
Приветствую.
Возниклла задача написать пояснительную записку к проекту в соответствии с требованиями СПДС. Вкратце нужны рамки как в eskdx, но с другими угловыми штампами, да и вообще этот eskdx мне не очень нравится — какой-то топорный. Поэтому, скорее всего, мне придется создавать новый класс для LaTeX (возможно переплив eskdx). Или может проще взять ConTeXt, который, как я понял, как раз и создавался для быстрой верстки документов с очень нетривиальным форматированием.
Вопрос к людям работавшим с обеими системами — где проще запилить документ с хитрым оформлением? На данный момент я имею только базовые знания о работе с LaTeX, явно недостаточные для создания собственного класса, поэтому мне в любом случае придется читать достаточно много нового материала. Вот я и подумал о ConTeXt, может там оно чуть проще.
Приветствую.
Решив не бросать слов на ветер, запилил первую версию шрифтов по ГОСТ 2.304-81 «Шрифты чертежные», за символическим номером 0.0.1. Пока есть только прямое начертание типа А. Тип Б и наклонные начертания обоих типов запилю позже, как разберусь с этим.
На данный момент прорисованы basic latin, кириллица — 66 букв и греческий без диакритики, а также небольшое количество специальных символов. Кернинг находится в начальной стадии.
Нужны люди, заинтересованные в свободной реализации этого шрифта, для советов относительно кернинга и дизайна некоторых глифов. Мое мыло есть в свойствах fonforge'вского файла и соответственно должно быть в otf.
Еще интересно мнение публики о том, где лучше всего запилить проект? Всякие гитхабы с корзинами битов подходят слабо, поскольку засовывать бинарные данные в VCS IMHO глупо. Склоняюсь в стороны гуглокода, но корпорация добра немного пугает.
Лицензия SIL OFL.
Скачать бесплатно и без регистрации: otf & sfd, скрин для Ъ 1, скрин для Ъ 2
P.S. Для шрифтотроллей aka megabaks & co хочу уточнить, что шрифт ни разу не для экрана, но для печати.
Приветствую.
Возникла необходимость в шрифтах по вышеозначенному стандарту. Кто-нибудь встречал их свободные реализации? Просто нет желания велосипедить их с нуля, проще присоединиться к существующему проекту.
Предлагаю довести градус безумия поставленный этим голосованием до критической отметки.
********************************************************************************************************************************************************************************************************************************************************************************************************************************
************************************************************
***********************************************************
**************************************************
************************************************
***********************************************
******************************************
*****************************************
*************************************
***********************************
*********************************
******************************
*************************
*************************
********************
Всего голосов: 1795, всего проголосовавших: 960

Shaman007 тебе не стыдно http://www.linux.org.ru/polls/polls/6967616?
Какой следующий опрос на очереди? Самый ненужный дистрибутив? Самое ненужное DE?
Мое гугл-фу сегодня совсем никуда не годится. Какие входящие порты следует открывать для нормальной работы протокола Jingle (видео-аудио-файлообмен через jabber). Если это важно то клиент Gajim.
Приветствую.
Что лучше применять к «левым» пакетам — DROP или REJECT. Если я правильно понял из подобных обсуждений, при DROP у какера Васи будет висеть незакрытое соединение. При REJECT происходит корректное закрытие. Так что лучше?
При этом на моей машине соответствующее соединение закрывается при любом способе сброса пакета, правильно?
Решил значит я потыкать палочкой ruby. Тыкать дохлый 1.8 не хочется, а 1.9, как выяснилось, даже не думают размаскировывать. Все это, если я правильно понял, в основном из-за того, что мейнтейнеры гонятся за возможностью безпроблемного сосуществования 1.8 и 1.9. И это не смотря на то, что 1.8 скоро совсем перестанут поддерживать.
Я еще могу понять ситуацию с пистоном, где для тройки нет многих библиотек, но тем не менее тройка размаскирована. А рубин 1.9 в котором, если верить аналитикам, почти все библиотеки портированы — замаскирован.
И таки да, это нытик тред. Размаскировать ручками я конечно могу, но головная боль же…
Привет.
Разбираюсь с SQL. Для связывания разных таблиц между собой решил использовать значение их primary key.
Вопрос в том, как узнать значение этого самого primary key для только что добавленной записи (INSERT). Или лучше его указывать вручную при INSERT? Но тогда как его определить? Если брать `SELECT max(id) FROM db_table` то при частом добавлении-удалении записей счетчик может переполнится. Можно взять первый индекс за которым есть пропуск, но каким запросом его найти?
Или может я вообще неправильно поступаю, используя primary key в качестве индекса в таблицах?
Приветствую.
Интересует вопрос как лучше организовать чтение больших текстовых файлов в PyGtk, чтоб не замораживался интерфейс. Для определенности будем считать большим файл объема в 20-30 Мб.
На данный момент в голове крутятся идеи с потоками (threading.Thread) и чтением маленькими кусками с вызовом gtk.main_iteration() между чтениями. Также подумывал об использовании gio.File() с его async методами, но так и не нашел способа сделать seek по файлу при async чтении (нужно для дочитывания лог-файлов). К тому же для чтения сжатых файлов надо ставить gvfs которая в большинстве дистрибутивов тянет пол гнума.
Ваши идеи?
Приветствую.
Интересует вопрос как можно вызвать GtkEntryComletion ручками? В первую очередь интересует popup completion. Это нужно для реализации автодополнения по Tab (или любому другому сочетанию клавиш).
Пробовал дергать метод gtk_entry_completion_complete() (правда через pygtk) — ничего не происходило. Да и судя по документации он просто обновляет список предложений для автодополнения.
Или, мне сейчас подумалось, я все делаю не правильно, и надо не вызывать автодополнение, а всего лишь разрешать/запрещать его, при нажатии соответствующей комбинации клавиш?
Приветствую.
Пришел к мысли, что копировать данные в gtk.ListStore или gtk.TreeStore во многих случаях неэффективно. Захотел создать свою собственную модель. В сети есть куча примеров этого с использованием gtk.GenericTreeModel, однако как выяснилось его выпилили в 3-м pygtk. Соответственно, чтоб поменьше портировать в будущем я хотел бы создать свою новую модель на основе gtk.TreeModel. Это реально? Если да то поделитесь советом или киньте пример кода.
Приветствую.
При реализации «ленивого» дерева обнаружил, что виджет 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()Приветствую.
Вот решил переписать свой виджет дерева директорий на 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()| ← назад | следующие → |