Select orthographic mistake with the mouse pointer and press Ctrl+Enter. Let’s make our language cleaner!
Якщо помітите помилку на цій сторінці, будь ласка, виділіть її вказівником миші та натисніть Ctrl+Enter. Зробімо наше мовлення чистішим!

2008-03-31

Всемогутній grep

Вік живи — вік учись! Спіймав себе на тому, що використовую Midnight Commander тільки для того, щоб знайти що-небудь у файлах. Незручно, а іншого шляху не знав. Проте насправді це робиться дуже просто:

$ find . -name '*.cc' | xargs grep '\<main\>'

Гурмани можуть спробувати інший спосіб:

$ find . -name '*.cc' -exec grep -H '\<main\>' {} \;

І нарешті десерт. Переглядаючи підручник команди, виявив, що можна на екрані отримувати красиву кольорову картинку. Для цього достатньо вказати параметр --colour=auto у змінній оточення GREP_OPTIONS або просто у виклику команди.

2008-03-26

Синтаксис BBv2 у Vim

До цих пір ніде не бачив підтримку скриптів Boost Build v2 для редактора Vim. Незручно, бо цією системою я користуюся ледь не щодня. Отже, довелося поправити ситуацію самостійно.

Насправді, це дуже просто. Насамперед заводимо розпізнавання типу файлів у ftdetect/bbv2.vim:

au BufNewFile,BufRead Jamfile                   setlocal filetype=bbv2
au BufNewFile,BufRead Jamroot                   setlocal filetype=bbv2

Потім розпізнаємо ключові слова у syntax/bbv2.vim:

" Чутливість до реєстру
syn case match

" Розпізнаємо цілі BBv2
syn match bbv2Target "^\s*\(exe\|lib\|install\|alias\|actions\|notfile\|make\|import\|path-constant\|explicit\|local\|project\|run\|test-suite\|build-project\)\>"
" Деякі властивості
syn match bbv2Feature "\(<location>\|<include>\|<cflags>\|<linkflags>\|<library>\|<define>\|<file>\)"
" Деякі ключові слова
syn match bbv2BuiltIn "\<\(glob-tree\|glob\|SHELL\|run\)\>"
" Змінні на зразок $(THIS) чи $(THAT)
syn match bbv2Variable "\$([^)]\+)"
" Коментарі
syn region bbv2Comment start="#" end="$"
" Розділ actions містить команди оболонки Unix
syn include @Shell syntax/sh.vim
syn region bbv2Actions start="^{$" end="^}$" keepend fold contains=@Shell

" Нарешті співставляємо розпізнані частини із відомими типами.
hi def link bbv2Comment Comment
hi def link bbv2Target Type
hi def link bbv2Feature Special
hi def link bbv2BuiltIn Keyword
hi def link bbv2Variable Identifier

І ось результат:

import notfile ;

############# Generic environment ###########
 lib sys_gsmme : : <name>gsmme ;
 lib sys_mysqlwrapped : : <name>mysqlwrapped ;
 alias gsmme : sys_gsmme ;
 alias libmysqlwrapped : sys_mysqlwrapped ;
############# VDNS environment ##############
# alias gsmme : $(VDNS_TOP)/src_gsmlib//libgsmme ; #gsmme
# alias libmysqlwrapped : $(VDNS_TOP)/src_mysqlwrapper//libmysqlwrapped ;
#############################################

path-constant BIN_DIR : . ;

# Main target.
exe mps
    : main.cc
      app//app_src common//common_src
    ;

install bin/stage
    : mps
    : <location>$(BIN_DIR)
    ;
install bin/stage2
    : mps
    : <location>$(VDNS_TOP)/binaries
    ;

# Black magic. Use this carefully.
notfile distclean : @distclean ;
actions distclean
{
    echo "Cleaning..."
    rm -rf `find . -name 'bin*'`
    rm -rf `find . -name '*.log'`
    rm -rf `find . -name '*.bak'`
    rm -rf `find . -name 'a.out'`
    rm -rf lib*.so
    rm -f mps
}
explicit distclean ;

