2011-11-15

Web-версия Evernote без рекламы


Для тех, кто пользуется сервисом облачных заметок Evernote (evernote.com) есть два варианта: бесплатный аккаунт и про-версия с регулярными взносами. Понятно, что платная предоставляет определенные плюшки, но меня они совершенно не убеждают расставаться с кровно заработанными, да и пользуюсь этим сервисом не настолько активно. К тому-же, для Linux существует только веб-версия.
Как оказалось, это не всегда плохо! Как ни крути, а в интернете шила в мешке не утаить, то есть код всегда на виду. Поэтому, для тех, кто пользуется, но не хочет смотреть рекламу, сей опус.

Устанавливаем, если не установлено, и регистрируемся:

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


Отправляемся на WebStore за дополнением к браузеру, которое даст нам возможность выполнять свой JavaScript код на избранных страницах:

Лезем в настройки этого плагина:


И вписываем для страницы веб-версии такой вот код (наверно, можно и получше, но так зато работает):

Сохраняем, перезаходим в веб-версию. Красота!


Чтобы скопировать, приведу код в текстовом виде:

var i=setInterval(function(){
var el=$('div.GHOV4EUDAB').parent();
if(el){
el.prev().css('bottom','0px').prev().css('bottom','35px');
el.remove();
clearInterval(i);
}
},1000);

2011-09-13

С WWW => без WWW

Ситуация: на сайте есть отличия в отображении контента в зависимости от того, какой адрес в адресной строке браузера.
Задача: нужно, чтобы каждый пришедший по ссылке www.site.ru попадал на site.ru, т.е. без www.
Решение: в файл .htaccess прописываем правило:

RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]

2011-08-30

MySQL : получение строк в заданном порядке

Да, понадобилось, и почему-то не сразу понял как, пришлось гуглить. Нужно сортировать строки не через ORDER BY и не абы как, а строго в заданном порядке. Оказывается, можно, и в документации об этом написано, так что "курите маны", как говорится.

SELECT id,title,description FROM article WHERE id in (1,2,3,4,5) ORDER BY find_in_set(id,'1,2,3,4,5');

2011-08-26

GIMP и ошибка при попытке создать Slice

Вообще-то я очень редко использую эту возможность. Но вот недавно стал делать для сайта а-ля модальное окно с тенью вокруг. Нарисовал в GIMP квадрат с тенью, стал резать - а вот шиш вам, ошибка.
Решается она так. Открываем с правами рута файл
gksudo gedit /usr/lib/gimp/2.0/plug-ins/py-slice.py
Находим строку, начинающуюся с "temp_image.crop" и меняем ее так:
temp_image.crop(int(right - left), int(bottom - top), int(left), int(top))

Ошибка исчезла. Она возникала в связи с передачей функции параметров типа float, в то время как она ожидала тип int.
Всё работает.
P.S. Окно кстати я доделал. Формируется на лету с помощью JavaScript, получилось вот такое:

2011-06-22

На заметку о Gmail

Несколько приятных возможностей строки поиска писем в почте Gmail

Непрочтенные письма, несколько вариантов:
is:unread
label:unread
l:unread
l:^u
Письма от адресата 'tim':
from:tim
Письма, помеченные звездочкой:
l:^t
Письма в корзине:
l:^k
Письма с темой 'hi':
subject:hi


Эти параметры поиска можно комбинировать.

2011-06-10

Приложения для Android. Мой выбор. IMHO

Bible YouVersion : Библия с кучей переводов. Есть Синодальный. Бесплатная, конечно.
PowerAMP : Лучшие в мире аудиоплеер. Эквалайзер, проигрывание каталогами или по ID3-тегам, плейлисты. Есть платная версия.
Android Audio Profile : Управление профилями телефона, есть виджет. В бесплатной версии - только три профиля и реклама. В платной - много профилей и автоматическое переключение по плану.
MortPlayer Audiobooks : Чтение аудиокниг с закладками. Бесплатно.
mVideoPlayer :  Проигрывание видеофайлов, поддержка субтитров многих видов.
Metronome : Метроном, как ни странно )). Юзабельна только платная версия.
Smart Keyboard : Альтернативная клавиатура. Умная, настраиваемая, со скинами, умеет брать текст для T9 из контактов. Платная.
Extended Controls : набор виджетов для управления системными настройками. Платная.
Dropbox : Доступ к своему аккаунту. Не закачивает все на телефон, только по требованию. Бесплатно.
FBReader + FBReader LitRes : Чтение электронных книг, доступ к онлайн-хранилищам, в т.ч. платным. Бесплатная.
ColorNote Notepad Notes : Заметки с виджетами, просто текст или списки задач. Несколько способов уведомления. Бесплатная.
TweetDeck : Удобное управление аккаунтами соцсетей, таких как Twitter, Faceboot, Flikr. Бесплатная.
Навител Навигатор : Опять же, навигатор. Сам по себе бесплатный, но без лицензии и карт - пустой.
ASTRO File Manager : Файл-менеджер, есть встроенный киллер процессов. бесплатный.
Manga Watcher : Лучшая для чтения комиксов. Есть платная версия без рекламы.
FruitNinja : Веселая игра - рубим фрукты вместо живых существ. Платная.
Архимаг : Archmage, кто играл в Might & Magic - поймет. Есть игра по сети.

