воскресенье, 27 июня 2010 г.

Разработка Flash под Linux (Debian & Ubuntu)

Встал тут передо мной вопрос, возможно ли писать программы на Flash (т.е. Action Script) под Linux. В моем случае линукс - это Debian. Как оказалось, можно.
Во-первых, надо скачать и установитьFlex SDK.
Для этого переходим по этой ссылке и скачиваем Open Source Flex SDK. Соглашаемся с Mozilla Public License и нажимаем по кнопке Download zip.
Распаковываем скачаннный архив в какую либо директорию. В моем случае это /tmp/flex:
$ 7z x flex_sdk_4.1.0.16076_mpl.zip -o/tmp/flex/
Готово, Flex скачан и установлен.
Во-вторых, создаем наше hello-world'ное flash приложение. Создаем файл hello.as и открываем его в любимом редакторе, например, в vim:
$ vim hello.as
Пишем в нем следующее:
package {
import flash.display.*;
import flash.text.*;
public class hello extends Sprite{
public function hello (){
var t:TextField = new TextField();
t.text = "hello actionscript 3";
t.width = 300;
t.height = 200;
t.x = 50;
t.y = 20;
addChild(t);
}
}
}
В-третьих, надо скомпилировать этот файл:
$ /tmp/flex/bin/mxmlc hello.as
В директории, в которой мы находимся, появится скомпилированный swf-файл hello.swf.
И наконец, открываем его в любимом бразуре, например, в Google Chrome:
$ google-chrome hello.swf
И наслаждаемся результатом:)

понедельник, 14 июня 2010 г.

Чем и как открыть архивы tar.gz и tar.bz2 в Windows

Как известно, архивы вида *.tar.bz2 и *.tar.gz2 - одни из самых часто встречающихся видов архивов в Linux (так называемые тарболы (tarball)). Однако, что делать в случае, когда их надо открыть в Windows?
В этом случае Вам поможет архиватор 7z. Скачать его версию для Windows можно по этой ссылке.
Он бесплатный и умеет распаковывать следующие архивы: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR и Z. А сжимать и открывать: 7z, ZIP, GZIP, BZIP2 и TAR.
Если 7zip не запускается при клике по tar.gz или tar.bz2, убедитесь, что он настроен на их открытие:
1) Откройте 7zip
2) Пройдите по Tools → Options
3) Выберите вкладку "System".
4) Убедитесь, что стоят галочки напротив tar, gz, bz2.
5) Нажмите Ok.

После этого 7zip сможет распаковать тарболы в windows.

пятница, 4 июня 2010 г.

Настройка антиспама в Pidgin

В последнее время мне часто стал сыпаться спам в Pidgin. Решение нашлось быстро в виде антиспама Bot Sentry.
Установка и настройка предельно просты. Во-первых, устанавливаем pidgin-dev и intltool:
sudo aptitude install pidgin-dev intltool
Далее скачиваем с сайта разработчиков тарболл и распаковываем его:
wget http://downloads.sourceforge.net/project/pidgin-bs/bot-sentry/1.3.0/bot-sentry-1.3.0.tar.bz2?use_mirror=citylan
tar -xjvf bot-sentry-1.3.0.tar.bz2
Далее, переходим в директорию
cd bot-sentry-1.3.0/
и запускаем конфигурирование, компиляцию и инстралляцию
configure
make
sudo make install
Все готово, осталось только включить модуль в Pidgin:
Средства-Модули-Bot Sentry, затем придумать вопрос и ответ для антиспама:

Ruby ч.3 Работа с объектами в Ruby

