киндловарство

2012-02-11

Потратил день, однако добился своего. С недавних пор ваш покорный слуга является обладателем киндла (самая дешевая из моделей – Kindle 4 тот что с кнопками и без тача). В принципе нареканий никаких. Самое приятное (из-за чего все остальные читалки остались за флагом) – обложка с подсветкой, причем с подсветкой, питающейся от аккумуляторов самого киндла. К этому прилагаются wifi, онлайновые сервисы и все дела. Не хватает двух вещей – первое русской клавиатуры, второе – не-проприетарных форматов для чтения, которые бы поддерживали ссылки внутри текста. Полагаю и первое и второе – дело времени (и коммьюнити).

Пока я пользовался палмом – я привык к тому, что у него есть WeaselReader, к которому идет коммандлайновая утилита makeztxt – которой достаточно прописать регэксп для поиска содержания – и она сама расставит заголовки.

Читать далее…


Малая Карта для АБТФ – теперь и в bash

2011-05-27

Малая Карта. Позволяет открывать в боковом меню “карту”-содержание большого текстового файла (заголовками считаются все строки, которые начинаются с #). Карта открывается по ,mm. По <Enter> на любом из заголовков, файл в главном окне прокручивается на нужный заголовок. По <Esc> меню с картой закрывается.

Использую этот скрипт примерно полгода уже год – и не могу нарадоваться. Он очень упрощает работу с АБТФ и используется намного шире, чем я предполагал в самом начале. Практически любой текст, который размечен через # можно открыть в виде содержания и быстро найти нужный раздел.

Если поставить себе расширение Vim Outliner, то содержание будет выводиться компактнее – в виде аутлайна, который “схлопывает” разделы.
Читать далее…


АБТФ: как работать с тегами

2011-02-21

Я наконец научился эффективно работать с тегами :) Для этого можно и нужно использовать grep, плюс пару трюков из документации.

Ключевой момент – правильная расстановка тегов, а именно:

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

Как искать по тегам? Через грепы.

Первоначальный поиск можно организовать так:

:tabnew

Это откроет новую вкладку.

Дальше:

:r! grep -nH "=реца" main.txt

Ключи:

-n - нумеровать строки
-H - выводить имя файла

Получается примерно такое:

main.txt:62944:Мартин Ли "Странная сага телохранителя Гитлера" =книги =реца =мысли =ТретийРейх =с4 =СВК =Драконы =ГСП =ТротиловаяВойна =ПланЯшма =ЛепесткиХризантемы
main.txt:63963:Уэстлейк "Полицейские И Воры" =книги =реца
main.txt:84493:Хоблит "Перелом" =фильм =реца
main.txt:85088:Стон Черной Змеи =фильм =блюз =реца
main.txt:85148:Широкорад = "Россия и Китай: Конфликты и сотрудничество" (серия Военные Тайны XX века) =книги =авторы =реца
main.txt:86783:Степан Бандера 1909-1959 =линк =Украина =история =фильм =реца =разгрести =Бандера =2048
main.txt:91279:Шекли "Дипломатический иммунитет" =книги =авторы =Шекли =реца
main.txt:91423:Андреев "Худловары" =книги =авторы =реца
main.txt:105676:Ложная слепота Уоттса =реца =мысли =контр =конспект =пост
main.txt:107481:Ложная слепота Уоттса = 2 =реца =мысли =контр =конспект =пост =холд
main.txt:109647:Смотрю ГИГ ака GitS SAC второй сезон. Вторая серия (мечтатель) - это четкая реминисценция на Таксиста =реца

Это уже готовые ссылки на статьи в блоге. Достаточно стать на “main.txt” нужной строки и набрать gF – и vim откроет файл в нужном месте. Ctrl+O вернет вас назад по истории переходов, Ctrl+I – вперед. То есть имея такую поисковую выборку можно нырять туда-обратно в основной файл или даже в комплект файлов.

Можно добавить в один файл несколько результатов грепа сразу – просто набрать подряд несколько грепов по разным тегам.

например:

Последовательно набрав:

r!grep =реца main.txt =nH
r!grep =рецензия main.txt =nH
r!grep =конспект main.txt =nH

Получим:

main.txt:62874:Камедиклаб Просто Радио =реца
main.txt:62944:Мартин Ли "Странная сага телохранителя Гитлера" =книги =реца =мысли =ТретийРейх =с4 =СВК =Драконы =ГСП =ТротиловаяВойна =ПланЯшма =ЛепесткиХризантемы
main.txt:63963:Уэстлейк "Полицейские И Воры" =книги =реца
main.txt:84493:Хоблит "Перелом" =фильм =реца
main.txt:85088:Стон Черной Змеи =фильм =блюз =реца
main.txt:85148:Широкорад - "Россия и Китай: Конфликты и сотрудничество" (серия Военные Тайны XX века) =книги =авторы =реца
main.txt:86783:Степан Бандера 1909-1959 =линк =Украина =история =фильм =реца =разгрести =Бандера =2048
main.txt:91279:Шекли "Дипломатический иммунитет" =книги =авторы =Шекли =реца
main.txt:91423:Андреев "Худловары" =книги =авторы =реца
main.txt:105676:Ложная слепота Уоттса =реца =мысли =контр =конспект =пост
main.txt:107481:Ложная слепота Уоттса = 2 =реца =мысли =контр =конспект =пост =холд
main.txt:109647:Смотрю ГИГ ака GitS SAC второй сезон. Вторая серия (мечтатель) - это четкая реминисценция на Таксиста =реца
main.txt:91444:Андреев - не-гуманитарий. Все не-гуманитарии заканчивают тем, что упираются в философскую проблему (чему равен синус-от-сердца?) и на этом для них все заканчивается. =книги =авторы =рецензия
main.txt:103027:Детектив Ди Жэньцзе =фильм =рецензия =пост
main.txt:109500:Кургинян "Суть времени" =конспект =рецензия
main.txt:83279:=конспект =мысли =контрманипуляция Турбо=Суслик
main.txt:83415:=конспект =мысли =контрманипуляция Турбо=Суслик продолжение
main.txt:84950:Осваиваюсь в философии. Сегодня благодаря дтв-атласу и Балашову начал укладывать в голове общую схему развития. Получается неплохо. Дальше идет большая-большая схема. =философия =мысли =конспект =заметки
main.txt:92683:Сейчас читаю "Я прав - вы заблуждаетесь" Де Боно. В один момент начало казаться, что у человека просто высосанные из пальца концепции - то есть примеры в его книге не блещут разнообразием (кстати, у Франкла я замечал подобное), но когда вчитался внимательнее - понял что человек похоже один из немногих, кто правильно разобрался в том, как работает наше мышление. =ДеБоно =конспект =книга =автор =мысли
main.txt:105676:Ложная слепота Уоттса =реца =мысли =контр =конспект =пост
main.txt:105919:Периферийная Империя Кагарлицкий и Кондратьев =конспект =сфи =идеи =с4 =смвк =хронология
main.txt:106058:Барри Шварц =конспект =палм =мысли =пост
main.txt:106290:Начал читать Айкидо =оуе =заметки =конспект
main.txt:107481:Ложная слепота Уоттса = 2 =реца =мысли =контр =конспект =пост =холд
main.txt:109500:Кургинян "Суть времени" =конспект =рецензия
main.txt:109520:Кагарлицкий Периферийная Империя скелет конспекта =конспект

Результаты поиска можно фильровать – выделить текст и пропустить его фильтром через тот же греп, при этом совсем не обязательно задавать тег – можно задать ключевое слово:

ggVG!

и в поисковой строке набрать (:'<,'>! Vim подставит сам):

:'<,'>!grep "фильм"

в итоге останется:

main.txt:84493:Хоблит "Перелом" =фильм =реца
main.txt:85088:Стон Черной Змеи =фильм =блюз =реца
main.txt:86783:Степан Бандера 1909=1959 =линк =Украина =история =фильм =реца =разгрести =Бандера =2048
main.txt:103027:Детектив Ди Жэньцзе =фильм =рецензия =пост

(номера могут меняться – поскольку я пишу эту инструкцию в том же файле, который грепаю :)

Пример номер два. Здесь не используются теги, зато показано, как работает “прямой поиск” – то что я называю “сам себе гугл” :)

