tengu_crow: (Default)
[personal profile] tengu_crow
Когда ведешь записи в текстовом блоге, редактор который может проставить в тексте время и дату, экономит чертовски много сил. Особенно странному зверьку вроде вашего покорного слуги, который (а) терпеть не может писать дату и время вручную (б) считатет, что хорошее и правильное датирование удваивает ценность записей. См. Самонаводящиеся Заметки.

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


Если вы нумеруете диски или папки с фотографиями dvd1, dvd2, ... то на шаге N непременно задумаетесь - вам ставить N, N-1 или N+1? (особенно, если диск записывается где-нибудь далеко от дома и N предыдущих дисков). С датами такой проблемы нет dvd20090124, dvd20090125 - а если они идут более часто - всегда можно кроме даты подключить время, или нумеровать диски в пределах одного дня dvd20090124_1, dvd20090124_2, dvd20090124_3, ...

Формат даты - видимо дело личных предпочтений. Я исхожу из прагматичных соображений - если писать даты как год-месяц-день (2009-01-24 или 20090124), то пронумерованные так файлы (или директории, или заметки, или текстовые поля) выстраиваются по времени сами собой - достаточно рассортировать их список по алфавиту. С подачи WinOrganizer'а я привык к таймстампам год-месяц-день часы:минуты и в других редакторах перестраивал их точно так же.

В Vim таймстампы я реализовал с помощью аббревиатур.

В моем vimrc вписаны следующие функции:

iab Втс =strftime("%H:%M")
iab Вдс =strftime("%Y-%m-%d")
iab Вдтс =strftime("%Y-%m-%d %H:%M")
iab Бдтс =strftime("д %Y-%m-%d %H:%M")


если я набираю одну из аббревиатур - она автоматически заменяется на текущее время в нужном формате:

Втс (Вставить тайм-стамп)
15:48

Вдс (Вставить дата-стамп)
2009-01-24

Вдтс (Вставить дата-тайм-стамп)
2009-01-24 15:48

Бдтс (Блоговый Дата-Тайм-Стамп - для записей в дневнике)
д 2009-01-24 15:48




20090125 timestamp example


Все таймстампы всегда подсвечиваются - у меня есть отдельный файлик синтаксиса blog.vim, где в числе прочих прописана подсветка и для таймстампов:

syntax clear
syntax sync fromstart

...

" подсветка Втс
highlight Timestamp term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp /[0-2][0-9][:][0-5][0-9]/

