Йшли співаючи по коридору, то чому ж було не запросити?
Якщо помітите помилку на цій сторінці, будь ласка, виділіть її вказівником миші та натисніть Ctrl+Enter. Зробімо наше мовлення чистішим!
2008-12-31
2008-12-24
Циганська історія
Студентом тоді ще був. Бідним, як щур, бо на стипендію жив, хоч і не одну. От, біжу на Котельникова в Ощадбанк по одну із них, а тут глип, біля кіоску крутиться кілька циганок із дітьми. Одна із них до мене: дай, мовляв, кілька копійок дітям на печиво. Мені ж цікаво стало, чи правда те, що про них розказують. От і згріб весь дріб’язок із кишені, мабуть, до цілої гривні. А вона ніжно з руки гроші забравши, не відпускає, і так пильно дивлячись впевнено починає: “Хочеш, щось тобі скажу?” А чому ж мені не схотіти після власної щедрості, тим більше, що вже заплатив? ;-)
Полила вона мене такими лестощами: і що сякий, і такий, і потім таке буде… Ну, навіть перегинати почала. От, говорю їй, що досить, мені йти треба, вже сам не радий що піддався. Тоді вона змовкла (хитра ж до дідька!), дає мені копійку назад і говорить, щоб взяв “на щастя”. Мені здалося, що легше піддатися, погоджуюся, а вона не віддає. Говорить, що так не можна, треба загорнути у паперову гривню! А якщо так не зроблю, то “знайду вдома домовину”!
Все, баста! Я зрозумів, куди вона зараз поведе. Їй в руки п’ять гривень, для надійності слово до вуха, що якщо вона накаркала, то я переріжу всіх циган, яких де зустріну (клин клином вибивають), і ми попрощалася. З тих пір циган не боюся, я вже від них відкупився малою ціною. У міф про їхню всеміць теж більше не вірю.
Справжня-таки маніпуляторка була, у мене слів немає від захоплення її вмінням! Не те що хлоп’ята-молокососи, які начиталися книжок про НЛП (це вже інша історія ;-).
2008-12-16
2008-12-12
2008-11-03
Лінукс очима розробника
(Стаття для http://www.grusha.org.ua)
Почалося все ще в університеті: на першому курсі лабораторні з програмування у класі HP Unix, потім Visual FoxPro у Windows NT4, лабораторні з чисельних методів знову в HPUX, невелика перерва, кафедральні спецкурси у Visual Studio 98. Далі перша робота на півтора місяця, де спробував було поставити собі RH Linux 5, але не подужав. Потім чотири роки розробки систем охорони у компанії ITV. Хоч і розробляли у Windows, ознайомився й почав використовувати переважно відкриті продукти: Vim для редагування, MinGW для компіляції, WiX для збірки інсталяційних пакетів. Нарешті, останні два роки працюю виключно в середовищі GNU/Linux у компанії Visonic, беру участь у розробці їхніх прикладних серверів та охоронних панелей.
Отже, панове, світу я побачив небагато, але якусь-таки думку про побачене довелося скласти. У цій коротенькій статті хочу поділитися з вами відповідями на два запитання:
- Чому мій роботодавець обрав GNU/Linux для розробки своїх продуктів?
- Чому я та мої колеги обрали GNU/Linux для повсякденної роботи?
Ми подібні до карликів на плечах гігантів. | ||
— Бернар де Шартр |
Навіть на теренах систем охорони, традиційно стабільному ринку, в якому гравці добре знають один одного десятки років, відбувається конкуренція: нові продукти, нові якості, нові вимоги. З розвитком нових технологій з’являються нові можливості, без яких покупці не звертають увагу на продукцію. Наприклад, з розвитком інтернету та вебу користувачі схотіли отримати доступ до охоронної системи свого житла зі звичайного оглядача: якщо дитина повернулася раніше зі школи, зняти з охорони, дистанційно вимикати побутові прилади, переглядати зображення з камер, якщо трапилася-таки тривога тощо. Отже, перед розробником вибір: або самому написати стек протоколів інтернету (IP) або скористатися вже готовим.
Правда, вибрати серед готових платформ для розробки непросто: доводиться шукати компроміс між пропонованими засобами, якостями, підтримкою, ціною. Власне, для маркетингу всі ці терміни вимірюються кількістю грошей: додаткові риси — плюс до вартості приладу, проблеми з розробкою та супроводом — плюс до витрат, та ще й власна вартість. Тому попри особисті вподобання розробників рішення приймається прагматично. Цього разу вони таки співпали.
Отже, для побудови веб-комунікатора PowerLink компанія Visonic вибрала дистрибутив Лінуксу montavista для процесора Xscale-256, дала йому 32 Мб оперативної пам’яті, 128 Мб постійної пам’яті для кореневої файлової системи, контролер дротяної мережі і т. ін. Цього виявилося достатньо для взаємодії з охоронною панеллю, запуску веб-сервер Apache, обслуговування десятка камер у локальній мережі і не тільки. У такій системі користувач має змогу зайти на сторінку системи охорони свого житла, переглянути зображення з камер, стан побутових приладів, при потребі щось дистанційно змінити. Крім того, веб-комунікатор у випадку тривоги передає повідомлення із зображенням на сервер, звідки воно може переправитися на телефон чи/і електронну пошту господаря. Насправді зважаючи на вимоги надійності та безпеки система трохи складніша, проте її успіх зобов’язаний вибору відкритих технологій, громадській підтримці (на противагу комерційній) та відсутності ліцензійних зборів за користування доробками.
Трохи інша ситуація із сервером, бо кількість його інсталяцій заздалегідь менша. До нього висуваються більш жорсткі вимоги до продуктивності, адже один сервер повинен обслуговувати до ста тисяч приладів. Крім того, логіка роботи значно складніша, багато задач свідомо були перенесені на сторону більшої потужності. Це стосується, наприклад, обробки отриманих зображень. Проте все необхідне у нас вже є: C++ для вимогливих задач, Python, XSLT для редагування конфігурації, bash для склеювання різних частин, PHP для користувацького інтерфейсу тощо.
Найбільш цікавий та показовий випадок розробці сервера трапився тоді, коли постала задача розробити надлишкове рішення, тобто звести нанівець результат відмови обладнання. Вирішили використати два однакові сервери, на яких працює служба drbd для синхронізації оперативних даних. Інша служба heartbeat слідкує за життєздатністю, і як тільки виявляється зникнення зв’язку чи інша неполадка, роботу починає виконувати резервний сервер.
Найбільшим здивуванням для нас, розробників прикладної частини, стало те, що додання аспекту надлишковості обійшлося без втручання в наш код. Важко собі було б уявити таку можливість, якби не чітко розмежована архітектура ядра Лінуксу: драйвер жорсткого диску → віртуальна файлова система → системні виклики. В цей ланцюг легко додати нову ланку, яка у нашому випадку займається синхронізацією даних із іншою системою. До слова, на це пішло місяців зо два, а от у попередньому підприємстві так і не розв’язали, наскільки мені відомо.
Давайте підсумуємо. Відкритість, простота, надійність, зручність для розробки — все це причина вибору платформи GNU/Linux у компанії Visonic.
Якби люди знали інструменти grep, sed, awk, ніколи не з’явилося б стільки красивих програм. | ||
— Народна творчість |
Починаючи обговорювати речі, які стосуються людських смаків, ми завжди ризикуємо розпалити священну війну. Тому домовмося, що мої слова — це не категорична істина, а вираження мого особистого смаку. А на колір і смак, як відомо, всі фломастери різні. От взяти, наприклад, популярний віднедавна принцип побудови інструментів для дизайнерів WYSIWYG (what you see is what you get). Багато хто ні про що інше й чути не хоче, а для мене це кіт в мішку. На вигляд документ неабиякий, а відомо кому, яка каша там всередині? WYWIWYG (what you want is what you get) — це справжній шлях. Розуміння цієї моделі почалося з часів командної оболонки[1] Unix. Користувач просить систему виконати якусь дію чи навіть послідовність дій, детально описуючи цільові об’єкти, особливості операцій. При цьому вважається, що користувач розуміє, що хоче, а система повинна покірно виконати саме замовлені дії без відхилень і примх.
Візьмімо тестовий редактор. В моделі WYSIWYG робота з ним схожа на динамічну комп’ютерну гру: спіймав поглядом вказівник, підвів його до потрібного місця, натиснув на клавішу видалення тексту і тримаєш її до тих пір, поки зайві знаки не щезнуть. Просто захоплююче! А що ж натомість у нас? — Уявімо, що текстовий редактор розрізняє текстові об’єкти слово, рядок, речення, параграф, їх початки й кінці тощо. Також є набір дій над цими об’єктами: переміщення, видалення, заміна, копіювання. — Такий прилад не буде приковує увагу до елементарних дій, а слухняно виконує прохання користувача.
Трохи роззирнувшись, можна помітити, що такий підхід переважає у системах на зразок Unix: командний інтерфейс налагоджувача GDB[2], системи підготовки до друку LaTeX[3] та LilyPond[4] тощо. Мабуть, недарма: їх створили інженери, які розуміли, що тільки усвідомлені дії можуть принести і хороший передбачуваний результат і справжнє задоволення від творіння у такому середовищі.
Все в цій системі — програмування, тобто насправді ніхто не заставляє, але якщо треба виконати десяток однотипних дій, то відразу відчувається доречність можливості. Мудро, наче в одному радянському мультфільмі: “Краще витратити годину, а потім за п’ять хвилин долетіти”.[5] Для програмістів така можливість — це особливе задоволення: з одного боку автоматизація вкрай проста, тому рідко бувають невдачі, а з іншого потім відчуваєш себе на голову вищим від індуса (даруйте, людини з конвеєру). Скриптування підтримують: командна оболонка[1], текстові редактори, налагоджувач[2], LaTeX[3], MetaPost[6], системи контролю версій і багато інших. І головне: просто, без занадто розумних слів та заплутаних технологій. Більше того, особливих надзвичайностей у різних, здавалося б, програмах зовсім небагато, адже не на порожньому місці всі вони будувалися. Так, всюди використовуються одні й ті самі регулярні вирази, для зчитування запитів командного рядка використовується одна й та сама бібліотека readline, ключі командного рядка повторюються від програми до програми…
Розробляєш прикладний сервер — будь готовий до можливих проблем, а ще морально підготуйся до того, що “на льоту доведеться міняти обшивку крил”. Це треба відчути на власній шкурі, бо стільки адреналіну виділяється тільки на рингу чи в затяжному стрибку (з того самого недобудованого крила!). А потім розумієш, що не пережив би той день, якби всі давно вивчені та полюблені інструменти не працювали через мережу прозоро, наче й не через мережу зовсім. Простіше не придумаєш: під’єднавшись до віддаленого сервера, отримуєш командну оболонку і відчуваєш … тепло й затишок рідного оточення. Завбачливо передаєш опцію -X
— і милуєшся вікнами віддалено запущеної графічної програми (viva wireshark[7]!). Монтуєш директорію з вихідними кодами — і можеш розпочинати налагодження, не займаючись щохвилинно копіюванням. Рай на Землі!
Нарешті, є й унікальні речі, яких не знайти на інших платформах. От, прийшовши зі світу Win32, я відразу ж кинувся шукати спосіб перехоплення даних з послідовного порту. Справді, дуже потрібна штука той portmon[8], щоб зрозуміти, як байти бігають по дротах. А дзузьки, зовсім нічого нормального! І раптом осяйнуло: “А все те просто зайве, адже є strace[9]!” З прозрінням прийшло й розуміння: це все відкритість! Linux не ховає таємниці за сімома печатками, штовхаючи допитливих до відчайдушних способів злому, а радо ними ділиться. Якщо не віриться, поцікавтесь-но, як працює той самий portmon[8]. Проблеми бувають всюди, а щоб їх вирішити комусь доводиться танцювати з бубном, а хтось може зазирнути у вихідний код чи навіть підглянути, як все працює in vivo. Отже, в такій системі працювати не тільки приємно, але й легко!
І наостанок про ностальгію, тільки не про ту, що ту́га за втраченим, а про ту, яка теплий спогад про минуле. Я про університет: розумні й досвідчені викладачі, цікаві однодумці-студенти, щодня нові враження від навчання й життя. Зізнаюся відверто, те саме відчуваєш, працюючи з відкритою громадськістю. Тут ідеї, доробки — це знання, якими радо діляться, а не торгують. Це справді приємно!
[1] Командна оболонка — інтерпретатор команд операційної системи Unix.
[2] GNU debugger — налагоджувач програм у системі GNU
[3] LaTeX — набір макросів TeX для отримання PDF чи PostScript з тексту
[4] LilyPond — система підготовки до друку музичних творів, чимось нагадує LaTeX, тісно з ним взаємодіє.
[5] Крила… ноги… головне — хвіст!
[6] MetaPost — це пакет для креслення здебільшого математичних ілюстрацій, інтегрується з LaTeX.
[7] Wireshark — графічна програма для перехоплення мережевих даних, незамінний помічник у розробці.
[8] portmon — зручний перехоплювач даних з послідовного порту, буває в нагоді при налагодженні взаємодії з деяким спеціальним обладнанням.
[9] strace — маленький інструмент, що відображає взаємодію прикладної програми з ядром Linux, тобто відображає системні виклики.
2008-10-09
Закривайте транзакції!
Переробили деякий пітонівський скрипт, він став рідше робити зміни і проявилася несподівана проблема: при переконфігурації він наполегливо відмовлявся бачити зовнішні зміни. Тобто, хтось зовні змінює параметр, а скрипт геть ігнорує ці нововведення.
Несподівано для себе зробив відкриття, що в межах транзакції результат вибірки завжди один і той самий (для одного запиту):
mysql> start transaction; mysql> select * from table; -- якийсь результат mysql> -- в цей час хтось змінює записи таблиці table mysql> select * from table; -- повертає початкову вибірку без змін mysql> commit; mysql> select * from table; -- тепер вже видно зміни з іншої транзакції
А почалася ця проблема саме через розширення пітона MySQLdb. Він автоматично для нового з’єднання починає нову транзакцію, а закрити її пропонує самостійно викликом
conn.commit()
Саме його й бракувало у коді після вибору з бази даних…
2008-10-01
“Циганська угорка”
Для нас батьки робили майже неможливе. Наприклад, батько колись привіз з райцентру останній баян, за який довелося заплатити більше, ніж кілька місячних заробітків. А до тих пір я вчився на якомусь позиченому старому…
2008-09-20
Політологічна гра “вибори”
Переглядаючи студентські фотографії, згадав пригоду на четвертому курсі. У другому семестрі ми тоді вивчали політологію, а країна якраз вибирала різних депутатів.
Словом, наш викладач Ткач Олег Іванович (гордився, що носить прізвище основоположника політології, хоч той звався по-німецьки Вебером) запропонував розіграти наші власні маленькі вибори до райради: два кандидати пропонують свої програми, два їхні повірені проводять агітацію, ну а решта потоку — електорат. Мені випало стати кандидатом, за мене заступитися взялася, як завжди, Наталя Прокопчук. Разом розробили серйозну програму підйому Голосіївського району, мовляв, не життя стане, а справжній рай. Для більшої переконливості агітку повісили навіть на факультеті.
Все проходило ідеально: наші суперники явно не витримували такої підготовки. Тільки от після голосування виявилося, що ми набрали удвічі менше голосів! Як же їм це вдалося??? Таємницю розкрили й нам: інший кандидат просто підкупив виборців, мовляв, після виборів пригощає пивом на виставці!
Чи не реалістично, га?
P.S.: Потім викладачі, побачивши агітку, ще довго перепитували, чи став я-таки депутатом…
2008-09-14
Заповідник “Биківнянські могили”
2008-09-08
Геокешинг
На вихідних спробував знайти схованку у покинутому будиночку лісника (див. сторінку з описом). З другої спроби таки потрапив до лісництва, а от із легендою довелося трохи пововтузитися: спростити математичний вираз (для чого там взагалі рахувати торці, коли їх кількість на результат не впливає?), залізти у веб по нероздруковану картинку, нарешті знайти її на місцевості.
Нагородою стала знайдена схованка, яку навіть розкопувати не довелося. Забрав маленьку хрестовинну викрутку (стане останнім аргументом у суперечці з колегами), залишив DVD з кубинською сальсою.
Потім далі ще відвідав позначену у Вікімапії альтанку.
2008-08-24
Сезон пожеж
2008-07-22
Будую автомат
Треба зробити складнющий автомат, та ще й з жорсткими вимогами дійсного часу. Пішов кроїти boost::statechart, може, спростить життя у наступні півроку.
2008-07-14
Хочеш схуднути — спитай у мене як
На роботі у тестерів телемедичних проектів є електронні терези, тому я вже звик бачити свої 71 кг у будь-який час. А сьогодні зранку показали тільки 68! Куди поділись мої законні три кілограми за вихідні? Ой, точно, вчора накрутив у сідлі шістдесят кілометрів за три години у тридцятиградусну спеку. І ніяких дієт ;-)
2008-07-11
Linux — сила!
Поки ми тут допилювали та полірували сервер VDNS (хочете знати, що це таке — спитайте у Вісоніка), ізраїльські колеги додали до нього надлишковість. Це два однакові сервери, які ззовні видно, як один; якщо один із них вимикається чи гине, інший його прикриває. Зробили це так, що ми про це на прикладному рівні навіть не знали, тепер тільки починаємо розбиратися та виправляти “завусениці”.
У попередньому підприємстві українські хлопці, напевне, до цих пір б’ються над такою самою задачею! Їм пощастило менше: немає у них DRBD + High Availability, а може й просто не хочуть користуватися чужими та ділитися своїми результатами.
2008-06-27
Відрядження у Тель-Авів
Коли зберуся з думками, напишу про поїздку більш детально. А зараз просто фото.
Ізраїль |
2008-06-10
Skype через GPRS
Виявилося, що Skype чудово бігає через звичайне з’єднання GPRS/EDGE. Якщо IP-телефонія здатна працювати в таких невимогливих умовах, чому ж вона до цих пір не повсюдно?
2008-06-06
2008-05-27
2008-05-25
SMS про новий лист
З телефону легко можна перевірити електронну скриньку. А як дізнатися про новий лист, не зазираючи туди раз по разу?
Можна налаштувати перенаправлення листів на <38067...@sms.kyivstar.net>
. Особисто мене цей варіант не влаштовує, бо затримка велика, не підтримується кирилиця, доводиться лізти в налаштування, щоб вимкнути перенаправлення, коли я за комп’ютером, бо про пошту я дізнаюся із спливаючих вікон.
Спосіб №2. Запускаємо маленький скрипт, який раз у п’ять хвилин перевіряє скриньку і відсилає SMS через службу Google Calendar із заголовками непрочитаних листів. Зрозуміло, листи доводиться при цьому позначати, як прочитані. Думаю, це цілком законно, хоч і календар Ґуґла використовується не за призначенням.
Хочете подивитися у мій скрипт, напишіть мені ;-)
2008-05-03
Огидний гламур
— А от скажіть, ми якось з колегами посперечалися, чи можна говорити “вибачаюсь”, просячи пробачення? Я стверджував, що це неправильно… — Ну, чому ж не можна? Навпаки, це дуже хороша форма у вищому суспільстві. Цим ви говорите бидлу, що вам не потрібне його низьке пробачення… | ||
— Б. Акунін, “Дзеркало Сен-Жармена” |
Іноді стаю мимовільним свідком людської зверхності, і щоразу не можу зрозуміти, яка така муха керує аристократами. Так, якось у “Пузатій хаті” манірна відвідувачка не полінувалася продефілювати аж у підсобку і за рукав привести працівницю, щоб та забрала з її столу тацю з посудом. Природне запитання: чому вона просто не прихопила із собою тацю по дорозі? Боялася втратити корону?
Сьогодні ж у зовсім іншому місці: “А давайте ви тут не будете підмітати?” — здалеку хтось до техпрацівниці. Далі пішла колоритна перепалка просто на голому місці… Це просто триндець! Це так висловлюють просьбу? Чи ж раби ми один у одного?
2008-04-30
2008-04-25
2008-04-13
Прізвище Сахнік
— Дорога редакціє, у мене дуже рідкісне прізвище Сірогитан. В старовину циган називали гитанами, чи мають мої предки щось спільне із цим? — Шановний наш слухачу, ваше прізвище нічого спільного із циганами не має. Швидше за все, воно з’явилося в результаті писарської помилки і в оригіналі було Сіроштан. | ||
—З радіопередачі |
Кілька днів тому до мене звернувся якийсь Санкт-Петербурзький Сахнік, мовляв, рідкісне прізвище, його предки з України, чи бува не родичі ми? — Ні, ми не родичі, та й прізвище часто трапляється у Волинському Поліссі. Проте стало цікаво і я швиденько зиркнув, що означає оце саме Сахнік.
Отже, поширене українське прізвище Сахно пішло від грецького імені Олександр. Схоже на неформальне Саша? Та й мого дядька Сашу Мокійця в селі прозивали Сахоном (отак у нашій місцевості ставляться до шиплячих ;-). Сахнік — це зменшувально-пестливе, характерне саме для Полісся, проте дещо незвичне для української мови. Цілком могло стати таким через якусь помилку.
2008-04-02
Перехоплення даних з послідовного порту
На минулій роботі часто доводилося працювати з різноманітними приладами через послідовний порт у системі Ўіндоўз. Завжди виручав інструмент portmon компанії Sysinternals. Microsoft купила sysinternals, а я працюю у Linux. За звичкою хотів щось подібне знайти і для відкритих систем, а дзузьки! Є десяток саморобних недоробок, проте всі вони роблять зовсім не те, що треба.
І ось я нарешті зрозумів, чому в Linux немає такого ножа. Виявляється, він просто нікому не потрібен, підглядати за обміном даними можна легко з допомогою іншого швейцарського ножа з назвою strace:
[~]$ strace -p 30565 2>&1 | grep "^\(write\)\|\(read\)" write(9, "1011 @ \24", 21) = 21 read(9, "\6", 10) = 1
Магічне число 30565 — це ідентифікатор процесу. Як я його знайшов? — Спитайте мене!
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
Встановлюємо редактор словників StarDict
[sakhnik@incognito ~]$ sudo apt-get install stardict-utils
Беремо потрібні словники
Можна, наприклад, так:
[sakhnik@incognito ~]$ wget http://info.babylon.com/glossaries/389/Babylon_English_Hebrew.BGL
Починаємо чаклувати
Спочатку потрібно отримати його текстовий вигляд. Для цього запускаємо утиліту
stardict-editor
, нацьковуємо на щойно отриманий файл, правильно вказуємо тип.BGL
і запускаємо перетворення клавішею Build. Як на мене, графічний інтерфейс для компіляторів чи фільтрів — це сумнівне рішення, тому що таку дію більше не можна автоматизувати, а це стало б у нагоді у наступних кроках.Поправляємо вихідний код словника
Світ неідеальний, принаймні, зараз. Виявилося, що отриманий перед цим текстовий файл в деяких місцях містить неправильно закодовані символи, які я просто видалив. Крім того, в суміші східних та західних фраз недостатньо інформації для коректного відпрацювання GNU fribidi. В цьому випадку довелося трохи попрацювати напильником (редактором vim) з регулярними виразами. Насправді, це була справжня чорна магія, бо на це довелося витратити кілька годин.
Компілюємо
Нарешті, тим самим
stardict-editor
компілюємо вихідний код.babylon
у зрозумілий для StarDict вигляд.Результат
Це просто рай якийсь, бо у школі та й в університеті нам доводилося користуватися таки дерев’яними книжками. Хоч і витрачали багато часу на пошук слів, проте ми таким чином знали йому ціну, і це була дуже проста й надійна мотивація для запам’ятовування.
2008-02-28
Свобода в дії
Вільне програмне забезпечення — це справжня свобода. До цих пір зрідка я тільки виправляв помилки. Проте цього разу спало на думку трохи підправити вигляд діалогу, який розблоковує екран. По замовчуванню на ньому знаходяться чотири клавіші в одному рядку, що робить його дуже розтягнутим по горизонталі. Непогано було б його скоротити, розмістивши клавіші у два рядки.
Для створення графічного інтерфейсу GNOME використоує бібліотеку GTK. Розробники постаралися і не стали вкомпільовувати модель вікна в програму gnome-screensaver, а розмістили її у /usr/share/gnome-screensaver/lock-dialog-default.glade
. Схоже, ті хлопці по-справжньому пройнялися ідеєю шаблону MVC, і це, мабуть, найбільш вдалий приклад його застосування без зайвої містифікації чи штучності.
Отже, беремо до рук редактор інтерфейсів Glade, замінюємо один горизонтальний контейнер набору клавіш на два (майже) таких самих, не змінюючи ідентифікатори самих клавіш, а то як же контролер з ними впорається? Підміняємо оригінальний файл модифікованим і милуємося результатом:
Побіжно слід відзначити передбачливість розробників бібліотеки GTK: розміщення елементів у контейнерах значно краще підходить для інтернаціоналізації та пристосування інтерфейсу, ніж якби елементи були прив’язані до екранних пікселів. Хочу мати надписи великими шрифтами, щоб не напружувати зір — будь ласка!
2008-02-13
2008-02-03
Нотна типографія
Можу відверто зізнатися, що я відчайдушний фанат типографської справи. Не менше мені подобається гітарна музика, українські пісні та програмування. Виявляється, є кухня, в якій можна приготувати відмінний салат із усіх цих частин. Мова піде про моє відкриття системи підготовки до друку музичних партитур Lilypond.
Нещодавно схотілося вивчити кілька українських пісень, знайти б тільки якусь хорошу обробку для гітари. Після години пошуків, тижня переговорів, таки отримав придбану на сайті http://gitara.in.ua збірку “Повій, вітре, на Вкраїну”. Тридцяток пісень — це дуже добре, тим більше, що я їх всіх раніше чув, і вони мені подобаються. До цих пір ніколи не доводилося розбирати та вчити гітарні п’єси з нот, проте виявилося, що це насправді легко.
Очевидно, альбом набраний у якомусь офісному текстовому процесорі, якість нотних партитур теж нікудишня — це тільки суб’єктивні враження. Але саме воно спонукало озирнутися по сторонах. Виявляється, продуктів є багато, перепробувати всі неможливо, тому довелося порівнювати відгуки користувачів. Таким чином вибір спинився на “ставку́ лілій”.
Розібратися із системою після кількох спотикань вдалося легко, тому хочу поділитися результатом, провести по своїх слідах. Від дистрибутиву лінукса наступні кроки залежать слабко, проте відмінності є. Я спробував це у debian-40r1, який у мене є пісочницею для різноманітних експериментів з ядром, та у Fedora-8, під керуванням якої працює лаптоп.
Procedure 1. Підготовка партитури пісні “Реве та стогне Дніпр широкий”
Встановлюємо систему Lilypond
З репозитарію Федори:
[sakhnik@incognito ~]$ sudo yum install lilypond lilypond-doc
З репозитарію Дебіан:
[sakhnik@sandbox ~]$ sudo apt-get install lilypond
Вивчаємо підручник
Уважно читаємо підручник, який вже має бути десь у локальній файловій системі. Мушу зізнатися, що цей пункт, як завжди, я пропустив, але часто використовував документ в якості довідника.
Готуємося до бою.
Отже, до цих пір ми вже зрозуміли, що 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
Готуємо редактор Vim
Розробники Lilypond підготували виділення синтаксису, макроси для швидкого набору, компіляції. При встановленні пакету скрипти редактора автоматично копіюються у директорію
/usr/share/vim/vim70
. Але я використовую власної збірки найновішу версію редактора, тому розширення Lilypond довелося скопіювати самостійно.Виконуємо набір
Власне, це і є найбільш цікава частина справи. Lilypond розроблений з допомогою мови програмування Схема, і вхідні файли теж є частиною програми. Таким чином набірник у руки отримує справжній швейцарський ніж: крім різання ним можна рубати, свердлити, точити, різьбити, відкорковувати вино… Найбільш вдалі зразки застосування можна знайти серед прикладів підручника.
Цикл розробки дуже простий. Компілюємо вихідний файл
dnipro.ly
, переглядаємо його з допомогоюevince
, тикаємо мишкою на об’єкт, який потрібно поправити. На екрані з’являється (чи просто виводиться на передній план) вікно редактораVim
. Далі робимо потрібні виправлення, виконуємо команду:make
, повертаємося до переглядача і перечитуємо файл комбінацією клавіш Ctrl+R.Подолати весь документ цілком відразу, очевидно, не вдасться. Тому я набирав його десь зо три години (з перервами, зрозуміло) поетапно.
Підготовка шаблону
Шаблон — це перший-ліпший приклад з підручника, який схожий на потрібний документ. Його тільки потрібно очистити від зайвого.
Набір нот
По черзі такт за тактом набрав усі три голоси́, часто компілюючи та звіряючись із джерелом.
Набір аплікатури та струн
Це легко додається у існуючий документ. На цьому етапі вперше виявилася потреба ручної корекції виводу. Але, як було згадано вище, це здійснюється дуже просто.
Динаміка та мітки
Ще простіше, ніж попередній пункт, оскільки розташування знаків більш одноманітне.
Куштуємо плоди
Саме пора насолоджуватися результатом.
Наступного разу розповім, як можна доповнити нотний запис п’єси табулатурою, трохи змінивши вихідний код.
2008-02-02
Просвітницький метрополітен
Цікаві речі іноді видають на екранах нашого метрополітену.
Гроші, якими володієш — знаряддя свободи, а ті, за якими ганяєшся — знаряддя рабства. | ||
—Жан-Жак Руссо |
2008-01-10
Jewish amulet
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!