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

2008-02-28

Свобода в дії

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

Для створення графічного інтерфейсу GNOME використоує бібліотеку GTK. Розробники постаралися і не стали вкомпільовувати модель вікна в програму gnome-screensaver, а розмістили її у /usr/share/gnome-screensaver/lock-dialog-default.glade. Схоже, ті хлопці по-справжньому пройнялися ідеєю шаблону MVC, і це, мабуть, найбільш вдалий приклад його застосування без зайвої містифікації чи штучності.

Отже, беремо до рук редактор інтерфейсів Glade, замінюємо один горизонтальний контейнер набору клавіш на два (майже) таких самих, не змінюючи ідентифікатори самих клавіш, а то як же контролер з ними впорається? Підміняємо оригінальний файл модифікованим і милуємося результатом:

Побіжно слід відзначити передбачливість розробників бібліотеки GTK: розміщення елементів у контейнерах значно краще підходить для інтернаціоналізації та пристосування інтерфейсу, ніж якби елементи були прив’язані до екранних пікселів. Хочу мати надписи великими шрифтами, щоб не напружувати зір — будь ласка!

2008-02-13

test

Hello, world!

2008-02-03

Нотна типографія

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

Нещодавно схотілося вивчити кілька українських пісень, знайти б тільки якусь хорошу обробку для гітари. Після години пошуків, тижня переговорів, таки отримав придбану на сайті http://gitara.in.ua збірку “Повій, вітре, на Вкраїну”. Тридцяток пісень — це дуже добре, тим більше, що я їх всіх раніше чув, і вони мені подобаються. До цих пір ніколи не доводилося розбирати та вчити гітарні п’єси з нот, проте виявилося, що це насправді легко.

Очевидно, альбом набраний у якомусь офісному текстовому процесорі, якість нотних партитур теж нікудишня — це тільки суб’єктивні враження. Але саме воно спонукало озирнутися по сторонах. Виявляється, продуктів є багато, перепробувати всі неможливо, тому довелося порівнювати відгуки користувачів. Таким чином вибір спинився на “ставку́ лілій”.

Розібратися із системою після кількох спотикань вдалося легко, тому хочу поділитися результатом, провести по своїх слідах. Від дистрибутиву лінукса наступні кроки залежать слабко, проте відмінності є. Я спробував це у debian-40r1, який у мене є пісочницею для різноманітних експериментів з ядром, та у Fedora-8, під керуванням якої працює лаптоп.

