Category Archives: Програмування

GitHub у поміч блогеру

Восьмикіт — талісман мережі GitHubЧастенько блогеру, пов’язаному з IT-сферою, доводиться писати коротенькі сценарії, або ж операції, необхідні для досягнення бажаного результату. Зазвичай для подібних речей блогер ставить плагін для підсвітки синтаксису і самотужки вставляє шматки коду між спеціальними тегами. Однак щойно наш робочий скрипт змінився, чи з’їхала нумерація, як тут же всі вставки коду в статті доводиться переробляти наново.

Проте хочеться, щоб це виглядало максимально зручно для кінцевого читача. Однак і робити щоразу дурну роботу ліньки. Або ж хочеться описати деякі важливі моменти, а в кінці статті дати посилання на повністю готовий код. Або, описуючи власні дії покроково, дати користувачеві можливість просто-таки повністю скопіювати всі рядки разом, а не кожен окремо. Мало чого може залізти в голову блогеру.

Проте всі ці (і на разі не лише мої) забаганки можуть здійснитися, якщо використовувати GitHub, і, зокрема, сервіс Gist Read more »

Знайомі незнайомці: file, ln та lost+found

Досі мені ні разу не доводилося відновлювати файлову систему після краху або неправильних дій користувачів, проте одного дня я сам «прострелив собі ногу» в стилі UNIX: вилучив половину файлів двотерабайтного сховища на сервері. В цю особливо похмуру ніч я запустив перебудову файлової системи з метою знаходження старих невилучених файлів, і вже на ранок я отримав більш-менш відновлену файлову систему, а в її корені з’явилась вищеозначена директорія lost+found.

Відкривши директорію я побачив 180 гігабайт файлів з дивними назвами без жодного натяку хоча б на приналежність до типу файлу. Так, це і були відновлені файли. На фоні цього хаосу так само дивно названі директорії виглядали ледве не оазисами в пустелі: адже в них вціліли справжні імена файлів. Проте 180 гектар вручну не просієш, і я вирішив для початку оцінити масштаби трагедії і знайти більш-менш адекватний спосіб витягти з того хаосу частинки необхідних мені даних. І ось тут почалось найцікавіше. Read more »

Автоматичне налаштування Wi-Fi в Debian

Я звик носити з собою власний ноутбук, постійно переключаючись між двома різними точками доступу до мережі інтернет: вдома та на роботі. З тиждень я мирився з тим, що необхідно щоразу перенастроювати параметри бездротового підключення. Використання сторонніх засобів для збереження та перенастроювання Wi-Fi підключення мене особливо не радувало, до того ж, моєю метою було ще й максимально зручне управління мережевими підключеннями як в графіці, так і в терміналі. Пам’ять нагадала мені, що подібна ситуація вже передбачена в файлі мережевих налаштувань /etc/network/interfaces. Read more »

Автоматизація процесу розробки: системи збирання проектів

Час, коли в цивілізованому світі дешевше було найняти сотню негрів замість зробити ткацький верстат і навчити одну людину з ним працювати, давно минув. Ще пару десятиліть тому ледь не кожен працівник в сфері інформаційних технологій вважався митцем, творцем чогось надзвичайного, того, що не може зробити жодна інша людина в світі. Однак, час і прогрес не стоїть на місці, і поділ праці тому доказ. Замість тисяч самописних бібліотек виростають десятки, проте зручні та легкі; замість купи підходів до розв’язку задач виділяють одиниці, однак найефективніші; замість того, щоб вигадувати велосипед, використовують існуючі рішення, вносячи свій вклад в їх розвиток на ниві відкритих технологій. Ще донедавна програмісти збирали всі свої програми вручну або ж за допомогою самописних сценаріїв. Цей час пройшов.

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

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

Read more »

Управління проектами з Trac

Задача: отримати багатоцільове open-source середовище для управління проектами з web-інтерфейсом, підтримкою Git та БД PostgreSQL, автентифікацією через LDAP.