Когда я беседовал с уважаемым ОллиКатом мне понадобилось найти ссылки на репорты по DVCS разработчиков Питона и Гугла. Поиск по mercurial не выдал ничего внятного:

:tabnew
:r!grep -nHI mercurial main.txt

Получил следующее:

main.txt:20844: evince djview4 evince markdown mercurial makeztxt
main.txt:20987:mercurial
main.txt:27044:Конспект и освоение mercurial.
main.txt:27046:http://blgo.ru/blog/category/mercurial/
main.txt:27050:http://www.selenic.com/mercurial/hg.1.html
main.txt:27053:mercurial (hg) - unixforum.org
main.txt:27055:mercurial - Поиск в Google
main.txt:27058:http://mercurial.selenic.com/wiki/TipsAndTricks
main.txt:27066:http://hgbook.red-bean.com/read/a-tour-of-mercurial-the-basics.html
main.txt:27068:http://hgbook.red-bean.com/read/a-tour-of-mercurial-merging-work.html
main.txt:27072:http://hgbook.red-bean.com/read/mercurial-in-daily-use.html
...
main.txt:107671:http://antonym.org/2010/04/25-tips-for-intermediate-mercurial-users.html
main.txt:107826:http://mercurial.selenic.com/wiki/MergingWithVim
main.txt:107842:http://stackoverflow.com/questions/1869040/what-are-the-best-and-must-have-hg-mercurial-extensions
main.txt:107843:What are the best and must-have hg / mercurial extensions? - Stack Overflow
main.txt:109737:http://blgo.ru/blog/tag/mercurial/

(всего получилось 57 результатов)

Сортировка по фильтрам grep python и grep google ничего не дала.

Я зашел с другого конца, вспомнив что первый отчет был с python.org, второй с codes.google.

Очистил окно:

ggdG
:r!grep -nHI code.google main.txt

В ответ получил такую простынь:

main.txt:17060:http://code.google.com/p/amv-codec-tools/wiki/HowToConvertToAMV
main.txt:19745: # Generated by tintwizard (http://code.google.com/p/tintwizard/)
main.txt:19746: # For information on manually configuring tint2 see http://code.google.com/p/tint2/wiki/Configure
main.txt:86060:http://code.google.com/p/vimwiki/
main.txt:88384:http://code.google.com/p/key-mon/
main.txt:95839:http://code.google.com/p/amv-codec-tools/wiki/HowToConvertToAMV
main.txt:102627:http://code.google.com/p/vimming/source/checkout
main.txt:102840:http://code.google.com/p/vimming/source/checkout
main.txt:109744:http://code.google.com/p/support/wiki/DVCSAnalysis

