30 сентября 2014 г.

LibreOffice Writer: Подсветка синтаксиса в документе

Мне часто приходится вставлять в свои руководства листинги программ или другими словами примеры кода на разных языках программирования.  И подобные листинги выглядят гораздо понятнее и красивее, если код в них подсвечен как в обычных текстовых редакторах.

Функция подсветки синтаксиса в LibreOffice реализуется с помощью плагина COOoder (http://extensions.libreoffice.org/extension-center/coooder).


Подробная статья по оформлению листингов в LibreOffice. Спасибо автору статьи, благодаря ему я нашел то, что искал.


ImageMagick: добавление фона к изображению


Как добавить фон(background) к изображению с помощью ImageMagick?

Допустим, у нас есть изображение с прозрачным фоном.

Ubuntu: E: Sub-process /usr/bin/dpkg returned an error code (1)

При установке одно из пакетов возникла ошибка:
Sub-process /usr/bin/dpkg returned an error code (1)

После недолгого гугления ответ был найден на http://forum.ubuntu.ru/index.php?topic=46208.0

Для решения достаточно из /var/lib/dpkg/info удалить все файлы относящиеся к пакету на который ругается dpkg. Например:
dpkg: не удалось обработать параметр vmware-server (--remove): подпроцесс post-removal script возвратил код ошибки 2 При обработке следующих пакетов произошли ошибки: vmware-server E: Sub-process /usr/bin/dpkg returned an error code (1)
Достаточно сделать следующее:
cd /var/lib/dpkg/info
rm vmware-server.* 
apt-get -f install

В результате удаляются пре- и постинсталяционные скрипты, мд5-сумма пакета и файллист.

В /var/cache/apt/archives у меня ничего не было. Но на всякий случай, можете залезть туда и тоже там почистить всё что относится к зависшему пакету.

LibreOffice Writer - Функция «Автотекст»

В блоге опубликован пример из руководства. Для получения полной информации скачайте руководство в формате ODT и PDF (зеркало на Google Drive)

Предисловие

Часто при работе с документами приходится иметь дело с повторяющимися блоками текста такими, как «шапки» документов или место для подписи и даты. В LibreOffice Writer есть очень удобная функция, позволяющая сохранять определенный текст, а затем использовать его в других документах. Данная функция называется «Автотекст». В качестве автотекста можно сохранять форматированный текст, текст с графическими объектами, таблицы и поля.

В данном руководстве подробно рассматриваются аспекты применения функции «Автотекст».

29 сентября 2014 г.

ImageMagick: кадрирование(обрезка) изображений

Декабрь — тяжелая пора для всех студентов. Я не исключение. Сегодня срочно пришлось сканировать (точнее фотографировать) лекции и рассылать их однокурсникам. Изображений получилось много и некогда было тратить время на всякие программы вроде Scan Tailor и gscan2pdf (обе есть в репозиториях Ubuntu). Да и зачем, если под рукой есть ImageMagick и любимый скриптовый язык (в моем случае Python).

Фотографии получились, во-первых, большие, т.к. я поленился лезть в настройки фотоаппарата. Во-вторых, вокруг листов с лекцией было много лишнего пространства.

Таким образом, мне нужно было решить две задачи:
  1. массово уменьшить размеры фотографий
  2. массово кадрировать фотографии
С первой задачей справился мой скрипт из предыдущего поста. Со второй задачей я справился при помощи одной из команд ImageMagick. Об этом и пойдет речь дальше.

Кадрирование изображений с помощью ImageMagick

Кадрирование осуществляется простой командой:
convert -crop {size}{+-}x{+-}y input.png output.png

На деле это выглядит так:
convert -crop 500x640+60+80 input.png output.png

Чтобы понять что значит эта команда, необходимо обратиться к рисунку.
Допустим, весь лист это наше исходное изображение. Серый прямоугольник это полезная область, которая нам нужна, а все остальные поля можно обрезать. Пунктирная линия для наглядности. Серая область имеет размер 500x640 пикселей и отстоит от левого края на 60, от верхнего на 80 px.

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

Итак, применив команду "convert -crop 500x640+60+80 input.png output.png" к моему примеру я получил четко серый прямоугольник:

Массовое кадрирование изображений

Перед тем, как массово обрезать все фотографии с лекциями, мне пришлось потренироваться на одной из них, чтобы найти оптимальную область. А затем применил команду:
convert -crop 500x640+60+80 *.png output.png

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

В качестве выходящего файла я написал output.png, программа сама добавила всем обработанным файлам концовку в виде числа. Т.е. в итоге у меня в папке появились изображения output-0.png, output-1.png, ..., output-n.png.

После этого я загнал все изображения в один PDF файл. И тоже при помощи ImageMagick. Впрочем, это уже тема другого поста.

Массовое кадрирование изображений с разной ориентацией

Данное действие стало моим коронным номером. Если есть необходимость кадрировать изображения с разной ориентацией, то для них нужно подобрать свои пропорции оставляемой области.

За основу я взял свой скрипт py_magick, и изменил в нем всего две строчки. Не буду останавливаться на подробностях работы всего скрипта, они есть в руководстве к нему.

Изменить нужно 78 и 90 строки, вместо:
78 str = 'convert "%s" -resize %sx -quality 95 %s/"%s"' % (file, width, out, file)
и
90 str = 'convert "%s" -resize x%s -quality 95 %s/"%s"' % (file, height, out, file)
написать:
78 str = 'convert -crop 500x640+320+50 "%s" %s/"%s"' % (file, out, file)
90 str = 'convert -crop 640x500+320+50 "%s" %s/"%s"' % (file, out, file)


В 78 строке прописываются параметры для альбомно-ориентированных изображений, в 90 для портретно.

Об экономии времени

В завершении хочу обратить ваше внимание на один примечательный факт. На все эти действия у меня ушло не больше 5 минут. И все они были выполнены с помошью инструмента, который в большинстве дистрибутивов установлен по умолчанию.

ImageMagick: Пакетная обработка изображений с разной ориентацией

Пакетная обработка изображений — одновременное автоматическое выполнение операций над множеством графических файлов.

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

Моим излюбленным инструментом является программа ImageMagick вкупе с языком программирования Python.

Преимущества ImageMagick

ImageMagick — свободный и многоплатформенный пакет программ для неинтерактивной (пакетной) обработки графических файлов. Поддерживает множество форматов изображений и позволяет изменять их размеры, кадрировать, изменять наклон, менять цветовую схему и т.д.

Преимущества:
  • Бесплатность
  • Многоплатформенность (Linux, Mac OS X и др. UNIX-подобные, Windows, iOS)
  • Широкий набор возможностей
  • CLI-интерфейс (да-да именно это одно из основных преимуществ, но есть и графическая оболочка)
  • Наличие интерфейсов для различных языков программирования (Python, Php, Perl и др.)
ImageMagick является консольным графическим редактором. Это означает, что перед вами не будет красивого интерфейса с панелями инструментов и множеством кнопок. Все операции задаются посредством команд, вводимых в командной строке. Многих это отпугивает, но в действительности это является преимуществом программы.

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

Как взломать PDF-документ

Иногда можно наткнуться на PDFдокумент, который защищен паролем от распознавания и копирования. В интернете предлагается много программ для взлома, но зачастую это платные программы или вообще вирусы.

Рассказываю простейший способ обойти защиту и называется он "Печать в файл". Конечно он не всегда срабатывает, потому что защита может стоять и на печать, но в большинстве случаев все прокатывает.

Просто печатаете весь исходный PDF документ в файл, который является таким же PDF документом, но уже без защиты. А далее с этим документом можно работать всеми стандартными средствами. Единственный побочный эффект, это увеличение размеров PDF файла по сравнению с исходным. В большинстве случаев это не приносит неудобств.


В виндовс для Печати в файл я использую программу - PDFCreator (http://www.pdfforge.org)

Xubuntu: утилита rcconf (rcconf needs dialog or whiptail)

В Xubuntu 12.04 LTS у меня возникла проблема с псевдографической утилитой rcconf, которая помогает удалять и добавлять демоны в автозагрузку.

После установки утилита не захотела запускаться, выдав мне сообщение:

rcconf needs dialog or whiptail - rcconf требуется dialog или whiptail.

Dialog и whiptail это программы для создания псевдографических интерфейсов. Однако whiptail уже была у меня установлена по умолчанию. Не знаю почему rcconf снова потребовал ее.

Решение 1

Достаточно установить программу dialog:

sudo apt-get install dialog

Решение 2

Так как whiptail уже установлена, то достаточно сделать символическую ссылку на программу в директории /usr/bin:

sudo ln -s /bin/whiptail /usr/bin/whiptail

Python: удаление не пустых папок

Модуль os содержит ряд функций для работы с файлами, в том числе функции
os.remove(path)
os.removedirs(path)
os.rmdir(path)
Однако они могут удалять только пустые папки.

Для удаления не пустых папок нужно использовать модуль shutil и функцию из него shutil.rmtree(path, ignore_errors=False, onerror=None)

Gpick - продвинутая программа для подбора цвета

Давно я не писал статей о чем-то, кроме LibeOffice :) Сегодня хочу рассказать об одной очень полезной программе — Gpick.

Gpick — продвинутая программа для подбора цвета. Доступна для операционных систем Windows и Linux (имеется в стандартном репозитории Ubuntu).

LibreOffice Writer: Продолжение таблицы (3 способа)

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

Помимо разбиения таблицы на несколько отдельных, у этой проблемы есть ещё три решения.

Xfce: Терминал не сохраняет историю команд

Недавно обновился до Xubuntu 13.04 и у меня возникла небольшая проблема с терминалом (xfce4-terminal), он перестал запоминать историю введенных команд. Не уверен, что эта проблема была по умолчанию, скорее всего это случилось по моей вине, так как я менял права доступа к своей домашней директории.

Проблема оказалась в том, что у файла «~/.bash_history» стояли права администратора. Проблема решилась сменой владельца файла:
sudo chown имя_пользователя .bash_history

имя_пользователя — имя учетной записи пользователя. В моем случае команда выглядела так:
sudo chown dmitry .bash_history

chown (от англ. change owner) — UNIX‐утилита, изменяющая владельца и/или группу для указанных файлов.

Полезные ссылки

LibreOffice: Пример использования стилей. Поиск и замена стилей.

Данная статья ранее публиковалась на другом ресурсе. Это её доработанный вариант. Все статьи доступны в формате ODT на моем GitHub в разделе LibreOffice_Guides.

В Википедии есть функция создания книг. Она позволяет выбрать определенные статьи и сделать из них книгу в формате PDF, ODT, EPUB и даже можно заказать печатный экземпляр. Очень удобная функция, особенно когда не хочется читать с экрана и нужно распечатать статьи. Вот я и решил воспользоваться этой функцией, выбрал несколько статей и сделал из них книгу в ODT формате. Но мне не понравился стандартный вид статей, поэтому я изменил их форматирование. Сделать это было легко, т.к. в Википедии каждая статья имеет свою структуру (заголовок общий, заголовок первого/второго/третьего уровня, текст статьи) и стиль оформления. При открытии сгенерированного файла в LibreOffice все эти стили отобразились в менеджере стилей, мне оставалось только изменить их.

28 сентября 2014 г.

Методика SWOT-анализа на примере коммерческого банка

Читать статью в PDF формате - Открыть

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

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

LibreOffice: Создание PDF с формами для заполнения

Portable Document Format (PDF) используется для предоставления документов в статическом виде без возможности редактирования. Однако PDF поддерживает внедрение форм с возможностью заполнения. LibreOffice включает стандартные средства для создания подобных PDF-файлов.

27 сентября 2014 г.

LibreOffice Math: Пример ввода формул (#1)

На днях в срочном порядке переоформлял диплом одногруппницы из MS Office в LibreOffice. Конечно, здесь дело не столько в программном обеспечении, сколько в навыках верстальщика, но благодаря моему шаблону для оформления диплома в LibreOffice я проделал это всего за пару часов. О тонкостях оформления диплома я напишу в другой статье (или даже пособии), здесь же хочу привести пример одной из формул, которые пришлось набирать.

Формула выглядит так:
Но не все так просто на первый взгляд. Код формулы выглядит следующим образом:

k_i = left lbrace matrix {
 alignl 1 - если "i-й" признак «менее важный»;##
 alignl 2 - если "i-й" признак «важный»;##
 alignl 3 - если "i-й" признак «очень важный».} right none

Разберем по порядку команды.

LibreOffice Calc: Импорт таблицы с сайта

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

ImageMagick: работа с PDF

В этой статье рассказывается:
  • Как из нескольких отдельных изображений сделать PDF документ
  • Как разбить PDF документ на отдельные изображения
Поехали!

Python: Определение позиции подстроки (функции str.find и str.rfind)

Определение позиции подстроки в строке с помощью функций str.find и str.rfind.
In [1]: str = 'ftp://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

Функция str.find показывает первое вхождение подстроки. Все позиции возвращаются относительно начало строки.
In [2]: str.find('/')
Out[2]: 4


In [3]: str[4]
Out[3]: '/'


Можно определить вхождение в срезе. первое число показывает начало среза, в котором производится поиск. Второе число — конец среза. В случае отсутствия вхождения подстроки выводится -1.
In [4]: str.find('/', 8, 18)
Out[4]: -1


In [5]: str[8:18]
Out[5]: '.dropbox.c'


In [6]: str.find('/', 8, 22)
Out[6]: 20


In [7]: str[8:22]
Out[7]: '.dropbox.com/u'


In [8]: str[20]
Out[8]: '/'


Функция str.rfind осуществляет поиск с конца строки, но возвращает позицию подстроки относительно начала строки.
In [9]: str.rfind('/')
Out[9]: 40


In [10]: str[40]
Out[10]: '/'

26 сентября 2014 г.

Python: Извлекаем имя файла из URL

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

Способ №1

Достаточно простой способ. Разбиваем строку по слэшам с помощью функции split(), которая возвращает список. А затем из этого списка извлекаем последний элемент. Он и будет названием файла.
In [1]: str = 'http://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

In [2]: str.split('/')
Out[2]: ['http:', '', 'dl.dropbox.com', 'u', '7334460', 'Magick_py', 'py_magick.pdf']

Повторим шаг с присвоением переменной:
In [3]: file_name = str.split('/')[-1]

In [4]: file_name
Out[4]: 'py_magick.pdf'

Способ №2

Второй способ интереснее. Сначала с помощью функции rfind() находим первое вхождение с конца искомой подстроки. Функция возвращает позицию подстроки относительно начала строки. А далее просто делаем срез.
In [5]: str = 'http://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

In [6]: str.rfind('/')
Out[6]: 41

Делаем срез:
In [7]: file_name = str[42:]

In [8]: file_name
Out[8]: 'py_magick.pdf'