понеділок, 19 січня 2009 р.

Pencil: проектуємо інтерфейси

Pencil - це доповнення до Firefox, яке представляє собою інструмент для проектування графічних інтерфейсів. Не так важливо, чи розробляєте ви онлайн проект чи пишете програму для десктопу, все одно на певному етапі вам може знадобитися інструмент який дозволяє швидко накидати схему інтерфейсу. Це особливо важливо, коли над проектом одночасно працюють декілька людей і звичайний листок паперу не підходить. Раніше я використовував для цього GIMP, але сьогодні спробував новий інструмент і залишився дуже задоволений. Редактор досить простий, але все необхідне є в наявності.



Офіційний сайт
Завантажити

Розгортаємо сайт на Django задарма

При роботі з Django існує одна проблема, яка дещо заважає на початковому етапі - обмежений вибір пропозицій по хостингу. Зокрема, я маю на увазі, безплатний хостинг (з платним якраз особливих проблем немає). Одна з компаній, яка надає такі послуги - французька Alwaysdata. Отже, не платячи нічого, ви отримуєте:

  • 10Мб дискового простору;

  • 1Гб місячної квоти на трафік;

  • 40Мб оперативної пам'яті;

  • Python 2.4 або 2.5, PHP5, Ruby 1.8.6, Perl 5.8.8;

  • офіційна підтримка Django та Ruby on Rails;

  • сумісність з TurboGears, Pylons, Symphony та ін.;

  • необмежена кількість баз mySQL або PostgreSQL;

  • phpMyAdmin та phpPgAdmin;

  • підтримка POP3, SMTP, IMAP;

  • доступ по FTP та SSH;

  • та багато ін.;


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

Отже, перш за все, зареєструємо новий аккаунт. Для цього входимо у розділ Inscription. У поле Nom du pack вводите назву аккаунту, а у Type de pack обираєте Pack gratuit (10Mo). Потім тиснемо Continuer l'inscription. Далі, заповнюєте анкету, у якій потрібно обов'язково вказати свою електронну пошту (Adresse email) і пароль до аккаунту (Type de pack та Confirmez le mot de passe). Інші поля є необов'язковими. Підтверджуєте, і отримуєте свій новий обліковий запис.


Попасти у панель адміністрування можна просто вбивши свою електронну пошту і пароль на горі сторінки, у блоці Connexion. Потім тиснете Valider і попадаєте в адмінку.


Виконаємо деяке початкове налаштування. У розділі Environnement -> Python оберемо потрібну версію Python і Django.


Далі, створимо базу даних. Тут є вибір між mySQL та PostgreSQL. Достатньо обрати у розділі Bases de données бажану платформу, а потім створити нову базу натиснувши Ajouter une base de données. У поле Nom потрібно ввести ім'я бази. Кодування по замовчуванню пропонується UTF-8, тк і потрібно бути. Після натиснення Ajouter у вас з'явиться нова база.


Ще нам знадобиться доступ по SSH. По замовчуванню, він заборонений, а тому потрібно перейти у Accès distant -> SSH і активувати дану опцію (по замовчуванню для аккаунту встановлено non, тому натискаємо Modifier, щоб мати змогу змінити на oui).


ОК, наступним етапом потрібно завантажити на сервер наш сайт. Для цього, можна скористатися будь-яким FTP-клієнтом. Я віддаю перевагу FileZilla (sudo apt-get install filezilla). Параметри підключення наступні:
Хост: ftp.alwaysdata.com
Порт: 21

Логін і пароль відповідно, ті, що ви вводили при реєстрації. У кореневій папці, яку вам виділено, ви можете побачити єдиний файл index.html. Це файл-заглушка, яку можна побачивши набравши у браузері http://ваш_логін.alwaysdata.net/. Папку з вашим Django проектом потрібно помістити сюди ж.

Наступним кроком, запускаємо термінал і набираємо команду:
ssh ваш_логін@ssh.alwaysdata.com

Вводимо пароль і попадаємо у вашу домашню папку на сервері Alwaysdata. Щоб працювати було простіше, можна запустити Midnight Commander (команда mc). Наступним кроком, потрібно перейти у папку з проектом і створити підпапку public. Далі переходимо в неї і створюємо файл django.fcgi з наступним вмістом:
#!/usr/bin/python
import os, sys

_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, _PROJECT_DIR)
sys.path.insert(0, os.path.dirname(_PROJECT_DIR))

_PROJECT_NAME = _PROJECT_DIR.split('/')[-1]
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

І встановлюємо йому права на виконання:
chmod +x django.fcgi

Далі, створюємо файл .htaccess з наступним вмістом:
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]

І, якщо ви використовуєте адмінку Django, то потрібно ще виконати команду
ln -s /var/lib/python/django/1.0/django/contrib/admin/media/ media

Тепер, повертаємося у папку з проектом і у файлі setings.py прписуємо необхідні параметри бази даних. Якщо ви використовуєте mySQL, то це буде виглядати приблизно так:
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'назва_бази_даних'
DATABASE_USER = 'логін'
DATABASE_PASSWORD = 'пароль'
DATABASE_HOST = 'mysql.alwaysdata.com'
DATABASE_PORT = ''

Зберігши зміни, потрібно синхронізувати базу даних. Це звична операція:
python manage.py syncdb


Все, що тепер залишається - це перейти в адмінку вашого аккаунту, обрати Domaines і змінити кореневу папку вашого сайту.


Все. Тепер ви можете знайти свій сайт за адресою http://ваш_логін.alwaysdata.net/

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

Уроки GIMP: малюємо штамп

Нещодавно, у процесі розробки одного проекту, розбирався як створити зображення штампу в GIMP. Як виявилося, все досить просто. Спочатку створимо новий файл з білим фоном. Потім з допомогою інструменту Виділення еліпсу окреслюємо межі майбутнього штампу (щоб штамп вийшов круглим - тримаємо при цьому Shift). Далі обираємо Виділення -> У контур. Переходимо на панель контурів і у контекстному меню обираємо Обвести за контуром. Вказуємо товщину лінії, клацаємо Обвести і отримуємо наступне.


Далі, обираємо Виділення -> Зменшити і дещо зменшуємо розмір кругового виділення. І знову повторюємо попередні дії для того щоб намалювати внутрішнє коло.


Тепер з допомогою Виділення -> Збільшити знову збільшимо розмір кола, так щоб нове виділення проходило між вже створеними. Воно буде вказувати на середню лінію по якій буде проходити текст. Знову створюємо контур (Виділення -> У контур). Далі, обираємо інструмент Текст і створюємо необхідний текст. На даному етапі, абсолютно неважливо де він буде розміщений.


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


Ну і ще раз скориставшись інструментом Текст, заповнюємо інформацією середину штампа. Отриманий тестовий шар об'єднуємо з фоном, обравши у контекстному меню шара Об'єднати з попереднім.


Тепер нам потрібно лише зробити штамп більш схожим на справжній. Для цього, створимо новий шар. У опції Тип заповнення шару оберемо Колір тла. В результаті, новий шар повністю закриє наш штамп. Тепер оберемо Фільтри -> Растерізація -> Хмари -> Різні плями. Далі вже йде творчість. Можна виділити опцію Турбулентність і поекспериментувати з параметри Розмір по X та Розмір по Y. З допомогою Колір -> Яскравість-Контраст, робимо отримане зображення більш контрастним і темним. Далі, з допомогою Фільтр -> Шум -> Вибір, додамо трохи шуму. Тут також можна поекспериментувати з опціями Випадковість та Повторів. Після застосування фільтру, обираємо на панелі Шари режим відображення нашого шару - Додавання. Результат буде наступним.


Об'єднаємо шари, обравши Звести зображення у контекстному меню шару. Далі, оберемо інструмент Обертання, перемістимо центр обертання у центр штампу і оберемо кут повороту (наприклад -20 градусів). Після підтвердження повороту, залишається лише кадрувати отримане зображення і ми отримаємо остаточний варіант штампу.


От і все, удачі вам з GIMP.

Icons: оновився набір іконок Fugue

Якщо ви розроблюєте веб-сайти, то швидше за все вам потрібні красиві іконки. Fugue - це чудовий набір з 1249 якісних іконок на різноманітну тематику. У новій версії з'явилося багато нових, зокрема довгоочікувана іконка user.



Офіційний сайт

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

Brainfuck: коли програмісту хочеться розважитися

Коли звичайний користувач хоче розважитися - він запускає улюблену гру. Коли ж програміст хоче розважитися - він починає писати всяку фігню. А якщо є час і натхнення, то вивчає нову, нікому не потрібну, мову програмування. Brainfuck є однією з найвідоміших, так званих, езотеричних мов програмування. Езотеричними називають мови, які не призначені для практичного застосування, це більше такий своєрідний гумор, засіб розважитися. Brainfuck був придуманий у 1993 році Урбаном Мюллером, також just for fun. Взагалі, назва мови повністю відображає її сутність. Отже, спробуємо дещо порозминати мозок.

Перш за все, встановимо інтерпретатор Brainfuck. Робиться це дуже просто:
sudo apt-get install bf

