пʼятниця, 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 став ще приємнішим у роботі.

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

Linux Mint 6 Felicia на EeePC 701 4G

Я вже декілька днів експериментую на своєму EeePC з встановленою Фелісію (реліз-кандидат звичайно). Офіційний реліз очікується найближчими днями, зараз новий ISO заливається на дзеркала, вже з'явився User Manual і завершується робота над Software Portal. Про саму систему враження, як я вже й писав, лише позитивні. У той же час EeePC, як відомо, відноситься доо тих ноутбуків, які хоч і працюють з Linux, але не відразу і не без бубна. Старі скрипти налаштування, які були актуальними для Ubuntu 8.04 та Mint 5, з Ubuntu 8.10 та Mint 6 не працюють. Що ж стосується нових скриптів, то вони не вельми вражають. Провівши ряд експериментів і запоровши не одну інсталяцію, я вирішив обрати підхід, який опишу далі.

Отже, для початку записуємо ISO на CD, а потім знаходимо будь-який комп'ютер з оптичним приводом і доступом в Інтернет. Завантажуємося з CD. На відміну від Ubuntu 8.10, на диску з Mint 6 немає утиліти для переписування CD на флешку. Тому, спочатку встановлюємо пакет usb-creator, після чого вже можемо через меню відкривати цю утилітку і готувати флешку. На EeePC заходимо в BIOS (F2) і обираємо OS Installation: Start. Вставляємо флешку, перезавантажуємося, затискаємо Esc і обираємо в меню завантаження з флешки.

Після завантаження, натискаємо Alt+F2 і запускаємо gconf-editor. Обираємо /apps/compiz/plugins/move/allscreens/options і знімаємо галочку з параметру constrain_y. Це дозволить рухати вікна затиснувши Alt навіть за верхній край екрану. Якщо у вас в картридері стоїть карточка, то відмонтуйте її, щоб її потім було видно в інсталяторі. Запускаємо встановлення. На основному диску відводимо один розділ на 4Гб з файловою системою ext2. Карту в картридері я форматую у FAT32 і монтую у /media/STORAGE. Власне, з процесом інсталяції все просто.

Після встановлення, можна помітити, що не працює WiFi, не сприцмаються функціональні клавіші, та є ще ряд проблем. Найкращим способом встановити необхідні драйвери на сьогодні, є встановлення оптимізованого ядра з array.org:
wget http://www.array.org/ubuntu/array-intrepid.list
sudo mv -v array-intrepid.list /etc/apt/sources.list.d/
wget http://www.array.org/ubuntu/array-apt-key.asc
sudo apt-key add array-apt-key.asc
sudo apt-get update
sudo apt-get install linux-eeepc

По завершенню встановлення, потрібно перезавантажитись. Тепер у меню GRUB на першому місці з'явиться пункт з новим ядром. Коли система завантажиться, ми зможемо побачити, що синій світлодіод WiFi світиться, а NetworkManager почав відображати точки доступу. Наступним кроком, нам потрібно активувати підтримку зміни частоти процесора та здійснити ще ряд дрібних налаштувань. Для цього, завантажуємо нову версію скрипту RiceeeyTweak2 (це скрипт спеціально для моделі 701): RiceeeyTweak2.1.tar.gz
Даний архів потрібно розпакувати у будь-яку тимчасову папку, після чого запустити скрипт
./RiceeeyTweak2.sh

Коли скрипт відпрацює - перезавантажуємося. Якщо тепер додати на панель аплет зміни частоти, то можна обирати частосу процесора. Взагалі залишилося налаштувати лише функціональні клавіші. Найпростіший спосіб - це встановити пакет eee-control. Він дозволить вмикати/вимикати WiFi, додасть підтримку інших клавіш. Правда чомусь він завжди вмикає WiFi при кожному завантаженні. Але якщо у вас Eee PC 701, я все таки раджу саме цей підхід.

Інший спосіб, встановити Intrepid ACPI Script, користувача elmurato з eeeuser.com: Intrepid_ACPI_scripts-EeePC.tar.gz
Спочатку потрібно перевірити файл /etc/modules і якщо в ньому згадується модуль pciehp, то видалити відповідний рядок (або закоментувати). Далі, архів потрібно розпакувати і запустити скрипт:
sudo ./acpi-scripts.sh install

Потім перезавантажуємося. Тепер у нашому розпорядженні є всі функціональні клавіші, працююче OSD меню і аплет на панелі, який дозволяє налаштовувати параметри роботи процесора та ін. Тільки кнопки регулювання гучності потрібно налаштувати вручну через Центр Керування. Але є й недолік - на деяких системах (у мене в тому числі) при спробі завершити роботу чи перезавантажити ноутбук, система питає пароль, а також може іноді зависати при завантаженні. Тому даний спосіб я не рекомендую, але може в когось і працюватиме.

І ще один момент. Оскільки EeePC 701 має 512Мб RAM, а своп ми не створювали, то ноутбук може зависнути при серйозному навантаженні. Оскільки витрачати місце для свопу на маленькому SSD є дорогим задоволенням, то виходом з проблеми може бути розміщення файлу підкачки на SD карті.
sudo dd if=/dev/zero of=/media/STORAGE/mintswap bs=1M count=1024
sudo mkswap /media/STORAGE/mintswap
sudo swapon /media/STORAGE/mintswap

Щоб не набирати останню команду при кожному завантаженні, я додав у меню пункт, який зв'язав з командою gksudo swapon /media/STORAGE/mintswap


Таким чином, на даний момент є декілька недоробок у підтримці Intrepid, а значить і Mint 6. Але недоробки ці не критичні, тому працювати можна.