" подсветка Вдс
highlight Timestamp2 term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp2 /[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ nextgroup=Timestamp skipwhite

" Вдтс подсвечивается само - Вдс+Втс

" подсветка Бдтс
highlight MyBlogTimestamp term=bold ctermfg=4 guifg=#80a0ff
syn match MyBlogTimestamp /^д\s.*$/ contains=ALL




Так оно выглядит в электронном формате. Что касается бумаги... раньше я в записных книжках ставил даты в том же формате, пока, в GitS:SAC не подсмотрел "военную форму записи" - где время просто пишется четырьмя цифрами без разделителей - что хорошо читается и легко пишется: 1200, 2130 и так далее. Эта привычка началась с бумаги, потом распространилась на даты (20090124) и сейчас плавно перетекла в электронную форму - если я набираю время/дату вручную, то чаще всего это выглядит именно так.

Есть еще одна проблема. Я терпеть не могу держать в голове что сейчас за день (месяц, год), но она легко решаема - электронные часы с календарем и доведенный до автоматизма рефлекс - перед тем как что-то писать - независимо от того это запись на клочке бумаги, в записной книжке или список студентов - нажать кнопку и записать цифры на бумагу. Голову включать (точнее отвлекать от мыслей, которыми она занята) совсем не требуется. Дома это дополняется часиками BetaClock в трее, которые крупными цифрами показывают не только время, но и дату с днем недели. Но бумага (например, как нумеровать страницы в записной книжке, если терпеть не можешь этого делать) - это отдельный разговор.



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




20090125 syntax example





" добавляю подсветку для плейнтекста

match Comment /{.\+}/
syntax clear
syntax sync fromstart

" подсвечивает желтым крылатые =тэги=
highlight BlogTag term=bold ctermfg=4 guifg=#D2D200
syn match BlogTag /[=][^ ]\{,20}[=]/ contains=Oye


" подсвечивает темно-зеленым мои комментарии в разных вариантах

" комментарии вида //

highlight meComment term=bold ctermfg=6 guifg=darkgreen
syn region meComment start=/[^:/]\/\// end=/$/

highlight meComment2 guifg=darkgreen
syn region meComment start=/^\/\// end=/$/

" комментарии вида { }
highlight meComment3 guifg=darkgreen
syn region meComment start=/ {/ end=/}/

highlight meComment4 guifg=darkgreen
syn region meComment start=/^{/ end=/}/

" комментарии вида /* */
syn region meComment start=/\/\*/ end=/\*\//


" подсвечивает оранжевым цветом заголовки разделов

highlight meHeader term=bold ctermfg=6 guifg=Orange
syn region meHeader start=/^\~/ end=/$/



" выделяет красным цветом важные места - я их отмечаю
" двумя восклицательными знаками в начале строки

highlight NB term=bold ctermfg=6 guifg=Red
syn match NB /^!! .\+$/

" выделяет голубым цветом цитаты и квотинг - я их отмечаю
" знаком > в начале строки

highlight Citer term=bold ctermfg=6 guifg=#62EDF0
syn region Citer start=/^>/ end=/$/


" подсветка Втс
highlight Timestamp term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp /[0-2][0-9][:][0-5][0-9]/

" подсветка Вдс
highlight Timestamp2 term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp2 /[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ nextgroup=Timestamp skipwhite

" Вдтс подсвечивается само - Вдс+Втс

" подсветка Бдтс

highlight MyBlogTimestamp term=bold ctermfg=4 guifg=#80a0ff
syn match MyBlogTimestamp /^д\s.*$/ contains=ALL




Раньше такая подсветка включалась через vimrc или по хоткею. Сейчас у меня просто в самом начлале каждого блога есть моделайн - строка вида:

//моделайн: vim: syntax=blog:

Вим подхватывает ее, определяет тип подсветки через эту строчку и включает подсветку автоматически. Так что все работает само и без моего участия :)

Date: 2009-01-25 09:43 am (UTC)
From: [identity profile] d7s.livejournal.com
А с тегами как?

Date: 2009-01-25 02:43 pm (UTC)
From: [identity profile] d7s.livejournal.com
Вот как это сделать прямо в виме - не представляю. Т.е., можно сделать автозамену для аббревиатур частоупотребительных тегов, но при создании нового придется вносить его в конфиг.

Стоит, наверное, порыться в вимоплагинах - возможно, нужный уже есть, или хотя бы разобраться, как они создаются :)

З.Ы. По размышлении могу сказать что я бы предпочел SQLite одному текстовому файлу.

Date: 2009-01-27 05:08 pm (UTC)
From: [identity profile] tengu-crow.livejournal.com
Ну... как бы вот.

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

В плане замены большого текстового файла на БД... тут - jedem das seine. А почему ты бы предпочел именно базу данных? Просто хорошо знаешь или есть какие-то фундаментальные преимущества.

Date: 2009-01-27 06:10 pm (UTC)
From: [identity profile] d7s.livejournal.com
sqlite позволяет простые и ясные групповые операции с произвольной условной выборкой. Можно, конечно, и самостоятельно такое реализовать, но раз уж есть.

Ну и вообще можно было xml использовать. Разметка же. И парсеры готовые есть.

Date: 2009-01-27 06:42 pm (UTC)
From: [identity profile] tengu-crow.livejournal.com
В принципе - да. Особенно, если знать SQL. Но тут, имхо, кроется своя лопата. (а)SQL надо знать (б)работа с заметками-дневником-коллекцией ссылок-прочим plain_txt_staff'ом не исчерпывается групповыми операциями с выборкой. Дальше идет очень-очень сугубое имхо.

