31 дек. 2008 г.

С новым годом!!!

24 дек. 2008 г.

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

Атоматизация сборки проектов для меня всегда была довольно интересной темой.
В силу того, что Windows не имеет вменяемого языка командной оболочки(WSH, VB, JavaScript не считаются, потому как по сути являються языками программировани и для простых задач требуют слишком много усилий), а тогдашнее мое основное средство программирования Delphi не имело встроенных средств автоматизации, впрочем как не иммет их и сейчас.

В свое время я искал реальную замену bat, cmd файлам, по недостаточной функциональности и отсутсвию масштабируемости.

Были даже попытки приспособить Jakarta Ant и PHP, но каменный цветок был про преднему далек от идеала, до появления Ruby и Rake.

Появилось не то, чтобы идеальное средство, а ощущение свободы и комфорта.

Но не один я ее ощутил: Building Delphi with Ruby

Maven - как-то прошел стороной, но Практическая автоматизация : Сборка проектов Java с помощью Raven

Вобщем такое впечатление, что выбор был сделан правильно.

22 дек. 2008 г.

Redmine из коробки

Специально для ленивых Redmine исталятор от Bitnami

Сам не пробовал ;-)

18 дек. 2008 г.

Настройка кодировки сервера MySQL

Все время забываю эти полезные параметры.

/etc/mysql/my.cnf


[client]
# Для клиента
default-character-set=utf8
....

[mysqld]
# Для сервера
default-character-set=utf8


В скриптах указывать кодировку командой: SET NAMES 'utf8';

11 дек. 2008 г.

Переключение раскладки клавиатуры

Предыстория такая: весьма любимая мною операция форматирования исходного кода в Eclipse возложена на комбинацию клавиш Ctrl+Shift+F, что конфликтует с другой моей весьмалюбимой операцией - переключением раскладки клавиатуры.

Другой момент. Вы часто пользуетесь клавишей CapsLock, NumLock и т.д ?

Лично я ими не пользуюсь, а наоборот нажимаю случайно когда этого совсем не требуется.

Итам из всего этого хлама попытаемся извелечь пользу.
А именно: заставить работать клавишу CapsLock в качестве переключателя. Это разрешит почти все конфликты.


sudo mcedit /etc/X11/xorg.conf


правим секцию к примерно такому виду:

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc104"
Option "XkbVariant" "basic,winkeys"
Option "XkbLayout" "us,ru,ua"
Option "XkbOptions" "grp:caps_toggle,grp_led:caps"
EndSection


перегружаем X-сы Ctrl+Alt+Backspace.

Имеем удобное переключение раскладки и индикацию лампочкой в случае не основной раскладки.



7 нояб. 2008 г.

Assembla.com. Халява кончилась!


We're sending you this important message because you own one or more free private spaces on Assembla.com. We no longer support free private spaces. As a space owner you should go to our upgrade page and select an option:

1. You can choose an inexpensive paid subscription with the Private/Professional plan
2. You can change your public permissions to “View” and fit the Free Public plan


Assembla.com поменяла политику и больше не поддерживает приватных репозитариев.
Вариантов аж 3:
1. Делатите деньги
2. Делайте публичные репозитарии
3. Забирайте свои пасочки из нашей песочницы

Я наверное пойду по 3му варианту.

27 окт. 2008 г.

Ruby+GUI. Гуевый Ruby

Причин для написания этой статьи две:

* "А! Ruby. Это, что-то для WEB ?"
* "Мы начинаем новый проект для Desktop. Подскажите какой инструментарий выбрать, чтобы было быстро и недорого"

Коммерческих вариантов много: MS VisualStudio, Delphi, С+Builder. Еще больше некоммеческих: Eclipse+SWT, NetBeans +SWT, Lasarus + LCL.

Сейчас я хочу представить связку:

wxFormBuilder + NetBeans for Ruby + wxWidgets + Ruby

В приципе можно было-бы ее сократить до wxWidgets + Ruby, но любителям "визуального" программирования боюсь не понравиться отсутствие
возможности кинуть кнопку на форму, а отсутсвие редактора с автодополнением кода огорчит еще некоторую часть аудитории.

* Ruby - Кросплатформный интерпритируемый язык программирования со строгой динамической типизацией.

* wxWidgets - это кросплатформный инструментарий для создания графического интерфейса. Хотя она содержит и другие полезные свойства кроме
визуальных елементов управления, сейчас нас будут интересовать только формы, кнопки и меню.

* wxRuby - обертка библиотеки wxWidgets для работы с Ruby

* wxFormBuilder - кросплатформный визуальный редактор форм с возможностью генерации С++ кода или XML ресурсов в вормате XRC.

* NetBeans for Ruby - кросплатформная интегрированная среда для разработки на Ruby и Ruby on Rails от Sun Miscrosystems.

Ну вот пожалуй все основные компоненты описаны.

Поскольку все компоненты сожержат в описании слово "кросплатформный", то отсюда очевиден факт, что наше будущее окружение и продукты созданные с его помощью
не будут зависеть от опереционной системы где они выполняються или были созданы.

Для NetBeans необходим Java Runtime Environment. Его можно ускачать и установить с сайта фирмы Sun.

Я не буду останавливаться на установке всех компонентов. Описание этих процесов можно найти в Интернете для любой платформы, так что не будем повторяться.

Открываем любой тектовый редактор и создаем файл hello.rbw

1 require 'rubygems'
2 require 'wx'
3
4 include Wx
5
6 class MyApp < Wx::App
7
8 def on_init
9 Wx::Frame.new( nil, -1, "Hello world!!!").show
10 end
11
12 end
13
14 MyApp.new.main_loop


Запускаем

ruby hello.rbw



В гем пакете wxRuby есть достаточно много примеров для работы, потому этого вполне хватит, чтобы проилюстрировать работу Ruby + wxWidgets.

Для визуального дизайна форм можно использовать wxFormBuilder он способен создавать xml ресурсы, а wxXMLResources способен создавать по этим ресурсам экземпляры форми и диалогов. Хочу отметить, что ресурсный файл может содержать описание нескольких форм и диалогов. Пример можно посмотреть в папке samples/xrc гема wxruby.