Procedure 1. Підготовка партитури пісні “Реве та стогне Дніпр широкий”

  1. Встановлюємо систему Lilypond

    З репозитарію Федори:

    [sakhnik@incognito ~]$ sudo yum install lilypond lilypond-doc

    З репозитарію Дебіан:

    [sakhnik@sandbox ~]$ sudo apt-get install lilypond
  2. Вивчаємо підручник

    Уважно читаємо підручник, який вже має бути десь у локальній файловій системі. Мушу зізнатися, що цей пункт, як завжди, я пропустив, але часто використовував документ в якості довідника.

  3. Готуємося до бою.

    Отже, до цих пір ми вже зрозуміли, що lilypond — це компілятор на зразок TeX/LaTeX. Якщо його накормити хитрим текстовим файлом, то він поверне кілька графічних партитур, файл MIDI для контролю за процесом на слух.

    Кожна нота вихідного файлу PDF містить посилання на місце її в джерелі: textedit:///home/sakhnik/dnipro.ly:10:12:36. У підручнику описано, як скористатися цим фактом у зв’язці lilypond-invoke-editor та xpdf. Не працює? — Не біда, легко підпилюємо GNOME, щоб він розбирав такі URL і користуємося більш зручним, на мій погляд, evince:

    gconftool-2 --set --type=string /desktop/gnome/url-handlers/textedit/command 'url.sh "%s"'
    gconftool-2 --set --type=bool /desktop/gnome/url-handlers/textedit/enabled true
    gconftool-2 --set --type=bool /desktop/gnome/url-handlers/textedit/need-terminal false

    Зрозуміло, що сам url.sh ще потрібно навчити запускати редактор Vim:

    #!/bin/bash
    #
    # Handle passed url. Useful for lilypond editing.
    
    [[ $# != 1 ]] && echo "`basename $0` <url>" && exit 1
    
    if [[ "$1" =~ '^textedit://([^:]+):([0-9]+):([0-9]+).*$' ]]; then
        server=LILYPOND
        if [ -z `gvim --serverlist | grep $server` ]; then
            gvim --servername $server
        fi
        fname=${BASH_REMATCH[1]}
        line=${BASH_REMATCH[2]}
        col=${BASH_REMATCH[3]}
        gvim --servername $server \
            --remote-send ":e $fname<cr>:call cursor($line,$col)<cr>\
    :call foreground()<cr>"
        exit 0
    fi
    
    echo "Unknown url scheme"; exit 1
  4. Готуємо редактор Vim

    Розробники Lilypond підготували виділення синтаксису, макроси для швидкого набору, компіляції. При встановленні пакету скрипти редактора автоматично копіюються у директорію /usr/share/vim/vim70. Але я використовую власної збірки найновішу версію редактора, тому розширення Lilypond довелося скопіювати самостійно.

  5. Виконуємо набір

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

    Цикл розробки дуже простий. Компілюємо вихідний файл dnipro.ly, переглядаємо його з допомогою evince, тикаємо мишкою на об’єкт, який потрібно поправити. На екрані з’являється (чи просто виводиться на передній план) вікно редактора Vim. Далі робимо потрібні виправлення, виконуємо команду :make, повертаємося до переглядача і перечитуємо файл комбінацією клавіш Ctrl+R.

    Подолати весь документ цілком відразу, очевидно, не вдасться. Тому я набирав його десь зо три години (з перервами, зрозуміло) поетапно.

    1. Підготовка шаблону

      Шаблон — це перший-ліпший приклад з підручника, який схожий на потрібний документ. Його тільки потрібно очистити від зайвого.

    2. Набір нот

      По черзі такт за тактом набрав усі три голоси́, часто компілюючи та звіряючись із джерелом.

    3. Набір аплікатури та струн

      Це легко додається у існуючий документ. На цьому етапі вперше виявилася потреба ручної корекції виводу. Але, як було згадано вище, це здійснюється дуже просто.

    4. Динаміка та мітки

      Ще простіше, ніж попередній пункт, оскільки розташування знаків більш одноманітне.

  6. Куштуємо плоди

    Саме пора насолоджуватися результатом.

    Наступного разу розповім, як можна доповнити нотний запис п’єси табулатурою, трохи змінивши вихідний код.

2008-02-02

Просвітницький метрополітен

Цікаві речі іноді видають на екранах нашого метрополітену.

 

Гроші, якими володієш — знаряддя свободи, а ті, за якими ганяєшся — знаряддя рабства.

 
 Жан-Жак Руссо

2008-01-10

Jewish amulet

Our chef put an interesting thing in the doorway.

He promised to do that to the chef system administrator after successful and quick move into the new office.

2008-01-03

“Tears in the rain”

I’ve discovered an interesting tool that allows to record a screen cast. Thus I’m able to record some educational videos of how to use the Vim editor or the GNU/Linux operating system.

Let’s see!

2007-12-26

Unix way

If people knew the grep, sed and vim tools, millions of useful software products would have been never developped.

I’ve just noticed that it’d be good to change the string new test_suite to more stable macros BOOST_TEST_SUITE. A very simple command did everything for me after spending 5 minutes for this:

[sakhnik@incognito ~/work/mps]$ find . -name '*.cc' | \
    xargs sed -i '1,$s/(new test_suite(\([^)]*\)))/ = BOOST_TEST_SUITE(\1)/g'

That’s exciting!

2007-12-07

Колискова

Слухаю — і ніяк не можу наслухатися, просто заворожуючий звук. Може, моя мама мені так само співала? Це те, за що я так люблю цю культуру!

Гойда-гойда-гой, ніченька іде,
Діточок малих спатоньки кладе.
Під вікном тремтить вишенька мала,
В хатку проситься, бо прийшла зима.
Гойда-гойда-гой, очка заплющи,
В сні щасливому зігрієшся ти.
Йди до хлопчика, люба вишенько
В колисочці буде тепленько.
Гойда-гойда-гой ніч прийшла до нас,
Діточкам малим спатоньки вже час.
Рости, хлопчику, з вишенькою враз,
Хай не скупиться доленька для вас

2007-11-30

How to trust them our money?

That’s what I see sometimes:

2007-11-18

Advertisement in the underground

Can it be possible in the epoch of context ads?

Global logic is an outsource software company.

2007-11-17

Shrek’s new line

Do you recognize this brilliant face? It looks like there’s no limit for ukrainian pirates.

2007-11-11

Composed characters

I’ve noticed that there’s a way of depicting stress signs in Cyrillic text, like the following: КМІТЛИ́ВИЙ, ТЯМУ́ЩИЙ, МЕТИКО́ВАНИЙ, МЕТИКУВА́ТИЙ, ПОКМІ́ТЛИВИЙ, ШТУДЕ́РНИЙ. I don’t know how they were typed. But analysis revealed that they refer to so-called composed utf-8 characters. On the way of the investigation it appeared that the XOrg allows to define a custom composition key to type complicated characters easily.

There follow few examples below:

<rctrl>=e ⇒ €
<rctrl>--- ⇒ —
<rctrl>'e ⇒ é
<rctrl>~n ⇒ ñ

Nice! So I know how to type diacrytic characters in any graphical application. Additionally, to the graphical stress sign is one of composed unicode characters, it can be inserted into an XML by its code: &#769;. There’re many other composing characters, which can do interesting things: w̳o̸rld.

2007-11-08

Sorting in the StarDict

Always mixed up accents in foreign words, and it was difficult to find wrong spellings in the StarDict. So I googled the problem.

It appeared that the unix-way is to rely the comparison during sorting on the current locale. Besides the StarDict allows a user to set any language-specific collate function:

I’ve chosen the utf_unicode_ci, and now I’m astonished with the result:

2007-11-07

Core dump

Where’re those known from the university times core dumps on Linux? How can I discover a really rear bug in the server daemon?

Well, it appeared that they’re just turned off for ordinary users in the /etc/profile:

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

Really, why a user should know about such a weird thing? Now I always reset the ulimit before starting an application being debugged.

2007-10-30

Good bye, salsa LA

Finally I’ve given up the LA style. The main reason is that I like much more the casino, which is more authentic. The small one is that I’ve got annoyed by its complexity and pretence. That was a hard step after a year of intensive study.

Wireless networking is easy

I always wandered how difficult would it be to use wireless network on my linux box. But all the complexity reduced to installing proper driver for the on-board

[~]$ /sbin/lspci | grep Wireless
08:04.0 Network controller: Broadcom Corporation BCM4318
[AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)

From the web it appeared to be the native bcmwl5 guided by the ndiswrapper.

Almost there! The GNOME’s NetworkManager applet showed available wired and wireless networks to be chosen.

2007-10-28

Old good flying friends

At last I visited my friends yesterday. It seemed that we never parted.

Here’s Dima taking off:

And this is Tonya:

2007-10-04

Meet the nspluginwrapper

The gnash was a temporary solution, because it produces inaccurate output and doesn’t play some movies. Fortunately, I’ve been advised of an alternative: to use the original Adobe’s flash player plugin by means of the nspluginwrapper.

That’s appeared to be nice!

2007-10-01

Remote administration via GPRS

I’ve given my old laptop to the parents, having told them not to reinstall the system. I wanted they learn working with an open source system (linux). But a problem appeared: how to maintain the system? The only connection to the internet is a dial-up GPRS one.

Well, actually this is no more a problem. Let suppose my father establishes a connection to the internet, then connects to the well-defined server, which we both have SSH access to:

[smm@home ~] ssh -R 1234:localhost:22 koresha@koresha.org

Thus, any connection to the port 1234 will be forwarded to the home:22. So, now it’s my turn:

[koresha@koresha.org ~] ssh -p 1234 root@localhost

And that’s it! I have the desired root console remotely.