<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7497451</id><updated>2012-01-09T00:16:17.059-05:00</updated><category term='linux'/><category term='silly'/><category term='mediawiki'/><category term='linus'/><category term='rbuilder'/><category term='documentation'/><category term='collaboration'/><category term='Amazon'/><category term='development'/><category term='serialization'/><category term='XML'/><category term='OSX'/><category term='vhd'/><category term='flex'/><category term='rpath'/><category term='AWS'/><category term='software appliance'/><category term='monitors'/><category term='xobj'/><category term='python'/><category term='bamboo'/><category term='intranets'/><category term='abstraction'/><category term='mac'/><category term='marketing'/><category term='virtual appliance'/><category term='actionscript'/><category term='mercurial'/><category term='EC2'/><category term='xen'/><category term='humor'/><title type='text'>verveguy</title><subtitle type='html'>Observations and opinions on things that strike me as interesting - for better or for worse - in the realms of software, communications, collaboration and generally, getting machines to do what we &lt;b&gt;want&lt;/b&gt; them to while getting out of our way.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7497451.post-2569936205109345285</id><published>2011-05-18T00:02:00.003-04:00</published><updated>2011-05-18T00:14:38.914-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><title type='text'>Custom metadata tags in Flex 4.5</title><content type='html'>&lt;p&gt;After upgrading to Flex 4.5 recently, I have become annoyed with Flash Builder's new obsession with marking metadata tags as unknown.&lt;/p&gt;&lt;p&gt;Unknown to you, FB, maybe, but not to &lt;strong&gt;me or my friends&lt;/strong&gt;....we make heavy use of custom metadata tags, especially since adopting the &lt;a href="http://www.spicefactory.org/parsley/"&gt;parsley&lt;/a&gt; framework almost two years ago.&lt;/p&gt;&lt;p&gt;So I was kinda happy to &lt;a href="http://help.adobe.com/en_US/flashbuilder/using/WSe4e4b720da9dedb56fd3caca12e6bb494bb-7ff3.html"&gt;find this after some digging&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;Turns out, hidden down in the flex 4.5 sdk frameworks dir is a little file called metadata.xml that provides metadata about the metadata tags. The FB tooling uses this file to configure the new auto-prompters for metadata.&lt;/p&gt;&lt;p&gt;Cribbing the syntax from the SDK file, I crafted a &lt;a href="http://db.tt/oXIO3oG"&gt;metadata.xml for parsley 2.4&lt;/a&gt; which has helped to shut FB up. It just needs to be included as an asset copied into the SWC.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-2569936205109345285?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/2569936205109345285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2011/05/custom-metadata-tags-in-flex-45.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/2569936205109345285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/2569936205109345285'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2011/05/custom-metadata-tags-in-flex-45.html' title='Custom metadata tags in Flex 4.5'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-6244468499372342392</id><published>2011-05-09T10:55:00.000-04:00</published><updated>2011-05-09T10:55:48.351-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='monitors'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Samsung 2343BWX and MacBook Pro</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I recently upgraded to a Samsung 2343BWX monito&lt;/div&gt;&lt;div style="text-align: left;"&gt;r for work. Lovely 23" screen at a great price. Natur&lt;/div&gt;&lt;div style="text-align: left;"&gt;ally, I wanted to exploit the full 2048 x 1152 native resolution with my (older) MacBook Pro.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Problem&lt;/b&gt;: the Mac wouldn't recognize the max res of the monitor. I was stuck in 1920 x 1080 !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No obvious answers anywhere on the 'net.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Long story short, the solution is software: grab a copy of &lt;a href="http://www.madrau.com/indexSRX4.html"&gt;SwitchRes X 4.x&lt;/a&gt; and then create a custom config as follows:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 400px; height: 328px; " src="http://1.bp.blogspot.com/_xUJjxqKMlIE/SvyRY3_vhiI/AAAAAAAAAGo/xUNhogrf600/s400/2343BWX.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5403353509471946274" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saves changes, reboot and select the new resolution via the System Display preferences.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Voila!&lt;/div&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; Recently, my MacBook Pro simply refused to offer the 2048x1152 setting and SwitchResX reported it as "Invalid". After much mucking about, I finally stumbled over the "Overscan" option in the main Display prefs. It was turned off. Turned it on, and life is good again.&lt;div&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/-l5MChdSvPn4/Tcf_riR539I/AAAAAAAAAH8/XWGtuFV1LEc/s400/overscan.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 186px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5604729384687230930" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-6244468499372342392?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/6244468499372342392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2009/11/samsung-2343bwx-and-macbook-pro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/6244468499372342392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/6244468499372342392'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2009/11/samsung-2343bwx-and-macbook-pro.html' title='Samsung 2343BWX and MacBook Pro'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xUJjxqKMlIE/SvyRY3_vhiI/AAAAAAAAAGo/xUNhogrf600/s72-c/2343BWX.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-5343669406697790297</id><published>2010-02-22T14:36:00.001-05:00</published><updated>2010-02-22T14:36:52.016-05:00</updated><title type='text'>DevOps - about time!</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;The DevOps movement seems like a no-brainer to me: treat the management of operational systems as we treat the management of software development.&lt;br/&gt;&lt;br/&gt;Version control everything, seek to automate every single process that changes anything and automatically test every change. And then, make the smallest number of changes necessary to deliver the benefit sought. Take as many human, error-prone activities *out* of the overall process as possible - or as I've been overheard to say on a particularly bad afternoon "eliminate the monkeys".&lt;br/&gt;&lt;br/&gt;Not surprisingly, devops and agile are strongly related - indeed, some have described devops as extending agile the "last mile" beyond development and into operations. About time!&lt;/p&gt;in reference to: &lt;a href='http://blogs.rpath.com/wpmu/closing-the-gap/2010/02/22/devops-a-movement-emerges/'&gt;&lt;a href='http://blogs.rpath.com/wpmu/closing-the-gap/2010/02/22/devops-a-movement-emerges/'&gt;http://blogs.rpath.com/wpmu/closing-the-gap/2010/02/22/devops-a-movement-emerges/&lt;/a&gt;&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/bpjadam/id/A69V0ulESIQ31SMkQCuemjTQhlg'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-5343669406697790297?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/5343669406697790297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2010/02/devops-about-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5343669406697790297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5343669406697790297'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2010/02/devops-about-time.html' title='DevOps - about time!'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-1718787991622869495</id><published>2009-08-09T19:59:00.001-04:00</published><updated>2009-12-22T23:21:39.999-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='serialization'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='xobj'/><title type='text'>xobj hosted on bitbucket</title><content type='html'>This post should have be written a few months ago. xobj has been made available as &lt;a href="http://bitbucket.org/rpathsync/xobj/"&gt;open source on bitbucket&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The xobj project provides an object reflector between various dynamic languages and XML. Currently, python and ActionScript 3 implementations are available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Motivations&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;xobj was motivated by a few specific goals:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make the use of XML for object model interchange between client and server tiers less painful&lt;/li&gt;&lt;li&gt;Allow your code to use real typed instances of classes rather than simple generic data structures&lt;/li&gt;&lt;li&gt;Treat your code as the definition of schema rather than forcing an XMLSchema driven approach on your code.&lt;/li&gt;&lt;li&gt;Read and write XML documents that will pass most XMLSchema structural validation requirements with relatively little effort on your part&lt;/li&gt;&lt;/ul&gt;It is not required to provide an XML schema to use xobj. Custom objects may be used for parts or all of the document, whether or not an XML schema is provided. Schema validation is optional. If new elements show up, they will be preserved across read/write; schema additions will not normally require code changes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Implementation Notes&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;During XML decoding, xobj preserves namespaces, element ordering and tracks attributes vs elements so that re-encoded object graphs can comply with most of the common XMLSchema validation requirements. This observed metadata is attached to your object graph rather than hidden out of view.&lt;br /&gt;&lt;br /&gt;For "whole cloth" generation of XML from object graphs that were not themselves decoded in the first place, you can provide the namespace, elements ordering and attribute metadata declaratively to facilitate XMLSchema conformance.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, most casual-use applications don't need to worry about namespaces, so your instance graphs will encode just fine as a usable XML document leveraging as much runtime class introspective data as is available. (AS3 in particular)&lt;br /&gt;&lt;br /&gt;During decoding, xobj uses both the runtime type information available from your classes as well as a typemap you specify to determine the target type for every decoded XML element.&lt;br /&gt;&lt;br /&gt;During encoding, xobj uses this same runtime information plus additional observed (or provided) metadata to inform the output XML.&lt;br /&gt;&lt;br /&gt;For ActionScript, xobj decodes XML documents directly into typed instance objects rather than generic Object or ObjectProxy wrappers. This avoids the double-handling of generic objects required by the default SimpleXMLDecoder provided by Adobe Flex.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We've made a lot of use of this library in recent Flex/Python RESTful services at rPath.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-1718787991622869495?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://bitbucket.org/verveguy/xobj/wiki/Home' title='xobj hosted on bitbucket'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/1718787991622869495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2009/05/xobj-hosted-on-bitbucket.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1718787991622869495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1718787991622869495'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2009/05/xobj-hosted-on-bitbucket.html' title='xobj hosted on bitbucket'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-1602692948791059118</id><published>2009-08-05T17:45:00.005-04:00</published><updated>2009-08-06T09:20:15.947-04:00</updated><title type='text'>Loading local file content in Flashplayer 10 with Flex</title><content type='html'>Recently, I was asked to improve a text entry UI for submitting certificates in support of Amazon EC2 credentials. We'd received feedback that copy/paste was proving problematic for certificate entry due to the finicky line-ending rules involved. The desired solution was to add a "Read from file..." button that would load the cert from a local file and paste that content into the UI. Note that we didn't want to upload the file itself, simply extract the content in the local client.&lt;br /&gt;&lt;br /&gt;Flashplayer 9 won't let you do this. Flashplayer 10 will.&lt;br /&gt;&lt;br /&gt;The solution revolves around the enhancements made to the FileReference class in Flash 10.&lt;br /&gt;&lt;br /&gt;I'm posting this mainly because the examples I found on the net were either out of date (Flashplayer 10 changed in the final release) or were flat out wrong.&lt;br /&gt;&lt;br /&gt;Firstly, make sure your dev environment is configured to use the playerglobals.swc from the Flash 10 player. Instructions for doing this can be found &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Targeting+Flash+Player+10"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second, crucial point, is that you must hold onto a reference to the FileReference instance across the whole browse, select, load and extract cycle. Failure to do this results in the instance being GC'd out from under you and subsequent "missing events".&lt;br /&gt;&lt;br /&gt;This should be enough code to get you going:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// we need to keep this ref to prevent the fileRef getting GC'd&lt;br /&gt;// cause the docs say that if it goes out of scope, you' won't get the&lt;br /&gt;// completion events&lt;br /&gt;&lt;br /&gt;private var fileRef:FileReference;&lt;br /&gt;&lt;br /&gt;// call this from a button click or other control&lt;br /&gt;public function handleReadFileContent(event:Event):void&lt;br /&gt;{&lt;br /&gt;    fileRef = new FileReference();&lt;br /&gt;    fileRef.addEventListener( Event.SELECT, onFileSelect );&lt;br /&gt;    fileRef.addEventListener( Event.COMPLETE, onFileComplete );&lt;br /&gt;    fileRef.browse();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onFileSelect( event:Event ):void&lt;br /&gt;{&lt;br /&gt;    fileRef.load();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onFileComplete( event:Event ):void&lt;br /&gt;{&lt;br /&gt;    var content:ByteArray = fileRef.data as ByteArray;&lt;br /&gt;    &lt;br /&gt;    myTextField.text = content;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-1602692948791059118?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/1602692948791059118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2009/08/loading-local-file-content-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1602692948791059118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1602692948791059118'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2009/08/loading-local-file-content-in.html' title='Loading local file content in Flashplayer 10 with Flex'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-2802077324051523815</id><published>2008-07-18T17:51:00.002-04:00</published><updated>2008-07-18T17:56:47.715-04:00</updated><title type='text'>Charles Web Debugging Proxy</title><content type='html'>Wish I'd found &lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt; earlier. A richly featured yet easy to use HTTP proxy designed specifically for web developers to debug the interactions between the browser and the server.&lt;br /&gt;&lt;br /&gt;It has made debugging the Flex client to Python service interactions much much easier. It's also helped me win arguments with the guy writing the backend as to why the problem was on his side and not mine. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-2802077324051523815?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.charlesproxy.com/' title='Charles Web Debugging Proxy'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/2802077324051523815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/07/charles-web-debugging-proxy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/2802077324051523815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/2802077324051523815'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/07/charles-web-debugging-proxy.html' title='Charles Web Debugging Proxy'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-7625396675694474139</id><published>2008-07-09T14:19:00.003-04:00</published><updated>2008-07-09T14:24:07.946-04:00</updated><title type='text'>Code Coverage in Flex</title><content type='html'>If you're doing any kind of serious development in Flex, you need to be looking at your test cases and the code coverage you're getting.&lt;br /&gt;&lt;br /&gt;One of the challenges for any kind of incremental development, especially the kind of rapid prototyping efforts that Flex and FlexBuilder are so naturally suited for, is keeping an eye on where you need better testing - both automated via unit tests but also manual.&lt;br /&gt;&lt;br /&gt;Hence my delight at finding the &lt;a href="http://code.google.com/p/flexcover/"&gt;flexcover&lt;/a&gt; tool recently.&lt;br /&gt;&lt;br /&gt;Not only is it now dead-simple to install (since version 0.5 came out), but you can use it in a fully interactive mode where it shows *in real time* the coverage of your code during any kind of application usage.&lt;br /&gt;&lt;br /&gt;I've been letting it run in the background while I manually test parts of my evolving application to give me an idea of what needs attention, what code paths are dead and ripe for pruning, and generally, how much confidence I can have in my manual testing vs. the automated units&lt;br /&gt;&lt;br /&gt;Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-7625396675694474139?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/flexcover/' title='Code Coverage in Flex'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/7625396675694474139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/07/code-coverage-in-flex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/7625396675694474139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/7625396675694474139'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/07/code-coverage-in-flex.html' title='Code Coverage in Flex'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-2554487006121002768</id><published>2008-07-08T10:21:00.002-04:00</published><updated>2008-07-08T10:23:48.644-04:00</updated><title type='text'>The Truth about Flex HTTPService</title><content type='html'>So I have unraveled the Truth. (I think)  &lt;p&gt;It's more tortured than one would imagine&lt;/p&gt;  &lt;p&gt;1/ All HTTP GET requests are stripped of headers. It's not in the Flex stack so it's probably the underlying Flash player runtime&lt;/p&gt;  &lt;p&gt;2/ All HTTP GET requests that have content type other than "application/x-www-form-urlencoded" are turned into POST requests&lt;/p&gt;  &lt;p&gt;3/ All HTTP POST requests that have no actual posted data are turned into GET requests. See 1/ and 2/&lt;/p&gt;  &lt;p&gt;4/ All HTTP PUT and HTTP DELETE requests are turned into POST requests. This appears to be a browser limitation that the Flash player is stuck with.&lt;/p&gt;  &lt;p&gt;What this boils down to in practical terms is that if you want to pass headers in all requests, you should always use POST and you should find another way to communicate the semantics of the operation you "really wanted". The Rails community have settled on passing ?_method=PUT/DELETE as a work around for the browser problems underlying 4/ &lt;/p&gt;  &lt;p&gt;Since Flash adds the wonderful header stripping pain on GET, I'm also using ?_method=GET as a workaround for &lt;b&gt;that&lt;/b&gt;. However, since this trips up on 3/,&lt;br /&gt;I am passing a dummy object as the encoded POST data. Which means my service needs to ignore dummy posted data on a ?_method=GET request.&lt;/p&gt;&lt;p&gt;Crucial at this point to know about 2/. That wasted a bunch of my time.&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I've built all of this handling into a new RESTService class with MXML markup support so it's possible to pretend this doesn't exist on the client side.&lt;/p&gt;  &lt;p&gt;Hope this helps someone. &lt;img class="emoticon" src="https://issues.rpath.com/images/icons/emoticons/smile.gif" alt="" align="absmiddle" border="0" width="20" height="20" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-2554487006121002768?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/2554487006121002768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/2554487006121002768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/2554487006121002768'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html' title='The Truth about Flex HTTPService'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-9103043907247574133</id><published>2008-06-28T00:12:00.005-04:00</published><updated>2008-06-28T01:18:46.232-04:00</updated><title type='text'>Headers ate my brain</title><content type='html'>So the madness continues....&lt;br /&gt;&lt;br /&gt;I'm now trying to talk to an HTTP service on port 1234 for development purposes and, whaddya know, the Authorization header that I've put into the request, which my service is allowing in the crossdomain.xml file it returns (see earlier post), is now being *removed* by something - the browser? - before it ever gets to the server.&lt;br /&gt;&lt;br /&gt;The server then rejects the attempt with a 401, correctly, which causes the browser to *prompt* the end user for their WWW-Authentication credentials!!!&lt;br /&gt;&lt;br /&gt;The browser then re-presents the call to the server which now succeeds since it now has a *browser* inserted header in it.&lt;br /&gt;&lt;br /&gt;Indeed, I've tried putting all sorts of headers into my request and *none* of them are making it to the other side.&lt;br /&gt;&lt;br /&gt;What gives? Why is this so insanely tortured?&lt;br /&gt;&lt;br /&gt;Well, whaddya know. Yet another "it doesn't work" issue. This time, my pain is all because I'm now using HTTP GET in a REST style API whereas two weeks ago, I solved this problem for HTTP POST in xmlrpc style API.&lt;br /&gt;&lt;br /&gt;HTTP POST will pass any header I like.&lt;br /&gt;&lt;br /&gt;HTTP GET -  strips them all.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=60&amp;amp;catid=585&amp;amp;threadid=1373904&amp;amp;enterthread=y"&gt;this unanswered question on Adobe's forums&lt;/a&gt; for another poor soul who'd like to know why...why...why...&lt;br /&gt;&lt;br /&gt;I'm on the verge of dumping Adobe's HTTP stack and going with the open source AS3 HTTP library someone pointed me at on Google Code....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-9103043907247574133?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/9103043907247574133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/06/headers-ate-my-brain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/9103043907247574133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/9103043907247574133'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/06/headers-ate-my-brain.html' title='Headers ate my brain'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-6387664587399200934</id><published>2008-06-18T15:19:00.002-04:00</published><updated>2008-06-18T15:39:25.471-04:00</updated><title type='text'>More HTTPHeader madness</title><content type='html'>So, having solved the HTTP Basic Auth problem by "injecting" an appropriate header, things were working just fine during my local development cycle. However, recently I tried to demo my app by placing it on a development web server box. Guess what? My app could no longer access the remote services, failing with the dreaded Channel.Security violation error. This is despite having a wide open crossdomain.xml policy file on the server hosting the remote services.&lt;br /&gt;&lt;br /&gt;What gives?&lt;br /&gt;&lt;br /&gt;After much digging around, I find many many references to this problem but no solutions.&lt;br /&gt;&lt;br /&gt;Then, at last I stumble over a thread complaining about this same problem in the context of Flex apps talking to the salesforce.com services. After much discussion about crossdomain.xml options, versions of Flash players, etc. the following comment is made&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Salesforce updated their cross-domain files on the 25th- hopefully this resolved the issue.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It actually had to do with some HTTP Header requests being sent by the Salesforce toolkit, if I understand the issue correctly, not the meta-policy default.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;What's this? HTTP Headers?&lt;br /&gt;&lt;br /&gt;Synapses close and I find the following hidden gem:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kb.adobe.com/selfservice/viewContent.do?externalId=kb403184"&gt;http://kb.adobe.com/selfservice/viewContent.do?externalId=kb403184&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Indeed, as of Flash Player 9.0.115.0, insertion of headers into outgoing HTTP requests will FAIL unless the remote site has an extra entry in its crossdomain.xml file&lt;br /&gt;&lt;br /&gt;To whit:&lt;br /&gt;&lt;pre&gt;&amp;lt;allow-http-request-headers-from domain="www.example.com"&lt;br /&gt; headers="Authorization"&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can use headers="*" if you feel like getting all loose and crazy after suffering so much pain and misery leading up to this point.&lt;br /&gt;&lt;br /&gt;Indeed, as the &lt;a href="http://www.blogger.com/And%20his%20big%20brother:%20%20http://kb.adobe.com/selfservice/viewContent.do?externalId=kb403185&amp;amp;sliceId=2"&gt;companion article &lt;/a&gt;reveals, this issue will affect SOAP calls as well since they use SOAPAction headers.&lt;br /&gt;&lt;br /&gt;The thing that really grinds me about all this is that I spent waaaay too much time reading &lt;a href="http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html"&gt;the only decent article&lt;/a&gt; I can find on Adobe's developer site regarding Flash 9 security and it &lt;span style="font-weight: bold;"&gt;doesn't even mention the existence of the allow-http-request-headers-from security issue at all.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Of course, what I didn't know is that this article &lt;a href="http://www.adobe.com/devnet/flashplayer/articles/flash_player9_security_update.html"&gt;has an update&lt;/a&gt; (which Google didn't cough up)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Hope this posting helps someone...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-6387664587399200934?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/6387664587399200934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/06/more-httpheader-madness.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/6387664587399200934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/6387664587399200934'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/06/more-httpheader-madness.html' title='More HTTPHeader madness'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-5701787312735896024</id><published>2008-06-11T01:33:00.004-04:00</published><updated>2008-06-11T01:49:59.429-04:00</updated><title type='text'>Flex HTTPService and basic auth</title><content type='html'>Having done a fair bit of Flex development building JIRA reporting frontends over the past year, I'd still somehow managed to avoid having to deal with basic authentication issues against the backend service.&lt;br /&gt;&lt;br /&gt;However, in exploring building a Flex app that makes XML-RPC calls to a secured backed, I've been amazed at just how darn difficult it was to get basic auth working!&lt;br /&gt;&lt;br /&gt;Note that I'm not talking about crossdomain access issues - you have no option (correctly) but to put the right crossdomain.xml policy in the right place(s).&lt;br /&gt;&lt;br /&gt;All the examples and other (frustrated) posts I could find on the HTTP basic auth issue seemed to conclude that you can't get a Flex app talking to an HTTP service that requires basic auth without putting some kind of proxy in the middle. Adobe offer BlazeDS (and friends) for doing all this (and more!) and, in what appears (now) to be sheer bloody-mindedness, have actually implemented the setCredentials() method on HTTPService to throw an "unsupported" exception!&lt;br /&gt;&lt;br /&gt;After much digging, I tried various techniques described elsewhere, but with no success. (Some of the suggestions were truly baroque.)&lt;br /&gt;&lt;br /&gt;After walking through the Flex HTTP service stack (yay for source!), I finally realized that I could simply do the following in my initialization code before making a call on my service object:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;  addAuthHeader(myservice, "user", "pass");&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;private function addAuthHeader(serv:*, username:String,&lt;br /&gt;  password:String):void&lt;br /&gt;{&lt;br /&gt;  //add the header to request&lt;br /&gt;  var encoder : Base64Encoder = &lt;br /&gt;    new mx.utils.Base64Encoder();&lt;br /&gt;  encoder.encode(username + ":" + password);&lt;br /&gt;  serv.headers["Authorization"] = &lt;br /&gt;   "Basic " + encoder.toString();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Works fine for direct, authenticated, access from my Flex 3 app to my backend service without any need for BlazeDS or other middleman proxy strategy! And, works whether I'm using http: or https: to access the service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-5701787312735896024?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/5701787312735896024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/06/flex-httpservice-and-basic-auth.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5701787312735896024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5701787312735896024'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/06/flex-httpservice-and-basic-auth.html' title='Flex HTTPService and basic auth'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-6035480599919732327</id><published>2008-04-09T08:58:00.000-04:00</published><updated>2008-06-11T09:45:46.945-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='rpath'/><category scheme='http://www.blogger.com/atom/ns#' term='bamboo'/><title type='text'>Mercurial for Bamboo</title><content type='html'>Here at &lt;a href="http://www.rpath.com"&gt;rPath&lt;/a&gt; we use Mercurial pretty heavily.&lt;br /&gt;&lt;br /&gt;We've also been making heavy use of the JIRA issue tracker for &lt;a href="http://issues.rpath.com"&gt;engineering process management&lt;/a&gt; and the Bamboo continuous integration server. Both are products from Atlassian.&lt;br /&gt;&lt;br /&gt;Unfortunately, Bamboo didn't have built-in support for Mercurial as a source repository.&lt;br /&gt;&lt;br /&gt;Fortunately, Bamboo is pluggable and the source is available to customers.&lt;br /&gt;&lt;br /&gt;Herewith, the &lt;a href="http://confluence.atlassian.com/display/BAMEXT/Mercurial+Plugin"&gt;Mercurial plugin for Bamboo&lt;/a&gt; version 2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-6035480599919732327?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://confluence.atlassian.com/display/BAMEXT/Mercurial+Plugin' title='Mercurial for Bamboo'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/6035480599919732327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2008/04/mercurial-for-bamboo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/6035480599919732327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/6035480599919732327'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2008/04/mercurial-for-bamboo.html' title='Mercurial for Bamboo'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-4847344322011788474</id><published>2007-07-15T14:24:00.001-04:00</published><updated>2007-07-15T14:24:23.769-04:00</updated><title type='text'>Good tutorial for Mercurial</title><content type='html'>&lt;p&gt;I've always had a keen interest in distributed architectures, and was pleasantly surprised to discover mercurial when I first started working at rPath. At job-1 we'd been heavy users of perforce, which, while a good solid source control solution, didn't address the very real desire of developers to work "offline" while traveling. Mercurial solves all of this and more in fairly elegant fashion. However, it's something of a mind-bender for many developers for whom the centralized server model has become ingrained.&lt;/p&gt;&lt;p&gt;The biggest conceptual shift to make: realizing that every developer with a mercurial repository for a project has a full branch. If your development practice already encourages developers to have their own "sandbox" branches, as we did with Perforce, then it's actually a whole lot easier to embrace Mercurial.&lt;/p&gt;&lt;p&gt;There's also been quite a few articles posted around the 'net that combine mercurial for offline use with perforce or svn as a centralized hub. I've not tried that (no need at rPath), but I can see the appeal of extending an existing centralized system with mercurial.&lt;/p&gt;&lt;p&gt;Check out this &lt;a href="http://blog.medallia.com/2007/02/a_guided_tour_of_mercurial.html"&gt;tutorial&lt;/a&gt; for a solid starting point on mercurial in general.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-4847344322011788474?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.medallia.com/2007/02/a_guided_tour_of_mercurial.html' title='Good tutorial for Mercurial'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/4847344322011788474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/07/good-tutorial-for-mercurial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/4847344322011788474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/4847344322011788474'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/07/good-tutorial-for-mercurial.html' title='Good tutorial for Mercurial'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-1142295943371435407</id><published>2007-03-20T11:44:00.000-04:00</published><updated>2007-03-20T13:24:00.956-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='rpath'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='xen'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='rbuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>Build a dozen Amazon EC2 AMIs before lunch...</title><content type='html'>&lt;a href="http://www.rpath.com/corp/amazon.html"&gt;One button creation and publishing&lt;/a&gt; of Amazon Machine Images ready to boot in the EC2 cloud. What could be easier?&lt;br /&gt;&lt;br /&gt;Here's &lt;a href="http://www.rpath.com/rbuilder/search?search=+buildtype%3D14&amp;type=Projects"&gt;a few samples&lt;/a&gt;, with more being created as you're reading this by members of the rBuilder Online developer community.&lt;br /&gt;&lt;br /&gt;There's &lt;a href="http://www.rpath.com/rbuilder/tryItNow?id=1"&gt;even a sample&lt;/a&gt; you can boot live and play with on rPath's dime: a MediaWiki appliance, no less. :-)&lt;br /&gt;&lt;br /&gt;It works like this:   &lt;ul&gt;&lt;li&gt;A developer or ISV uses rBuilder to build an Amazon Machine Image (AMI) that automatically gets uploaded to the EC2 registry as a public AMI.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Anyone with an EC2 account can find, access and launch that appliance in the cloud.&lt;/li&gt;&lt;li&gt;Select appliances will be available for "Try It Now on EC2" compliments of rPath&lt;/li&gt;&lt;/ul&gt;The barriers to scalable, maintainable computing fall ever lower.&lt;br /&gt;&lt;br /&gt;Feedback on the &lt;a href="http://developer.amazonwebservices.com/connect/thread.jspa?threadID=14474&amp;amp;tstart=0"&gt;AWS Dev Forums&lt;/a&gt; appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-1142295943371435407?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://biz.yahoo.com/bw/070320/20070320005737.html?.v=1' title='Build a dozen Amazon EC2 AMIs before lunch...'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/1142295943371435407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/03/build-dozen-amazon-ec2-amis-before.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1142295943371435407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1142295943371435407'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/03/build-dozen-amazon-ec2-amis-before.html' title='Build a dozen Amazon EC2 AMIs before lunch...'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-1887508175789698002</id><published>2007-03-20T09:52:00.000-04:00</published><updated>2007-03-20T09:52:52.609-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='rpath'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual appliance'/><title type='text'>Money where my mouth is...</title><content type='html'>As part of my job at rPath, I'd previously extended an offer to members of the ISV community: being convinced of the economic benefits that flow to both supplier and consumer from the appliance approach, I'm willing to apply rPath engineering resources to convert your applications to software appliances for free.&lt;br /&gt;&lt;br /&gt;Yes, for free.&lt;br /&gt;&lt;br /&gt;So far, the program has been working pretty well for all involved.&lt;br /&gt;&lt;br /&gt;Terms and conditions apply.&lt;br /&gt;&lt;br /&gt;See http://www.rpath.com/app2app for details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-1887508175789698002?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rpath.com/app2app' title='Money where my mouth is...'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/1887508175789698002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/01/money-where-my-mouth-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1887508175789698002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/1887508175789698002'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/01/money-where-my-mouth-is.html' title='Money where my mouth is...'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-742914993483898478</id><published>2007-03-07T10:58:00.000-05:00</published><updated>2008-11-12T23:29:58.708-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silly'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='linus'/><title type='text'>Linus as an operating environment</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xUJjxqKMlIE/Re7hhpa6a0I/AAAAAAAAAAo/i1-v2mX0fAs/s1600-h/linus.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_xUJjxqKMlIE/Re7hhpa6a0I/AAAAAAAAAAo/i1-v2mX0fAs/s320/linus.png" alt="" id="BLOGGER_PHOTO_ID_5039213001244830530" border="0" /&gt;&lt;/a&gt;A few of us had a good laugh this morning after I stumbled while trying to get a copy of a vendor whitepaper. (See graphic)&lt;br /&gt;&lt;br /&gt;Humor is often most enjoyable when it  arrives unexpectedly ... although, perhaps this shouldn't be quite so unexpected. After all, non-technical marketing people have been working for technology companies since...well, since before the first release of the Linus Operating System, at least.&lt;br /&gt;&lt;br /&gt;Reminds me that one of my most enjoyed tech industry reads of the last few years was &lt;a href="http://www.insearchofstupidity.com/"&gt;In Search of Stupidity&lt;/a&gt;. Check it out sometime.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-742914993483898478?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/742914993483898478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/03/linus-as-operating-environment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/742914993483898478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/742914993483898478'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/03/linus-as-operating-environment.html' title='Linus as an operating environment'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xUJjxqKMlIE/Re7hhpa6a0I/AAAAAAAAAAo/i1-v2mX0fAs/s72-c/linus.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-3364098927811376746</id><published>2007-02-26T01:07:00.000-05:00</published><updated>2007-03-07T11:26:02.603-05:00</updated><title type='text'>EC2 AMI base devel image</title><content type='html'>Just a quick post to celebrate having cleaned up my &lt;a href="http://www.rpath.org/rbuilder/project/ami"&gt;EC2 base AMI&lt;/a&gt; appliance image. Not much of an appliance yet, but at least the &lt;a href="http://www.rpath.org/rbuilder/project/ami/build?id=9035"&gt;latest build&lt;/a&gt; properly handles the EC2 public_keys metadata allowing you to boot it with ssh keypairs and secure your ssh login. I've &lt;a href="http://www.rpath.org/rbuilder/project/ami/release?id=5421"&gt;released&lt;/a&gt; this build should anyone else wish to play.&lt;br /&gt;&lt;br /&gt;Next task is to have rAA set its initial admin user password based on EC2 metadata as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-3364098927811376746?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rpath.org/rbuilder/project/ami' title='EC2 AMI base devel image'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/3364098927811376746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/02/ec2-ami-base-devel-image.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/3364098927811376746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/3364098927811376746'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/02/ec2-ami-base-devel-image.html' title='EC2 AMI base devel image'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-5349157690036381795</id><published>2007-02-16T21:31:00.001-05:00</published><updated>2009-10-23T10:19:04.122-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>Installing EC2 tools on Mac OSX</title><content type='html'>I've been asked how I managed to coax the AWS EC2 tools to run on Mac OSX. Truth is, running them wasn't the problem: it was getting the contents of the darn rpm unpacked that is the hassle.&lt;br /&gt;&lt;br /&gt;First, there's two sets of tools required&lt;br /&gt;&lt;br /&gt;1/ The 'operational' tools that let you startup and shutdown AMI instances. These are Java and shipped as a tarball so there's no further explanation needed than already provided by AWS.&lt;br /&gt;&lt;br /&gt;2/ The 'packaging' tools that let you bundle up your new AMI images, upload to S3 and register the AMI. These are written in ruby and shipped as an rpm.&lt;br /&gt;&lt;br /&gt;#2 is the problem since rpm is not a native Mac packaging format.&lt;br /&gt;&lt;br /&gt;Here's what I did to deal with the rpm:&lt;br /&gt;&lt;br /&gt;I ended up grabbing the "port" tool from &lt;a href="http://darwinports.opendarwin.org/darwinports/dports/sysutils/rpm44/"&gt;DarwinPorts&lt;/a&gt;  in order to then install a port of rpm using&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo port install rpm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In order to install the EC2 rpm I had to hand-hack create the /var/local/lib/rpm directory with a+rw perms and then force rpm to install without checking deps or os using&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; sudo rpm -i ec2-ami-tools.noarch.rpm --nodeps --ignoreos &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After that, I was able to use the ruby based tools. Hope this helps.&lt;br /&gt;&lt;br /&gt;See also the thread on the &lt;a href="http://developer.amazonwebservices.com/connect/message.jspa?messageID=50963&amp;amp;tstart=0"&gt;AWS developer forums&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-5349157690036381795?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/5349157690036381795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/02/installing-ec2-tools-on-mac-osx.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5349157690036381795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5349157690036381795'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/02/installing-ec2-tools-on-mac-osx.html' title='Installing EC2 tools on Mac OSX'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-3889947577121407210</id><published>2007-01-16T13:35:00.000-05:00</published><updated>2007-01-16T13:47:32.980-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpath'/><category scheme='http://www.blogger.com/atom/ns#' term='vhd'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='rbuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>The power of a good abstraction</title><content type='html'>The power of a good abstraction really makes itself felt when you're able to deliver a completely new, unanticipated capability with surprisingly little effort.&lt;br /&gt;&lt;br /&gt;That's the way it has felt around rPath this past week or two as we added support for the Microsoft VHD format to rBuilder.&lt;br /&gt;&lt;br /&gt;Last night, we published the results of this effort to &lt;a href="http://www.rpath.com/rbuilder"&gt;rBuilder Online&lt;/a&gt;, allowing our community of software appliance developers to click a few buttons and generate bootable virtual appliance images that run under the &lt;a href="http://www.microsoft.com/windowsserversystem/virtualserver/default.mspx"&gt;Microsoft Virtual Server&lt;/a&gt; family of products.&lt;br /&gt;&lt;br /&gt;Going one step further, we also enabled support for the &lt;a href="http://www.virtualiron.com/"&gt;Virtual Iron&lt;/a&gt; platform, since it uses the MS VHD format as its own native virtual disk format.&lt;br /&gt;&lt;br /&gt;Two new virtual targets for very, very little incremental cost to develop and &lt;span style="font-weight: bold;"&gt;zero&lt;/span&gt; incremental cost for appliance developers to consume.&lt;br /&gt;&lt;br /&gt;Nice abstraction.&lt;br /&gt;&lt;br /&gt;Check out the (growing) list of appliances for &lt;a href="http://www.rpath.com/rbuilder/search?type=Projects&amp;amp;search=buildtype%3D10"&gt;MS Virtual Server&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-3889947577121407210?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/3889947577121407210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/01/power-of-good-abstraction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/3889947577121407210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/3889947577121407210'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/01/power-of-good-abstraction.html' title='The power of a good abstraction'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-5052494045224384798</id><published>2007-01-02T17:25:00.000-05:00</published><updated>2007-08-03T02:18:41.783-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtual appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='xen'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>The fast track to Amazon EC2</title><content type='html'>&lt;p&gt;NOTE: The instructions below are now completely superceded. rBuilder Online has the ability to generate Amazon Machine Images directly, uploads them to S3 and registers them with EC2 as public AMI's. Without you having to do anything. Cook. Build. Boot.&lt;/p&gt;&lt;p&gt;Over the holiday break I found some time to get hands-on with the &lt;a href="https://www.amazon.com/ec2"&gt;Amazon EC2&lt;/a&gt; service. Being based on the Xen hypervisor, I knew that in theory any rPath-based appliance should "just work" as an Amazon Machine Image (AMI)&lt;br /&gt;&lt;br /&gt;The good news: it's true!&lt;br /&gt;&lt;br /&gt;Here's the skinny on how to get any rPath based appliance that has been built in the [xen,domU] flavor working on EC2. For this exercise, you'll need both an &lt;a href="http://www.amazon.com/s3"&gt;Amazon S3&lt;/a&gt; account (since EC2 uses image files drawn from S3) and an EC2 account. The latter is harder to come by since EC2 is still in limited beta.&lt;br /&gt;&lt;br /&gt;Make sure you've already got your AWS account ID, access key and secret access key, and have generated a cert and pk file locally. More tool instructions &lt;a href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-10-01/setting-up-your-tools.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then, make sure you have the &lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&amp;amp;categoryID=88"&gt;Amazon cmd line tools&lt;/a&gt; for working with EC2. The 'operational' EC2 tools are written in Java, shipped as a tarball, and seem to run fine. The tools for &lt;span style="font-weight: bold;"&gt;bundling&lt;/span&gt; new AMI images and uploading them to S3 are written in ruby and &lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=368&amp;amp;categoryID=88"&gt;available for download&lt;/a&gt; as an rpm. (Painful installing these on Mac OS X btw.)&lt;br /&gt;&lt;br /&gt;To use a given rPath-based appliance image:TE: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Grab the Xen filesystem image from rBuilder Online. (e.g. &lt;a href="http://www.rpath.org/rbuilder/downloadImage?fileId=9237"&gt;MediaWiki Appliance&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unzip and rename it to &lt;span style="font-family: courier new;"&gt;mediawiki.img&lt;/span&gt; for consistency with Amazon's docs&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bundle it up using ec2-bundle-image&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ec2-bundle-image -i mediawiki.img  -k &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;pk-yourkey.pem&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; -c &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;cert-yourcert.pem&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; -u &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;your_aws_acct_id&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Upload it using ec2-upload-image&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;ec2-upload-bundle -b &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;your_s3_bucket&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; -m /tmp/&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;mediawiki&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;.img.manifest.xml  -a &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;your_public_key&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; -s &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;your_secret_key&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 100%;"&gt;&lt;span style="font-family: times new roman;"&gt;If you don't already have an S3 bucket, the easy way to create one is using the &lt;a href="http://www.awszone.com/scratchpads/aws/s3.us/CreateBucket.aws"&gt;AWSZone web UI&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Register it using ec2-register-image&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ec2-register &lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;your_s3_bucket&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;mediawiki&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;.img.manifest.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="font-family: times new roman;"&gt;Make note of the AMI ID reported.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Boot it using ec2-run-instances with the AMI ID. Wait a minute or two.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ec2-run-instances ami-61b05508&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Check status and get DNS name&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ec2-describe-instances &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Login to the rAA console just as you would any local machine....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;https://&lt;/span&gt;&lt;span style="font-style: italic; font-family: courier new;"&gt;dns-name&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;:8003/&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;That's it!&lt;br /&gt;&lt;br /&gt;No magic, nothing special. Just use.&lt;br /&gt;&lt;br /&gt;If you happen to be the developer of the appliance in question, you can get extra credit by adding a few entries to your appliance's /etc/fstab to mount the Amazon provided sda2 and sda3 as 160GB disk space and swap partitions respectively.&lt;br /&gt;&lt;br /&gt;What's the catch?&lt;br /&gt;&lt;br /&gt;By design, all EC2 instances are ephemeral - meaning that when shutdown, all local disk storage evaporates. S3 is Amazon's solution for long-lived storage. Think of it as the NAS to complement the EC2 grid.&lt;br /&gt;&lt;br /&gt;To use EC2 for "persistent" appliances is going to take either a snapshot/backup strategy, a fault-tolerant clustered approach, or integration of perhaps the S3 FUSE filesystem driver for persistent storage needs. All good topics for further exploration...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-5052494045224384798?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/5052494045224384798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2007/01/fast-track-to-amazon-ec2.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5052494045224384798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/5052494045224384798'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2007/01/fast-track-to-amazon-ec2.html' title='The fast track to Amazon EC2'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-116239426829858986</id><published>2006-11-01T10:08:00.000-05:00</published><updated>2006-11-01T11:55:37.007-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='xen'/><title type='text'>MediaWiki as a Xen virtual appliance</title><content type='html'>After a lot of hard work and a burst of activity during the past two weeks, &lt;a href="http://www.rpath.com/"&gt;rPath&lt;/a&gt; has officially released support for the &lt;a href="http://www.xensource.com/solutions/"&gt;Xen virtual machine platform&lt;/a&gt;. In a nutshell, you can now produce &lt;a href="http://en.wikipedia.org/wiki/Virtual_appliance"&gt;virtual appliances&lt;/a&gt; that run under the Xen hypervisor using &lt;a href="http://www.rpath.org/rbuilder"&gt;rBuilder Online&lt;/a&gt;. Indeed, having been announced this morning, there's already more than 10 virtual appliances &lt;a href="http://www.rpath.com/xen"&gt;available for downloading&lt;/a&gt; in Xen format.&lt;br /&gt;&lt;br /&gt;How hard is it?&lt;br /&gt;&lt;br /&gt;To test this reality, I took the &lt;a href="http://www.rpath.org/rbuilder/project/vehera-base/"&gt;MediaWiki Appliance&lt;/a&gt; I've been maintaining (&lt;a href="http://www.rpath.org/rbuilder/project/vehera-base/release?id=5112"&gt;already available&lt;/a&gt; in VMware, ISO and raw image versions) and set about producing a Xen version.&lt;br /&gt;&lt;br /&gt;Here's the sequence of steps required.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to the group-builder tool on &lt;a href="http://www.rpath.org/rbuilder/project/vehera-base/groups"&gt;rBuilder Online&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Cook my top-level group, group-amp, selecting the checkbox for "Xen DomU" flavor.&lt;/li&gt;&lt;li&gt;When the cook is done (less than 5 minutes), create a new Build&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select the freshly cooked [xen,domU] flavored version. &lt;/li&gt;&lt;li&gt;Select the Raw Filesystem image type (easy to &lt;a href="http://wiki.rpath.com/wiki/Xen_Solutions_Using_rPath_Technologies"&gt;use on a Xen Dom0 server&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Wait (less than 10 minutes)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Done!&lt;/li&gt;&lt;/ol&gt;I'm not sure how this could be easier: one codebase, one specification in rBuilder Online for my MediaWiki appliance and I can produce as many target software appliance formats and now, multiple virtual machine options, as I care to offer.&lt;br /&gt;&lt;br /&gt;COOL&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-116239426829858986?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rpath.org/rbuilder/project/vehera-base/release?id=5112' title='MediaWiki as a Xen virtual appliance'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/116239426829858986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2006/11/mediawiki-as-xen-virtual-appliance.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/116239426829858986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/116239426829858986'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2006/11/mediawiki-as-xen-virtual-appliance.html' title='MediaWiki as a Xen virtual appliance'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-115457335573621830</id><published>2006-08-02T22:31:00.000-04:00</published><updated>2006-11-01T23:05:00.820-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='intranets'/><title type='text'>MediaWiki Appliance</title><content type='html'>&lt;span style="font-family:arial;"&gt;MediaWiki  is a darn nice piece of software, well proven given the enormous community of use it sustains over at Wikipedia - and many, many other smaller sites.&lt;br /&gt;&lt;br /&gt;Even so, I've noticed a distinct lack of support for non-public uses of MediaWiki in the codebase, and so have started down a path to customize and package the stuff into an intranet or even public-but-controlled mode of usage. There's a number of useful extensions that get closer to this goal, but also a fair degree of hacking involved (so far).&lt;br /&gt;&lt;br /&gt;I'm also particularly interested in how to apply wiki-style approaches to the classic software development technical publications problem: docs always lag code and engineers don't write good docs. Previous efforts to solve this at &lt;a href="http://www.versata.com/"&gt;Versata &lt;/a&gt;led to a successful, but purely internal, use of MediaWiki to create, maintain and auto-generate the online help and documentation shipped with the Versata-6 Eclipse based IDE. (Yeah, I'll get around to writing that one up sometime with code samples)&lt;br /&gt;&lt;br /&gt;Contemporaneously with this posting, &lt;a href="http://wiki.rpath.com/"&gt;wiki.rpath.com&lt;/a&gt; is an example of my recent activities in this area.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.rpath.org/rbuilder/project/vehera-base/"&gt;MediaWiki Appliance&lt;/a&gt; is the packaging vehicle I'm using to get this stuff pulled together into a form that others can exploit without having to know much, if anything at all, about the underlying technology (Linux, Apache, &lt;/span&gt;&lt;span style="font-family:arial;"&gt;MySQL, PHP&lt;/span&gt;&lt;span style="font-family:arial;"&gt;). It's a public, free-for-use software appliance built with rPath's tools that "make the OS (and a bunch of other gunk) disappear" (disclaimer: I currently work for &lt;a href="http://www.rpath.com/"&gt;rPath&lt;/a&gt;, and not surprisingly, think the platform rPath has developed is pretty darn powerful).&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-115457335573621830?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rpath.org/rbuilder/project/vehera-base/' title='MediaWiki Appliance'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/115457335573621830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2006/08/mediawiki-appliance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/115457335573621830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/115457335573621830'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2006/08/mediawiki-appliance.html' title='MediaWiki Appliance'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7497451.post-115402671790424532</id><published>2006-07-27T14:58:00.000-04:00</published><updated>2006-11-01T23:08:40.352-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><title type='text'>Mashup of dev team tools in an appliance form factor</title><content type='html'>&lt;span style="font-family:arial;"&gt;There's an interesting mashup of a wiki, subversion and bugtracking server coming together over at &lt;/span&gt;&lt;a style="font-family: arial;" href="http://devinfranix.blogspot.com/"&gt;&lt;span id="gtbmisp_18" style="border: 0pt none ; margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 50%; font-style: normal; font-variant: normal; font-weight: bold; line-height: normal; font-size-adjust: none; font-stretch: normal; position: static; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left; text-indent: 0pt; text-transform: none; text-decoration: underline; cursor: pointer;font-size:100%;color:red;"  &gt;DevInfraNix&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; that comes delivered in your choice of virtual machine, ISO install CD's or raw HDD image.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Collaborative support for distributed development teams has been an ongoing theme for me since I started my first software company back in 1989. Over the years I've used various commercial products as pieces of this puzzle, but the integration either wasn't possible or, worse, not considered valuable.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Things have certainly changed for the better!&lt;/span&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://digg.com/programming/Mashup_of_dev_team_tools_in_an_appliance_form_factor"&gt;&lt;span id="gtbmisp_21" style="border: 0pt none ; margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 50%; font-style: normal; font-variant: normal; font-weight: bold; line-height: normal; font-size-adjust: none; font-stretch: normal; position: static; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left; text-indent: 0pt; text-transform: none; text-decoration: underline; cursor: pointer;font-size:100%;color:red;"  &gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7497451-115402671790424532?l=verveguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://devinfranix.blogspot.com' title='Mashup of dev team tools in an appliance form factor'/><link rel='replies' type='application/atom+xml' href='http://verveguy.blogspot.com/feeds/115402671790424532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://verveguy.blogspot.com/2006/07/mashup-of-dev-team-tools-in-appliance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/115402671790424532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7497451/posts/default/115402671790424532'/><link rel='alternate' type='text/html' href='http://verveguy.blogspot.com/2006/07/mashup-of-dev-team-tools-in-appliance.html' title='Mashup of dev team tools in an appliance form factor'/><author><name>Brett Adam</name><uri>http://www.blogger.com/profile/17580012246835564294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