2011-05-26

Привести дела в порядок ))

Именно эту задачу предлагает решить Getting Things GNOME - что-ж, планировать свои дела в нем действительно удобно. Он похож на Tomboy, только написан на Python+GTK, и позволяет создавать записи о задачах и подзадачах, распределять мероприятия по датам, задавая длительность. Отличный хелп в комплекте.
sudo apt-get install gtg
А вот о том, чтобы держать актуальным этот список в нескольких местах одновременно - разработчик позаботился явно недостаточно. Присутствует плагин для синхронизации с RTM (Remember The Milk), но стабильности ему точно недостает. Поэтому решаем этот вопрос самостоятельно. А именно - используя Dropbox.
Вы все еще не пользуетесь этим замечательным сервисом? Тогда мы идем к вам добро пожаловать на сайт разработчика и проникаться по просветления. Ubuntu One все еще далек от юзабельности (было несколько неприятных моментов). Dropbox же ни разу не подвел.
Итак, все, что нужно - это сделать пару символьных ссылок.
На одном компе, например, так:
ln -s ~/.local/share/gtg/ ~/Dropbox/gtg
А на остальных так:
mkdir ~/Dropbox/gtg
ln -s ~/Dropbox/gtg/ ~/.local/share/gtg

Только один момент: не включать GTG до того, как Dropbox синхронизирует файлы.
И все дела ^_^

Менеджер буфера обмена Parcellite

Очень удобная штука. Позволяет хранить множество версий содержимого буфера обмена. Например, скопировав текст, вставил его, и потом забил буфер другими данными. А потом понадобился этот текст. Снова искать, где он есть, и копировать?
Нет, конечно. Просто устанавливаю Parcellite (на текущий момент версии 0.9.3-1) и радуюсь туче ячеек буфера обмена.
sudo apt-get install parcellite

2011-05-16

DeaDBeeF

Вышел финальный релиз аудиоплеера DeaDBeeF 0.5.0 - аналог Foobar2000 в Windows.
Как пишет разработчик - "... after 2 betas, 1 rc and 6 months of development :)"
Устанавливаем:
sudo add-apt-repository ppa:alexey-smirnov/deadbeef
sudo apt-get update
sudo apt-get install deadbeef

Новые плагины, нововведения и вообще молодец товарищ Алексей Яковенко. Подробнее об этом написано здесь.

P.S. Для LinuxMint: чтобы репозитарий заработал, необходимо поправить имя дистрибутива. В 11 версии оно будет 'katya', а значит в файле
/etc/apt/sources.list.d/alexey-smirnov-deadbeef-katya.list
нужно заменить слово katya на natty (для 11.04). В итоге там будет так:
deb http://ppa.launchpad.net/alexey-smirnov/deadbeef/ubuntu natty main
deb-src http://ppa.launchpad.net/alexey-smirnov/deadbeef/ubuntu natty main

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>

2011-02-22

Еще немного об оформлении

Почти два месяца ничего не писал в блог. Некогда и нечего было. Недавно увидел пример оформления, который мне понравился, и продолжая предыдущий пост, добавлю кое-что.
Во-первых, это nautilus-elementary. Добавляем источник пакетов в /etc/apt/sources.list:
deb http://ppa.launchpad.net/am-monkeyd/nautilus-elementary-ppa/ubuntu lucid main
и обновляем nautilus
Чрезвычайно настраиваемая тема - Orta:
http://skiesofazel.deviantart.com/art/Orta-184118297
И красивая рамка окошек для Emerald:
http://gnome-look.org/content/show.php/eLeKaJota?content=137640
С учетом предыдущего поста, получилось вот так: