неділя, 4 січня 2009 р.

Книга: The Woork Handbook

Антоніо Лупетті, автор популярного блогу woork.blogspot.com, про веб-розробку та дизайн, зібрав свої статті за минулий рік в одному pdf-файлі. Отримана книга має 133 сторінки і включає багато інформації по CSS, базам даних, Ajax, MooTools та ін.



Книга доступна для вільного завантаження.

Рекомендую всім хто займається розробкою веб-сайтів. Антоніо пише зрозумілою мовою, з ілюстраціями і поясненнями.

пʼятниця, 2 січня 2009 р.

Робимо снепшоти веб-сторінок

Як бути якщо потрібно зробити фотографію веб-сторінки? Звичайно можна просто зробити скріншот вікна браузера. А якщо сторінка у вікно браузера не влазить? WebSnapshot - проста і зручна утиліта саме для таких цілей.


Знайти WebSnapshot можна тут

Для роботи на комп'ютері повинен бути встановлений Adobe AIR: http://get.adobe.com/air/

Працювати дуже просто: клікаємо по типу картинки (Thunbnail, Browser чи Full Page), набираємо адресу, тиснемо Enter, а після того як зображення завантажиться - клікаємо по ньому і воно з'являється на робочому столі.

середа, 31 грудня 2008 р.

З новим роком!

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



Давайте разом згадаємо, що 2008 рік приніс нам у сфері високих технологій.

KDE 4 - нова версія, одного з двох найпопулярніших робочих середовищ Linux. Четвірка породила масу суперечок і критики, оскільки вийшла на ринок досить сирою. Тим не менш, для самого KDE це значущий реліз, це прогрес і маса нових ідей, що знайдуть відображення в інших продуктах.
Ubuntu 8.10 - остання версія Ubuntu виявилася відчутно кращою за свою досить проблемну попередницю 8.04. Дуже важливим нововведенням виявився суттєво перероблений NetworkManager.
Wine 1.0 - довгоочікуваний стабільний реліз інструменту для запуску Windows програм у Linux. Важко переоцінити важливість даного проекту з погляду на полегшення переходу користувачів на нову платформу.
Python 3.0 - реліз нової версії відомої і популярної мови програмування.
Django 1.0 - довгоочікуваний стабільний реліз чудового веб-фреймворку для мови програмування Python.
Google App Engine - новий сервіс від Google, який дозволяє всім бажаючим розробляти власні веб-сервіси на Python з доступом до всього різноманіття технологій Google. Крім власного веб-фреймворку webapp існує також підтримка Django. У ролі бази даних використовується BigTable.
GIMP 2.6 - новий реліз популярного графічного редактору, що започаткував початок інтеграції з GEGL.
Adobe AIR for Linux - відтепер Linux є однію з трьох платформ, що офіційно підтримується даною технологією.

Інші ключові релізи: Gnome 2.24, Firefox 3.0, OpenOffice.org 3.0, Mono 2.0. Потрібно також звернути увагу, що цей рік був один з ключових в плані поступового підвищення інтересу до Linux з боку серйозних гравців ринку IT. Світова фінансова криза також стала непоганим каталізатором зрушень у даному напрямку. Ну і потрібно згадати також появу підтримки української мови в Google Translate та Facebook.

Конвертуємо OGV в AVI та додаємо звуковий трек

Тренувався я тут з записом скрінкастів. На жаль, звукова карта на моєму десктопі ніяк не хоче дружити з моїм мікрофоном. У той же час EeePC не зовсім добре підходить для запису відео. Проблему вдалося вирішити зробивши такий фінт: відео записую з допомогою gtk-RecordMyDesktop, а звук з допомогою Audacity на ноуті. Потім все це об'єдную в один файл.

Конвертуємо OGV в AVI:
mencoder from_file.ogv -o video.avi -oac mp3lame -ovc lavc

Додаємо звукову доріжку з mp3 файлу:
mencoder video.avi -o result.avi -ovc copy -oac copy -audiofile sound.mp3

Як виявилося, досить просто.

пʼятниця, 26 грудня 2008 р.

Два слова про CheckInstall

Якщо говорити про бінарні дистрибутиви (такі як Ubuntu, Fedora, OpenSUSE та ін.), то потрібно сказати, що вкрай не рекомендується встановлювати в них програми з вихідних кодів. Серед проблем, які можуть виникнути можна назвати серйозні проблеми з деінсталяцією такого софту, можливість порушення залежностей і конфлікти з іншими, вже встановленими, програмами та бібліотеками. Проте іноді потреба встановити програму з вихідних кодів все ж таки виникає. Зазвичай цей процес зводиться до трьох команд:
./configure
make
sudo make install