Ага. Вот последняя строка и есть нужная мне ссылка. Встав на main.txt и набрав gF (обратите внимание – F, а не fgf просто переходит к файлу, gF переходит к файлу и переставляет курсор на нужную строку – см :h gF. Отчет по Питону нашелся рядом, но для наглядности я могу показать и его.

ggdG
:r!grep -nH python.org main.txt

Получаем:

main.txt:4843:http://wiki.python.org/moin/RssLibraries
main.txt:69207:http://www.python.org/doc/faq/windows/
main.txt:79215:http://docs.python.org/library/md5.html
main.txt:88242:http://docs.python.org/library/optparse.html
main.txt:88563:http://mail.python.org/pipermail/tutor/2003-June/023434.html
main.txt:88600:http://mail.python.org/pipermail/tutor/2004-November/033333.html
main.txt:88603:http://mail.python.org/pipermail/tutor/2002-April/013989.html
main.txt:88606:http://mail.python.org/pipermail/tutor/2002-November/018528.html
main.txt:92596:http://www.python.org/dev/peps/pep-0374/#svn
main.txt:109741:http://www.python.org/dev/peps/pep-0374/#patch-review

Последняя ссылка и есть искомая (если заметите – на самом деле у меня их две).

Можно инвертировать поиск (-v ключ для grep’а), можно делать многотеговые поиски по нескольким файлам или сразу по всему блогу. В общем – есть где развернуться. Наверное, позже я просто сделаю бинды на хоткеи, но пока такой системы хватает с головой. Можно еще написать раскраску для такого файла (чтобы имя-файла, номер строки и возможные теги подсвечивались разными цветами, можно написать правильный хоткей для перехода (чтобы ходить по gf, а не по gF).

Можно увеличить контекст (сделать так, чтобы греп выводил больше одной строки) и, например, сделать подборку ссылок.

Еще бы сделать автоматическую простановку тегов (в виде вываливающейся менюшки по хоткею) и получится весьма и весьма мощная система работы с заметками. Гугл, который всегда с тобой :)

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

Если копнуть глубже, оказывается, что quickfix window использует ту же схему. Только оно как по мне менее удобно – как минимум тем, что на него сложно наложить дополнительные фильтры, как в примерах выше. Собственно, первоначальную идею мне именно quickfix и подсказал – я забил в поиск по :vimgrep тег и получил список результатов. Поскольку на тот момент времени теги у меня были отдельно – это был просто список типа:

main.txt:89560:=бег =МК
main.txt:89595:=бег =МК
main.txt:89743:=бег =МК
main.txt:89763:=бег =МК
main.txt:89855:=бег =СМК
main.txt:90025:=бег =МК
main.txt:90059:=бег =МК
main.txt:90498:=бег =СК
main.txt:90525:=бег =МК
main.txt:90630:=бег =СК
main.txt:90997:=бег =СК
main.txt:91137:=бег =СК
main.txt:91268:=бег =СМК

Отсюда и напрашивался вывод: чтобы работа с тегами была эффективной, теги должны стоять в одной строке с каким-то ключевым пояснением – заголовком, ключевым абзацем или просто на первой строке, чтобы из результата было понятно куда именно мне прыгать – см правило с которого я начал этот пост.


Допиливание Crunch Bang на лету

2010-12-09

Большую часть времени на работе я сейчас трачу в компьютерных классах. Работать под windows теоретически возможно (все нужные мне инструменты – кроссплатформенные), но практически невыносимо – из-за засилья вирусов. LiveCD дистрибутив Linux’а оказался в этой ситуации гораздо практиченее.

Поэкспериментировав с флэшками и дисками пришел к выводу о том, что в моей ситуации лучше всего подходит CD-вариант системы. PuppyRus linux был одним из вариантов и очень хорошим вариантом, но не прошел. Главным образом по причине совершенно идиотского набора софта. То есть вместо нужных мне vim, firefox, pcmanfm’а там нечто странное типа opera, geany и rox. И поставить что-то еще очень сложно, поскольку в новой версии они куда-то намертво запрятали slapt-get.

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

Оказалось очень полезным иметь под рукой скрипт, который выставляет все, что нужно. На самом деле это не только скрипт, но и отдельная папка на флэшке:

vik@firefly:/media/W7/big_sync$ ls -a

.fonts  .gvimrc  openbox  .reminders  .screenrc 
sync.sh  truecrypt-6.3a-setup-x86  .vim  vimrc  .vimrc

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

sync.sh – это скрипт, который после запуска приводит кранч к нужному для меня виду:

#! /bin/bash
# Копируем дот-файлы настроек 
# в домашнюю папку 
# (vimrc, .fonts и все такое прочее)
cp .[0-z]* ~ -R -v

# выставляем русско-английскую клавиатуру 
# с переключением по Alt+Shift
setxkbmap us,ru -option grp_led:caps,grp:alt_shift_toggle

# подставляем правильную временную зону 
# Киев UTC+2
sudo cp /usr/share/zoneinfo/Europe/Kiev /etc/localtime

palm, linux makeztxt и iconv

2010-07-24

Я уже писал про то, что АБТФ имеет то преимущество, что достаточно просто закидывается в палм. У меня это происходит следующим образом. Для начала я копирую файл в папку ~/tmp и конвертирую его в виндовую кодировку с помощью iconv:


cp ~/blog/main.txt ~/tmp/main.txt
iconv -t=cp1251 -c main.txt > main_cp.txt

Ключ -t=cp1251 указывает куда конвертировать (в данном случае из utf-8, в которой я веду заметки в cp1251, которую понимает палм), ключ -c нужен, чтобы подавлять вывод заведомо непечатаемых символов, которые есть в utf-8, но которых нет в cp1251 (например, знак йены).

Дальше остается преобразовать main_cp.txt в .pdb файл. Это можно сделать простой командой:

makeztxt -o main.pdb main_cp.txt

Ключ -t добавляет в файл заголовок под которым файл будет виден в базе палма.

makeztxt -t blog_main -o main.pdb main_cp.txt

Мне удобно, чтобы файл имел оглавление – сразу автоматически расставленные заголовки по всем ключевым разделам блога (90000 строк очень долго листаются в поисках нужного раздела). Поэтому я добавляю ключ -r, который расставляет закладки по всем заголовкам разделов. Разделы находятся через регулярное выражение ^#.{,15} – начало строки, за которым следует решетка #, за которой следует пятнадцать или меньше любых символов. Ключ -l (list) выводит на печать список сгенерированных закладок, чтобы можно было контролировать процесс.

makeztxt -r "^#.{,15}" -l -t .main2010 -o main.pdb main_cp.txt

Теперь можно скопировать main.pdb в память палма и наслаждаться :)