Вы можете использовать NetBeans для как редактор кода.

http://rubyforge.org/ и http://github.com/ - два самых больших репозитария библиотек, плагинов и примеров для работы с различными технологиями начиная от COM, OLE и реестра Windows до сетевых библиотек и работы с графикой. Возможна также работа с раздичными базами данных как напрямую, так и с помощью ORM.

ANVIL - MVC фрейворк для построения GUI. Находиться в зачаточном состоянии но уже написано первое приложение HAMR - текстовый редактор.

Вобщем не вижу проблем, чтобы Ruby внес достойный вклад в разработку Desktop приложений :-)

Delphi. Helpers

Я давно не писал о Delphi. Сейчас появилась интересная тема по поводу изменений в языке.
Helpers - структуры для расширения функционала уже существующих классов без применения наследования.
В реализации helpers есть как свои положительные стороны так и недостатки.

type
ClassHelper = class helper [(ancestor list)] for type-id
end;

Когда это может понадобиться ?
Добавить возможность получения итераторов в классах коллекций где они не реализованны и последующее их использоавние в конструкции

for item in collection do
...
end

Пример можно посмотреть тут.

Изменение сигнатур вызовов функций без применения наследования.

Например добавить разного рода сортировки списков и коллекций.

Изменить способ обхода набора данных возвращаемого TDataSet.
Распространенной ошибкой являеться зацикливание из-за того, что в теле цикла программист забывает поставить вызов DataSet.Next.
Например:
ьно
while DataSet.HasNext do
begin
...
end

чтобы HasNext выполнял не только проверку на наличие следующей записи в датасете, но и передвигал текущую запись. Такое поведение упростит работу с TDataSet.

Вобщем вариантов масса.

Но есть и своя бочка дегтя в этой ложке меда.

Helper дает возможность работать только с методами, но не позволяет содержать в себе определение данных.

Технология хелперов представляет собой так называемое Mix(подмешивание), которое широко используется в таких языках как Ruby и ему подобные.

В идеале хотелось бы иметь возможность добавлять не только методы но и свойства, тогда появился бы мощный механизм внесения функционала в совершенно разные классы без их изменения и применения наследования.

Например датасет который построен на таблице с классической древовидной структурой: ID, PARENT_ID, NAME при подмешивании получал бы функционал дотуп к корневому узлу, итераторы обхода всего дерева, обхода только детей. Вобщем тот функционал который сейчас реализуется сейчас в TTreeView(View) несмотря на то, что функции поставщика данных должны быть определены в модели.

В принципе и сейчас можно реализовать такой функицонал, но вот как реализовать функции настройки?
Например если поле ID называется REC_ID. Где-то надо хранить эту информацию, а хелперы не позволяют создавать поля.

Резюме: очередная подпорка пирамиде вертикального наследования VCL, к тому же не рекомендуемая для основого программирования самим производителем.

5 окт. 2008 г.

Переход с SVN на GIT

Если вы все такие решились перейти с Subversion на Git, то для этих целей подойдет специально написанная утилита Git-SVN.

Не обязательно переносить весь репозитарий тем более, что ваши колеги все еще не готовы или по каким либо причинам не хотят использоавть Git.

На первых порах можно работать с Subversion репозитарием через посредничество git-svn.

Импортирование репозитария




git-svn clone --s [url] --user-name=[svn-user]


url - может быть как веткой или тэгом так и всем репозитарием.

Опция --s задаст стандартные ветки внутри
git-репозитария(trunk,tags,branches).

Внесение изменений



Теперь вы можете забыть о том, что ваш основной репозитарий находиться под управлением Subversion и спокойно работать прирываясь только на синхронизацию с основным репозитарием и отправляя свои изменения.

Получение изменений



Для того чтобы получить измеениния внесенные вашими колегами необходимо выполнить команду rebase


git-svn rebase


Правда тут могут быть некоторые сложности которые придеться разрешить в ручном режиме. Дело в том, что у вас могут быть неподтвержденные изменения, так называемая, "грязная" копия.

Прячем изменения



Временно спрятать изменения позволит команда stash




git stash save


она запишет текущие неподтвержденные изменения в список

после того как будет обновлена рабочая копия изменения надо вернуть


git stash pop


такая команда вытолкнет самое верхнее сохраненное изменение и удалит его из списка

подробней о списке stash можно узнать из справки


git help stash


Отправка изменений на сервер




git-svn dcommit


Ну вот и все. Недостатком такого метода являеться сравнительная медлительность при отправке изменений.

25 сент. 2008 г.

etckeeper. Настройки системы под контролем

Как часто говорили мне никсовые гуру:

Перед тем как править конфиги сделай копии.

Так же часто адепты программирования говорили:

Не делай копии исходных файлов, пользуйся системой контроля версий.

Чем отличается конфигурационный файл от исходного кода ? Ничем. По сути это текстовые файлы, которые надо править и иметь возможность откатывать изменния. Желательно так же иметь историю всего этого процеса.
Итак имеем транзитивную зависимость:
Конфиги -> Иходники -> VCS

Вывод
 Конфиги -> VCS 

Но положить конфиги под VCS мало. Причина на то проста: конфиги правит не только пользователь но и система в процесе установки/удаления/обновления нового ПО.

В системе GNU/Linux Debian установкой ПО занимаеться менеджер APT.
Для того, чтобы APT мог согласовывать свои действия с системой контроля версий, которая наблюдает за каталогом /etc, существует пакет etckeeper.

etckeeper устанавливает высокоуровневый интерфейс над системамы контроля версий(git, mercurial,bazaar) и навшивает хуки на события установки/обновления/удаления пакетов.

По-умолчанию система настроена на работу с Git. Так как именно на нем проводиться разработка ядра Linux. Надо отметить, что VCS с которыми работает etckeeper являються распределенными, тоесть не требуют сервера и хранят весь перпозитарий локально.
По понятным причинам SVN и CVS економически невыгодны

Установка

$ sudo aptitude install etckeeper

Если у вас еще не установлен Git, то:

$ sudo aptitude install git-core


Если вы питоновод, то mercurial или bazaar будут естественным выбором ;-)

$sudo etckeeper init # инициализации репозитария
$sudo etckeeper commit "Первый коммит настроек"


Теперь вы можете смело пускаться в самые невероятные эксперементы, если конечно уверенно владеете выбраной VCS. Сменить которую можно в файле /etc/etckeeper/etckeeper.conf

Теперь каталог /etc полностью в вашей власти:

$ git checkout -b new_net_interface


Создаст новую ветку настроек в которой вы будете настроивать вашу новую сетевую карту. А когда все получиться и заработает просто сольете изменения с основной веткой:

$ git checkout master
$ git merge new_net_interface


А если, что-то не срастется, то просто удалите ветку и переключитель на основную.

Вот где пересекаються программисты и администраторы :-)

24 сент. 2008 г.

Очистка каталога

Небольшой скрипт на Ruby для очистки от ненужных и временных файлов:


#!/usr/bin/env ruby

Dir['files/**/*'].each do |f|
if File.file?(f)
sz, ext = File.size(f), File.extname(f)
flag ||= ext.empty? # файлы без расширений
#flag ||= ['.rb', '.bmp'].include?(ext) # файлы с расш-ми
#flag ||= sz < 10 # файлы по размеру

flag && p(f).nil? && ARGV.include?('-f')
&& (File.delete(f) > 0) && p('OK')
end
end

23 сент. 2008 г.

Форматирование Flash накопителей в Linux

Обычно флешки имеют файловую систему FAT16. Такое форматирование выбранно для кросплатформности, чтобы их можно было прочитать как под Windows так и под другие OS, в том числе мобильные устройства типа Palm и д.р.

В симействе *nix подобных система существует утилита mkdosfs.
В GNU/Linux Debian она содержиться в пакете dosfstools.
Если у вас он еще не установлен то:

$ sudo aptitude install dosfstools

Для быстрого форматирования:

mkdosfs -F 16 _имя_устройства_

поскольку флешки представляються в системе как SCSI устройства и у вас не IDE винчестеры, то скорее всего они будут представлены как sdbX поетому:

mkdosfs -F 16 /dev/sdb1

Если хочеться воочию убедиться в целосности физичесих секторов, то команда будет выглядеть так

mkdosfs -cvF 16 _имя_устройства_

22 сент. 2008 г.

Титрование и дубляж в Украине

Совсем недавно я общался со своими друзьями, которые считают русский своим родным языком.
Как я понял из разговоров основную проблему при просмотре передач и фильмов на украинском языке составляет качество дубляжа и титров.
Немаловажным фактором так же было желание слышать оригинальный голос русских артистов: Высотсткого, Баталова, а не их дублированные эквиваленты.

После некоторых раздумий сложилась такая позиция:
- подавляющее большенство титров и материалов для озвучивания укранских фильмов делается на основе русских фильмокопий;
- я желаю слышать оригинальный голос Жерара Депардье и Гью Гранта;

Логичным вариантом вырисовывается создание украинских субтитров к фильмам на языке оригинала.
Такой вариант имеет дополнительный плюсы: устранение "испорченного телефона" из-за двойного перегона субтитров, эстетическое наслаждение оригинальными голосами актеров, практика восприятия языка на слух.

21 сент. 2008 г.

Firefox передвижение по истории

По-умолчанию в GNU/Linux поведение клавиши Backspace отличается от типичного поведения в Windows.
Если уж быть точным, то в GNU/Linux функциональность этой клавиши для навигации вообще не задействована.


Набираем в адресной строке about:config и попадаем на страницу настроек.
Ищем целочисленный параметр

browser.backspace_action

0 - движение по истории назад(History Back)
1 - прокрутка на страницы вверх(Page Up)
2 - блокировка функционала

Нажатие с клавишей Shift будет иметь обратное действие к выбраному режиму(вперед по истории или в прокрутка страницы вниз)

Используються только варианты [0, 1]. Остатьные числа блокируют функционал

13 сент. 2008 г.

Тихий звук во время просмотра видео в Linux/Windows

Бывает попадаются музыкальные или видео записи когда звук очень тихий.
Особенно актуально это для ноутбуков в которых маленькие динамики и смотреть фильм приходиться буквально влипнув в клавиатуру.

Одним из решений вопроса являеться использования хитрых параметров mplayer.

mplayer -af volume=40dB [path]

Такие параметры заставят mplayer прогонять звуковую дорожку фильма через фильтр повышения звука прямо во время просмотра фильма.

Поскольку mplayer кросплатформенный OpenSource продукт, то проблема автоматически решается на всех платформах на которых он может быть запущен.

http://www.mplayerhq.hu/design7/dload.html

12 сент. 2008 г.

День программиста

Зачастую программисты празднуют профессиональный праздник вместе с администраторами.

Ну у нас есть свой собственный!

Поздравляю программистов с праздником :-)

День программи́ста — отмечаемый на 256-й день года (255-й с нуля). Число 256 (28) выбрано потому, что это количество чисел, которое можно выразить с помощью одного байта. Так же "256" в шестнадцатиричной системе счисления - это "100" ("0x100"). И так же это максимальная степень числа 2, которая меньше 365. В невисокосные этот праздник попадает на 13 сентября, a в високосные годы — на 12 сентября.

11 сент. 2008 г.

Assembla.com. Бесплатный хостинг для коммерческого сайта.



Assembla.com - сайт предоставляющий инструментарий и сервисы для разработчиков програмного обеспечения.
Развитие сервиса происходит в трех основных направлениях:


  • Средства разработки - предоставляющий инструментарий и сервисы для разработчиков програмного обеспечения;

  • Подбор партнеров по разработке - вы можете указать свои професиональные
    данные, просмотреть данные других учасников и подобрать себе выгодного
    партнера оп разработке. Вы можете оформить часть своего проекта в виде outsource и опубликовать на рассмотрение другим учасникам проекта;

  • Предоставление консалтинговых услуг сотрудниками и разработчиками Assembla.com.
    Подробнее о консалтинге