Чисто эмпирически я пришел к выводу о том, что система сбора данных (а большой текстовый файл у меня нацелен именно на сбор-переработку-анализ-визуализацию-генерацию новых идей) должна доставлять как можно меньше геморроя при заполнении. Иначе я просто перестаю ею пользоваться. У меня даже таймстамповые аббревиатуры выбраны так, чтобы рифмовались + файл сразу открывается на нужном месте. Клац. Бэ-дэ-тэ-эс и - пошел набор текста (либо shift+insert, если нужно добавить ссылку). ZZ. Все. В любом другом случае у меня включается голова, что отвлекает меня от мысли, которую нужно записать. Примерно так. SQLight кажется мне мощным, но неинтуитивным и неспособным на "быстрый прием". Вполне может быть, что я что-то упустил - я только вчера про него начал читать :))

Аналогичная история с xml - каждый раз придется думать про теги, плюс вторая ловушка - чтобы посмотреть на чистый текст без тегов придется запускать браузер или что-нибудь еще в этом роде. А перечитывание и анализ заметок - это 70% всей работы с файлом. Я, кстати, в свое время отказался от стенографии (в свое время хорошо знал ГЕСС Соколова - пожалуй единственную систему, которую стоит изучать) - потому, что понял, что не могу схватить текст заметки одним взглядом, а дешифровка всегда будет тормозить процесс до невозможности. Кстати, не один я такой - народ недаром изобретает все эти markdown'ы и textile :) Собственно, моя разметка внутри файла - это тот же маркдаун (мракдаун :), только заточенный под мои нужды :)

Примерно так. Вообще, это я на самом деле попытался примерить систему на себя :) И то, что это не подходит мне - не значит что не подойдет вообще (я - зверек на редкость странный :) В любом случае SQLite ты помянул чертовски вовремя - мне сейчас как раз позарез была нужна БД такого типа. Бтв, вполне может быть так, что я как-нибудь напишу скрипт перегонки блога в базу данных - чтобы потом поковырять его запросами. Что тоже вариант.

Вообще, многое прояснилось для меня самого, пока я это писал :)) Так что спасибо еще раз :)))

Date: 2009-01-28 11:28 am (UTC)
From: [identity profile] d7s.livejournal.com
Собственно, я очень не люблю копаться в заметках. %) Это одна из причин почему я их, обычно, не веду. Выдерживать их определенный формат для меня не сложно, поэтому возможность быстро получить из месива связный текст (и да, в заметках должны быть прекрестные ссылки, инклуды и заменяемые токены. Для последних см., например, m4). Т.е., если резюмировать, извлечение полезной информации из заметок меня беспокоит больше, чем простое их структуирование, упорядочивание и т.п.

"Аналогичная история с xml - каждый раз придется думать про теги, плюс вторая ловушка - чтобы посмотреть на чистый текст без тегов придется запускать браузер или что-нибудь еще в этом роде."
Ну, фактически это достаточно легко решается. У того же питона есть интерфейс к GTK в котором есть компонент htmlview (или как-то так). И это все может вызываться прямо из баш/питон/ещечего скриптов.

"Кстати, не один я такой - народ недаром изобретает все эти markdown'ы и textile :)"
Да, маркдауны часто полезны, когда не нужен весь функционал маркапов %) Но, в моем случае, как раз от уже разработанного парсинга отказыаться нельзя :)

Date: 2009-01-26 12:38 pm (UTC)
From: [identity profile] ollycat (from livejournal.com)
Тут была идея, но пока еще до конца не оформленная. :) Буду еще думать, но пока вот что надумал.

Попробовал сделать это через tags. Проходим по нашему файлу простеньким коневейером:

egrep -H -n -o "=[^ ]+=" ~/big_file | awk 'BEGIN{FS=":"}{print $3 "\t" $1 "\t" $2}' | sort > ~/tags

И теги вставляем комбинацией CTRL+X CTRL+] из выпадающего меню. :) Осталось решить как бы грамотнее оформить само выгребание тегов. Может запуском скрипта после каждого вновь созданного тега/записи в блог? Не знаю, надо подумать.

Ну как идея? Проверил, работает. :)

Date: 2009-01-27 09:33 am (UTC)
From: [identity profile] tengu-crow.livejournal.com
Круто. Вот в плане awk у меня пробел :) Как и с тегами :) Спасибо, многое прояснилось. Идея с форматированием греп-вывода просто чудесная. Теги vim меня как раз сбивали с толку тем, что их постоянно генерила отдельная программа и я не знал как организовать такой файл самому.

