2011-04-19

PHP и временные зоны

Заметка для себя, чтобы не забыть.
Используя PHP столкнулся с такой закавыкой: функция date() выдает время по гринвичу. Вероятно, на сервере в настройках PHP не прописана временная зона. Раньше всегда было настроено на место размещения сервера, т.е. как правило, Москва, а тут - нет.
В результате выдает время на 4 часа меньше, чем надо. Решается использованием стандартной функции с параметром:
date_default_timezone_set('Europe/Moscow');
Полный список временных зон тут.

2011-04-11

Библейская программа

О программе

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

Установка

Скачайте deb-пакет (версия 0.3.2). Версия 0.3.3 - здесь.

Текущая версия для Ubuntu11.04 - 0.3.3. В нее включены Синодальный перевод с апокрифами и перевод короля Иакова без апокрифов. Внесены незначительные, но все-же изменения.

P.S. от 6 мая 2012 г. В Ubuntu 12.04, и вообще в Unity - ругается при установке, в меню не появляется, запускается из консоли, но всё-же работает. Приношу извинения, что не развиваю.

2011-04-01

VIM: убрать подчеркивание в html-тегах ссылок

Меня это немного достало. Если описывать ссылку на нескольких строках, то все они будут подчеркнуты. Вот как можно убрать это (найдено здесь):
1) Создать каталог для синтаксиса, если еще не создан
mkdir -p ~/.vim/syntax
2) Скопировать файл синтаксиса html по умолчанию в этот каталог
cp /usr/share/vim/vim72/syntax/html.vim ~/.vim/syntax/ 
3) Открыть файл для редактирования
vim ~/.vim/syntax/html.vim
4) Найти в нем строку
HtmlHiLink htmlLink Underlined
5) Закомментировать ее (мне не помогло) или изменить Underlined на что-то другое, например htmlBold.
Перезапускаем VIM - проблема решена.

2011-03-28

Использование Python для управления документами OpenOffice.org

# Установка библиотеки uno для python
sudo apt-get install python-uno

Запуск OpenOffice с возможностью им управлять, т.е. в "слушающем" режиме. Несколько опций:
-writer : чтобы сразу запустился Writer
-headless : если хотим запустить без GUI

Остальные по вкусу: -nologo -nofirststartwizard -norestore, понятно по названию.

soffice "-accept=socket,host=localhost,port=2002;urp;" -writer -headless

Если OOo запущен в режиме без GUI, выключить его можно так:
killall soffice.bin

Начинаем наш код.

import uno
local = uno.getComponentContext()
resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)
context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")

# Загрузка сервисов
desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)

# Получить текущий документ
document = desktop.getCurrentComponent()

# Создать новый документ
document = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, ())

# Загрузить существующий документ
document = desktop.loadComponentFromURL("file:///home/lucas/myfile.odt" ,"_blank", 0, ())

# Установить курсор
cursor = document.Text.createTextCursor()

# Добавим некий текст
document.Text.insertString(cursor, "Этот текст был добавлен в OOo путем использования python и пакета uno.", 0)

# Переносы строк: \n, отступы: \t
document.Text.insertString(cursor, "\n\n\tНовый параграф.", 0)

# Получаем свойство символа - кегль шрифта
cursor.getPropertyValue("CharHeight")

# Изменяем свойства символов: кегль и имя шрифта, его жирность
cursor.setPropertyValue("CharHeight", 20)
cursor.setPropertyValue("CharFontName", "Arial")
cursor.setPropertyValue("CharWeight", 150)

# Создаем таблицу шириной 2 колонки и высотой в 6 строк
mytable = document.createInstance("com.sun.star.text.TextTable")
mytable.initialize(6,2)
# Вставляем таблицу в страницу
document.Text.insertTextContent(cursor, mytable, 0)

# Заполняем несколько полей
mytable.getCellByName("A1").setString("Полюшко-поле A1")
mytable.getCellByName("B2").setString("Поле, русское поле B2")
mytable.getCellByPosition(1,4).setString('А можно и так')

# Сохраняем
document.store()

# Сохраняем как новый(другой) файл
document.storeAsURL("file:///home/lucas/myfile2.odt",())

# Сохраняем как копию, и остаемся в том-же документе
document.storeToURL("file:///home/lucas/myfile2.odt",())

# Завершаем работу с документом
document.dispose()

# Поиск и замена. Работаем со строками
import string

# Создаем дескриптор поиска
search = document.createSearchDescriptor()

# Что ищем?
search.SearchString = u"Люк"

# Ищем первое найденное
found = document.findFirst( search )

# заменяем найденное и ищем дальше, пока не закончатся искомые фразы
while found:
found.String = string.replace( found.String, u"Люк", u"Люк, я твой отец" )
found = document.findNext( found.End, search)

# Некоторые возможности поиска: чувствительность к регистру или поиск слов
search.SearchCaseSensitive = True
search.SearchWords = True

# Или поиск по регулярным выражениям
search.SearchRegularExpression = True
search.SearchString = "\\<(k|s|v|z|o|u|i|a) "

# Экспорт в PDF. Придется импортировать соответствующую библиотеку
from com.sun.star.beans import PropertyValue
property = (
    PropertyValue( "FilterName" , 0, "writer_pdf_Export" , 0 ),
)
document.storeToURL("file:///home/lucas/myfile2.pdf",property)

# Импорт разрывов шаблона страницы, вставка разрыва в конец документа и импорт еще одного документа из файла
from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER
cursor.gotoEnd(False)
cursor.BreakType = PAGE_BEFORE
cursor.insertDocumentFromURL("file:///home/lucas/temp.odt", ())


Оригинал статьи на английском (немного добавил от себя и кое-что изменил)

2011-03-21

Глюк IE с текстом в абсолютно спозиционированном элементе

Дано:
<div style='position:absolute; top:200px;left:100px; width:500px;'>Длинный-предлинный текст, абзаца эдак на три.</div>
Наблюдаем глюк: только в IE (проверялось в 7 и 8 версии) текст не переносится на другую строку, а растягивает div за пределы страницы.
Решение: обернуть div таблицей.
<table><tr><td><div style='position:absolute; top:200px;left:100px; width:500px;'>Длинный предлинный текст, абзаца эдак на три.</div></td></tr></table>