<?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>Platogo Blog &#187; Adobe</title>
	<atom:link href="http://blog.platogo.com/category/adobe/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.platogo.com</link>
	<description></description>
	<lastBuildDate>Thu, 29 Jul 2010 10:11:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Genie in a bottle</title>
		<link>http://blog.platogo.com/2009/05/genie-in-a-bottle/</link>
		<comments>http://blog.platogo.com/2009/05/genie-in-a-bottle/#comments</comments>
		<pubDate>Wed, 13 May 2009 09:54:15 +0000</pubDate>
		<dc:creator>Christoph Atteneder</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Platogo]]></category>

		<guid isPermaLink="false">http://blog.platogo.com/?p=150</guid>
		<description><![CDATA[During the development of one of our new games for Platogo we got our hands dirty with Adobe´s Pixel Bender technology. In short, Pixel Bender is a technology to create programmable effects that run fast. They can be used for Flash, Photoshop and After Effects.  You can create awesome effects with just a few [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.platogo.com%2F2009%2F05%2Fgenie-in-a-bottle%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.platogo.com%2F2009%2F05%2Fgenie-in-a-bottle%2F" height="61" width="51" /></a></div><p><a href="http://blog.platogo.com/wp-content/uploads/pixelbender.png" rel="lightbox"><img class="alignleft thumbs" style="float: left" title="Pixel Bender" src="http://blog.platogo.com/wp-content/uploads/pixelbender.png" alt="Pixel Bender" width="100" height="100" /></a>During the development of one of our new games for Platogo we got our hands dirty with <a href="http://labs.adobe.com/technologies/pixelbender" target="_blank">Adobe´s Pixel Bender technology</a>. In short, Pixel Bender is a technology to create programmable effects that run fast. They can be used for Flash, Photoshop and After Effects.  You can create awesome effects with just a few lines of code. As a simple example we tried re-creating Apple´s Genie Effect for windows closure.<span id="more-150"></span>The current implementation only needs 10 lines of code and is not even optimized. If there is interest we will post the final animated effect including the Pixel Bender Code in a few days.  So don´t wait any longer, download the <a href="http://labs.adobe.com/downloads/pixelbender.html" target="_blank">Pixel Bender Toolkit</a>, install <a href="http://blog.joa-ebert.com/pbdt" target="_blank">Joa Ebert's Eclipse Plugin (PBDT)</a> and try this new technology by yourself.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_genieconfigurator3_1365077751"
			class="flashmovie"
			width="563"
			height="480">
	<param name="movie" value="http://blog.platogo.com/wp-content/uploads/genieconfigurator3.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://blog.platogo.com/wp-content/uploads/genieconfigurator3.swf"
			name="fm_genieconfigurator3_1365077751"
			width="563"
			height="480">
	<!--<![endif]-->
		  <a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a> 
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p><strong>[Update]</strong></p>
<p>Because of the massive response we have implemented a little example and also added the source of our Pixel Bender Kernel to the blog entry.<br />
There are a lot of possibilites to improve performance and we are looking forward to your input. The principle behind the Kernel is pretty easy. We´ve used a bezier curve to decide which pixel has to be transparent and where we´ve to compress the pixels. That´s all the magic.</p>
<p>To hide the window in the box just click on the close icon.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_genieanimation_1116550148"
			class="flashmovie"
			width="563"
			height="480">
	<param name="movie" value="http://blog.platogo.com/wp-content/uploads/genieanimation.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://blog.platogo.com/wp-content/uploads/genieanimation.swf"
			name="fm_genieanimation_1116550148"
			width="563"
			height="480">
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p><strong>Pixel Bender Kernel Source Code:</strong> <a href="http://blog.platogo.com/wp-content/uploads/genie.pbk">Download Genie Effect Pixel Bender Kernel</a></p>
<p><strong>[/Update]</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.platogo.com/2009/05/genie-in-a-bottle/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Platogo at Adobe MAX 2008</title>
		<link>http://blog.platogo.com/2008/12/platogo-at-adobe-max-2008/</link>
		<comments>http://blog.platogo.com/2008/12/platogo-at-adobe-max-2008/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 11:24:14 +0000</pubDate>
		<dc:creator>Christoph Atteneder</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://blog.platogo.com/?p=107</guid>
		<description><![CDATA[During the rather successfull Flex Camp in Vienna we decided spontaneously that we have to attend Adobe MAX 2008 in Milan. We were invited by Adobe to join their Adobe MAX Bus from Hamburg to Milan and of course we had to accept the offer. To make it a trip to remember we decided to not hop on at [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.platogo.com%2F2008%2F12%2Fplatogo-at-adobe-max-2008%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.platogo.com%2F2008%2F12%2Fplatogo-at-adobe-max-2008%2F" height="61" width="51" /></a></div><p>During the rather successfull Flex Camp in Vienna we decided spontaneously that we have to attend Adobe MAX 2008 in Milan. We were invited by Adobe to join their <a href="http://adobemaxbus.wordpress.com" target="_blank">Adobe MAX Bus</a> from Hamburg to Milan and of course we had to accept the offer. To make it a trip to remember we decided to not hop on at an intermediate stop but instead start the ride from the very beginning - from Hamburg, located in the far north of Germany... accompany us on our journey!</p>
<p><a class="tt-flickr tt-flickr-Small" title="Christoph Atteneder at Adobe MAX" href="http://www.flickr.com/photos/platogo/3100232050/"><img class="alignnone" src="http://farm4.static.flickr.com/3183/3100232050_72f8af294a_m.jpg" alt="Christoph Atteneder at Adobe MAX" width="240" height="180" /></a> <a class="tt-flickr tt-flickr-Small" title="Florian Landerl at Adobe MAX" href="http://www.flickr.com/photos/platogo/3099399447/"><img class="alignnone" src="http://farm4.static.flickr.com/3065/3099399447_661f0680d8_m.jpg" alt="Florian Landerl at Adobe MAX" width="240" height="180" /><br />
</a><em><span class="tt-flickr tt-flickr-Small">Christoph (left) and Florian (right) at Adobe MAX 2008</span></em></p>
<p><em></em><span id="more-107"></span></p>
<p>After a trouble-free flight to Hamburg we were welcomed by our local host Hannes Stockner from <a href="http://www.interone.de" target="_blank">Interone</a>. During our extensive city tour by foot we got to enjoy the beautiful city of Hamburg as well as a not so nice snow storm. The walk ended at the world-famous Reeperbahn where we unexpectedly spent all our money.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Dollhouse" href="http://www.flickr.com/photos/platogo/3099372347/"><img class="alignnone" src="http://farm4.static.flickr.com/3131/3099372347_7c4f30cb1c.jpg" alt="Dollhouse" width="500" height="375" /><br />
</a><em><span class="tt-flickr tt-flickr-Medium">Florian and Hannes at the famous Dollhouse</span></em><a class="tt-flickr tt-flickr-Medium" title="Dollhouse" href="http://www.flickr.com/photos/platogo/3099372347/"></a></p>
<p>This night we got a whole four hours of sleep as our trip with the Adobe MAX Bus already started at 7:00 a.m. On the bus we had great talks with both Toms (Tom Hensel, Tom Krcha) and a couple of other nice guys from the Adobe Community. The trip lasted for more than 28 hours - a lot more than initially expected - partly due to a massive snow storm on Austria´s <a href="http://en.wikipedia.org/wiki/Brenner_Pass">Brenner mountain pass</a>. Having lots of <a href="http://www.loewenbraeu.de/de-de/loewenfuetterung/loewenbraeu-oktoberfestbier.html">Löwenbräu Oktoberfest beers</a> in the fridge and temporary mobile internet connection made the trip less painful. Furthermore, a Wii was hooked up to the media system of the bus and people would compete in countless boxing fights in Wii Sports.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Adobe MAX Bus" href="http://www.flickr.com/photos/platogo/3100205200/"><img class="alignnone" src="http://farm4.static.flickr.com/3064/3100205200_84940a8019.jpg" alt="Adobe MAX Bus" width="500" height="333" /><br />
</a><em><span class="tt-flickr tt-flickr-Medium">Adobe MAX Bus finally arriving in Milan</span></em><a class="tt-flickr tt-flickr-Medium" title="Adobe MAX Bus" href="http://www.flickr.com/photos/platogo/3100205200/"></a></p>
<p>We finally arrived in Milan at 11:30 the next day (seven hours late) and therefore unfortunately missed Adobe's first keynote. Nevertheless we got a lot of great input/inspiration on the first day and were able to keep our concentration focused until the last session. Our highlight of the day was definitely <a href="http://labs.adobe.com/technologies/alchemy/" target="_blank">Alchemy</a> the C/C++ -&gt; AS 3 converter. We finished the first day with a Community Leader dinner, where we met a couple of friends and talked to leaders from all over Europe. While we're at it: thanks for the nice dinner, Adobe!</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Adobe MAX Europe 2008" href="http://www.flickr.com/photos/platogo/3100205138/"><img class="alignnone" src="http://farm4.static.flickr.com/3017/3100205138_2e55d178e3.jpg" alt="Adobe MAX Europe 2008" width="500" height="375" /><br />
</a><em><span class="tt-flickr tt-flickr-Medium">Entrance to Adobe MAX Europe 2008</span></em><a class="tt-flickr tt-flickr-Medium" title="Adobe MAX Europe 2008" href="http://www.flickr.com/photos/platogo/3100205138/"></a></p>
<p>On Tuesday Adobe put up a great show with their general session. The Men in Black Agency showed new productivity features in CS4 in a visual appealing and (very, very) loud show. Our 15 minutes of fame were when <a href="http://www.alpenflash.at">Alpenflash</a> was mentioned during the huge keynote as being one of the first user groups on their new website <a href="http://groups.adobe.com/groups/1edd9902fc ">groups.adobe.com</a>. Additionally we gained extra fame as we were personally presented as the longest travelled MAX attendees - 36 hours (incl. our trip to Hamburg). The Sneak Peaks which were also being shown this day demonstrated Application Level Clustering through RTMPF, Endless Images and more - all of which were inspiring &amp; stunning.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Men in Black show" href="http://www.flickr.com/photos/platogo/3100205156/"><img class="alignnone" src="http://farm4.static.flickr.com/3275/3100205156_c417438163.jpg" alt="Men in Black show" width="500" height="333" /><br />
</a><em><span class="tt-flickr tt-flickr-Medium">Men in Black Agency demonstrating new productivity features</span></em><a class="tt-flickr tt-flickr-Medium" title="Men in Black show" href="http://www.flickr.com/photos/platogo/3100205156/"></a></p>
<p>After our last session of the day (Wireframing Experiences and Applications with Adobe Flash Catalyst) we were transfered to the Ice-Wonderland Community Party. There were lots of drinks but hardly any toilets, which ended in an information black market about nearest and best toilet possibilities in different bars around the location. During the event we had the chance to have an extensive chat with Jim Corbett (Flash Player Architect) which helped us in pushing the Flash Player's envelope with Platogo. After the party officially ended, our Austrian Adobe person of trust Dieter Hovorka somehow managed to reopen the <a href="http://www.enterprisehotel.com">Enterprise</a>'s hotel bar for private partying until the early morning hours.</p>
<p><a class="tt-flickr tt-flickr-Small" title="Techtalk with Jim Corbett" href="http://www.flickr.com/photos/platogo/3099372505/"><img class="alignnone" src="http://farm4.static.flickr.com/3113/3099372505_1377c59f3e_m.jpg" alt="Techtalk with Jim Corbett" width="270" height="180" /></a> <a class="tt-flickr tt-flickr-Small" title="Adobe MAX party people" href="http://www.flickr.com/photos/platogo/3100205040/"><img class="alignnone" src="http://farm4.static.flickr.com/3167/3100205040_0e68d6d049_m.jpg" alt="Adobe MAX party people" width="240" height="180" /><br />
</a><em><span class="tt-flickr tt-flickr-Small">Florian, Jim Corbett and Christoph (left),<span style="font-style: normal;"> </span></span></em><span class="tt-flickr tt-flickr-Small"><em>Famous Party People (right)<br />
</em></span></p>
<p>We needed a real cold shower to wake up the next day but somehow made it to the first session: Flash Player Internals with Jim Corbett. The third day was the best one regarding the quality of the talks, topics including RTMFP (Michael Thornburgh), Flash Player security (Jim Corbett) and as an entertaining last session Forms gone wild with <a href="http://technoracle.blogspot.com" target="_blank">Duane Nickull</a>. A little sightseeing tour through Milan and a last dinner with friends (Dieter Hovorka, Christian Menzinger) was the excellent conclusion of our exciting trip to Adobe MAX Europe.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Platogo at Adobe MAX Europe" href="http://www.flickr.com/photos/platogo/3100205296/"><img class="alignnone" src="http://farm4.static.flickr.com/3091/3100205296_0f65e6c7e2.jpg" alt="Platogo at Adobe MAX Europe" width="500" height="375" /><br />
</a><em><span class="tt-flickr tt-flickr-Medium">Florian, Christoph and Christian saying good-bye</span></em><a class="tt-flickr tt-flickr-Medium" title="Platogo at Adobe MAX Europe" href="http://www.flickr.com/photos/platogo/3100205296/"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.platogo.com/2008/12/platogo-at-adobe-max-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dependency management for ActionScript projects</title>
		<link>http://blog.platogo.com/2008/11/dependency-management-for-actionscript-projects/</link>
		<comments>http://blog.platogo.com/2008/11/dependency-management-for-actionscript-projects/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 09:56:33 +0000</pubDate>
		<dc:creator>Christoph Atteneder</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Apache Ivy]]></category>
		<category><![CDATA[Dependency Management]]></category>

		<guid isPermaLink="false">http://blog.platogo.com/?p=5</guid>
		<description><![CDATA[Managing source code dependencies is a burden you are confronted with in nearly every project in your daily life as a developer.
There are different strategies how to solve this dilemma. I´ll give it another try and will show you how you can overcome all this problems in ActionScript 3 projects through the usage of Apaches [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.platogo.com%2F2008%2F11%2Fdependency-management-for-actionscript-projects%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.platogo.com%2F2008%2F11%2Fdependency-management-for-actionscript-projects%2F" height="61" width="51" /></a></div><p><a href="http://farm4.static.flickr.com/3063/3038003680_911d65fbba_o.gif" rel="lightbox"><img class="alignleft thumbs" style="float: left" title="ivy" src="http://farm4.static.flickr.com/3063/3038003680_911d65fbba_o.gif" alt="Apache Ivy" width="120" height="90" /></a>Managing source code dependencies is a burden you are confronted with in nearly every project in your daily life as a developer.</p>
<p>There are different strategies how to solve this dilemma. I´ll give it another try and will show you how you can overcome all this problems in ActionScript 3 projects through the usage of <a title="Apache Ivy" href="http://ant.apache.org/ivy/" target="_blank">Apaches Ivy</a>.</p>
<p><span id="more-5"></span></p>
<h2>The Problem</h2>
<p>Virtually every software relies on one or another library. This can be the flex framework, papervision3D or one of your company´s internal libraries. The more projects your application depends on the more complex the build process will get.</p>
<p>But you probably think:</p>
<blockquote><p>We managed this dependencies in all our previous ActionScript projects already. Why do we have to make it again and again more complicated?</p></blockquote>
<h2>The Solutions?</h2>
<p>You have probably solved it in one of the following ways:</p>
<ol>
<li>Placing all dependent projects (JAR<strong><em>(SWC)</em></strong> files) in a directory that´s checked into the projects version-control repository. This technique bloates the repository unnecessarily, making it difficult to manage version differences.</li>
<li>Allocating dependent JARs<em><strong>(SWCs)</strong></em> to a common file server, which prevents the team from controlling version changes</li>
<li>Copying JAR<em><strong>(SWC)</strong></em> files manually to a specific location on each developer´s workstation. This approach makes it difficult to determine missing files or correct versions.</li>
<li>Performing an HTTP Get to download files to a developer´s workstation, either manually or as part of the automated build. This technique requires duplicate scriptlets and often leads to unmanaged JAR<em><strong>(SWC)</strong></em> files</li>
</ol>
<p style="text-align: right;">Techniques taken and modified from Paul Duvall´s article  <a href="http://www.ibm.com/developerworks/java/library/j-ap05068/index.html?S_CMP=GR&amp;S_TACT=105AGX59&amp;ca=dgr-twkoApacheAntIvy" target="_blank">"Automation for the people"</a><br />
Changes are highlighted and put into brackets <em><strong>(Changed Content)</strong></em></p>
<p>In all our applications in my former company we used the first technique, which went pretty fine so far. But during my last project there it got more complicated. We were developing smaller modules already, while improving the core frameworks, util libraries and so on. During this process it became more and more time consuming and confusing to keep all projects up-to-date.</p>
<p>Just a few dialogue examples:</p>
<p><strong>Library developer:</strong> <em>"Hey guys, I just fixed a few errors in the BlaBla class please update your util library."</em></p>
<p>There are four smaller projects going on at the same time and every project is being updated. A few minutes later.</p>
<p><strong>Another developer:</strong> <em>"Damn, I´ve to roll back the library, because now my application is broken, but I need the other fixes from the *** class. When did you check in the other change into subversion? </em></p>
<p><strong>Library developer:</strong> <em>"Hmmm. I don´t know if I´ve entered a svn-comment for this change. Can´t you just use  your old version?"</em></p>
<p>Five hours later.</p>
<p><strong>Library developer:</strong> <em>"Hey guys, I missed a bug in the latest check-in, could you please update your util library again?"</em></p>
<p><strong>Another developer:</strong> <em>"What the ******!"</em></p>
<p>So dependency management is also a way to keep your collegues happy <img src='http://blog.platogo.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<h2>Apache Ivy</h2>
<p>In next part of this article I´ll explain how to set up your own ivy repository and how to integrate it easily into your development process.</p>
<p><strong><a href="#examples">At the end of the article you will find three FlexBuilder projects using ivy to play around with.</a></strong></p>
<p><strong><a href="#examples">Now there are also three FDT projects ready for download</a></strong></p>
<p>One library project without dependencies, one library project with dependencies and one application which uses this two libraries.</p>
<p>Following parts are taken from Paul Duvall´s article <a href="http://www.ibm.com/developerworks/java/library/j-ap05068/index.html?S_CMP=GR&amp;S_TACT=105AGX59&amp;ca=dgr-twkoApacheAntIvy" target="_blank">"Automation for the people"</a> and are modified and extended for ActionScript 3 development.</p>
<h3>Getting started</h3>
<p>Getting started with Ivy is as simple as creating two Ivy-specific files and adding a few Ant targets. The Ivy-specific files are <strong>ivy.xml</strong> and an <strong>ivysettings.xml</strong> file. The ivy.xml file is where you list all of your project's dependencies. The ivysettings.xml file (you can name this file anything you wish) is where you configure repositories that the dependent SWC files will be downloaded from.</p>
<p>For all following listings you will need for execution: Apache Ant standalone or use Eclipse with Ant support. The last one is the most common setup you´ll use if you are using <a title="FlexBuilder" href="http://www.adobe.com/products/flex/features/flex_builder/" target="_blank">FlexBuilder</a> or <a title="FDT" href="http://fdt.powerflasher.com/" target="_blank">FDT</a> for ActionScript 3 development.</p>
<p>Listing 1 shows a simple Ant script that calls two Ivy tasks: ivy:settings and ivy:retrieve:</p>
<p><strong> Listing 1. Simple Ant script using Ivy</strong><code><br />
&lt;target name="resolve" depends="load-ivy"&gt;<br />
&lt;ivy:resolve file="${build.dir}/ivy/ivy.xml"/&gt;<br />
&lt;ivy:retrieve /&gt;<br />
&lt;/target&gt;</code><br />
In Listing 1, ivy:resolve resolves the dependencies and is normally called by ivy:retrieve automatically. In this case I defined it manually because I wanted to use a specific path to the ivy.xml. The call to ivy:retrieve retrieves the SWC files from one of the repositories declared in ivy.xml.</p>
<h2>Installing Ivy</h2>
<p>You have a couple of options for downloading and using Ivy. The first is to download the Ivy JAR file manually to your Ant lib directory or to a different directory that you define in your Ant script's classpath.<br />
Even it would be easier to use for the first time to automaticaly download ivy, I downloaded it manually and placed it into a directory in my project (e.g. libs).</p>
<p><a title="Apache Ivy" href="http://ant.apache.org/ivy/download.cgi" target="_blank">Download Apache Ivy - Beta 2</a>.</p>
<p><strong>Listing 2 shows an example how to use Ivy in your build file:</strong><br />
<code>&lt;project name="Ivy Library" xmlns:ivy="antlib:org.apache.ivy.ant"&gt;<br />
&lt;property name="ivy.jar.dir" value="${basedir}/libs" /&gt;<br />
&lt;target name="load-ivy"&gt;<br />
&lt;path id="ivy.lib.path"&gt;<br />
&lt;fileset dir="${ivy.jar.dir}" includes="*.jar"/&gt;<br />
&lt;/path&gt;<br />
&lt;taskdef resource="org/apache/ivy/ant/antlib.xml"<br />
uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/&gt;<br />
&lt;ivy:settings file="${ivy.settings.dir}/ivysettings.xml" /&gt;<br />
&lt;/target&gt;</code><br />
The first line in Listing 2 defines the XML namespace.<br />
The ivy.jar.dir value is the location where the ivy.jar file is placed. The taskdef defines the ivy Ant task, referring to its classpath location. The ivy:settings defines the Ivy settings file.<br />
The ivy.xml file, where you define all of your project's dependent SWCs, is required.<br />
Listing 3 shows an example:</p>
<p><strong>Listing 3. Defining dependencies in ivy.xml</strong><br />
<code>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?&gt;<br />
&lt;ivy-module version="1.0"&gt;<br />
&lt;info organisation="com.metadudes" module="components" /&gt;<br />
&lt;dependencies&gt;<br />
&lt;dependency org="com.metadudes" name="utils" rev="latest.integration" /&gt;<br />
&lt;dependency org="com.metadudes" name="commons" rev="1.9.1" /&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/ivy-module&gt;</code><br />
Notice that Listing 3 includes no indication of file locations or URLs, letting you move to different repository locations without needing to change the list of dependencies. The organisation attribute in the info element identifies the organization type (such as .net, .org, or .com). This is followed by the module name. The list of dependencies for this module follows a naming convention that will become more clear in the next listing. For now, just remember that dependency name="commons" rev="1.9.1" translates to commons-1.9.1.swc.</p>
<p><strong>Listing 4. Creating your own library</strong><br />
<code>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?&gt;<br />
&lt;ivy-module version="1.0"&gt;<br />
&lt;info organisation="com.metadudes" module="core" /&gt;<br />
&lt;publications&gt;<br />
&lt;artifact name="core" type="swc" ext="swc" /&gt;<br />
&lt;artifact name="components" type="swc" ext="swc" /&gt;<br />
&lt;artifact name="commons" type="swc" ext="swc" /&gt;<br />
&lt;/publications&gt;<br />
&lt;/ivy-module&gt;</code><br />
If you want to deploy your own module which consists of three swc files, just define in the artifact elements type and ext (extension) as swc. If you want to publish a new library to your network repository just call the ivy:publish task and it will do the magic for you as you see in Listing 5.</p>
<p><strong>Listing 5. Publish your own library version to the repository</strong><br />
<code>&lt;target name="publish" depends="swc" description="publishes library"&gt;<br />
&lt;ivy:publish artifactspattern="${binRelease.dir}/[artifact].[ext]"<br />
resolver="projects"<br />
pubrevision="1.2<br />
status="release"<br />
/&gt;<br />
&lt;/target&gt;</code><br />
Listing 6 is an example of a Ivy settings file. It defines the repository locations and associated patterns used in the ivy.xml file in Listing 3.</p>
<p><strong>Listing 6. Ivy settings file</strong><br />
<code>&lt;ivysettings&gt;<br />
&lt;properties file="${ivy.settings.dir}/ivysettings.properties"/&gt;<br />
&lt;settings defaultResolver="projects"/&gt;<br />
&lt;caches defaultCacheDir="${ivy.settings.dir}/ivy-cache" /&gt;<br />
&lt;resolvers&gt;<br />
&lt;filesystem name="projects"&gt;<br />
&lt;artifact pattern="${repository.dir}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /&gt;<br />
&lt;ivy pattern="${repository.dir}/[organisation]/[module]/[revision]/ivy.xml" /&gt;<br />
&lt;/filesystem&gt;<br />
&lt;/resolvers&gt;<br />
&lt;/ivysettings&gt;</code><br />
The filesystem element in Listing 6 defines the location pattern on your local workstation or network-share. You could also add multiple locations the SWC file can be downloaded from. If Ivy is unable to download from the first repository — if it's down, for example, or if the file isn't in the specified location — it tries the next one. The beauty is that once Ivy downloads a SWC, it puts the file on your local file system so that it doesn't need to download these files for every build.</p>
<h2>Depending on dependencies</h2>
<p>It's typical for a module to have dependencies on other modules. Without a tool like Ivy, you would need to ensure the correct versions of all SWCs are in the classpath and that no conflicts exist among SWC versions. With Ivy, you simply define the myLibrary module and all of its dependent modules, as shown in the example ivy.xml file in Listing 7.</p>
<p><strong>Listing 7. Defining dependencies in ivy.xml</strong><br />
<code>&lt;ivy-module version="1.0"&gt;<br />
&lt;info organisation="com.metadudes" module="myLibrary" /&gt;<br />
&lt;publications&gt;<br />
&lt;artifact name="mylibrary" type="swc" ext="swc" /&gt;<br />
&lt;/publications&gt;<br />
&lt;dependencies&gt;<br />
<strong>&lt;dependency org="com.metadudes" name="core" rev="latest.integration" /&gt;<br />
</strong>&lt;dependency org="com.metadudes" name="components" rev="1.2" /&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/ivy-module&gt;</code><br />
The highlighted dependency in Listing 7 defines the core module from com.metadudes along with the information to use the latest revision. Ivy uses this information along with the repository definitions in the ivysettings.xml file (as shown in Listing 6) to download the SWC file dependencies.</p>
<p><strong>Figure 1. Possible ivy repository structure</strong></p>
<p><a href="http://blog.platogo.com/wp-content/uploads/repository.jpg" rel="lightbox"><img class="alignnone size-full wp-image-72" title="repository" src="http://blog.platogo.com/wp-content/uploads/repository.jpg" alt="" width="357" height="122" /></a></p>
<p>In Figure 1 you see two modules (extendedhelloworld, helloworld) from organisation com.metadudes. Of module extendedhelloworld only one version is existing, whereas two versions of module helloworld are available. For more detailed information on the files in the version directory please use the <a title="Building a repository" href="http://ant.apache.org/ivy/history/latest-milestone/tutorial/build-repository.html" target="_blank">ivy documentation</a>.</p>
<h2>Growing with Ivy</h2>
<p>Now that you have the basics of using Ivy, I'll go over some other useful Ant tasks.</p>
<h3>Rendering reports</h3>
<p>Ivy provides a task for reporting the dependent files in a project. Listing 8 demonstrates calling Ivy's report Ant task to create a list of dependencies:</p>
<p><strong>Listing 8. Generating an Ivy dependency report from Ant</strong><br />
<code>&lt;target name="ivy-report" depends="init-ivy"&gt;<br />
&lt;ivy:report todir="${basedir}"/&gt;<br />
&lt;/target&gt;</code><br />
An HTML report generated by the script in Listing 8 displays a list of the project's dependent files. Figure 2 shows the report:</p>
<p><strong>Figure 2. HTML report showing project dependencies</strong></p>
<p><a href="http://blog.platogo.com/wp-content/uploads/report.jpg" rel="lightbox"><img class="alignnone size-full wp-image-73" title="report" src="http://blog.platogo.com/wp-content/uploads/report.jpg" alt="" width="500" height="332" /></a></p>
<p>See <a href="#resources">Resources</a> to learn about other Ant tasks available in Ivy</p>
<h2>It all depends</h2>
<h3>Versioning binaries</h3>
<p>Paul Duvall´s final thoughts on this topic:</p>
<p><em>Ivy does not obviate the need to version-control JAR<strong>(SWC) </strong>files. I've often seen that teams provided with an HTTP-accessible repository forget to place the files in a version-control system at all. If you need to recreate the software a year from now and your HTTP repository isn't centrally managed, it could be extremely difficult to do so. Using an HTTP-accessible version control repository such as Subversion makes this less of a burden because you can manage centrally and provide HTTP access.</em></p>
<p><em>Ivy centralizes dependent files and reduces the bloat that can occur when development teams copy JAR<strong>(SWC)</strong> files from one version-control repository to the next. If you're working a simple project, it probably won't slow you down too much to check in JAR<strong>(SWC) </strong>files to your version-control system or use some of the other techniques I listed at the start of this article. But as your project gets larger or if you work in an enterprise environment that uses common files, a common approach becomes necessary. In either case, Ivy makes defining project dependencies more consistent and approachable, so it's worth your time to investigate the use of Ivy in your projects.</em></p>
<p style="text-align: right;"><a title="Paul Duvall " href="http://www.ibm.com/developerworks/java/library/j-ap05068/index.html?S_TACT=105AGX02&amp;S_CMP=EDU" target="_blank">Paul Duvall</a> - Changes are highlighted and put into brackets <em><strong>(Changed Content)</strong></em></p>
<p style="text-align: left;">I´m right now in the process of integrating ivy into our buildprocess. It worked for me so far very well and I will post the outcome and best practice in one of my following posts. As Paul Duvall already mentioned its absolutly worth your time to investigate into Apache Ivy. So don´t waste to much time and get your hands on it right now.</p>
<h2><a name="resources"></a></h2>
<h3><a name="examples"></a></h3>
<p>Download <strong>Flex</strong> Projects using Ivy:</p>
<p><a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivysettings.zip" target="_blank">Download ivy settings</a><br />
<a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivylibrary.zip" target="_blank">Download ivy library project</a><br />
<a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivydependentlibrary.zip" target="_blank">Download ivy dependent library project</a><br />
<a href="http://www.nullstars.com/wp-contenhttp://www.nullstars.com/wp-content/uploads/2008/11/ivyproject.zip" target="_blank">Download ivy project</a></p>
<p>Download <strong>FDT</strong> Projects using ivy:</p>
<p><a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivysettings1.zip" target="_blank">Download ivy settings</a><br />
<a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivylibrary_fdt.zip" target="_blank">Download ivy library project<br />
</a><a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivydependentlibrary_fdt.zip" target="_blank">Download ivy dependent library project<br />
</a><a href="http://www.nullstars.com/wp-content/uploads/2008/11/ivyproject_fdt.zip" target="_blank">Download ivy project</a></p>
<p>For the ivy dependent library project using FDT you have to add the resolved swc files manually into your classpath to prevent editor errors.</p>
<p>Installation instruction for FlexBuilder / FDT users:</p>
<p>Please make sure that Ant is already installed and configured in FlexBuilder.</p>
<ol>
<li>Download and unzip the files to your local computer</li>
<li>Put the ivy settings directory somewhere on your hard drive, where you also want to place your local ivy cache (e.g. C:\dev\ivy\settings).<a href="http://blog.platogo.com/wp-content/uploads/ivysettings.jpg" rel="lightbox"><img class="alignnone size-full wp-image-74" title="ivysettings" src="http://blog.platogo.com/wp-content/uploads/ivysettings.jpg" alt="" width="438" height="108" /></a></li>
<li>Open the file ivysettings.properties in the ivysettings folder and set your desired ivy repository path<br />
(e.g. repository.dir=I:/repository)</li>
<li>Open FlexBuilder and import IvyDependentLibrary, IvyLibrary and IvyProject projects</li>
<li>Open the build.properties files of each project and adapt the path settings<br />
(e.g. ivy.settings.dir=C:/dev/ivy/settings)</li>
<li>Drag the build.xml files of each project into the Ant window of eclipse</li>
<li>Run the IvyLibrary publish target</li>
<li>Run the IvyDependent Library publish target</li>
<li>Run the Ivy Project run target</li>
</ol>
<p>All Ant targets also work with the Flex SDK only.</p>
<p>This projects should give you a first impression, what you can do with Ivy. For further investigations I recommend the examples on the ivy page.</p>
<h3>Learn</h3>
<ul>
<li><a title="Apache Ivy" href="http://ant.apache.org/ivy/" target="_blank">Apache Ivy</a>: Visit the Ivy project site for documentation, tutorials, and community resources.</li>
<li><a title="Ivy vs. Maven2" href="http://ant.apache.org/ivy/m2comparison.html" target="_blank">Ivy / Maven2 Comparison</a> (Apache Ant Ivy Project): A discussion of the differences between Ivy and Maven 2 dependency management.</li>
<li><a title="Automation for the people" href="http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=automation+people:" target="_blank">Automation for the people</a> (Paul Duvall, developerWorks): Read the complete series.</li>
</ul>
<h3>Get products and technologies</h3>
<ul>
<li><a title="Apache Ant" href="http://ant.apache.org/bindownload.cgi" target="_blank">Ant</a>: Download Ant and start building software in a predictable and repeatable manner.</li>
<li><a title="Apache Ivy" href="http://ant.apache.org/ivy/download.cgi" target="_blank">Ivy</a>: Download Ivy.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.platogo.com/2008/11/dependency-management-for-actionscript-projects/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adobe + Alpenflash = Flex Camp</title>
		<link>http://blog.platogo.com/2008/11/adobe-alpenflash-flex-camp/</link>
		<comments>http://blog.platogo.com/2008/11/adobe-alpenflash-flex-camp/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 09:53:42 +0000</pubDate>
		<dc:creator>Christoph Atteneder</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Alpenflash]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.platogo.com/?p=3</guid>
		<description><![CDATA[
David Höller (Illustree), Dieter Hovorka (Adobe), Christoph Atteneder (Nullstars), Tom Krcha (Adobe), Florian Landerl (Nullstars)
Last Thursday Christoph &#38; Florian, partners at Nullstars and founders of Alpenflash (Adobe Flash User Group Austria), organized the first Austrian Flex Camp with the help of Adobe. It was held at the office of bwin and was a huge success [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.platogo.com%2F2008%2F11%2Fadobe-alpenflash-flex-camp%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.platogo.com%2F2008%2F11%2Fadobe-alpenflash-flex-camp%2F" height="61" width="51" /></a></div><p><a class="tt-flickr tt-flickr-Medium" title="First Flex Camp in Austria" href="http://www.flickr.com/photos/platogo/3032391544/"><img class="alignnone" src="http://farm4.static.flickr.com/3182/3032391544_6e4fd51f7a.jpg" alt="First Flex Camp in Austria" width="500" height="333" /></a></p>
<p><em>David Höller (Illustree), Dieter Hovorka (Adobe), Christoph Atteneder (Nullstars), Tom Krcha (Adobe), Florian Landerl (Nullstars)</em></p>
<p>Last Thursday Christoph &amp; Florian, partners at Nullstars and founders of <a href="http://www.alpenflash.at" target="_blank">Alpenflash</a> (Adobe Flash User Group Austria), organized the first Austrian Flex Camp with the help of Adobe. It was held at the office of bwin and was a huge success with 77 attendees watching multiple sessions on Adobe Flex Technology. The camp ended at 23:00 (11:00 PM) but the aftercamp party at the <a href="http://www.flex.at" target="_blank">FLEX CAFÉ/DISCO</a> in Vienna Downtown lasted until the early morning hours.</p>
<p><span id="more-3"></span></p>
<p>Nullstars always loves bringing people together in order to support and unite the developer community. We are looking forward to the next event where we will propably share some more details of our project <a href="http://www.platogo.com" target="_blank">Platogo</a>.</p>
<p>Christoph held a presentation on the topic of Coding &amp; Frameworks at the Flex Camp. It gave an insight into the tools &amp; workflows we are using internally at Nullstars. <a href="http://www.nullstars.com/wp-content/uploads/2008/11/flex-coding-frameworks.pdf" target="_blank">Download the presentation slides</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.platogo.com/2008/11/adobe-alpenflash-flex-camp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