Продолжение этой статьи.
Итак, у нас уже объявлен класс Greeter. Посмотрим на него в действии:
irb(main):035:0> g = Greeter.new("Pat")
=> #
irb(main):036:0> g.say_hi
Hi Pat!
=> nil
irb(main):037:0> g.say_bye
Bye Pat, come back soon.
=> nil
Итак, как вы видите, все работает, как задумано. Что же будет, если мы попытаемся обратиться к имени напрямую?
irb(main):038:0> g.@name
SyntaxError: compile error
(irb):52: syntax error
from (irb):52
Ага, он ругается.
Переменные класса всегда спрятаны от посторонних глаз. Спрятаны они не насовсем, вы можете их найти, когда инспектируете объект, и всякими другими способами. Однако Ruby придерживается объектно-ориентированного подхода по отношению к скрытию переменных.
Посмотрим, какие же методы существуют у объекта класса Greeter:
irb(main):039:0> Greeter.instance_methods
=> ["method", "send", "object_id", "singleton_methods",
"__send__", "equal?", "taint", "frozen?",
"instance_variable_get", "kind_of?", "to_a",
"instance_eval", "type", "protected_methods", "extend",
"eql?", "display", "instance_variable_set", "hash",
"is_a?", "to_s", "class", "tainted?", "private_methods",
"untaint", "say_hi", "id", "inspect", "==", "===",
"clone", "public_methods", "respond_to?", "freeze",
"say_bye", "__id__", "=~", "methods", "nil?", "dup",
"instance_variables", "instance_of?"]
Ого! Но ведь мы объявляли всего два метода, откуда же их столько?
Здесь перечислены все методы класса Greeter, в том числе и унаследованные от его предка. А теперь посмотрим методы, присущие только классу Greeter:
irb(main):040:0> Greeter.instance_methods(false)
=> ["say_bye", "say_hi"]
А теперь посмотрим, на какие методы откликается наш объект:
irb(main):041:0> g.respond_to?("name")
=> false
irb(main):042:0> g.respond_to?("say_hi")
=> true
irb(main):043:0> g.respond_to?("to_s")
=> true
Итак, как мы видим, Greeter не знает метода name.
Однако, что будет, если мы захотим увидеть или изменить name? Ruby предоставляет легкий способ для доступа к переменным класса:
irb(main):044:0> class Greeter
irb(main):045:1> attr_accessor :name
irb(main):046:1> end
=> nil
В Ruby всегда можно открыть класс заново и изменить его свойства. Итак, попробуем создать новый экземпляр класса Greeter и поиграть с свойством @name:
irb(main):047:0> g = Greeter.new("Andy")
=> #
irb(main):048:0> g.respond_to?("name")
=> true
irb(main):049:0> g.respond_to?("name=")
=> true
irb(main):050:0> g.say_hi
Hi Andy!
=> nil
irb(main):051:0> g.name="Betty"
=> "Betty"
irb(main):052:0> g
=> #
irb(main):053:0> g.name
=> "Betty"
irb(main):054:0> g.say_hi
Hi Betty!
=> nil
Действие :attr_accessor создало для нас 2 новых метода, name для получения значения переменной @name и name= для задания ее значения.
Однако, Greeter сейчас умеет приветствовать и прощаться только с одним человеком. Что, если нам захочется создать некий MegaGreeter, который сумел бы приветствовать весь мир, одного человека, или несколько человек сразу?
Давайте напишем следующие строки в отдельном файле, а не прямо в интерпретаторе:
#!/usr/bin/env ruby

class MegaGreeter
attr_accessor :names

# Create the object
def initialize(names = "World")
@names = names
end

# Say hi to everybody
def say_hi
if @names.nil?
puts "..."
elsif @names.respond_to?("each")

# @names is a list of some kind, iterate!
@names.each do |name|
puts "Hello #{name}!"
end
else
puts "Hello #{@names}!"
end
end

# Say bye to everybody
def say_bye
if @names.nil?
puts "..."
elsif @names.respond_to?("join")
# Join the list elements with commas
puts "Goodbye #{@names.join(", ")}. Come back soon!"
else
puts "Goodbye #{@names}. Come back soon!"
end
end

end


if __FILE__ == $0
mg = MegaGreeter.new
mg.say_hi
mg.say_bye

# Change name to be "Zeke"
mg.names = "Zeke"
mg.say_hi
mg.say_bye

# Change the name to an array of names
mg.names = ["Albert", "Brenda", "Charles",
"Dave", "Englebert"]
mg.say_hi
mg.say_bye

# Change to nil
mg.names = nil
mg.say_hi
mg.say_bye
end
Сохраним этот файл как "ri20min.rb", а затем выполним командой "ruby ri20min.rb":
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Englebert!
Goodbye Albert, Brenda, Charles, Dave, Englebert. Come
back soon!
...
...
В следующей статье мы рассмотрим еще массу интересных действий!

Ruby ч.2: Продолжаем изучать Ruby