ОК, тепер займемося вивченням самої мови. Brainfuck використовує просту модель машини, яка складається з упорядкованого масиву комірок (по байту кожна, за замовчуванням масив ініціалізується нулями) і рухомого вказівника (при ініціалізації вказує на перший байт масиву), а також два потоки байтів - для вводу (input) і виводу (output, використовуються коди ASCII). Фактично, це модель машини Тьюрінга. Brainfuck включає всього вісім операторів, кожен з яких позначається одним символом.
> - перейти до наступної комірки
< - перейти до попередньої комірки
+ - збільшити значення комірки на 1
- - зменшити значення комірки на 1
. - вивести значення поточної комірки
, - ввести значення у поточну комірку
[ - якщо значення комірки нуль, то перейти до відповідної ]
] - якщо значення комірки не нуль, то повернутися до відповідної [

Не дивлячись на такий примітивізм, Brainfuck володіє тьюрінг-повнотою, а отже, теоретично, по своїм можливостям не поступається C, Pascal та ін. Звичайно, ніхто не буде писати на ньому повноцінні програми, але з точки зору теорії, на ньому дійсно можна написати, що завгодно.

Давайте й ми щось напишемо. Почнемо з класичного прикладу - виведення на екран фрази Hello World! Наша програма матиме наступний вигляд:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.

На перший погляд, нічого не зрозуміло. Тому давайте розглянемо нашу програму детальніше.
++++++++++        записуємо у нульову комірку значення 10,
це буде наш лічильник
[ починаємо цикл і продовжуємо, доки у
нульовій комірці не з'явиться нуль
>+++++++>++++++++++>+++>+
послідовно додаємо 7, 10, 3 та 1 до
наступних комірок
<<<<- повертаємося до нульової комірки і
зменшуємо її значення на 1
] доки у нульовій комірці не нуль,
продовжуємо цикл, оскільки він буде
повторюватися 10 разів, то у комірках
1-4 з'являться числа 70, 100, 30 та 10
>++. переходимо у комірку 1 і збільшуємо
її значення на 2, що дасть 72, тобто
ASCII код літери H, потім виводимо
її на екран
>+. виводимо 'e' (код 101)
+++++++. виводимо 'l' (код 108)
. виводимо 'l' ще раз
+++. виводимо 'o' (код 111)
>++. виводимо пробіл (код 32)
<<+++++++++++++++.
виводимо 'W' (код 87)
>. виводимо 'o' (код 111)
+++. виводимо 'r' (код 114)
------. виводимо 'l' (код 108)
--------. виводимо 'd' (код 100)
>+. виводимо '!' (код 33)
>. переводимо рядок (код 10)

Щоб пересвідчитися у тому, що дана програма дійсно працює, просто збережіть її текст у файл test.bf і запустіть на виконання
bum@bum-desktop ~/Projects $ bf test.bf
Hello World!

Ваш мозок ще живий? ОК, давайте виведемо слово Ubuntu. Спочатку випишемо ASCII коди відповідних літер
U - 85
b - 98
u - 117
n - 110
t - 116

Давайте глянемо на число 85. Звичайно писати 85 плюсиків буде досить важко, та й легко помилитися. Набагато краще буде спробувати розбити його на два множники, тобто 5*17. У свою чергу, 17=5*3+2. Таким чином, перш за все спробуємо помножити 5 на 3. Код буде таким:
+++++[>+++<-]

Тобто ми збільшуємо значення комірки №0 на 5 (а оскільки раніше там був 0, то таким чином просто присвоюємо це значення комірці), а значення комірки №1 збільшуємо на 3. Потім зменшуємо значення комірки №0 на одиницю і повторюємо цикл, до тих пір, доки у комірці №0 не з'явиться нуль. Тоді у комірці №1 буде число 15. Але після останнього проходу циклу, у нас активна комірка №0, тому зрушимо вказівник на один вправо (>). Тепер додамо число 2. Наш код зміниться.
+++++[>+++<-]>++

Тепер у комірці №1 знаходиться число 17. Помножимо його на 5 використовуючи аналогічний метод. Не забуваємо в кінці пересунути вказівник на одну комірку праворуч (тобто на №2) і спробуємо вивести результат.
+++++[>+++<-]>++[>+++++<-]>.

Якщо запустити цю програму, то вона виведете на екран літеру "U". Супер! Тепер нам залишилося вивести ще чотири літери. Наступна літера b має код 98. 98-85=13, отже просто 13 раз пишемо +.
+++++[>+++<-]>++[>+++++<-]>.
+++++++++++++.

Зараз наша програма виводить дві літери - "Ub". Щоб тепер вивести u нам потрібно додати ще 19. Тут можна дещо спробувати зоптимізувати, оскільки 19=5*4-1. У якості лічильника оберемо комірку №3, а додавати будемо у нашу робочу №2. Програма, що виводить "Ubu":
+++++[>+++<-]>++[>+++++<-]>.
+++++++++++++.>+++++[<++++>-]<-.

За рахунок вищенаведеної оптимізації, ми зекономили аж цілих 2 байти! :) Інші літери вивести не важко. Але наприкінці, нам ще непогано було б перевести курсор на новий рядок, для цього потрібно вивести символ з кодом 10. Остаточно, програма буде виглядати наступним чином:
+++++[>+++<-]>++[>+++++<-]>.
+++++++++++++.>+++++[<++++>-]<-.
-------.++++++.+.>++++++++++.

Все. Не знаю, як ваш мозок, а мій вже почав плавитись, тому статтю на цьому закінчую. Більше інформації можна знайти на відповідній сторінці Вікіпедії.

вівторок, 13 січня 2009 р.

Tweetr: клієнт для Твіттера

Tweetr - це зручний клієнт для суперпопулярного нині, сервісу мікроблогів Twitter. Оскільки він базується на Adobe AIR, то без проблем запускається і в Linux, і в Windows, і в MacOS X.



Офіційний сайт

PS: для любителів більшої функціональності, правда, існує ще Twhirl.

CHM Reader: перегляд chm файлів

CHM - досить розповсюджений формат для розповсюдження електронної документації на платформі Windows. Але і в Linux такі файли можна без проблем читати. Достатньо лише встановити спеціальне розширення для Firefox.

Завантажити CHM Reader

Тепер у меню Файл, з'явиться пункт Open CHM Files, а бічна панель зможе відображати зміст.