Самыми привлекательными моментами являються:


  • Интегрированые решения на базе Trac/Git/Subversion/Mercurial

  • Создание неограниченного количества Svn, Git, Mercurial репозитариев;

  • Закрытое хранение кода для коммерческих и приватных проектов;

  • 200 Мб свободного пространства при бесплатном использования сервиса.



Интеграция с проeктом Assembla


Вы можете синхронизировать Ваши собственные средства разработки.

Практически ко всем инстурментам и данным, касающимся вашего проекта Assembla предоставляет API.

Инструментарий


Весь инструментарий поставляеться бесплатно

  • Chat - страница для ведения диалогов внутри команды разработчиков;

  • Images - Инструменты для графического дизайна: хранение изображений, рысование и коментирование;

  • Mephisto - система управления блогами и контентом;

  • Milestones - управление этапами и заданиями проекта;

  • Member - инструмент для создания портфолио;

  • Staffing - система управления Outsource заданиями, мониторинга переговоров, система оплаты выполненых работ;

  • Scrum - система онлайновых встреч и отчеты для ведения проекта по Scrum методологии;

  • Subversion - система контроля версий. (входит в состав инструмента Trac/Subversion);

  • Tickets - система управления заданиями, которая может быть использована для
    сообщений об ошибках, нововвидениях и постановке заданий;
  • Time - временные метрики проекта;

  • Trac/SVN - интегрированое решение на базе Subversion & Trac

  • External SVN - инструмент интеграции внешнего Subversion репозитария с системой управления заданиями

  • Trac/Mercurial - интегрированое решение на базе Mercurial & Trac

  • Dashboard - настраеваемая панель управления проектом(отчетность, задания, учасники и т.д).

  • Trac/Git - интегрированое решение на базе Git & Trac

  • GitHub - инструмент интеграции внешнего Git репозитария с системой управления заданиями



Платные услуги



  • SSL доступ ко все информации на рабочем пространстве;

  • Автоматическое резервное копирование;

  • Управление доступом по IP адресу;

  • Расширенная отчетность;

  • Отключение автоматической очистки устаревших данных на приостановленных проектах;

  • Техническая поддержка по телефону и электронной почте;

  • От 5 Гбт дополнительного пространства.

10 сент. 2008 г.

Сборка Chrome for Linux

Воодушивленный удачной сборкой Firefox 3 под GNU/Linux Debian/lenny, решил собрать новый браузер от Google Chrome.

И каково же было мое удивление когда после правки нескольких багов и некоторого времени компиляции, пройдя все юниттесты и функциональные тесты, я не обнаружил дальнейших инструкций по запуску.

Тоесть практически непонятно было где было искать Chrome for Linux.

Как долго я смеялся когда прочел строки в рамке в инструкции по сборке:

This page describes how to build the Chromium browser in Linux. Read this if you're interested in testing the build or porting code.

Note: There is no working Chromium-based browser on Linux. Although many Chromium submodules build under Linux and a few unit tests pass, all that runs is a command-line "all tests pass" executable.
Я вот чего-то не пойму первая строка пишет браузер для линукс, а рамка это опровергает.

Chromium is an open-source browser ...

Какой же тут опенсорц ? Гугль где Chrom for Linux ?

Набор модулей и тестов это еще не браузер, а частичное открытие исходников не OpenSource!
 

1 сент. 2008 г.

Git. Сокращение команд

В Git нет возможности сокращать команды, как это возможно в merсurial или svn.

Но, есть более удобный маханизм синонимов(aliases).

Фактически вы можете сами выбрать диалект для общение с Git, сократить команду или вовсе переименовать.
Синонимы

git config --global alias.cf config # конфигуратор
git cf --global alias.st status # текущее состояние репозитария
git cf --global alias.ci commit # подтверждение изменений в локальном репозитарии
git cf --global alias.co checkout # переключение на ветку
git cf --global alias.ad add # добавление
git cf --global alias.tg tag # тэг
git cf --global alias.df diff
git cf --global alias.pul pull # получить в удаленный репозитарий
git cf --global alias.psh push # отправить изменения в удаленный репозитарий
git cf --global alias.lg log # показать лог комитов
git cf --global alias.hp help # получить справку

Теперь можно писать
git st


вместо
git status


Добавление синонима удаленного репозитория

Что-бы не набирать каждый раз длинное имя удаленного репозитария можно тоже дать ему синоним.

git remote add origin [url]


Теперь для получения изменения удаленного репозитария пишем:

git pull origin


Небольшой набор макросов

Макросы можно записать в файл .bash_profile

Недостатком являеться отсутствие возможности автодополнения по TAB, так как это было с сокращениями.

alias gst='git-status'
alias gad='git-add'
alias gci='git-commit -m'
alias gp='git pull && git push'
alias gull='git pull' # отдать изменения
alias gush='git push' # получить изменения
alias gb='git-branch' # работа с ветками
alias gco='git-checkout' # переключиться на ветку
alias gd='git-diff' # показать изменения
alias gt='git-tag' # работа с тегами

15 авг. 2008 г.

Git. Быстрый старт

Создаем каталог проекта


mkdir git-repo
cd git-repo


Инициализируем новый репозиторий


git init


Создаем файла readme и добавляем его к проекту