Генератором проблем якраз є остання команда, яка й відповідає за встановлення скомпільованого софту. Але насправді, все можна спростити, достатньо лише встановити утиліту CheckInstall:
sudo apt-get install checkinstall

Відтепер, для встановлення програм потрібно виконувати:
./configure
make
sudo checkinstall

Різниця полягає у тому, що checkinstall спочатку створює deb-пакет (його можна буде знайти у папці з програмою, що встановлюється), а потім вже його встановлює. Плюс цього методу полягає у тому, що у разі потреби, ви зможете видалити встановлені таким чином програми, через звичний інтерфейс пакетного менеджеру.

неділя, 21 грудня 2008 р.

Мова програмування Scheme

Яку мову обрати для навчання програмуванню? Взагалі тема звичайно холіварна. Можливо я якось викладу свої думки у окремій статті, бо думок дійсно багато. Але я впевнений у тому, що вивчення програмування ні в якому разі, не варто починати десь з середини (і однозначно не з PHP). Спочатку потрібно натренувати мозок, вміння створювати алгоритми і описувати їх знаючи можливості тієї чи іншої мови. У вітчизняних школах та вузах зазвичай вивчають програмування на прикладі Basic чи Pascal. Я сам дуже поважаю Pascal і досі вважаю його однією з найкращих мов для навчання, це строга мова зі статичною типізацією, яка дозволяє без зайвих проблем відпрацювати принципи процедурного та об'єктно-орієнтованого програмування. Але, познайомившись з навчальними матеріалами провідних західних університетів (Berkeley, Stanford, MIT), а також базуючись на власному досвіді самоосвіти, сходжуся на думці, що непогано було б почати вивчення з однієї з функціональних мов. У плані тренування мозку імхо штука ідеальна. Взагалі, досить дивно, але функціональна парадигма вперто ігнорується вітчизняною освітою. Щоб якось згладити цей пробіл, я хотів би розповісти про мову програмування Scheme (читається "скіім"). Це один з найпопулярніших діалектів Lisp - однієї з найстаріших (разом з Fortran) мов програмування, яка досі широко використовується і якій нещодавно виповнилося 50 років. Scheme викладається в Berkeley (курс CS61A) та MIT у якості першої мови програмування, його інтерпретатор інтегровано в GIMP де він має назву Script-Fu. Scheme також використовується в Dia. Різноманітні діалекти Lisp також використовуються в Emacs, AutoCAD та ін. програмах.

Scheme - це дуже проста мова програмування. Її цілком можна вивчити за один день, але ця простота оманлива. Scheme одночасно і дуже потужна мова. Існує величезна кількість реалізацій, я використовую Guile. Встановити інтерпретатор дуже просто:
sudo apt-get install guile

Програми можна або зберігати у *.scm файлах, або можна використовувати інтерактивний режим інтерпретатору, по аналогії з Python.

Константи та змінні

Отже, приступимо до вивчення основних структур Scheme. Перш за все, визначимося з константами:
123 - ціле число
3.1415926 - дробове число
2+3i - комплексне число
2/3 - дріб
#b1111 - двійкове число
#xFF - шістнадцяткове стаття
#o123 - вісімкове число
#\A - одиничний символ
"Hello, World!" - символьний рядок
'hello - символ
#f - логіче значення

З константами можна здійснювати операції з допомогою операторів або функцій. Врешті решт Scheme є функціональною мовою, а тому у ній все є функцією. З математики ви знайомі з формою запису функцій f(x) або t(a,b). Але те ж саме можна записати і у вигляді (f x) чи (t a b). Саме таку форму запису використовує Scheme. З погляду на це, і арифметичні вирази записуються не у звичній багатьом інфіксній формі, як наприклад 2+3, а у префіксній - (+ 2 3). Наприклад:
guile> (* 2 5)
10
guile> (+ (* 3 4) (/ 5 2))
29/2
guile> (+ 1 1 1 1 1)
5
guile> (/ 2)
1/2
guile> (expt 2 3) - степінь
8
guile> (sqrt 2)
1.4142135623731