Как раз сижу сейчас на работе под убунтой :) Единственно мне пришлось еще добавить recode в начало - у меня файл все еще в cp1251, все ни как не заставлю себя перейти в юникод.

Я бы сделал двумя вариантами - первый завязал бы это дело на хоткей с помощью map, второй - сделал бы шелловский скрипт с характерным названием (что-нибудь типа retagg) и положил бы его в каталог рядом с main_file. Может быть даже сделал ему возможность получения аргумента из комстроки. И запускал бы прямо из vim
:!retagg или :!retagg %

В принципе у меня аналогично построена работа с расстановкой содержаний по файлу и генерация майндмэпа :))) Я еще просто не добрался до этого :))

Date: 2009-01-27 12:58 pm (UTC)
From: [identity profile] ollycat (from livejournal.com)
Да ерунда это все, awk прост - как грабли. :) Вообще в юниксах все просто и гениально. ;) Если знаешь что-нибудь из perl/awk/sed/vi, то можно считать знаешь и все остальное. Я бы сказал, что это как раз и есть "интуитивно понятный интерфейс". :)))
С тегами, да и вообще с vim у меня тоже большой пробел. Как я и писал раньше, до этого пользовался только самыми базовыми функциями. А тут твоя первая и последующие заметки о "большом файле" и vim легли в благодатную почву. ;) Сейчас вот колупаюсь с фолдингом (мне эта идея понравилась, сворачивать автоматом каждую запись), сделал, но хотелось бы вынести это отдельной функцией, а вот не выходит пока. :( С тегами быстро пролистал доку, понял откуда ноги растут и идею воплотил практически за минут 10. Только вот грепить действительно надо как-то придумать. Идея с хоткеем мне не очень нравится. Я бы предпочел запускать это по событию. В идеале по событию создания нового тега. Как это сделать - пока не знаю. Буду думать.

А вот по поводу 1251 - это извратство конечно же. ;) Ну в koi8-r еще куда не шло... :)))) Ладно, приколы, приколами, а я обычно для перекодировки использую iconv. :) Но это уже больше вопрос предпочтений.

Date: 2009-05-06 11:48 am (UTC)
From: [identity profile] eval-apply.livejournal.com
Нет ли ссылки на фото посмотреть, как выглядит сгенеренный мэйндмэп?

А фолдинг реализован в АБТФ?
Как?

Date: 2009-01-25 01:35 pm (UTC)
From: [identity profile] ollycat (from livejournal.com)
О! Продолжение. :) Отлично. Познавательно как всегда. ;)
К стати я тут начал тоже подрихтовывать свой "большой файл". Есть кое-какие мысли. В частности решил, попробовать сделать фолдинг. Не пробовал? Как такая идея, живучая?

Date: 2009-01-27 05:04 pm (UTC)
From: [identity profile] tengu-crow.livejournal.com
Фолдинг я пробовал - у меня он работает на скриптах - очень удобно когда все значимые вещи свернуты. Но. Я разобрался только в том как делать фолдинг по отступам (в смысле в программах, которые отформатированы по отступам). В остальном я увяз - так что любые подробности будут приняты с благодарностью :)) Можно даже отдельным постом :))

А! А еще у меня в псевдо-фолдинговом режиме работает аутлайнер - тоже милая весч. Так что, да - фолдинг рулит однозначно, но я не знаю получится ли у меня его толком настроить (не меняя формат моего файла) или нет.

Date: 2009-01-27 06:55 pm (UTC)
From: [identity profile] ollycat (from livejournal.com)
Да как выяснилось все довольно просто с фолдингом. И главное, в чем ты сам убедился, очень удобно. :) Ладно, попробую отдельным постом. :)

Date: 2009-01-25 01:36 pm (UTC)
From: [identity profile] ollycat (from livejournal.com)
Да, и по поводу тегов: я не разбирался, но делаются же выпадающие меню на "добивку"? Надо глянуть как оно работает...

April 2026

S M T W T F S
   1234
5678910 11
12131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 7th, 2026 09:05 pm
Powered by Dreamwidth Studios