Как продолжение этой статьи, вольный перевод кусочка руководства Ruby за 20 минут.
Как заставить Ruby приветствовать нас, не напрягая при этом наши пальцы? Очень просто, надо всего лишь объявить метод, который будет это делать:
irb(main):010:0> def h
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> nil
Код "def h" обозначает собой объявление метода. Им мы говорим Ruby, что объявляем метод с именем h. Строка "end" означает, что мы закончили объявление метода. Между этими строками находится тело метода, то есть то, что он будет делать. В данном случае - говорить "Hello World!". Фраза "nil", которой ответил нам интерпретатор, означает, что он понял, что мы закончили объявление.
Итак, попробуем запустить этот метод пару раз:
irb(main):013:0> h
Hello World!
=> nil
irb(main):014:0> h()
Hello World!
=> nil
Видите, как это просто? Вызвать метод настолько же легко, как сказать его имя Ruby. Если метод не требует параметров, то это все, что вам нужно. Однако, если вы хотите, то вы можете добавить пустые круглые скобки.
Что, если мы захотим говорить "Привет" какому-то определенному человеку, а не целому миру сразу? Достаточно всего лишь переопределить этот метод так, чтобы они принимал имя, как параметр:
irb(main):015:0> def h(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> nil
irb(main):018:0> h("Matz")
Hello Matz!
=> nil
Итак, это работает. Однако, попробуем посмотреть, как это работает.
Для начала, что такое "#{name}"? Это способ вставить что либо в строку в Ruby. Данные, находящиеся в переменной, указанной в фигурных скобках, преобразуются в строку (если они уже ей не были), а затем вставляются во внешнюю строку в том самом месте, где мы написали это выражение. Так же мы можем реализовать проверку того, написано ли имя с большой буквы:
irb(main):019:0> def h(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> nil
irb(main):022:0> h "chris"
Hello Chris!
=> nil
irb(main):023:0> h
Hello World!
=> nil
Рассмотрим, что тут происходит:
Если мы вызываем метод без скобок или не указываем параметр, то в качестве name используется параметр по умолчанию, то есть "World". В противном случае, первая буква имени делается заглавной, и выводится приветственное сообщение.
Ну а если же мы хотим создать реального привратника, который будет запоминать наше имя и встречать и провожать нас, то, возможно, стоит создать объект:
irb(main):024:0> class Greeter
irb(main):025:1> def initialize(name = "World")
irb(main):026:2> @name = name
irb(main):027:2> end
irb(main):028:1> def say_hi
irb(main):029:2> puts "Hi #{@name}!"
irb(main):030:2> end
irb(main):031:1> def say_bye
irb(main):032:2> puts "Bye #{@name}, come back soon."
irb(main):033:2> end
irb(main):034:1> end
=> nil
Здесь появляется новое ключевое слово - "class". Оно означает, что мы создаем новый класс Greeter и несколько методов для него. Также вы наверняка заметили "@name" - это переменная, доступная всем методам класса. Как вы видите, она используется методами say_hi и say_bye. Рассмотрим это в действии в следующей статье.

четверг, 3 июня 2010 г.

RoR: связь Ruby On Rails и PostgreSQL

В продолжение предыдущих статей по Ruby On Rails опишу, как настроить этот замечательный фреймворк на взаимодействие с СУБД PostrgreSQL.

среда, 2 июня 2010 г.

RoR: связываем Ruby on Rails и Apache2

Про то, как установить Ruby On Rails, я писал в этой статье. Теперь же постараюсь описать, как запускать ROR-приложения под Apache2.
Итак, приступим.

вторник, 1 июня 2010 г.

Установка Ruby On Rails на Linux Debian (Ubuntu)

Расскажу о том, как ставить  фреймворк Ruby On Rails на Linux Debian (В случае с Ubuntu действия аналогичны).
Установка Ruby
а) Из репозитория:
sudo apt-get install ruby-full build-essential
б) Из исходников
Во-первых, надо установить пакеты, которые потребуются при компиляции:
sudo apt-get install build-essential libssl-dev libreadline5-dev zlib1g-dev
Затем скачиваем исходники в тарболе:
wget ftp://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz
Распаковываем тарбол:
tar xzf stable-snapshot.tar.gz
Компилируем и устанавливаем:
$ cd ruby/
./configure
make
sudo make install
Проверяем работоспособность Ruby:
ruby -v
Должно появиться сообщение, подобное этому:
ruby 1.8.7p5000 (2009-02-22) [i686-linux]
Проверяем работоспособность библиотек:
ruby -ropenssl -rzlib -rreadline -e "puts :Hello"
В результате на экране должно появится следующее:
Hello
Установка RubyGems 
Установка через репозиторий:
Для этого необходимо выполнить следующую команду:
sudo apt-get install rubygems
Разработчки Rails не рекомендуют так делать. По их мнению, лучше устанавливать из исходников.
Установка RubyGems из исходников:
Для этого надо выполнить следующие действия:
$ cd ~
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.2.tgz
tar xzvf rubygems-1.3.2.tgz
cd rubygems-1.3.2
sudo ruby setup.rb
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
Установка Rails
Установка с помощью RubyGems:
Это самый простой способ установить Rails. Для этого надо выполнить команду:
sudo gem install rails
В Ubuntu Karmic RubyGems устанавливает Rails не корректно, в этом случае можно воспользоваться установкой из репозитория через apt-get или aptitude
Установка из репозитория:
sudo apt-get install rails