Обираємо систему управління проектами

За інформацією для роздумів гугл нас привів на сторінку з вікіпедії. Як бачимо, вибір у нас досить великий. Вибрати з них що-небудь по собі з виконанням більшості критеріїв досить нескладно. Однак підтримку Git має в своїй реалізації лиш один проект — Trac, про який і йтиме мова далі.

Чому Trac

Trac logo

Версія 0.11
Мова Python
Сайт http://trac.edgewall.org/
Ліцензія Модифікована ліцензія BSD

Як вже було сказано, лише в нього я знайшов підтримку Git репозиторіїв. До того ж Trac має неабияку гнучкість: окрім базового набору, якого зазвичай не вистачає, купа функціоналу реалізована у вигляді плагінів, яких тут можна знайти на будь-який смак. Простий та зрозумілий з першого погляду інтерфейс, відсутність зайвих “свистілок” не може не порадувати людей, які від продукту очікують ефективну реалізацію функціоналу. Можливість адаптувати середовище на власний смак та за потребами проекту, будь то розробка програмного забезпечення, адміністрування, чи організація господарських робіт у себе на городі. Хоча незважаючи на можливість вести будь-які проекти в цій системі, все ж вона тісно інтегрована з ситемами контролю версій(Svn, Bazaar, Mercurial, Git), підсвіткою синтаксису “на льоту”(використовуються SilverLight, Enscript, а з версії 0.11 — ще й Pygments), розробкою документації (Doxygen, PyDoc, PerlDoc), і навіть системою управління тестами. Підтримка RSS-стрічок, wiki(до якої є теж купа розширень), і навіть ведення блогу додають практично всі необхідні інструменти для ведення сучасного проекту. Довершує все це добро документація по Trac, яка є в кожному новоствореному проекті на стоірнках wiki.

Установка та адміністрування

Ставити ми його будемо, звичайно ж, на Debian GNU/Linux, для якого поточною стабільною віткою вважається 0.10. Сподіваюсь, ви вже маєте налаштований Git репозиторій, інакше раджу взяти низький старт з цієї сторінки. Виконавши aptitude install apache2 libapache2-mod-python trac-core trac-git pcycopg2 та встановивши залежності й додаткові пакети за бажанням переходимо власне до конфігурації.

Першим кроком буде створення нового проекту. Де тримати проекти — справа кожного, хоча мені більше імпонує покласти їх до /var/trac/. Для промислового розгортання буде доцільним розгортати подібні середовища в домашніх директоріях користувачів. Отже, почнемо.

# mkdir /var/trac
# cd /var/trac
# trac-admin myproject initenv

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

trac-admin management utilityСаме з цього моменту починають проявлятись особливості роботи з Trac: адміністрування проекту проводиться за допомогою консольної утиліти trac-admin. Отже, якщо ви не маєте доступу через SSH до свого сервера, годі й мріяти про установку цієї системи. І хоча деякі операції можливо перекласти на веб-морду, однак початкову ініціалізацію — зась. Якщо ж ви все ще з нами і вже готові до наступного кроку, то не гаймо часу.

Всі налаштування проекта знаходяться в одному файлі conf/trac.ini в директорії проекту. Зараз можна підправити загальні параметри проекту, однак я раджу відкласти цей крок на момент після тестового запуску проекту. Справа в тому, що будь-який згенерований проект з самого початку містить wiki-документацію, яка доступною мовою опише можливості та особливості налаштування системи. Знову повертаючись до Git, на сторінці GitPlugin ви зможете прочитати вичерпні пояснення щодо того, яким чином організувати співпрацю Trac та Git.

Для успішного старту проекту необхідно отримати можливість запускати Python-івські скрипти на запит веб-сервера. Це можна реалізувати через механізм CGI, FastCGI, або ж використовуючи mod_python, що ми, власне, і зробимо:

<Location/projects>
  SetHandler mod_python
  PythonInterpreter main_interpreter
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnvParentDir /var/trac
  PythonOption TracUriRoot /projects
</Location>

Вище представлений шматок конфігураційного файлу веб-сервера, який дозволить вести нам безліч проектів, що лежатимуть в /var/trac Наступні рядки ж дозволять мати один обліковий запис для всіх проектів. Даний тип автентифікації приведений лише для прикладу. Автентифікація користувачів через систему LDAP буде описана в наступних статтях.

<LocationMatch"/projects/[^/]+/login">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /var/trac/.htpasswd
  Require valid-user
</LocationMatch>

Якщо всі кроки виконані успішно, ви мусите побачити вже працюючий проект за адресою:http://localhost/projects/myproject/

Додаткові плагіни

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

GraphvizPlugin

Trac with GraphViz pluginТрохи помучитись змусив мене плагін, що реалізовує inline-вставку графічного представлення інформації за допомогою graphviz. Для тих, хто все ще не може отримати зображення, підкажу основні вимоги:

  • директорія, в якій знаходиться кеш graphviz повинна бути доступна для запису користувачем www-data, під яким запущено веб-сервер. Крім того, якщо ви використовуєте tmpfs, то не робіть директорію для кешу в /tmp, оскільки для роботи graphviz необхідне існування директорії, а при наступному ж перезавантаженні вона просто зникне.
  • необхідні пакети: graphviz та librsvg2-bin
WebAdmin

Для того, щоб не мати клопоту при роботі з цим плагіном, необхідно, щоб файли проекту в /var/trac/myproject були доступними користувачеві www-data для запису. Загалом же, плагін встановлюється та підключається без зайвих зусиль.

Trac та PostgreSQL 8.3

Якщо ви використовуєте Trac 0.10 зі стандартних пакетів Debian, то матимете клопіт з неможливістю перегляду звітів про помилки (tickets). При цьому ще й при додаванні такого звіту система може видавати помилки. Для того, щоб усунути цю помилку, необхідно змінити у файлі /usr/share/python-support/trac/trac/ticket/model.py рядок 296 з:

"ORDER BY time", (self.id, str(self.id), self.id))

на

"ORDER BY time", (self.id, str(self.id), str(self.id)))

Сподіваюсь, що за кілька днів після випуску даної статті ця порада стане непотрібною 😉

Висновки

Закінчуючи статтю, хочеться підбити підсумки щодо системи в цілому. Особисто я вже використовую Trac для власних проектів, тому що ця система:

  • проста, зручна, та ефективна
  • має підтримку сучасних репозитаріїв, баз данних та прикладного програмного забезпечення
  • дуже гнучка
  • знаходиться в активній розробці

Хочете переконатися в цьому самостійно? Тоді ласкаво просимо до http://www.hosted-projects.com/trac/TracDemo/Demo , де ви зможете попрацювати з Trac без зайвого клопоту.

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

34 поради щодо збільшення продуктивності web-додатків

Розробники, що відповідають за створення високопродуктивних рішень в Yahoo, опублікували цікаву презентацію на 76 сторінок, в якій узагальнено досвід компанії, пов’язаний з підвищенням продуктивності web-додатків. В презентації представлені 34 рекомендації web-розробникам, з них 14 порад були описані в попередній доповіді.

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

Read more »

Вдосконалити Ruby? З вас 13000$