touch readme
git add readme


  • Коментируем и комитим изменения в репозиторий

    git commit -m "[+] readme"


    Создаем ветку mybranch и переключаемся на нее


    git branch mybranch
    git checkout mybranche


  • Добавляем текст в readme. Например: Hello world.


    mcedit readme


    Комитим внесенные изменения


    git commit -a -m "[^] readme"


    Переключаемя в основную ветку и объединяем изменения


    git checkout master
    git merge mybranch


    Убеждаемся, что изменения успешно внесены в основную ветку


    cat readme
    >> Hello world!


    Смотрим лог внесенных изменений

    git log
  • 6 июн. 2008 г.

    Redmine

    Redmine - это гибкая система сопровождения проектов основанная на WEB интерфейсе. Написана с использованием каркаса WEB приложений RoR(Ruby on Rails). Для использования может быть задействована практически любая из популярных операционных систем(Windows, Linux, BSD, Mac OS), а так же любая база данных для которой может быть написан драйвер(Oracle, PostgreSQL, MySQL, Firebird, SQLite).

    Распространяеться в исходных кодах под лицензией GNU General Public License (GPL)



    Краткий обзор возможностей


    * Поддержка нескольких проектов в одной базе данных;
    * Гибкая система настройки пользовательских прав доступа;
    * Гибкая система тикетов и заданий;
    * Поддержка календаря и графиков Гантта
    * Поддержка файлового архива, документация и новостных лент по проекту
    * Сквозное логирование событий в системе и поддержка отсылки на еmail
    * Встроенная система Wiki по проекту
    * Встроенная система форумов по проекту
    * Простая система учета времени
    * Возможность добавлять произвольные пользовательские поля к проектам, заданиям и пользователям
    * Интеграция с системами контроля версий (SVN, CVS, Mercurial, Bazaar and Darcs)
    * Поддержка LDAP авторизации
    * Поддержка регистрации пользователей
    * Мультиязычность (Русский и Украинский присутствуют)
    * Поддержка различных баз данных


    Установка


    1. Распаковать архив

    2. Создать пустую базу данных: например "redmine"

    3. Сконфигурировать подключение к базе данных в файле config/database.yml
    для окружения "production" (по умолчанию включен драйвер MySQL)

    Файл database.yml.example переименовать в database.yml и изменить секцию для работы с SQLlite3 в режиме production

    production:
    adapter: sqlite3
    database: redmine.sqlite3


    4. Создать структуру базы данных. В установочном каталоге в командной строке набрать:
    rake db:migrate RAILS_ENV="production"
    Эта команда создаст таблицы и администраторский аккаунт.

    5. Тестируем установленное приложения запуская web сервер WEBrick:
    ruby script/server -e production
    Если установка прошла успешно, то по ссылке http://localhost:3000 мы увидим главную страницу приложения

    6. Воспользуемся администраторским аккаунтом для первого входа и конфигурации приложения:
    Логин: admin
    Пароль: admin

    7. Переходим в раздел "Administration" и настраиваем приложение: пользователи, роли, проекти и т.д.

    Миграция


    RedmineMigrate

    Trac



    rake redmine:load_default_data RAILS_ENV="production"
    rake redmine:migrate_from_trac RAILS_ENV="production"

    Ответив на неколько вопросов, которые задаст инстаоятор, выполучите сови проекты, которые до этого велись в мантисе.
    Исключение ноставят, только изображения и таблицы. По крайней мере так было у меня.

    Mantis



    Demo


    Здесь можно посмотреть приложение в работе: http://demo.redmine.org

    Ruby + Rails + SQLite на Windows

    Установка Ruby


    Скачать и установить дистрибутив
    Желательно прописать путь к каталогу установки в системные пути и перегрузиться.

    Установка Ruby on Rails



    gem install -v=2.0.2 rails --include-dependencies

    Параметр -v=2.0.2 не обязателен. Он лиш указывает версию RoR. По умолчанию поставиться самая свежая.
    В таком случае могут не работать некоторые программы написанные под 2.0.2. Например: redmine на данный моменент требует RoR 2.0.2

    Внимание: если выход в интернет осуществляеться через проксы, то может не работать. Обратитесь к администраторам сети.
    У вас могут быть закрыты FTP порты.


    Установка Sqlite3


    1. Скачать dll и положить в папку по системным путям (C:\WINDOWS\system32)
    2. Установить адаптер RoR SQLite3

    gem install sqlite3-ruby

    Выбрать самую свежую версию для mswin32

    27 мая 2008 г.

    Ruby. GetText. Интернационализация приложений

    Преамбула


    Каждое уважающее себя приложение должно обладать системой интернационализации. При этом весьма обидно если вы "прибили ее гвоздями" вписав ресурсные строки прямо в текст. Весьма обременительно так же выносить каждую, строку через константу в отдельный файл. Это занимает много времени и чревато ошибками и несоотвествиями.


    Выход есть. Велосипед уже изобретен и успешно ездяет :-) По опыту работы с системой GetText в других приложениях я был весьма обрадован ее наличием в Ruby и в частности поддержкой ее в системе Ruby on Rails. Незначительное замечание: система gettext написана полностью на Ruby и не являеться портом распространенной системы GNUGetText, хоть и полностью с ней совместима по формату.


    Для начала нужно установить гем gettext. На данный момент самым свежим был 1.90, более ранние версии имели серьезные проблемы в парсере и отлавливали не все строки ресурсов для локализации.



    gem install gettext


    Для начала определимся с понятием языкового домена. Проще говоря, это имя файла в который будет использоватся для перевода. Обычно это название приложения. Например: blog


    Дополним дерево каталогов нашего приложения следующими структурами:


    /locale/ru/LC_MESSAGES


    /locale/uk/LC_MESSAGES


    Каждый каталог соответствует одной из локалей, присутствующих в приложении. В данном случае русскому и украинскому языкам соответственно. В них будут расмещаться уже скомпилированные бинарные mo файлы языковых словарей.


    /po/ru


    /po/ru


    В этих каталогах будут размещаться po файлы, представляющие собой извлеченные из приложения ресурсы и уже переведенные на соответствующий язык.


    Немаловажно упомянуть также pot файл. Это основной файл языкового домена. Он будет создан автоматически и размещен в каталоге /po. В него будут извлекаться все новые ресурсы и затем мержится с каждым файлом po из языковых подкаталогов. Не стоит волноваться за сохранность уже переведенных ресурсов. Извлечение в pot файл и дальнейший мерж(merg) его с po файлами построены таким образом, что дополняют новыми ресурсами из pot файла и не затрагивают уже переведенных.


    Для начала создадим две rake-задачи, для облегчения нашей работы в будущем.


    /lib/tasks/gettext.rake


    desc "Update pot/po files."

    task :updatepo do

    require 'gettext/utils'

    GetText.update_pofiles("blog", Dir.glob("{app,lib,bin}/**/*.{rb,erb,rjs}"), "blog 1.0.0")

    end



    desc "Create mo-files"

    task :makemo do

    require 'gettext/utils'

    GetText.create_mofiles(true, "po", "locale")

    end


    Первая задача предназначена для извлечения ресурсных строк и мержа po файлов. Вторая для непостредственной из компиляции. Хочу заметить, что работая с этой этой системой в других средах разработки все операции приходилось делать вручную. Использование системы соглашений в RoR позволяет выполнять задачи извлечение и компиляции практически "в одно касание". Тоесть, если pot файл отсутствует, то он будет создан. Если присутсвуют языковые каталоги, и в них существуют po файлы, то они будут смержены и соответсвенно будут созданы и откомпилированы mo файлы.


    Дополним файл /config/environment.rb строкой


    require 'gettext/rails'


     


    В файл app/controllers/application.rb добавим слудеющий код.


    class ApplicationController < ActionController::Base


    # Выбираем локаль

    GetText.locale = "ru"


    # Инициализируем систему доменом

    init_gettext "blog"


    # Устанавливаем кодировку

    before_filter :set_charset



    def set_charset

    headers['Content-Type'] = "text/html;charset=utf-8"

    end

    end


    Ну вот основные приготовления закончены. После вышеперечисленных действий в наше распоряжени поступила функция _() (нижнее подчеркивание) и все строки к которым она будет применена подлежат извлечению и локализации. Кстати говоря система дополнительно извлекает из базы название сущностей и их свойств.


    Напишем где нибудь в коде <%= _("Hello world!!!") %> и выполним задачу


    rake updatepo


    В каталоге /po система содаст файл языкового домена с расширением pot. В дальнейшем вам вообще не понадобиться трогать этот файл. Кроме случаев создания новой языковой локали, которая заключается в копировании файла pot в каталог /po/{lang}/LC_MESSAGES изменяя только расшинение на po.


    Итак скопируем переименованный blog.pot в файл /po/ru/LC_MESSAGES/blog.po


    Теперь мы готовы началь перевод. Открываем blog.po любым редатором, например poEdit. Этот редактор кросплатформный и с открытым исходным кодом. Находим в списке ресурс "Hello wordl!!!" и в нижнем окне пишем его перевод: "Привет мир!!!".


    После закрытия файла достаточно просто выполнить задачу:


    rake makemo


    Это приведет к компиляции переведенного po файла в mo файл.


    На этом все. В следующий раз я обясню свою мотивацию в выборе системы перевода. Если конечно вы сами не поймете и не проникнетесь красотой простоты решения :-)



    8 мая 2008 г.

    Redmine, Trac, Mantis ...

    В каждой мало-мальски уважающей организации существует так называемый "корпоративный" сайт, общая база знаний или просто доска объявлений. Вникать и рассуждать о надобности таких ресурсов не имеет смысла и да и ставиться за цель. Они, однозначно, нужны, как место для концентрации корпоративных знаний, снижения коефициента искажения информации при внутрикорпоративном общении, средство корпоративной отчетности да и вообще показывают общую картину процесов в компании. Одним из основных достоинств, я считаю, есть единое хранилище информации для сотрудников только приступивших к работе в компании или над новым проектом.
    В данный момент речь не идет о таких монстрах как MS Project, Jira и т.д. так как в большинстве своем они либо избыточны либо сами по себе не предназначены для тех целей к которым их хотят принудить.
    Речь пойдет о свободнораспростраямых WEB ориентированных системах трекинга: Trac, Mantis и Redmine.
    В разное время я работал с каждой из них и хочу выделить несколько критериев по которым высказать свое мнение о системах вцелом.
    Изначально все системы имеют общий набор атрибутов: OpenSource, кросплатформность, наличие системы сопровожения заданий и разпределения их между пользователями.

    1. Легкость установки
    Для установки Mantis необходим Apache с поддержкой PHP и MySQL. Хотя существует версия включающая уже настроенную для использования среду.

    Об установке Trac ходят легенды :-) Сложности возникают на этапе интеграции Apache, Python и SVN из-за несовместимости бинарных дистрибутивов. Настройка проектов и интеграция с SVN осуществляеться в командном режиме. Та же ситуация с натройкой пользователей. Гораздо проще утановить из репозитариев, но все равно оставляеть неприятный осадок. Trac может быть запущен и без apache на собственном сервере, это слегка разбавляет ситуацию.

    Redmine - производит впечатление "коробочного" продукта. Для работы требуеться лиш установленный интерпритатор языка Ruby и для начала библиотека для работы с базой SQLlite и пакет драйвера для работы с этой базой. Незначительные манипуляции по установке начальных установок и генерации базы позволяет поднять систему на собственном встроенном сервере. Не лишним будет сказать, что этих самых серверов существует как минимум три. Так, что эдинственным сторонним продуктом во всей системе, можно сичитьть только СУРБД.

    2. Наличие Wiki
    Mantis не поддерживает встроенной системы Wiki.
    Trac содержит Wiki.
    Redmine содержит Wiki.

    3. Мультиязычность
    Mantis поддерживает локализацию.
    Локализация Trac "прибита гвоздями". Тоесть изначально он не имеет подсистемы локализации.
    Redmine - идет включает подсистему локализации не только на уровне приложения, но и на уровне отдельніх пользовательских аккаунтов. Русский и украинский идут в поставке.

    4. Интеграция с системами контроля версий
    Mantis не содержит интеграции с ситемами контроля версий.
    Trac интегрирован с SVN.
    Redmine - интегрирован с SVN, CVS, Darks, Bazaar, Mercurial, Git. Причем настройка заметно проще чем в Trac.

    5. Идивидуальные вкусности и перспективы
    Собственно этот пункт призван быть развязкой. Как видно Mantis являеться явным аутсайдером и основная схватка пойдет между Trac и Redmine.
    Хотя и так уже понятно кто победит :-) Вобщем-то это уже даже не борьба вышеупомянутых систем, а скорее сообщиств Ruby и Python.
    Вобщем я стаю на сторону Redmine. Простота установки, локализация, простота настройки, поддержка Wiki и систем контроля версий стали основными причинами для моего выбора. Миграция существующих проектов c Trac прошла отлично, если не считать поплЫвшие таблици в Wiki.
    Вообще довольно интересно наблюдать за развитием языка Ruby, так стремительно вышедшего на сцену и думаю уже обогнавшего своих основных конкурентов PHP и Python и даже замахнувшегося на Java :-)

    19 апр. 2008 г.

    Альтернатива Nero. Infra Recorder, жжет!

    Довольно долгое время пакет для записи CD, а потом и DVD дисков бесраздельно властвовал в своей специаизированной нише. Но на данный момент он превратился в конгломерат из более чем десятка различного рода программ.
    Если только вдуматься, то запись информационных носителей - дело повседневное и рутинное.
    Так почему же мы должны лицензировать и покупать каждую лопату или молоток по цене 100$?
    Ответ довольно простой.
    Молоток стоит 100$ только потому, что у вас просто нет альтернативы!
    Даже если в самом начале молотки были маленькими и удобными, то со временем они первартились в кувалды.
    Для того, чтобы попасть такой кувалдой по гвоздю надо довольно долго целиться и держать ее уже обеими руками.
    Ниши почтовых клиентов, интернет браузеров, интернет пейджеров уже давно и прочно заняли если не открытые, то хотябы свободные альтернативы(Thunderbird, Firefox, miranda, sim, pigin). На очереди я думаю офисные пакеты(OpenOffice.org, AbiOffice).
    Причиной для столь жгучей неприязни к пакету Nero стало несколько причин:
    - коммерческая лицензия;
    - излишня функциональность;
    - медленный интерфейс и блокировка системы во время записи диска(силы обеих рук задействоанны для удержания молотка);
    - порча нескольких RW болванок(запись и верификация, но диски тут же отказывались читаться и привод уходил в глубокий нокаут. примечательно, что до этого болванки писались другими не комменрческими программами и были востановлены тоже ими)
    - нежелание писать файлы более 2Гиг;

    Поиск альтернативы дал положительные результаты, причем в самый неожиданный момент.
    Довольно часто предлагаемые альтернативы: Burn4Free, DeepBurner, FinalBurner.

  • Burn4Free все, что мне понравилось в этой программе - это собственно слово "Free". Интерфейс, мягко говоря, "витееватый". Причем кнопка может оказаться ссылкой и увести куда-то в недры рекламного пространства. Я не понял как ею пользоваться, так что ничего плохого о результатах ее работы сказть не могу.

  • DeepBurner и FinalBurnerобрезанные версии более функциональных коммерческих аналогов и служат лиш приманкой для покупки полных версий. К примеру сравнительная таблица показывает разницу для FinalBurner. Фичи отмеченные тут звездочкой для DeepBurner доступны только в полной версии. Причем DeepBuner мне понравился больше по функционалу и полноте интерфейса он несомненно превосходит "вычурность" FinalBurner. Но к сожалению несколько безнадежно убитых болванок из-за неверного определения технических характеристик привода, заставили отказаться и от этого варианта.

  • "Маловато будет... ма-ло-вато"! (С) "Падал прошлогодний снег"
    Возможно кому-то мои требования покажуться завышенными. Но все таки как-то неискренне смотрятся все эти "бесплатные альтернативы". Одной рукой тебе дают бесплатно пользоваться продуктом, а другой внагрузку некоторое количество неудобств связанных с личным интересом получения последующей прибыли.

    Довольно приятной новостью оказалась находка: Infra Recorder
    Написана Кристианом Киндалом для конкурса программ Google Summer of Code в 2006 году

    - GPL лицензия
    - открытый исходный код;
    - создание CD/DVD data, video, audio, iso - образов
    - копирование дисков;
    - место занимаемое на диске ~ 7 Мб;
    - портативность(можно носить на флешке);
    - конвертация аудио треков в mp3
    - создание образов жестких дисков;
    - запись файлов до 4 Гиг(планируеться увеличение)
    - мультиязычность(русский и украинский присутсвуют)

    Несомненно при переходе на новый продукт могут возникнуть вопросы:
    - ЧаВО
    - Видеоуроки по выполнению типичных операций

    Автар, Infra Recorder пиши исчо :-)

    8 апр. 2008 г.

    DBDesigner Fork. Халява, сер !


    http://sourceforge.net/projects/dbdesigner-fork/
    Кросплатформный OpenSource редактор баз данных. Аналог Power Designer и ERWin.
    - Базы данных: Oracle, MySQL, Firebird(ODBC);
    - Визуальный построитель диаграм;
    - Востановление физической модели из файла базы данных;
    - Генерация и заливка скрипта в базу данных;
    - Система плагинов: HTML отчет, генератор вебинтерфейса на PHP, импортер данных;
    - Встроенный редактор запросов;
    - Импорт моделей из ERWin 4.1

    Для желающих добавить свой функционал доступны исходные тексты на Delphi. У меня скомпилился без проблем :-)

    12 февр. 2008 г.

    Wink 2.0 Создание интерактивных презентаций

    Иногда отвечая на вопросы пользователей, хочеться разразится тирадой "аля Шарик из Простоквашино": "я ему ответ писать не буду... я ему ответ нарисую..." В одном из проэктов, в которых я участвовал пособие по руководству ПО составляляло около 300 страниц печатного текста. При этом количество пользователей было довольно значительным. Свою лепту вносила так же текучесть кадров. Итак этот "кирпич" из никому ненужных знаний был выгоден обоим сторонам: пользоватлеям - как способ указать на объемы и сложность понимания, руководству - достаточно было самого факта его существование. А в конечном результате - "народная индейская изба "ФигВам". Мультик - отличное обучаещее средство. Итак ...

    Wink 2.0 - приложения для создания интерактивных презентаций и обучающих пособий aka tutorial. Имеет "as-is" и freeware лицензию. Исходные коды недоступны. Кросплатформный.

    Возможности:

    • Захват изображения с экрана и вставка внешних изображений в форматах BMP/JPG/PNG/TIFF/GIF

    • Захват и вставка аудио

    • Сохранение материалов в форматах: Macromedia Flash, Standalone EXE, PDF, PostScript, HTML or any of the above image formats. Use Flash/html for the web, EXE for distributing to PC users and PDF for printable manuals.

    • Интелектуальное управление захватом изображений с экрана: по таймеру, движению мыши, нажатию клавиш

    • Высокий уровень сжатия при сохранении высокого качества изображений

    • Добавление елементов управления и навигации: кнопки, надписи, изображения, фоны


    Для быстрого ознакомление в пункте меню Help есть пункты для загрузки двух обучающих уроков, зделанных в тот же самом Wink. :-)

    5 февр. 2008 г.

    Firefox 3 & Addons. Проблемы совместимости.

    Firefox 3. Можно пользовать. Некоторых отпугивает отсутствие плагинов или их несовместимость. В основном трудности возникают не из-за кардинальной несовместимости FF2 и FF3, а на уровне производителей расширений. Проще говоря виновата излишне бдительная система совместимости расширений и расзработчики расширений несоизволившие вовремя поменять мажорную версию совместимости :-)

    Лично у меня сейчас работают расширения:
    Scrapbook - каталогизатор контента, редактрование и индексированный поиск
    Video Download
    Helper
    - скачиватель мультимедийного контента и встроенных объектов страницы(youtube, фотогалереи, флеш)
    Addblock Plus - блокировщик нежелательного контента(домены, по маске, регулярные выражени, обмен листами "забаненного контента")
    Firebug - великолепный отладчик, мониторит почти все события в приложении, а так же DOM страниц и многое другое.
    MinimizeTo Tray - сворачивание приложения в значек на панели быстрого запуска.
    NoScript - блокировщик JavaScript.
    Google Reader Watcher - проверка новостей


    Расширение Firefox представляет собой по сути архив упакованный Zip с расширением ".xpi". Тоесть может быть отредактрован любым средством способным создавать такие архивы: FAR+7z, Total Commander, встроенный архиватор WinXP.
    Внутри архива есть файл install.rdf, а в нем тег maxVersion
    Если поправить вручную maxVersion, то почти наверняка расширение заработает.
    Есть и другой способ: отключить систему контроля совместимостей вообще
    Зайти на страницу настроек: about:config и создать/изменить параметр
    extensions.checkCompatibility = false

    Кстати не все так плохо среди разработчиков расширений: мои любимые Scrapbook и AdblockPlus как всегда в фаворе и держат руку на пульсе лиса :-)

    19 янв. 2008 г.

    Где взять время ? Portmone.com

    Иногда, чтобы выиграть время, необходимо не добавлять час к суткам, а просто уменьшить затраты на рутинные операции. (С) ХЗ
    Так случилось, что некоторое время, из-за травмы и восстановительного периода, мое передвижение по городу ограничивалось маршрутом: дом-метро-работа-метро-дом. К посещению допускались лишь учреждения находящиеся на отрезке: метро-дом. Так что я ни на шутку загрустил когда пришло время платить по счетам: свет, газ, телефон, интернет, пополнить мобильный счет и т. д.Мне претит сама мысль тратить время на хождение, стояние в очереди, постное лицо кассира, которой не то, чтобы надоела ее работа, а вообще никогда не нравилась. К тому же операции с бумажными копиями причиняют почти физические страдания, они теряются, мнутся, пропадают из почтовых ящиков... Жуть. Меня поймет каждый IT специалист, которого заставляли писать, что-либо «от руки» :-)
    Первым делом я вспомнил про интернет-банкинг. Была когда-то такая услуга у Приватбанка. Но после того как я наблюдал безуспешные попытки человека пояснить тетке, что он платил «через интернет». Да и после того как в онлайн-чате техподдержки мне объяснили, что для набора пароля надо отключить CapsLock и набирать с зажатым Shift, я засомневался в адекватности такого сервиса. Да и по сути это было не совсем, то что мне требовалось.
    Ответ пришел совершенно неожиданно. (Привет, Андрей! И огромное спасибо не только за решение проблемы, но и за моральное удовлетворения от факта самого существования такого сервиса).
    http://portmone.com
    Если у вас есть электронная карта(перечень уточнить на сайте). VISA точно подойдет.
    олучать и оплачивать счета за коммунальные услуги, мобильную связь, стационарную связь, Интернет, кабельное ТВ и многое другое, через Интернет или мобильный телефон, с помощью платежных карточек систем Visa и Mastercard
    оплачивать свои покупки в интернет-магазинах с помощью платежных карточек Visa и Mastercard
    покупать электронные ваучеры операторов мобильной связи, интернет-провайдеров и IP-телефонии через Интернет или мобильный телефон с помощью платежных карточек Visa и Mastercard
    оформлять и оплачивать полисы страхования гражданско-правовой ответственности собственников наземных транспортных средств, полисы добровольного страхования наземного транспорта (АвтоКАСКО), полисы обязательного страхования выезжающих за рубеж («Зелёная карта»), страхования недвижимости и туристического страхования через Интернет
    оформлять и оплачивать подписку на периодические издания в Интернете

    Я сначала не поверил. Но за 10 мин. подписался на получение счетов, получил их в электронном виде и сверил их с бумажными и тут же приплатил. Пополнил мобильный счет через ваучер и с помощью SMS. Причем могу в любой момент видеть когда и за, что я оплатил, а на выходе сумму потраченную за месяц. Кто-то скажет, что электронные платежи не понесешь для сверки при каких либо коллизиях. Подпишитесь на получение бумажных копий и будете спокойно себе выгребать эту макулатуру раз в месяц из почтового ящика :-)
    Так, что возможно с таким ходом глядиш и появиться время на личную жизнь :-)