# Another piece of the magic, white one. Use this to make sure
# everything works.
alias test : [ glob-tree test ] ;
explicit test ;

2008-03-25

Покращення vman

За порадою vimtip #167 з давніх-давен я переглядав сторінки підручника у редакторі Vim. Для цього у .bashrc був псевдонім:

vman() { man $* | col -b | vim -c 'set ft=man nomod nolist' - ; }

Неймовірно просто і зручно, проте одна дрібничка постійно набридала: якщо шуканої сторінки немає, переглядач все-таки запускався без будь-якого тексту. Допоміг невеличкий порух пальцями:

vman() { text=`man $*` && echo "$text" | col -b |\
        vim -c 'set ft=man nomod nolist' - ; }

2008-03-14

Іпотечна криза

Наткнувся щойно на дуже цікаву думку: Денис Олійников пропонує прискорити іпотечну кризу. Я його підтримую!

2008-03-10

“Повітря, яким я дихаю”

Дуже сподобалася ця стрічка. Відверто, не люблю розводити філософські теревені, проте хорошу ілюстрацію важко оминути. Щодня ми кудись біжимо, чогось добиваємося, але здебільшого все це заради ілюзорних цінностей. Щоразу це коло розривається, коли постають справжні: любов, життя, діти. Цей фільм якраз обігрує кілька моментів такого переходу.

Найбільше зачепив мене останній сюжет: врятовані життя — це дуже не схоже київські будні.

2008-03-03

Словники у StarDict

Знадобилися тут словники екзотичної східної мови і так, щоб не шматувати папір у пошуку слова. До цих пір я успішно і дуже зручно користуюся StarDict, от і подумалося, що непогано було б знайти та причепити до нього потрібну мені мову.

Відверто, було непросто: вона ніяк не хотіла знаходитися. Десь трапилися два романізовані словники по чотири тисячі (!) слів у кожному напрямку, проте цього мало у житті. Нарешті з нечастих натяків зрозумів, що є можливість здобути шукане, сконвертувавши з комерційного Вавілону. Так з’явилося рішення:

Procedure 1. Конвертація словників Вавілону для StarDict

  1. Встановлюємо редактор словників StarDict

    [sakhnik@incognito ~]$ sudo apt-get install stardict-utils
  2. Беремо потрібні словники

    Можна, наприклад, так:

    [sakhnik@incognito ~]$ wget http://info.babylon.com/glossaries/389/Babylon_English_Hebrew.BGL
  3. Починаємо чаклувати

    Спочатку потрібно отримати його текстовий вигляд. Для цього запускаємо утиліту stardict-editor, нацьковуємо на щойно отриманий файл, правильно вказуємо тип .BGL і запускаємо перетворення клавішею Build. Як на мене, графічний інтерфейс для компіляторів чи фільтрів — це сумнівне рішення, тому що таку дію більше не можна автоматизувати, а це стало б у нагоді у наступних кроках.

  4. Поправляємо вихідний код словника

    Світ неідеальний, принаймні, зараз. Виявилося, що отриманий перед цим текстовий файл в деяких місцях містить неправильно закодовані символи, які я просто видалив. Крім того, в суміші східних та західних фраз недостатньо інформації для коректного відпрацювання GNU fribidi. В цьому випадку довелося трохи попрацювати напильником (редактором vim) з регулярними виразами. Насправді, це була справжня чорна магія, бо на це довелося витратити кілька годин.

  5. Компілюємо

    Нарешті, тим самим stardict-editor компілюємо вихідний код .babylon у зрозумілий для StarDict вигляд.

  6. Результат

Це просто рай якийсь, бо у школі та й в університеті нам доводилося користуватися таки дерев’яними книжками. Хоч і витрачали багато часу на пошук слів, проте ми таким чином знали йому ціну, і це була дуже проста й надійна мотивація для запам’ятовування.