Нещодавно один з розробників, що зробили внесок в розвиток мови Ruby, Грегорі Браун, опублікував відкритий лист спільноті розробників в якому він погоджується забути про всі свої сторонні проекти на півроку та зосередити свої зусилля на втіленні пропозицій щодо вдосконалення мови Рубі. Що, в принципі, і не дивно: голодному важко зосередитись на програмуванні чогось безкоштовного, тож постійно потрібно відволікатись на задачі, які приносять гроші. Тож Грегорі все порахував і оголосив дуже навіть помірковану ціну: 500$ в тиждень. При цьому працюватиме він не більше 26 тижнів, тобто протягом 6 місяців починаючи з 15-го квітня. Отже, свою роботу він оцінює загалом в 13000$. Якщо в нього не вийде зібрати 13000$, то він із задоволенням працюватиме пропорційно зібраній сумі будь то чотири, чи навіть два тижні. Ruby Central, Inc. погодилась виділити 5000$ з власної кишені, тож ком’юніті залишилось зібрати ще 8000$. Пожертви приймаються на цьому сайті в будь-якому обсязі будь то 5 чи 500 баксів. На момент публікації новини було вже зібрано 3338$.

Книжка “Алгоритми програмістам”

Колективний (або соціальний) підхід до створення контенту починає поступово перетікати з кіберпростору в світ матеріальний. Так, наприклад, німець Йорг Арндт (Jorg Arndt) пише книжку в якій описує готові програмні реалізації алгоритмів за активної допомоги читачів: чернетка книжки, який наразі існує в електронному вигляді, вільно розповсюджується в Інтернеті і автор просить лише по можливості присилати йому повідомлення щодо помилок та неточностей.

Ось, що пише про книжку сам автор:

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

Стиль викладення від глави до глави змінюється: одні теми (наприклад, швидкі перетворення Фур’є) вимагають чіткого та формального опису, в той час як інші (наприклад, один трохи магічний розділ) краще подати просто у вигляді коду з невеликою кількістю коментарів.

Псевдо-мова Sprache використовується коли я відчував в тому потребу: в основному коли відповідний код на C++ не є самоочевидним. Великі шматки коду подаються на C++. Програмістам на чистому C, проте, не варто боятись префіксу “++”, оскільки я використовував мінімум можливостей мови C++. Деякий код, особливо в розділі 3 (“Арифметичні алгоритми”) подають на мові pari/gp, оскільки їх реалізація на інших мовах поховала б саму ідею алгоритму в тонкощах технічної реалізації.

Готова для друку версія цієї книги завжди буде доступна онлайн для вільного завантаження. […]

Читачі заохочуюються до критики та конструктивних пропозицій. Будь-ласка, не забувайте вказати версію чернетки (дату) у вашому відгуці. […]”

(с) Jorg Arndt, “Algorithms for programmers”

Сторінка, де можна скачати книжку в різних форматах (PS, DVI та PDF) знаходиться за адресою: http://www.jjj.de/fxt/#fxtbook

Конференція Exception #07

Всередині березня в Києві планується провести наступну, вже сьому, конференцію розробників програмного забезпечення “Exception”. Конференція присвячена так званим динамічним мовам програмування, як-то: Python, Ruby, Smalltalk, Groovy та REBOL. В ній приймуть участь ведучі розробники України та Росії, серед яких є представники таких відомих компаній як EPAM Systems, Microsoft, російської телекомпанії “Спорт”, журналу “Системный Администратор” та люди, що приймали участь в розробці таких відомих соціальних проектів як ВКонтакте.ру і ВКадре.ру.

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

Конференція відбудеться в суботу 15 березня 2008-го року в приміщенні готелю “Русь”, що знаходиться за адресою м. Палац Україна, вул. Госпітальна, 4 (розташування готелю на мапі), яка славить своїми конференц-залами та якістю обслуговування. В роботі конференції  задіяні дві зали: на 250 та 150 чоловік. Очікувана кількість відвідувачів – близько 400 осіб. Початок конференції об 11:00, закінчення – об 19:00. Вартість участі – 50 грн. (10$), реєстрація відкрита до 13 березня включно.

Для матеріального заохочення серед учасників відбудеться розіграш призів від компанії EPAM:  MP3-плеєра Apple iPod Nano 8GB, мобільного телефону LG KG245 та Transcend 8GB JetFlash.

Призи на Exception #07