Для оголошення змінних використовується конструкція (define ім'я значення)
guile> (define a 2)
guile> (define b 2)
guile> (+ a b)
4

Значення вже існуючої змінної можна змінити з допомогою конструкції (set! ім'я значення)
guile> (set! a 5)
guile> a
5


Функції

Функції оголошуються з допомогою конструкції (define (ім'я параметри) тіло_функції)
guile> (define (square x) (* x x))
guile> (square 3)
9

Для демонстрації рекурсії наведу приклад обчислення факторіалу:
(define (fact x)
(if (= x 1)
1
(* x (fact (- x 1)))))

Як ви вже зрозуміли, перевірку умови можна виконувати з допомогою конструкції (if умова якщо_так якщо_ні)

Введення/виведення

Не заглиблюючись у подробиці, зверну увагу на основні функції
(display "Hello, World!") - вивести рядок
(newline) - перейти на новий рядок
(read) - прочитати ввід з клавіатури


Списки

Для роботи з наборами даних зручно використовувати списки
guile> (define nums (list 1 2 3 4 5 6 7 8 9 10)) - оголошуємо список
guile> (list-ref nums 0) - читаємо елемент з номером 0
1
guile> (car nums) - читаємо перший елемент
1
guile> (cdr nums) - читаємо всі інші елементи
(2 3 4 5 6 7 8 9 10)

Можна також обробити всі елементи списку одним заходом
згенерувати новий список застосувавши функцію для кожного елемента
guile> (map square nums)
(1 4 9 16 25 36 49 64 81 100)
guile> (map (lambda (x) (* x 3)) nums)
(3 6 9 12 15 18 21 24 27 30)

Конструкція lambda дозволяє оголошувати функції по мірі потреби, не даючи їм імен. Якщо ви програмуєте на Python'і, то вже знаєте ці конструкції, саме з Lisp'у вони й були запозичені.

Цикли

Насправді, Scheme не має циклів у тому вигляді як вони є в імперативних мовах. Тут для тих же цілей використовується рекурсія. Наприклад, виведемо у стовпчик вміст списку
(define (print-list lst)
(if (not (null? lst))
(begin (display (car lst))
(newline)
(print-list (cdr lst)))))

Конструкція (begin ...) використовується у тому випадку, якщо потрібно вставити декілька операторів там де по синтаксису допускається лише один.

Наступна конструкція дозволяє змоделювати відомий по іншим мовам програмування цикл for:
(let loop ((i 1))
(display i)
(newline)
(if (<= i 10) (loop (+ i 1))))

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

Для прикладу, можна навести реалізацію функції обчислення визначеного інтегралу
(define (func x)
x)

(define (integrate a b e f)
(define sum 0)
(let loop ((i a))
(if (< i b) (begin
(set! sum (+ sum (* (f i) e)))
(loop (+ i e)))))
sum)

(display (integrate 0 1 0.01 func))
(newline)


Звичайно, можна було б продовжувати далі, але це зайняло б дуже багато місця. Основні ж конструкції ми розглянули. Якщо ви зацікавились Scheme, то додаткову інформацію завжди зможете знайти за наступними адресами:
Офіційний сайт Guile
Введение в язык Scheme для школьников
Сторінка про Scheme на сайті MIT
Schemers.org
Відеозаписи лекцій по курсу The Structure and Interpretation of Computer Programs в університеті Berkeley

Взагалі, оскільки Scheme - мова академічна, то інформації по ній досить багато. У той же час, знання даної мови дозволить не лише по новому глянути на різноманітні конструкції в інших мовах (як Python наприклад). Той же Guile, легко інтегрується в програми на C, що дозволяє виносити код назовні.

вівторок, 16 грудня 2008 р.

Налаштовуємо автовизначення кодування в GEdit

GEdit - чудовий текстовий редактор, але його функція автоматичного визначення кодування працює не завжди коректно. У мене, наприклад, є багато файлів LaTeX у кодуванні CP1251. Жоден з цих файлів не вдасться коректно відкрити простим подвійним кліком, потрібно запускати GEdit і вже з нього, вказавши вручну кодування, відкривати. Розв'язати дану проблему, насправді досить просто.

1. Натискаємо Alt+F2 і запускаємо gconf-editor
2. Обираємо /apps/gedit-2/preferences/encodings
3. Двічі клацаємо по параметру auto_detected
4. Сортуємо список кодувань згідно наших потреб. Наприклад Windows-1251 можна перемістити на друге місце після Utf-8
5. Погоджуємося зі змінами.


От і все, тепер GEdit став ще приємнішим у роботі.