<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Reverse Engineer</title>
	<atom:link href="http://reversengineer.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://reversengineer.wordpress.com</link>
	<description>все, что вы хотели знать о программировании, но брезговали спросить</description>
	<lastBuildDate>Tue, 12 May 2009 11:34:35 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='reversengineer.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Reverse Engineer</title>
		<link>http://reversengineer.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://reversengineer.wordpress.com/osd.xml" title="Reverse Engineer" />
	<atom:link rel='hub' href='http://reversengineer.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Демаршалинг Ruby данных в Erlang</title>
		<link>http://reversengineer.wordpress.com/2009/05/06/ruby-marshal-for-erlang/</link>
		<comments>http://reversengineer.wordpress.com/2009/05/06/ruby-marshal-for-erlang/#comments</comments>
		<pubDate>Wed, 06 May 2009 13:21:48 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[новости]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[marshal]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=103</guid>
		<description><![CDATA[Для меня стал сюрпризом тот факт, что Rails держит в сессионной cookie просто сериализованный хэш session. Я ожидал там увидеть обычный key=value, но тем не менее. Пришлось написать на Erlang распаковщик для Ruby Marshal. Умеет он совсем не много, работает только с самыми простыми типами данных, но вполне подходит для стандартной Rails cookie c user_id, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=103&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Для меня стал сюрпризом тот факт, что Rails держит в сессионной cookie просто сериализованный хэш session. Я ожидал там увидеть обычный key=value, но тем не менее. Пришлось написать на Erlang распаковщик для Ruby Marshal. Умеет он совсем не много, работает только с самыми простыми типами данных, но вполне подходит для стандартной Rails cookie c user_id, например.</p>
<p><a href="http://github.com/reversengineer/erlang-ruby-marshal/tree/master" target="_blank">http://github.com/reversengineer/erlang-ruby-marshal/tree/master</a></p>
<p>Документации по этому вопросу не очень много, если кому будет интересно, то рекомендую начать со <a href="http://spec.ruby-doc.org/wiki/Marshaling" target="_blank">spec.ruby-doc.org</a> и медитировать на реализацию вот <a href="http://www.ruby-doc.org/doxygen/1.8.4/marshal_8c-source.html" target="_blank">здесь</a>. Более свежий исходник можно посмотреть в репозитории.</p>
<br /> Tagged: erlang, marshal, rails, Ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=103&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/05/06/ruby-marshal-for-erlang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Советы по Git</title>
		<link>http://reversengineer.wordpress.com/2009/04/16/git-hints/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/16/git-hints/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 19:30:48 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[hints]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=95</guid>
		<description><![CDATA[Совет #1 Возможно, вы уже успели заметить, что при работе с HTTP git весьма немногословен, особенно старые его версии. Например, в Debian Etch по умолчанию доступен git версии 1.4.*. Полагаю еще не все успели мигрировать на новый stable, Lenny. Думаю вам будет интересно узнать про одну переменную окружения, которая меня сильно выручает: ~$ GIT_CURL_VERBOSE=1 git [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=95&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>Совет #1</b></p>
<p>Возможно, вы уже успели заметить, что при работе с HTTP git весьма немногословен, особенно старые его версии. Например, в Debian Etch по умолчанию доступен git версии 1.4.*. Полагаю еще не все успели мигрировать на новый stable, Lenny. Думаю вам будет интересно узнать про одну переменную окружения, которая меня сильно выручает:</p>
<p><code>~$ GIT_CURL_VERBOSE=1 git clone http://example.com/repository.git</code></p>
<p>Увидев ее, git выдает verbose вывод от libcurl, чем удивительно облегчает процесс отладки удаленных репозиториев.</p>
<p><b>Совет #2</b></p>
<p>Если на удаленном репозитории используется HTTP Basic-Auth, то указать свой логин и пароль можно в файле ~/.netrc, в следующем формате:</p>
<p><code>machine example.com<br />
login johndoe<br />
password doepass</code></p>
<p>Только не забудьте про chmod 0600 на всякий случай.</p>
<p><b>Совет #3</b></p>
<p>Когда вы используете SSL для шифрования соединения с репозиторием git, бывают ситуации когда проверку сертификатов необходимо отключить. Это можно сделать двумя способами. Либо, как в первом совете, с помощью переменной окружения &#8211; GIT_SSL_NO_VERIFY. Либо с помощью .gitconfig:</p>
<p><code>[http]<br />
sslVerify = false</code></p>
<br /> Tagged: git, hints <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/95/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=95&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/16/git-hints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Clojure в GAE/J</title>
		<link>http://reversengineer.wordpress.com/2009/04/14/clojure-in-appengin/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/14/clojure-in-appengin/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 21:43:52 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[appengine]]></category>
		<category><![CDATA[clojure]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=93</guid>
		<description><![CDATA[По этому поводу почитать можно тут. Tagged: appengine, clojure<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=93&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>По этому поводу почитать можно <a href="http://fragmental.tw/2009/04/08/clojure-on-google-app-engine/" target="_blank">тут</a>.</p>
<br /> Tagged: appengine, clojure <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/93/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=93&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/14/clojure-in-appengin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Git с нуля</title>
		<link>http://reversengineer.wordpress.com/2009/04/13/git-from-scratch/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/13/git-from-scratch/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 10:18:03 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[bumble]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=68</guid>
		<description><![CDATA[Обилие ссылок на github.com репозитории в повествовании о JRuby on Rails в AppEngine натолкнуло меня на мысль о том, что неплохо бы рассказать как пользоваться этим самым git. Я не буду вас мучить примерами с пустыми репозиториями. Давайте попробуем решить сугубо практическую задачу &#8211; внести небольшое изменение в библиотеку Bumble. Она и будет нашим учебным [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=68&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Обилие ссылок на github.com репозитории в повествовании о <a href="http://reversengineer.wordpress.com/2009/04/11/jruby-on-rails-in-google-appengine-java/" target="_blank">JRuby on Rails в AppEngine</a> натолкнуло меня на мысль о том, что неплохо бы рассказать как пользоваться этим самым git. Я не буду вас мучить примерами с пустыми репозиториями. Давайте попробуем решить сугубо практическую задачу &#8211; внести небольшое изменение в библиотеку Bumble. Она и будет нашим учебным репозиторием. Скопировать удаленный репозиторий git можно с помощью команды clone:</p>
<p><code>~$ git clone git://github.com/olabini/bumble.git<br />
Initialized empty Git repository in /home/engineer/bumble/.git/<br />
remote: Counting objects: 5, done.<br />
remote: Compressing objects: 100% (3/3), done.<br />
remote: Total 5 (delta 0), reused 0 (delta 0)<br />
Receiving objects: 100% (5/5), done.</code></p>
<p>Git обладает очень простым и понятным интерфейсом работы с ветками. Плодить ветки в git репозитории под любые свои нужды &#8211; практика совершенно нормальная. Основная ветка репозитория называется master, получить список всех доступных вам веток можно командой branch:</p>
<p><code>~/bumble$ git branch<br />
* master</code></p>
<p>Пока вам доступна одна ветка, master. Обратите внимание на &laquo;*&raquo; справа &#8211; так обозначена текущая ветка. Давайте сделаем свою ветку, перейдем в нее и приступим к изменениям кода:</p>
<p><code>~/bumble$ git branch filters<br />
~/bumble$ git branch<br />
  filters<br />
* master<br />
~/bumble$ git checkout filters<br />
Switched to branch "filters"</code></p>
<p>Добавим в Bumble::DS::Query обертку для методов add_filter в DataStore. В исходной версии Bumble есть возможно выбирать данные только с одним фильтром &#8211; EQUAL. Кроме него, есть еще четыре фильтра, работу с которыми мы добавим в Bumble, на примере метода all:</p>
<p><code>class Query<br />
  [:equal, :greater_than, :greater_than_or_equal, :less_than, :less_than_or_equal].each do |filter|<br />
    filter = filter.to_s<br />
    class_eval &lt;&lt;-END_EVAL<br />
      def add_filter_#{filter.sub('_than', '')}(name, value)<br />
        add_filter(name, DS::Query::FilterOperator::#{filter.upcase}, value)<br />
      end<br />
    END_EVAL<br />
  end<br />
end</code></p>
<p>Теперь немного поправим метод all. Тут мы поменяем только разрабор параметра conditions, так что полный код метода я приводить не буду:</p>
<p><code>def all(conditions = {}, options = {})<br />
  q = DS::Query.new(self.name)<br />
  conditions.each do |k, v|<br />
    property_name = k.to_s<br />
    if v.is_a? Hash<br />
      v.each do |filter_op, value|<br />
        q = q.send "add_filter_#{filter_op}", property_name, value<br />
      end<br />
    else<br />
      q = q.add_filter(property_name, DS::Query::FilterOperator::EQUAL, v)<br />
    end<br />
  end<br />
# some code below</code></p>
<p>Результаты своего труда можно увидеть с помощью команды diff. Попробуйте сами, заодно посмотрите man. Теперь нам нужно каким-то образом изменения в своей ветке зафиксировать, перенести в основную и пользоваться в своих проектах. Конечно, в git есть commit, но сам процесс несколько отличается от обычных систем контроля версий (я имею ввиду CVS, Subversion).</p>
<p>Сперва, вы должны добавить нужные файлы для commit командой add. Узнать имена этих файлов можно не только из diff, но командой status:</p>
<p><code>~/bumble$ git status<br />
# On branch filters<br />
# Changed but not updated:<br />
#   (use "git add ..." to update what will be committed)<br />
#   (use "git checkout -- ..." to discard changes in working directory)<br />
#<br />
#	modified:   bumble/bumble.rb<br />
#<br />
no changes added to commit (use "git add" and/or "git commit -a")<br />
~/bumble$ git add bumble/bumble.rb<br />
~/bumble$ git commit -m 'new filters and all() refactored'<br />
[filters]: created 300e887: "new filters and all() refactored"<br />
 1 files changed, 39 insertions(+), 21 deletions(-)</code></p>
<p>Номер ревизии, как впрочем и количество измененных строк у вас могут быть совсем другими. Теперь перенесем наши изменения в основную ветку:</p>
<p><code>~bumble/$ git checkout master<br />
Switched to branch "master"<br />
~bumble/$ git merge filters<br />
Updating 96bdfc0..300e887<br />
Fast forward<br />
 bumble/bumble.rb |   60 +++++++++++++++++++++++++++++++++++------------------<br />
 1 files changed, 39 insertions(+), 21 deletions(-)<br />
~bumble/$ git status<br />
# On branch master<br />
# Your branch is ahead of 'origin/master' by 1 commit.<br />
#<br />
nothing to commit (working directory clean)</code></p>
<p>Ну вот, надеюсь вы догадались, что переходить между ветками можно командой checkout, а перенести изменения &#8211; merge. В status вы видете, что ваш локальный репозиторий &laquo;опережает&raquo; основную ветку на удаленном сервере на один commit.</p>
<p>Конечно, рассмотренные выше примеры работы с git довольно примитивны. К сложным вопросам мы еще вернемся, а ответы к несложным я надеюсь читатель найдет в документации. Мне лишь хотелось вас заинтересовать.</p>
<br /> Tagged: appengine, bumble, git, Ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=68&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/13/git-from-scratch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaScript фреймворк Helma в GAE/J</title>
		<link>http://reversengineer.wordpress.com/2009/04/12/helma-in-appengine/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/12/helma-in-appengine/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 18:49:32 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[appengine]]></category>
		<category><![CDATA[datamapper]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[helma]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=71</guid>
		<description><![CDATA[Нашел интересную заметку у Roberto Saccon по поводу запуска Helma в GAE/J. Helma &#8211; это server-side фреймворк, написанный на Java. Языком для разработки выступает JavaScript, что делает этот фреймворк крайне интересным. Мне кажется, GAE/J своим стартом дал дорогу многим интересным проектам, не только JRuby. Конечно все целиком зависит от задач, но Sinatra в GAE/J смотриться [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=71&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Нашел интересную заметку у <a href="http://www.rsaccon.com/2009/04/helma-ng-serverside-javascript.html" target="_blank">Roberto Saccon</a> по поводу запуска Helma в GAE/J. Helma &#8211; это server-side фреймворк, написанный на Java. Языком для разработки выступает JavaScript, что делает этот фреймворк крайне интересным.</p>
<p>Мне кажется, GAE/J своим стартом дал дорогу многим интересным проектам, не только JRuby. Конечно все целиком зависит от задач, но Sinatra в GAE/J смотриться куда более органично, нежели Rails. А упор на BigTable должен поднять интерес к таким проектам как DataMapper. В ActiveRecord DataStore уже не влезет.</p>
<br /> Tagged: appengine, datamapper, datastore, helma, javascript, jruby, sinatra <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=71&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/12/helma-in-appengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Запуск JRuby on Rails в Google AppEngine Java</title>
		<link>http://reversengineer.wordpress.com/2009/04/11/jruby-on-rails-in-google-appengine-java/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/11/jruby-on-rails-in-google-appengine-java/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 13:04:42 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[appengine]]></category>
		<category><![CDATA[bumble]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[warble]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=19</guid>
		<description><![CDATA[Я не устоял перед соблазном и решил попробовать запустить JRuby on Rails в AppEngine. На этот шаг меня вдохновил целый ряд постов в разных блогах и мое повествование будет неполным без них: JRuby on Rails on Google App Engine Running Sinatra apps on Google AppEngine (Java) JRuby on Google AppEngine: First Impressions JRuby on Rails [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=19&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Я не устоял перед соблазном и решил попробовать запустить JRuby on Rails в AppEngine. На этот шаг меня вдохновил целый ряд постов в разных блогах и мое повествование будет неполным без них:</p>
<ul>
<li><a href="http://olabini.com/blog/2009/04/jruby-on-rails-on-google-app-engine/" target="_blank">JRuby on Rails on Google App Engine</a></li>
<li><a href="http://blog.bigcurl.de/2009/04/running-sinatra-apps-on-google.html" target="_blank">Running Sinatra apps on Google AppEngine (Java)</a></li>
<li><a href="http://blog.nicksieger.com/articles/2009/04/11/jruby-on-google-appengine-first-impressions" target="_blank">JRuby on Google AppEngine: First Impressions</a></li>
<li><a href="http://www.dominixz.com/blog/programming-solution/jruby-on-rails-%E0%B8%9A%E0%B8%99-google-app-engine/" target="_blank">JRuby on Rails Google App Engine</a>, жаль язык автора остался для меня загадкой</li>
</ul>
<p>По правде, до этого пользоваться JRuby мне приходилось только один раз, да и то, ради любопытства. Думаю многим JRuby знаком так же &laquo;хорошо&raquo;, поэтому начнем с самого начала. А для начала нам понадобиться свежий JRuby. Вытягиваем его из репозитория и собираем:</p>
<p><code>svn co http://svn.codehaus.org/jruby/trunk/jruby<br />
cd jruby<br />
ant &amp;&amp; ant jar-complete<br />
</code></p>
<p>Использовать rake build тоже можно, но результатом его работы будет только собраный JRuby. А нам с вами нужен еще jruby-complete.jar, чуть позже мы вернемся к нему. Пока же для удобства пропишите себе путь к jruby/bin и продолжим &#8211; установим Rails и сделаем скелет приложения:</p>
<p><code>jruby -S gem install rails<br />
jruby -S rails depot<br />
</code></p>
<p>Замораживаем все gems и удаляем в них тесты. Как я уже писал, <a href="http://reversengineer.wordpress.com/2009/04/11/appengine-restrictions/">GAE/J имеет ряд ограничений</a>, в том числе и на число файлов. Их количество не должно привышать 1000 штук. Надеюсь, это временно ограничение. ActiveRecord нам тоже больше не нужен, на GAE/J применения ему нет, за компанию выбросим и ActionMailer с ActiveResource:</p>
<p><code>jruby -S rake rails:freeze:gems<br />
rm -rf vendor/rails/actionpack/test/<br />
rm -rf vendor/rails/activerecord/<br />
rm -rf vendor/rails/actionmailer/<br />
rm -rf vendor/rails/activeresource/<br />
</code></p>
<p>Поскольку от ActiveRecord, ActionMailer и ActiveResource мы избавились, будет разумным сразу поправить config/environment.rb:</p>
<p><b>environment.rb</b><br />
<code>config.frameworks -= [ :active_record, :active_resource, :action_mailer ]<br />
</code></p>
<p>Пока оставим Rails и займемся SDK для Google AppEngine Java. Для начала, вам следует скачать его с <a href="http://code.google.com/appengine/downloads.html" target="_blank">code.google.com</a>, после разверните его в удобное для вас место и пропишите пути к скриптам в appengine-java-sdk/bin.</p>
<p>Из поставки GAE/J SDK нам понадобиться библиотека appengine-java-sdk/lib/impl/appengine-api.jar. Скопируйте ее в RAILS_ROOT/lib. Туда же нужно будет положить jruby-complete.jar из jruby/lib и jruby-jrack.jar. Последний можно найти в репозитории jruby-rack:</p>
<p><code>git clone git://github.com/nicksieger/jruby-rack.git<br />
cd jruby-rack<br />
jruby -S rake SKIP_SPECS=true<br />
</code></p>
<p>Поскольку jruby-complete.rb слишком большой для GAE/J, воспользуемся скриптом Ola Bini, позволяющим разбить его на две части &#8211; jruby-core.jar и ruby-stdlib.jar:</p>
<p><b>fix_libs.sh</b><br />
<code>#!/bin/sh<br />
rm -rf jruby-core.jar<br />
rm -rf ruby-stdlib.jar<br />
rm -rf tmp_unpack<br />
mkdir tmp_unpack<br />
cd tmp_unpack<br />
jar xf ../jruby-complete.jar<br />
cd ..<br />
mkdir jruby-core<br />
mv tmp_unpack/org jruby-core/<br />
mv tmp_unpack/com jruby-core/<br />
mv tmp_unpack/jline jruby-core/<br />
mv tmp_unpack/jay jruby-core/<br />
mv tmp_unpack/jruby jruby-core/<br />
cd jruby-core<br />
jar cf ../jruby-core.jar .<br />
cd ../tmp_unpack<br />
jar cf ../ruby-stdlib.jar .<br />
cd ..<br />
rm -rf jruby-core<br />
rm -rf tmp_unpack<br />
rm -rf jruby-complete.jar<br />
</code></p>
<p>Этот скрипт можно найти в репозитории Ola Bini <a href="http://github.com/olabini/yarbl" target="_blank">YARBL</a>. Для замены ActiveRecord нужно будет установить <a href="http://github.com/olabini/bumble" target="_blank">Bumble</a> из репозитория. Добавьте загрузку Bumble в environment.rb. В enviroments/session_store.rb отключите сессии. Готового решения для Rails 2.3.2 пока нет (узнать подробней об этом можно <a href="http://wiki.jruby.org/wiki/Rails_2.3.2" target="_blank">здесь</a>). Пользоваться cookie для хранения сессий пока нельзя, нет обвязок для java.security и javax.crypto.</p>
<p>Библиотеки все собраны и для запуска нам осталось совсем немного. Установите warbler и сконфигурируйте его. Делать это надо в RAILS_ROOT и обратите внимание на коварство разработчиков &#8211; gem называется warbler, а скрипт warble:</p>
<p><code>jruby -S gem install warbler<br />
jruby -S warble pluginize<br />
jruby -S warble config<br />
</code></p>
<p>Конфигурация находиться в config/warble.rb:</p>
<p><b>warble.rb</b><br />
<code>config.includes = FileList["appengine-web.xml", "datastore-indexes.xml"]<br />
config.webxml.jruby.min.runtimes = 1<br />
config.webxml.jruby.max.runtimes = 2<br />
</code></p>
<p>Файлы appengine-web.xml и datastore-index.xml стандартные для приложений GAE/J. В первом доступна конфигурация приложения, во втором &#8211; индексы для DataStore. В нашем случае мы воспользуемся самым простыми вариантами этих двух файлов:</p>
<p><b>appengine-web.xml</b><br />
<code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;appengine-web-app xmlns="http://appengine.google.com/ns/1.0"&gt;<br />
  &lt;application&gt;depot&lt;/application&gt;<br />
  &lt;version&gt;2&lt;/version&gt;<br />
  &lt;static-files /&gt;<br />
  &lt;resource-files /&gt;<br />
  &lt;sessions-enabled&gt;true&lt;/sessions-enabled&gt;<br />
  &lt;system-properties&gt;<br />
    &lt;property name="jruby.management.enabled" value="false" /&gt;<br />
    &lt;property name="os.arch" value="" /&gt;<br />
    &lt;property name="jruby.compile.mode" value="JIT"/&gt; &lt;!-- JIT|FORCE|OFF --&gt;<br />
    &lt;property name="jruby.compile.fastest" value="true"/&gt;<br />
    &lt;property name="jruby.compile.frameless" value="true"/&gt;<br />
    &lt;property name="jruby.compile.positionless" value="true"/&gt;<br />
    &lt;property name="jruby.compile.threadless" value="false"/&gt;<br />
    &lt;property name="jruby.compile.fastops" value="false"/&gt;<br />
    &lt;property name="jruby.compile.fastcase" value="false"/&gt;<br />
    &lt;property name="jruby.compile.chainsize" value="500"/&gt;<br />
    &lt;property name="jruby.compile.lazyHandles" value="false"/&gt;<br />
    &lt;property name="jruby.compile.peephole" value="true"/&gt;<br />
 &lt;/system-properties&gt;<br />
&lt;/appengine-web-app&gt;<br />
</code></p>
<p><b>datastore-indexes.xml</b><br />
<code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;datastore-indexes autoGenerate="true"&gt;<br />
&lt;/datastore-indexes&gt;<br />
</code></p>
<p>Теперь можно попробовать запустить тестовый сервер GAE/J:</p>
<p><code>jruby -S warble<br />
dev_appserver.sh tmp/war<br />
</code></p>
<p>Если все в порядке, то по адресу http://localhost:8080 вам будет доступен тестовый сервер GAE/J с вашим приложением.</p>
<br /> Tagged: appengine, bumble, java, jruby, rack, rails, warble <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=19&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/11/jruby-on-rails-in-google-appengine-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Ограничения AppEngine</title>
		<link>http://reversengineer.wordpress.com/2009/04/11/appengine-restrictions/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/11/appengine-restrictions/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 10:27:54 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[appengine]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=34</guid>
		<description><![CDATA[Nick Sieger в блоге рассказал о своих впечатлениях от работы с GAE/J. Там же упомянуты ряд ограничений для GAE/J: No regular net/http, restclient, ActiveResource usage. Google has a URL fetch library, and has hooked up Java’s HttpURLConnection to it, but none of the Ruby URL-fetching libraries use it. No ActiveRecord. ‘Nuff said. For some folks, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=34&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nick Sieger в блоге рассказал о своих <a href="http://blog.nicksieger.com/articles/2009/04/11/jruby-on-google-appengine-first-impressions" target="_blank">впечатлениях от работы с GAE/J</a>. Там же упомянуты ряд ограничений для GAE/J:</p>
<blockquote>
<ul>
<li>No regular net/http, restclient, ActiveResource usage. Google has a URL fetch library, and has hooked up Java’s HttpURLConnection to it, but none of the Ruby URL-fetching libraries use it.</li>
<li>No ActiveRecord. ‘Nuff said. For some folks, that’s a welcome change, but wrapping your head around AppEngine’s BigTable-backed data store takes some thought. You just can’t view it like a SQL engine.</li>
<li>No RMagick/ImageScience/attachment_fu. No ImageVoodoo even (no javax.image APIs). Google has it’s own image manipulation API.</li>
<li>Startup/first request processing time is currently an issue. It’s not clear yet how long Google keeps JVMs warm, so if your application is idle, the first few hits to it return 500 errors. I can only assume Google has a plan to address this.</li>
<li>Crypto. Although java.security and javax.crypto APIs are apparently whitelisted, I haven’t had time to figure out how to leverage them. JRuby’s jruby-openssl gem does not work, which means things like digest aren’t available. That’s currently a blocker for Rails’ cookie session store.</li>
<li>1000-files limit per application. In order to work around this, I ended up jarring up all the Rails gems when deploying a Rails application.</li>
</ul>
</blockquote>
<p>Что касается первого пункта, <a href="http://blog.baswilbers.nl/" target="_blank">Bas Wilbers</a> подготовил несложную библиотеку для работы с <a href="http://code.google.com/appengine/docs/java/urlfetch/" target="_blank">URL Fetch API</a> в GAE/J. Найти ее вы можете на github.com: <a href="http://github.com/Basaah/urlfetch-gae" target="_blank">urlfetch-gae</a>.</p>
<p>Вторая интересная библиотека Bas Wilbers &#8211; интерфейс к GAE/J MailService, <a href="http://github.com/Basaah/pony-gae" target="_blank">pony-gae</a>. Безусловно, начилие этих библиотек, а так же Beeu и Bumble от Ola Bini не решает всех текущих проблем, но запускать JRuby on Rails приложения это совсем не мешает.</p>
<br /> Tagged: appengine, jruby, rails, Ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=34&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/11/appengine-restrictions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Java в Google AppEngine</title>
		<link>http://reversengineer.wordpress.com/2009/04/10/java-in-google-appengine/</link>
		<comments>http://reversengineer.wordpress.com/2009/04/10/java-in-google-appengine/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 12:55:07 +0000</pubDate>
		<dc:creator>Reverse Engineer</dc:creator>
				<category><![CDATA[appengine]]></category>
		<category><![CDATA[новости]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rhino]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://reversengineer.wordpress.com/?p=3</guid>
		<description><![CDATA[Наверное, про это не написал только ленивый. Так вот я ленивый, поэтому сообщу вам только сегодня – Google добавил поддержку Java в свой замечательный AppEngine. На практике, для не-Java-программиста это дает возможность использовать ряд языков доступных для JVM: JRuby Clojure Scala и еще кучу интересного вроде Rhino К слову, реализация Java в GAE полноценная, по [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=3&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Наверное, про это не написал только ленивый. Так вот я ленивый, поэтому сообщу вам только сегодня – Google добавил поддержку Java в свой замечательный AppEngine. На практике, для не-Java-программиста это дает возможность использовать ряд языков доступных для JVM:</p>
<ul>
<li>JRuby</li>
<li>Clojure</li>
<li>Scala</li>
<li>и еще кучу интересного вроде Rhino</li>
</ul>
<p>К слову, реализация Java в GAE полноценная, по крайней мере если верить заявлениям <a href="http://olabini.com/blog/2009/04/java-on-google-app-engine/" target="_blank">Ola Bini</a>. Он уже успел запустить там <a href="http://olabini.com/blog/2009/04/jruby-on-rails-on-google-app-engine/" target="_blank">JRuby on Rails</a> и попробовать собственную замену для ActiveRecord &#8211; Bumble. Его коллега Samuel Goebert сделал <a href="http://blog.bigcurl.de/2009/04/small-sinatra-app-in-google-app-engine.html" target="_blank">небольшое приложение</a> на Sinatra и запустил его в Google AppEngine.</p>
<p>Пока свежих новостей нет, но результаты первых двух дней впечатляют. Для JRuby настал звездный час, впервые с момента своего рождения эта реализация Ruby стала реально востребованна. Такой вот неожиданностью стал запуск Java в GAE для Rails-сообщества.</p>
<br /> Tagged: appengine, clojure, java, jruby, rails, rhino, Ruby, scala, sinatra <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/reversengineer.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/reversengineer.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/reversengineer.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/reversengineer.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/reversengineer.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/reversengineer.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/reversengineer.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/reversengineer.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=reversengineer.wordpress.com&amp;blog=7307207&amp;post=3&amp;subd=reversengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://reversengineer.wordpress.com/2009/04/10/java-in-google-appengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/595299fcca331b735cda84912b4d4698?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Reverse Engineer</media:title>
		</media:content>
	</item>
	</channel>
</rss>
