<?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/"
	>

<channel>
	<title>Technology@Work &#187; svn</title>
	<atom:link href="http://techwork.ru/tag/svn/feed/" rel="self" type="application/rss+xml" />
	<link>http://techwork.ru</link>
	<description>Русскоязычная информация о Cloud Computing и других технологиях</description>
	<lastBuildDate>Wed, 16 Sep 2009 09:34:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dojo 1.2 и Django 1.0 под Google App Engine версии 1.1.3</title>
		<link>http://techwork.ru/2008/09/23/dojo-12-and-django-10-on-google-app-engine-113/</link>
		<comments>http://techwork.ru/2008/09/23/dojo-12-and-django-10-on-google-app-engine-113/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 09:01:18 +0000</pubDate>
		<dc:creator>techworkru</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://techworkru.wordpress.com/?p=458</guid>
		<description><![CDATA[Вместе с новым релизом Google App Engine версии 1.1.3 появилась возможность запустить библиотеку Dojo под App Engine.
Основной проблемой является то, что стандартный пакет библиотеки Dojo не может быть загружен на GAE из-за превышения существующего лимита платформы в 1000 файлов. Django имеет ту же самую проблему. Решением проблемы в лоб является ручное удаление ненужных файлов, что [...]]]></description>
			<content:encoded><![CDATA[<p>Вместе с новым релизом Google App Engine версии 1.1.3 появилась возможность запустить библиотеку Dojo под App Engine.</p>
<p>Основной проблемой является то, что стандартный пакет библиотеки Dojo не может быть загружен на GAE из-за превышения существующего лимита платформы в 1000 файлов. Django имеет ту же самую проблему. Решением проблемы в лоб является ручное удаление ненужных файлов, что позволяет уложиться примерно в 700 файлов приложения.</p>
<p>С подобной проблемой столкнулись разработчики платформы LittleShoot, когда попытались запустить свое API &laquo;P2P 2.0&#8243;. Подразумевалось, что другие сайты будут выполять JavaScript запросы к сервису, что потребовало бы реализации кросс-доменного взаимодействия с библиотекой Dojo и привело бы к увеличению кода еще на 500 файлов, снова превысив лимит в 1000 файлов.</p>
<p>Благодаря вышедшей недавно платформе GAE версии 1.1.3, в которой анонсирован модуль “<a href="http://code.google.com/p/googleappengine/source/browse/trunk/google/appengine/ext/zipserve/__init__.py">zipserve</a>”, появилась возможность работы со статическими файлами, помещенными в zip-архив. Гвидо Ван Россум (автор Python) использовал тот же самый подход для работы Django со своим замечательным приложением <a href="http://code.google.com/p/rietveld/">Rietveld</a>, но только для подгрузки исполняемого кода. <span id="more-458"></span></p>
<p>Для работы Dojo с zipserve, достаточно просто модифицировать файл app.yaml и включить в него подобную конфигурацию:</p>
<blockquote><p>- url: /dojo/.*<br />
script: $PYTHON_LIB/google/appengine/ext/zipserve</p>
<p>- url: /dijit/.*<br />
script: $PYTHON_LIB/google/appengine/ext/zipserve</p>
<p>- url: /dojox/.*<br />
script: $PYTHON_LIB/google/appengine/ext/zipserve</p></blockquote>
<p>Это означает, что мы загружаем файлы dojo.zip, dijit.zip и dojox.zip в каталог верхнего уровня (тот же, куда помещен файл app.yaml). Необходимо принять во внимание, что следует создать несколько zip файлов, учитывая лимит платформы на размер самого файла (1 мегабайт). Имя каждого zip файла используется как имя каталога при извлечении адреса из URL. Таким образом, запрос к http://beta.littleshoot.org/dojo/dojo.js, к примеру, подгрузит файл dojo.js из dojo.zip (а не из каталога dojo файла dojo.zip). Ниже приведен пример скрипта, создающего zip файлы:</p>
<pre>
<div class="bash" style="font-family:monospace;color:#000000;"><span style="font-style:italic;color:#808080;">#!/usr/bin/env bash
</span>
<span style="color:#b1b100;">function</span> die<span style="color:#66cc66;">(</span><span style="color:#66cc66;">)</span>
<span style="color:#66cc66;">{</span>
<span style="color:#000066;">echo</span> $*
<span style="color:#000066;">exit</span> <span style="color:#cc66cc;">1</span>
<span style="color:#66cc66;">}</span>

<span style="color:#000066;">cd</span> static/js
<span style="color:#0000ff;">dirs=</span>”dojo dijit dojox littleshoot”

<span style="color:#b1b100;">for</span> x <span style="color:#b1b100;">in</span> <span style="color:#0000ff;">$dirs</span>
<span style="color:#b1b100;">do</span>
<span style="color:#000066;">cd</span> <span style="color:#0000ff;">$x</span> || die “Could not <span style="color:#000066;">cd</span> to <span style="color:#0000ff;">$x</span>”
<span style="color:#000066;">echo</span> “Building zip <span style="color:#b1b100;">for</span> <span style="color:#0000ff;">$x</span>”
<span style="color:#0000ff;">zf=</span>../../../<span style="color:#0000ff;">$x</span>.zip
rm <span style="color:#0000ff;">$zf</span>
zip -rv <span style="color:#0000ff;">$zf</span> * || die “Could not create zip”
<span style="color:#000066;">cd</span> ..
<span style="font-style:italic;color:#808080;"># Удаляем все содержимое, так как его не требуется загружать
</span> <span style="font-style:italic;color:#808080;"># в платформу.
</span> rm -rf <span style="color:#0000ff;">$x</span>
<span style="color:#b1b100;">done</span>

<span style="color:#000066;">exit</span> <span style="color:#cc66cc;">0</span></div>
</pre>
<p>Даже находясь в раздельных zip файлах, dijit и dojox будут близки к максимальному ограничению на размер файла в 1 мегабайт. Мы используем утилиту rsync, в параметрах которой задается список файлов, какие можно исключить. Ниже приведена функция для командного процессора bash, выполняющая эти действия (внимательно проверьте, чтобы не были исключены нужные пакеты!):</p>
<blockquote><p>function excludeRsync<br />
{<br />
rsync –exclude .svn/ \<br />
–exclude test/ \<br />
–exclude tests/ \<br />
–exclude demo/ \<br />
–exclude demos/ \<br />
–exclude soria/ \<br />
–exclude nihilo/ \<br />
–exclude grid/ \<br />
–exclude charting/ \<br />
–exclude util/ \<br />
–exclude analytics/ \<br />
–exclude collections/ \<br />
–exclude README* \<br />
–exclude *.psd \<br />
–exclude *.uncompressed.js \<br />
–exclude *.commented.css \<br />
–exclude dijit/templates \<br />
–exclude dijit/form/templates \<br />
–exclude dijit/layout/templates \<br />
–exclude *silverlight* \<br />
–exclude gfx3d/ \<br />
–exclude dojo/_base/ \<br />
–exclude dojo/_base.js \<br />
–exclude dojo/build.txt \<br />
–exclude functional/ \<br />
–exclude off/ \<br />
–exclude presentation/ \<br />
–exclude sketch/ \<br />
–exclude storage/ \<br />
–exclude wire/ \<br />
–exclude data/ \<br />
–exclude dtl/ \</p>
<p>-avz $tmpDir/js $releaseDir || die “Could not sync”</p>
<p>}</p></blockquote>
<p>Запуск скрипта с rsync необходимо осуществлять после билда файлов dojo. В нашем случае <a href="http://dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/package-system-and-custom-builds">билд dojo</a> помещает все файлы в каталог “$tmpDir/js”, указанный в последней строчке параметров rsync.</p>
<p>Для использования Django версии 1.0 рекомендуется скопировать настройки с проекта <a href="http://code.google.com/p/rietveld/">Rietveld</a> от Гвидо. Возможно вам захочется настроить <a href="http://code.google.com/p/google-app-engine-django/">Google App Engine Django Helper</a>, однако на момент написания статьи в нем не была заявлена поддержка версии 1.0 Django. Мы использовали код от Гвидо &#8211; в общем случае достаточно файлов Makefile, make_release.sh, settings.py и main.py. Также я подправил его скрипт rietveld.py, переделав его в littleshoot.py. Все эти файлы можно найти в svn проекта Rietveld <a href="http://code.google.com/p/rietveld/source/browse/#svn/trunk">здесь</a>.</p>
<p>Мы выполняем загрузку как Django, так и Dojo через svn. Нижеприведенные команды необходимо выполнять точно в тех каталогах, куда нужно поместить соответственно Django и Dojo.</p>
<blockquote><p>svn –editor-cmd=vim pe svn:externals .</p></blockquote>
<p>Для загрузки Dojo:</p>
<blockquote><p>dojo http://svn.dojotoolkit.org/src/tags/release-1.2.0b2/</p></blockquote>
<p>Для загрузки Django:</p>
<blockquote><p>django http://code.djangoproject.com/svn/django/trunk/django</p></blockquote>
<p>После выполнения команды “svn up” в каталог dojo будет загружен Dojo версии 1.2 beta 2, в каталог django транковая версия Django.</p>
<p>Если вы выполнили все инструкции, приведенные в статье, то получите последние версии библиотек Dojo и Django, работающие в Google App Engine. Теперь можно засучить рукава и начать разработку!</p>
]]></content:encoded>
			<wfw:commentRss>http://techwork.ru/2008/09/23/dojo-12-and-django-10-on-google-app-engine-113/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Бесплатный Subversion сервер для работы с Google App Engine</title>
		<link>http://techwork.ru/2008/08/03/free-svn-server/</link>
		<comments>http://techwork.ru/2008/08/03/free-svn-server/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 08:42:34 +0000</pubDate>
		<dc:creator>techworkru</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://techworkru.wordpress.com/?p=95</guid>
		<description><![CDATA[Практически не бывает таких случаев, когда нет смысла вести разработку приложения без использования какой-либо системы управления версиями кода. В этой статье мы рассмотрим наиболее распространенную систему Subversion (или сокращенно SVN) и возможность использования ее в процессе создания приложения платформы Google App Engine.
Несмотря на то, что App Engine позволяет гибко настраивать работу одновременно нескольких версий приложений, [...]]]></description>
			<content:encoded><![CDATA[<p>Практически не бывает таких случаев, когда нет смысла вести разработку приложения без использования какой-либо системы управления версиями кода. В этой статье мы рассмотрим наиболее распространенную систему <a href="http://ru.wikipedia.org/wiki/Subversion" target="_blank">Subversion</a> (или сокращенно SVN) и возможность использования ее в процессе создания приложения платформы Google App Engine.</p>
<p>Несмотря на то, что App Engine позволяет гибко настраивать работу одновременно нескольких версий приложений, участвовать в процессе его создания сразу многим разработчикам, все таки версионные возможности платформы <strong><em>пока </em></strong>достаточно ограничены. Для удобной работы с кодом компания Google рекомендует использовать внешнюю систему управления версиями, такую как CVS или Subversion. Так как программа CVS по меркам ИТ является уже старичком, мы сфокусируемся на ее потомке &#8211; Subversion, который в данный момент является наиболее распространенной системой контроля версий среди разработчиков.</p>
<p>Допустим вы (разработчик на языке Python) и два ваших коллеги (разработчик на JavaScript и HTML-дизайнер)  пишете новое приложение под App Engine, которое должно оказаться новой бомбой в Интернете. Все трое находятся в различных городах, работают на собственных ноутбуках в разных coworking центрах. Соответственно App Engine выбрана платформой неслучайно, а позволяет в случае успеха масштабировать приложение, так как это необходимо (а в случае провала &#8211; разработчики рискуют только своим собственным временем, в отличии от многих стартапов, в бизнес плане которых заложены огромные суммы на приобретение серверного оборудования). Было бы интересно использовать аналогичный web-сервис и для размещения кода проекта и управления его версиями.</p>
<p>После анализа текущей ситуации на рынке On-Demand SVN систем я пришел к выводу, что пока самым вкусным вариантом является использование сервиса компании <a href="http://www.assembla.com" target="_blank">Assembla</a>. Судите сами, в бесплатной версии даются: 200 мегабайт пространства под код, неограниченное число разработчиков, системы управления версиями <a href="http://ru.wikipedia.org/wiki/Subversion" target="_blank">Subversion</a>, <a href="http://ru.wikipedia.org/wiki/Mercurial" target="_blank">Mercurial</a>, <a href="http://ru.wikipedia.org/wiki/Git" target="_blank">GIT</a>, багтрегинг, wiki, чат и многие другое. В случае необходимости можно проапгрейдить за $12.5 и $150 в месяц до 5 и 50 гигабайт пространства соответственно и получить дополнительные возможности (автоматический бэкап на Amazon S3, поддержку и прочее).</p>
<p>Давайте <a href="https://www.assembla.com/user/signup" target="_blank">зарегистрируемся</a>. После чего мы увидим главный экран системы:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla12.jpg"><img class="size-medium wp-image-96 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla12.jpg?w=277" alt="" width="277" height="300" /></a></p>
<p>Щелкнем по ссылке <strong>Manage spaces</strong> и на открывшемся экране добавим новую область для проекта, нажав на кнопку<strong> Create new space</strong>:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla21.jpg"><img class="size-medium wp-image-97 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla21.jpg?w=300" alt="" width="300" height="122" /></a></p>
<p>Задаем общее название области в поле <strong>Space name</strong> и используемое URL проекта в поле <strong>URL name</strong>. Второе значение необходимо указать такое, чтобы никем еще не использовалось. В завершении для активации в этой области сервера Subversion ставим галочку в поле <strong>Software developers (integrated)</strong>, после чего жмем кнопку <strong>Next</strong>. В появившемся экране убеждаемся, что в параметре <strong>Allow for public access</strong> стоит значение <strong>None</strong> (мы же не хотим, чтобы код нашего проекта видели все кто захочет?):</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla51.jpg"><img class="size-medium wp-image-98 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla51.jpg?w=287" alt="" width="287" height="300" /></a></p>
<p>При необходимости можно задать другие параметры, в том числе адреса электронной почты наших коллег, для которых мы хотим отправить приглашения на подключение к этой системе. С помощью кнопки <strong>Next &gt;&gt;</strong> проходим все установочные экраны и создаем новую область. На экране, представленном ниже, мы видим, что теперь получить доступ к SVN репозиторию можно по url: http://svn.assembla.com/svn/superproject:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla61.jpg"><img class="size-medium wp-image-99 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla61.jpg?w=276" alt="" width="276" height="300" /></a></p>
<p>Допустим, мы используем Eclipse с установленным плагином для SVN. Если в вашей среде плагин еще не установлен, то можно обратиться к <a href="http://techwork.ru/2008/08/16/install-svn-in-eclipse/" target="_blank">статье о его подключении к Eclipse</a>. Переходим в перспективу SVN и добавляем наш новый репозиторий:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla71.jpg"><img class="size-medium wp-image-100 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla71.jpg?w=300" alt="" width="300" height="223" /></a></p>
<p>Нам предложат ввести имя пользователя и пароль для доступа к репозиторию. Вводим те данные, которые были указаны при регистрации:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla81.jpg"><img class="size-medium wp-image-101 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla81.jpg?w=300" alt="" width="300" height="148" /></a></p>
<p>Далее щелкаем кнопку <strong>Next</strong> и система выполнит загрузку уже существующих файлов:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla91.jpg"><img class="size-medium wp-image-102 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla91.jpg?w=300" alt="" width="300" height="223" /></a></p>
<p>Далее мы захотим поместить в наш репозиторий унаследованные проекты, которые мы раньше не вели в системе управления версиями. Щелкнем правой кнопкой мыши на области <strong>SVN Repositories </strong>и выбираем пункт <strong>New remote folder</strong>. Указываем название базового каталога, где будет храниться наш проект (к примеру, <strong>site.ru</strong>). Затем щелкнув по вновь созданному каналогу правой кнопкой мыши, выбрем из меню пункт <strong>Import</strong>. В появившемся окне задаем каталог с проектом и, при необходимости, дополнительные параметры:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla101.jpg"><img class="size-medium wp-image-103 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla101.jpg?w=300" alt="" width="300" height="223" /></a></p>
<p>Началась операция загрузки:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla111.jpg"><img class="size-medium wp-image-104 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla111.jpg?w=300" alt="" width="300" height="143" /></a></p>
<p>Проверим на другом компьютере, что файлы были загружены в SVN. Например, выполняем команду <em>checkout</em>: <strong>svn co http://svn.assembla.com/svn/superproject &#8211;username widgetii</strong>:</p>
<p style="text-align:center;"><a href="http://techwork.ru/wp-content/uploads/2008/08/assembla141.jpg"><img class="size-medium wp-image-105 aligncenter" src="http://techwork.ru/wp-content/uploads/2008/08/assembla141.jpg?w=300" alt="" width="300" height="180" /></a></p>
<p>Все OK, теперь мы можем использовать свой собственный SVN сервер, не заморачиваясь с его настройкой и поддержанием работы.</p>
]]></content:encoded>
			<wfw:commentRss>http://techwork.ru/2008/08/03/free-svn-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