У меня все эти операции проделываются через скрипт ~/bin/bmz, который выглядит примерно так:

#! /bin/bash

cd ~/tmp
cp ~/blog/main.txt .
iconv -t=cp1251 -c main.txt > main_cp.txt
makeztxt -r "^#.{,15}" -r "^@ 20..-..-.. @ ..:.." -l -t .main2010 -o main.pdb main_cp.txt 
cp ~/blog/cites.txt .
iconv -t=cp1251 -c cites.txt > cites_cp.txt
makeztxt -r "^#.{,15}" -r "^@ 20..-..-.. @ ..:.." -l -t .cites2010 -o cites.pdb cites_cp.txt 
rm ~/tmp/main.txt
rm ~/tmp/main_cp.txt
rm ~/tmp/cites.txt
rm ~/tmp/cites_cp.txt

Достаточно набрать bmz в командной строке, а потом скопировать получившиеся .pbd-файлы в палм. Поскольку у меня сейчас Palm Sony с внешней карточкой, я просто вставляю ее в кардридер и копирую файлы напрямую.


Пакетная работа с файлами в командной строке. Перекодирование mp3-файлов для изменения битрейта.

2010-06-09

Мой yepp-плейер при всем его удобстве (особенно радует его неубиваемость и то, что он работает от батарейки, которую несложно достать в поле) отличается небольшой емкостью – всего 128М. Посему, музыку для него я обычно ужимаю до битрейта в 128 – лучшее качество я все равно не смогу оценить в наушниках, а место можно сэкономить.

Некоторое время я это перекодирование выполнял через пакетную обработку в Audacity, однако перед экзаменом по философии внезапно выяснилось, что Audacity на текущую ось я почему-то не поставил. Зато у меня был lame – который можно использовать для этих целей с соответствующими ключами, например так:

Читать далее…


Djvu в Linux: how-to

2010-04-22

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

Мне нужна была своя система хранения данных (что решилось с помощью АБТФ и vim), свой каталоггер (до недавнего времени я пользовался Cathy в связке с wine, но теперь у меня есть быстрый и дешевый самописный каталоггер), чайный таймер (он был сделан первым делом), и еще несколько мелочей. Отдельным пунктом стоял вопрос о преобразовании сканов в djvu-формат. Читаю я много, кое-что сканирую, кое-что храню на диске. Мне нужен был хороший djvu-просмотрщик (он нашелся почти сразу) и… софт, позволяющий обрабатывать сканы и генерировать djvu-файлы. А вот этот пункт выглядел загадочно. Однако, все оказалось проще, чем я думал :)

Читать далее…


Каталогизация дискохранилища

2010-03-27

Идея каталогера, который бы сохранял на диске содержимое моей библиотеки (медиатеки? информатеки? дискохранилища?) dvd не отпускала меня с тех самых пор, как я перебрался на убунту. Конечно, Cathy прекрасно работала под wine-ом, и вполне справлялась с теми задачами, которые на нее были возложены еще в старой системе. Некоторое время у меня крутилась в голове идея обобщенного скрипта на Питоне, однако в конце-концов на Хабре появился пост, который расставил все по своим местам. Главной оказалась идея о том, что файловую структуру диска без особых хлопот можно получить через find.

Читать далее…


Follow

Get every new post delivered to your Inbox.