<?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-1672895804033550553</id><updated>2012-02-16T19:04:37.003-08:00</updated><category term='Personal'/><category term='LuaAlchemy'/><category term='ANTLR'/><category term='Flash'/><category term='Alchemy'/><category term='Smalltalk'/><category term='FlaCC'/><category term='360'/><category term='Conference'/><category term='Squeak'/><category term='ActionScript'/><category term='Flex'/><category term='Lua'/><category term='Process'/><title type='text'>Arcane Coder</title><subtitle type='html'>Yet another software development blog (YASDB).  The blog will cover my software engineering interests including (but not limited to): RIA (Flex, AIR, and Silverlight), Languages (ActionScript, C#, Ruby, Lisp/Scheme, Smalltalk, Io, Erlang), Language Paradigms (object oriented, dynamic,  functional, and concurrent programming, cross platform development, and development process.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-8135031578883571920</id><published>2009-03-13T21:33:00.000-07:00</published><updated>2010-01-12T09:10:14.947-08:00</updated><title type='text'>Alchemy Data Manipulation Faster Than Vectors</title><content type='html'>While working with Alchemy to port a roguelike library to handle field of view calculations for a 2d tile game (&lt;a href="http://thedoryenlibrary.appspot.com/"&gt;The Doryen Library&lt;/a&gt;, port is called &lt;a href="http://github.com/rstehwien/libtcod-alchemy/tree/master"&gt;libtcod-alchemy&lt;/a&gt;) I noticed some drastic speed differences between using a ByteArray in pure AS and manipulating that same ByteArray inside Alchemy.  Out of curiosity I wondered how Alchemy manipulations of large data structures would compare to a native AS Array or the new (and faster) Vector.&lt;br /&gt;&lt;br /&gt;As it turns out, Alchemy wins hands down when the data is already in a ByteArray.  If you need to transfer data from an array/vector into a ByteArray to hand off to Alchemy and then transfer it back, it is slower to use Alchemy.  For this test I have a collection of 1,000,000 numbers and for each iteration of the test, I loop over the numbers and add one.&lt;br /&gt;&lt;br /&gt;Alchemy ByteArray additions are about 6 times faster than Vector integer additions and 10 times faster than pure AS manipulations of a ByteArray (when using Array notation [] on a ByteArray to manipulate a Byte - using position, readInt() and writeInt() in AS is much slower).&lt;br /&gt;&lt;br /&gt;Below is test program that proves it:&lt;br /&gt;&lt;embed src="http://www.arcanearcade.com/Flex/SpeedTest/SpeedTest.swf" height="600" width="650"&gt;&lt;/embed&gt;&lt;br /&gt;Note that the demo above requires Flash Player 10 (required by Alchemy).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE: &lt;/span&gt;If you want view the source, you need to go &lt;a href="http://www.arcanearcade.com/Flex/SpeedTest/index.html"&gt;here&lt;/a&gt; and right click on the app (the embedded version in blogger doesn't know where to look for the source).&lt;br /&gt;&lt;br /&gt;This tells me a few things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There is a great deal of room for improvement in ActionScript's compiler since it should perform better IMHO.  I understand some slow downs due to type safety, garbage collection, etc but I didn't expect the huge difference.&lt;/li&gt;&lt;li&gt;If Alchemy had native access to the same Native calls used to seralize data to AMF that is used in AS (described &lt;a href="http://www.onflex.org/ted/2007/11/abcs-of-amf.php"&gt;here&lt;/a&gt;), Alchemy would be blazingly fast for manipulating data even when stored in Arrays or Vectors.  You would just serialize the objects as AMF into Alchemy, manipulate the data with Alchemy, and serialize it back out as AMF back to AS.&lt;/li&gt;&lt;li&gt;The ByteArray.position is much slower than I would expect.&lt;/li&gt;&lt;li&gt;If you need to process large amounts of data, seriously consider using Alchemy.  Remember the marshalling tax to and from Alchemy - every bit of data passing into and out of Alchemy takes time to marshall, so you want to do it in large chunks like in my speed test.&lt;/li&gt;&lt;/ul&gt;You may notice that the first Alchemy test takes more time than normal - this is due to initialization of the Alchemy library.&lt;br /&gt;&lt;br /&gt;In case you are curious essentially the same test takes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;GCC C Code - 1 or 2 milliseconds&lt;/li&gt;&lt;li&gt;GCC Lua Code - 300-400 milliseconds&lt;/li&gt;&lt;li&gt;Lua Alchemy - 8 seconds (might be including some of the time to get the tick count from ActionScript)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-8135031578883571920?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/8135031578883571920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2009/03/alchemy-data-manipulation-faster-than.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8135031578883571920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8135031578883571920'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2009/03/alchemy-data-manipulation-faster-than.html' title='Alchemy Data Manipulation Faster Than Vectors'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-614370475872040250</id><published>2009-02-01T12:13:00.000-08:00</published><updated>2010-01-12T09:10:14.956-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LuaAlchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Lua Alchemy Getting Sweeter in v02a</title><content type='html'>Thanks to Alexander Lua Alchemy now has sugar!  What this means is you no longer need to make calls like the following in the Lua Alchemy code:&lt;br /&gt;&lt;pre&gt;as3.call(myvar, "someCall", param1, param2)&lt;/pre&gt;&lt;br /&gt;Instead you can make calls that look like native Lua code:&lt;br /&gt;&lt;pre&gt;myvar.someCall(param1, param2)&lt;/pre&gt;&lt;br /&gt;This includes chaining calls like a.b.c().d&lt;br /&gt;&lt;br /&gt;Below is a preview of the release:&lt;br /&gt;&lt;embed src="http://lua-alchemy.googlecode.com/svn/trunk/demo/LuaAlchemyDemo.swf" height="600" width="650"&gt;&lt;/embed&gt;&lt;br /&gt;Note that the demo above requires Flash Player 10 (required by Alchemy and my use of the local file system to allow opening/saving files).  It is also hosted &lt;a href="http://lua-alchemy.googlecode.com/svn/trunk/demo/index.html"&gt;here&lt;/a&gt; where it can take up a full browser screen and is much easier to read.&lt;br /&gt;&lt;br /&gt;You will notice in the demo code a great number of calls to as3.tolua(xxx).  These calls convert ActionScript types into Lua types where possible.  We removed all automatic conversion from AS3 to Lua types for performance reasons - each time you cross the &lt;code&gt;Lua&lt;-&gt;C&lt;-&gt;AS3&lt;/code&gt; boundary you have to pay the Alchemy wrapper performance tax.&lt;br /&gt;&lt;br /&gt;For more information on the upcoming release of v0.2a (official downloads available in the next few days) see:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://github.com/lua-alchemy/lua-alchemy/blob/e25e54d4f25e42232f52b258abbf95052325152e/HISTORY"&gt;HISTORY for v0.2a&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/lua-alchemy"&gt;Lua Alchemy Homepage&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-614370475872040250?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/614370475872040250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2009/02/lua-alchemy-getting-sweeter-in-v02a.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/614370475872040250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/614370475872040250'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2009/02/lua-alchemy-getting-sweeter-in-v02a.html' title='Lua Alchemy Getting Sweeter in v02a'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-2282924824527605882</id><published>2008-12-21T21:45:00.000-08:00</published><updated>2010-01-12T09:10:14.965-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LuaAlchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Lua Alchemy v0.1a Released</title><content type='html'>The first release of Lua Alchemy has been released; the library SWC, demo, and code can be downloaded from here:&lt;br /&gt;&lt;a href="http://code.google.com/p/lua-alchemy/"&gt;http://code.google.com/p/lua-alchemy/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since my preview post (which is now running the same demo code) we have&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Added many Lua scripting samples.&lt;/li&gt;&lt;li&gt;Fixed some memory leaks.&lt;/li&gt;&lt;li&gt;Cleaned up function callbacks created in Lua which would typically be used for event listeners.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Below is a preview of the release:&lt;br /&gt;&lt;embed src="http://www.arcanearcade.com/Flex/LuaAlchemyDemoV.1a/LuaAlchemyDemo.swf" height="600" width="650"&gt;&lt;/embed&gt;&lt;br /&gt;Note that the demo above requires Flash Player 10 (required by Alchemy and my use of the local file system to allow opening/saving files).  It is also hosted &lt;a href="http://www.arcanearcade.com/Flex/LuaAlchemyDemoV.1a/"&gt;here&lt;/a&gt; where it can take up a full browser screen and is much easier to read.&lt;br /&gt;&lt;br /&gt;The next version will include syntax sugar so instead of calling as3.call(var, "function", param) you could call var.function(param) and similar calls to make calling ActionScript code look the same as calling Lua code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-2282924824527605882?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/2282924824527605882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/12/lua-alchemy-v01a-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2282924824527605882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2282924824527605882'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/12/lua-alchemy-v01a-released.html' title='Lua Alchemy v0.1a Released'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-1638296826173588723</id><published>2008-12-15T11:18:00.000-08:00</published><updated>2010-01-12T09:10:14.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='LuaAlchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>LuaAlchemy Project v.1a Preview</title><content type='html'>Since my &lt;a href="http://arcanearcade.blogspot.com/2008/12/lua-actionscript-alchemy.html"&gt;last post&lt;/a&gt; my experiment to make Lua a runtime scripting language in Flash using Alchemy has become a full open source project located here:&lt;br /&gt;&lt;a href="http://code.google.com/p/lua-alchemy/"&gt;http://code.google.com/p/lua-alchemy/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I even have a partner named Alexander Gladysh whom I met on the Lua boards.&lt;br /&gt;&lt;br /&gt;We are approaching a V.1a release of the project.  Using LuaAlchemy you can now create any ActionScript class available at runtime, get/set properties, call functions, and set event listeners (actually you can return a Lua function to use as an ActionScript function).   The Lua to ActionScript interface is a little raw right now but we plan on adding some Lua sugar to make accessing ActionScript objects, classes, and namespaces in Lua look and feel like using Lua objects.&lt;br /&gt;&lt;br /&gt;Below is a preview of the release:&lt;br /&gt;&lt;embed src="http://www.arcanearcade.com/Flex/LuaAlchemyDemoV.1a/LuaAlchemyDemo.swf" height="600" width="600"&gt;&lt;/embed&gt;&lt;br /&gt;Note that the demo above requires Flash Player 10 (required by Alchemy and my use of the local file system to allow opening/saving files).  It is also hosted &lt;a href="http://www.arcanearcade.com/Flex/LuaAlchemyDemoV.1a/"&gt;here&lt;/a&gt; where it can take up a full browser screen and is much easier to read.&lt;br /&gt;&lt;br /&gt;Along the way to this release we have encountered a few problems which I will discuss.  The first problem was speed.  Although the Alchemy V.4a compiled code was fast enough for our purposes, it was about 30 times slower running a life simulator written in Lua than natively compiled Lua.   The release of Alchemy V.5a has made life run 4 times faster so progress is being made (v.4a had some debug code compiled in that slowed things down).&lt;br /&gt;&lt;br /&gt;The second problem has been gluegen.  Gluegen is a tool to help you create wrappers around C code that takes a mix of C and ActionScript code to generate C and ActionScript wrappers.  Unfortunately this seems to interfear with CLibInit.setSprite() which we wanted to use to provide a sprite that Lua could use for stdin, stdout, and stderr.  Glugen created code creates and inits CLibInit as static members and you seemingly need to call setSprite() before init().  We worked around that problem by providing an output TextArea in the demo below, but we plan on writing the wrapper ourselves and not using gluegen at all.&lt;br /&gt;&lt;br /&gt;The third problem is related to garbage collection in Flash and Lua.  To make Lua functions usable as an ActionScript function we call AS3_Function() to create an ActionScript function that calls a C callback function passing in some contextual data.  This data includes some Lua references in a malloced structure and we would like to know when it isn't needed anymore so it can be released.  We haven't figured out any way for Alchemy to tell us when the object is no longer needed.  A future version will do some cleanup when the lua_state is closed.&lt;br /&gt;&lt;br /&gt;Overall our experience has been a positive one and Alchemy is still in Alpha.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-1638296826173588723?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/1638296826173588723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/12/luaalchemy-project-v1a-preview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/1638296826173588723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/1638296826173588723'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/12/luaalchemy-project-v1a-preview.html' title='LuaAlchemy Project v.1a Preview'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-2597532588372617358</id><published>2008-12-02T19:26:00.000-08:00</published><updated>2010-01-12T09:10:14.981-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Alchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='LuaAlchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='Lua'/><category scheme='http://www.blogger.com/atom/ns#' term='FlaCC'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Lua ActionScript Alchemy</title><content type='html'>At Adobe MAX 2008 San Francisco, &lt;a href="http://labs.adobe.com/wiki/index.php/Alchemy"&gt;Alchemy&lt;/a&gt; was released.  Alchemy was once known as FlaCC or Cassava and is a C/C++ to ActionScript compiler.&lt;br /&gt;&lt;br /&gt;Alchemy works by translating C/C++ code to ActionScript through a LLVM compiler which instead of producing machine or bytecode produces ActionScript.  The translated C/C++ code uses a big ActionScript ByteArray as the C/C++ heap and stack.  The performance of alchemy is slow if you martial data from C/C++ code to ActionScript or back but faster (supposedly up to 10 times faster) than ActionScript code you write yourself for data intensive actions where everything operates in the C/C++ memory space - speed improvements over AS code are also due to LLVM doing code optimization which is missing from the normal AS compiler.&lt;br /&gt;&lt;br /&gt;After downloading and setting up Alchemy, I started trying to port over a few C/C++ libraries.  The following libraries have given me some trouble mainly with needing to adjust makefiles or the ./configure script: Angband, Nethack, guile, Python, Ruby, ARToolkitPlus, SDL, and Squeak.  I haven't given up on them but I wasn't in the mood to do battle with Makefiles; I wanted to learn Alchemy.&lt;br /&gt;&lt;br /&gt;My success came with compiling the scripting language &lt;a href="http://www.lua.org/"&gt;Lua 5.1.4&lt;/a&gt; and embedding it into a Flex application.   The following proof of concept can run a Lua script which returns one or more values and are shown in the &lt;span style="font-style: italic;"&gt;Lua Stack&lt;/span&gt; Panel.  Lua can make the following calls into Flex:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;getTextAreaProperty(property_name) - Returns the given property of the text area in the lower left hand corner.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;setTextAreaProperty(property_name, value) - Sets the given property on the text area in the lower left hand corner (must accept string values).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;callTextAreaFunction(function_name[, param1, ..., paramN]) - Calls a function on the text area in the lower left hand corner (must accept string values).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;average(value1, ..., valueN) - Returns the average and sum of the given values.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;embed src="http://www.arcanearcade.com/Flex/LuaAlchemy/LuaAlchemy.swf" height="600" width="600"&gt;&lt;/embed&gt;&lt;br /&gt;Note that the demo above requires Flash Player 10 (required by Alchemy and my use of the local file system to allow opening/saving files).  It is also hosted &lt;a href="http://www.arcanearcade.com/Flex/LuaAlchemy"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Should I continue working on this library, I'd want to allow Lua to create and call functions on any arbitrary ActionScript class.  Alchemy is still in beta and does have its own problems - not everything builds easily and while pure Alchemy code can be faster than ActionScript, marshaling from ActionScript to C/C++ code and back can slow things down - for example life.lua takes 4 seconds with the standard compile of Lua and 13 minutes! with the Alchemy build.  Still it works quite well for my purposes of embedding a runtime scripting language into my Flex applications.&lt;br /&gt;&lt;br /&gt;For more information check out the following blog posts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.automatastudios.com/2008/11/21/understanding-adobe-alchemy"&gt;http://www.automatastudios.com/2008/11/21/understanding-adobe-alchemy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.google.com/View?docid=dg7w6sqr_8fbhvz6d6"&gt;http://docs.google.com/View?docid=dg7w6sqr_8fbhvz6d6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://techblog.floorplanner.com/2008/11/23/alchemy-first-looks"&gt;http://techblog.floorplanner.com/2008/11/23/alchemy-first-looks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.theregister.co.uk/2008/12/02/adobe_alchemy/"&gt;http://www.theregister.co.uk/2008/12/02/adobe_alchemy/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Edit: Created a google code project to share efforts in using Alchemy to embed Lua in ActionScript.  Uploaded the proof of concept:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/lua-alchemy"&gt;http://code.google.com/p/lua-alchemy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/lua-alchemy/downloads/list"&gt;http://code.google.com/p/lua-alchemy/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-2597532588372617358?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/2597532588372617358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/12/lua-actionscript-alchemy.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2597532588372617358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2597532588372617358'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/12/lua-actionscript-alchemy.html' title='Lua ActionScript Alchemy'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-8555014695605137389</id><published>2008-10-05T17:51:00.000-07:00</published><updated>2010-01-12T09:10:15.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='FlaCC'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>FlaCC (C/C++ to Flash Compiler)</title><content type='html'>More news on the C/C++ to Flash compiler, now called FlaCC.  With this tool developed by Scott Petersen at Adobe would allow almost any arbitrary C/C++ code to be compiled down to ActionScript bytecode to run on the Flash player.  I first heard of this at MAX 2007 and there will be a session at MAX 2008 on this (plus hints it will be in keynotes).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While we wait here are a few links to some more recent news:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://www.peterelst.com/blog/2008/10/05/more-information-on-flacc/"&gt;http://www.peterelst.com/blog/2008/10/05/more-information-on-flacc/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;From LLVM Dev Meeting&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf"&gt;http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler_Hi.m4v"&gt;http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler_Hi.m4v&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;The MAX 2008 Session is "Using C++ Libraries in Flash Player and Adobe AIR"  Monday, November 17, 2:00 pm - 3:00 pm.  I'm looking forward to that session.&lt;br /&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/1672895804033550553-8555014695605137389?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/8555014695605137389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/10/flacc-cc-to-flash-compiler.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8555014695605137389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8555014695605137389'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/10/flacc-cc-to-flash-compiler.html' title='FlaCC (C/C++ to Flash Compiler)'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-8486939092217974960</id><published>2008-07-27T06:11:00.000-07:00</published><updated>2010-01-12T09:10:15.061-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><category scheme='http://www.blogger.com/atom/ns#' term='360'/><title type='text'>360|Flex</title><content type='html'>This coming August, I'll be heading out to San Jose to attend the 360 Flex conference:&lt;br /&gt;&lt;a href="http://www.360conferences.com/360flex/"&gt;http://www.360conferences.com/360flex/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm new to the Flex scene (almost a year now) and came from a background of 14 years of C++ cross-platform application development so it is exciting and different to immerse myself in the new culture.  This is the first 360 I will have attended and only the second conference related to Flex (the first being MAX 2007 in Chicago).  I'm now fortunate enough to be working for Universal Mind (as a contractor) and when I saw all the people taking vacation to attend 360, I knew I had to attend.&lt;br /&gt;&lt;br /&gt;Of particular interest to me are sessions teaching frameworks, component building, design patterns, process (I'm a big process geek - how you do something is very important for maintainability), and low level programming.  There are so many sessions that appeal to me at the same time that I'm going to have to make some rough decisions.  Here is a list of the appealing sessions (fortunately I work with some of these people so I can pick their brain later):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pre-Conference stuff I cannot attend because my plane doesn't land until 2pm&lt;br /&gt;&lt;ul&gt;&lt;li&gt;James Huang - The R1-RPC/J Toolkit and the D.eval API&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ben Stucki/Ryan Campbell - OpenFlux&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Adam Flater - How to make your AIR app blow up with Merapi&lt;/li&gt;&lt;li&gt;Alex Harui - Versioning Support for Large Applications and Portals&lt;/li&gt;&lt;li&gt;Andrew Powell - Implementing BlazeDS&lt;/li&gt;&lt;li&gt;Axel Jensen - Project Workﬂow (trac,svn,ANT,XML...)&lt;/li&gt;&lt;li&gt;Ben Clinkinbeard - Concepts and Strategies for Creating Reusable Components&lt;/li&gt;&lt;li&gt;Ben Stucki - How to Build a Framework&lt;/li&gt;&lt;li&gt;Brad Umbaugh/RJ Owen - Diving Deep with the Flex Component Lifecycle&lt;/li&gt;&lt;li&gt;Brian Weisenthal - Architecting real-time and collaborative applications in Flex&lt;/li&gt;&lt;li&gt;Chet Haase - Filthy Rich [Flex] Clients&lt;/li&gt;&lt;li&gt;Chris Scott - Introduction to the Swiz Framework for Flex&lt;/li&gt;&lt;li&gt;Eric Ko - Reﬂective Programming&lt;/li&gt;&lt;li&gt;Jacob Wright - Advanced ActionScript APIs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Jeff Houser - How to Build Flex Components&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Jeff Tapper - Unraveling the hassle with Drag an Drop in AIR&lt;/li&gt;&lt;li&gt;Jonathan Branam - Improve your programming by reading the Flex source code&lt;/li&gt;&lt;li&gt;Josh Tynjala - Polishing Components for the Unwashed Masses&lt;/li&gt;&lt;li&gt;Laura Arguello - Decoupling Flex Applications with Mate Framework&lt;/li&gt;&lt;li&gt;H. Paul Robertson - Advanced AIR and SQLite: An optimization conversation&lt;/li&gt;&lt;li&gt;Ryan Campbell - PlexiGlass (OpenFlux 3D Components)&lt;/li&gt;&lt;li&gt;Samuel Asher Rivello - Creating an MMO from Scratch with Adobe Flex 3… in 59 minutes.&lt;/li&gt;&lt;li&gt;Tom Gonzalez - Data Visualization and Dashboards with Flex&lt;/li&gt;&lt;li&gt;Troy Gardner - Advanced State management, the Heirarchical State Design Pattern&lt;/li&gt;&lt;/ul&gt;PS: The 360|Flex team sent me a 1GB flash drive with content from 360|Flex Atlanta and Europe.  I could pass it on to a lucky commenter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-8486939092217974960?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/8486939092217974960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/07/360flex.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8486939092217974960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8486939092217974960'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/07/360flex.html' title='360|Flex'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-2440401863859258479</id><published>2008-05-16T06:24:00.000-07:00</published><updated>2010-01-12T09:10:15.074-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Best new Flash 10 Feature: File Access</title><content type='html'>The new &lt;a href="http://labs.adobe.com/technologies/flashplayer10/"&gt;Flash 10 Beta&lt;/a&gt; is out.  While all the graphical improvements are fantastic, for me the best new feature is &lt;a href="http://www.flashmagazine.com/News/detail/flash_player_10_new_feature_load_and_save_files_using_filereference/"&gt;file access&lt;/a&gt;.  I've written a few applications where I wanted to load or save files directly from Flex.  Having to write a server just to upload the file to and then send back to Flash was pretty ridiculous just to preview an image that the user may or may not want to really upload.  As long as the user is asked to load or save a file it should be safe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-2440401863859258479?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/2440401863859258479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/05/best-new-flash-10-feature-file-access.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2440401863859258479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2440401863859258479'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/05/best-new-flash-10-feature-file-access.html' title='Best new Flash 10 Feature: File Access'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-4598725899611916461</id><published>2008-05-11T17:18:00.000-07:00</published><updated>2010-01-12T09:10:15.050-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='FlaCC'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>ActionScript Cross Compiler Theories</title><content type='html'>This post is a bit late coming, but I'm trying to be good and post once a week.&lt;br /&gt;&lt;br /&gt;Last year after Adobe MAX 2007, I &lt;a href="http://arcanearcade.blogspot.com/2007/10/c-to-actionscript.html"&gt;posted&lt;/a&gt; a bit on the preview of a C++ to ActionScript compiler.  This year there has been a little more &lt;a href="http://www.infoworld.com/article/08/02/26/adobe-player_1.html"&gt;buzz&lt;/a&gt; &lt;a href="http://www.onflex.org/ted/2008/02/extending-adobe-flash-player-and-adobe.php"&gt;buzz&lt;/a&gt; on the subject.  I've been curious how this might be done and have a few theories:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a C++ parser/compiler to either produce Flash bytecodes or ActionScript.  C++ is notoriously hard to parse so this would be quite a pain without something to get you started.  There is a partial ANTLR grammar for C++ &lt;a href="http://www.antlr.org/grammar/1198064893071/CPP_parser_v_3.2.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a gcc backend to produce Flash bytecodes.  All gcc languages compile to intermediate languages called GIMPLE and GENERIC.  Target platforms "merely" translate this intermediate form to the target platform.  See &lt;a href="http://gcc.gnu.org/onlinedocs/gccint/Tree-SSA.html#Tree-SSA"&gt;this link&lt;/a&gt; for more information.  This path would be the most generic solution and allow any gcc language to be compiled to flash.&lt;/li&gt;&lt;li&gt;Leverage &lt;a href="http://codespeak.net/pypy/dist/pypy/doc/index.html"&gt;PyPy&lt;/a&gt; (a python VM generator and more) to create an ActionScript or Flash bytecode target.  Of course this would only really help you use python unless you created a translator for C++, but &lt;a href="http://drawlogic.com/2008/03/20/as3-convert-python-code-to-flex-as3-with-flex-pypy/"&gt;flex-pypy&lt;/a&gt; is cool enough to mention.&lt;/li&gt;&lt;/ul&gt;Overall I think the gcc solution is the most likely and most powerful.  I'm looking forward to the cross compiler and hope it will be included in &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4"&gt;Flex 4&lt;/a&gt; as part of the broadening horizons theme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-4598725899611916461?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/4598725899611916461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/05/actionscript-cross-compiler-theories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/4598725899611916461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/4598725899611916461'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/05/actionscript-cross-compiler-theories.html' title='ActionScript Cross Compiler Theories'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-8387810473396355668</id><published>2008-04-29T21:59:00.000-07:00</published><updated>2010-01-12T09:10:15.086-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Not Using Source Code Control is Insane!</title><content type='html'>&lt;blockquote&gt;"Like skydiving without checking your parachute or having sex with a stranger without using a condom." -- me, earlier today&lt;/blockquote&gt;I've worked for a few places that didn't use source code control properly or even at all before I started.  But today, I met a new PHP programmer who didn't know what I was talking about when I mentioned source code control.  He recently migrated over from writing and graphic design and has no background in computer science or software engineering so it isn't his fault really.  The fault lies with those that brought him into the fold.&lt;br /&gt;&lt;br /&gt;As far as I can tell, I'm somewhat strange - I'm passionate about source code control (now noted as SCC) and have tried a few new ones just to see if I like them.  Process is important and while I don't believe in crazy ISO-9000 level of process (then most of your work is to maintain the process rather than produce value) but you need some or there is only chaos.  Go check out "&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test&lt;/a&gt;", I'll wait.&lt;br /&gt;&lt;br /&gt;I don't necessarily believe that all of them are necessary or sufficient. But what is #1?  That's right SCC.  SCC is so important, many word processors (like word) embed version tracking into the software.&lt;br /&gt;&lt;br /&gt;Why do people insist on using nothing or tarballs/zipfiles to ensure the safety of business/personally critical data?  One place I worked used zip files but also required you comment out changed code with a reason plus add comments for the new code.  This resulted in files where there were pages of code with ocassional live code (it was unreadable).  SCC systems do this for you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;What is SCC?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In essence, a SCC tracks changes made to files and directories and allows users to (among other things):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Checkout (aka get) the current version or some version from the past of those files/directories.&lt;/li&gt;&lt;li&gt;Check-in (aka save) your current changes to the SCC to be saved for posterity.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Revert changes you don't like.&lt;/li&gt;&lt;li&gt;Find out who made changes and why.&lt;/li&gt;&lt;li&gt;Do differences on what exactly has changed either between past versions or with what you have done since the last check-in.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Manage multiple people working on the same files and directories.&lt;/li&gt;&lt;li&gt;Give the ability to mark and later retrieve files/directories related to some important event like a release.&lt;/li&gt;&lt;/ul&gt;There are several main paradigms for SCC:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Locking vs Merging - Some SCC tools require you to mark a file for editing such that it is locked and no other user can commit changes until you release the lock.  Other SCC tools don't require locking but will require (or do it for you if simple) merging if there are conflicts.  I have found the locking model interrupts my workflow because I may not know all the files I'll change ahead of time, stopping to lock a file gets in the way, and someone might lock the file I'll need and then need a file I have locked (classic deadlock problems).  Merging might sometimes be a pain, but it is better than the alternative.&lt;/li&gt;&lt;li&gt;Client/Server vs Peer to Peer - Most SCC has a server that holds the "one true version" and all clients must submit to that server.  A few systems use a peer-to-peer structure where the only "one true version" is decided by social convention not technology.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For more information check out:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wikipedia on &lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;Revision Control&lt;/a&gt;&lt;/li&gt;&lt;li&gt;This &lt;a href="http://blog.clickablebliss.com/2006/04/26/introduction-to-subversion-screencast/"&gt;introduction to subversion screencast&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;SCC and the Individual Developer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Even if you work by yourself for work or fun you should use SCC.  The few times I haven't, I often regretted it.  The first reason is that this helps develop good habits.  Secondly, this makes it so much easier to undo mistakes should they happen.&lt;br /&gt;&lt;br /&gt;Imagine you are making some changes to a game you wrote.  The changes, while simple, are invasive and touch numerous files over the course of a day and you were interrupted numerous times.  Sadly you made an error that causes saved data to become corrupted but the error could have been introduced anywhere and you can't remember exactly what you changed.  SCC allows you to quickly find out what files changed, what the changes were, and if necessary revert back to good code and start over.  Without SCC, you might be debugging for a long time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;SCC Tool Recommendations&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is based on tools I've used for long periods of time for production code with the exception of Git (many tools are omitted):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perforce - This is a commercial product I used long ago.  It can use locking or merging.  I don't use it now because it costs money, I'm cheap, and there are great open source alternatives.&lt;/li&gt;&lt;li&gt;Visual Source Safe (VSS) - This pile of steaming... rubbish is given away by Microsoft.  It uses a locking model by default.  The problems with VSS are that it often corrupts large codebases and Visual Studio integration (up too 2005 I believe, or beyond) puts little snippets in your project files to handle integration.  If you are ever kidnapped to a tropical island by a criminal mastermind with a claw and a cat and are told you must use VSS or be given to a bunch of cannibals, choose the cannibals because it will be less painful.   I have heard from some insiders that Microsoft doesn't use VSS.  If the producer of software doesn't use their product (and they could), then I don't feel it is wise using it either.&lt;/li&gt;&lt;li&gt;Vault - A VSS commercial clone (plus bonuses) of VSS.  While this tool never corrupted my code like VSS did on a regular basis, I dont' much like how Vault works, so I don't like using it.&lt;/li&gt;&lt;li&gt;CVS - An open source merging SCC used for years by many open source products.&lt;/li&gt;&lt;li&gt;Subversion - A newish SCC that is much like CVS but it offers atomic commits (everything goes or nothing - so you don't have partial commits), versioning directories, better brancing/merging, and other improvements.  If you want to use a client/server SCC, I'd recommend this (despite what &lt;a href="http://video.google.com/videoplay?docid=-2199332044603874737"&gt;Linus says&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Git - This is the only distributed/peer-to-peer tool on my list.  I've only been using it for a few weeks, but thus far I like it.  Git was quick and easy to setup and does everything I expect in a SCC with the added bonus of being really fast (partially because there is no server to talk to)  One of the selling points is better branching/merging but I have yet to do much of that.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Closing Comments&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'll end with a few recommended best practices:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use source code control&lt;/li&gt;&lt;li&gt;Check-in as often as possible without breaking the build.&lt;/li&gt;&lt;li&gt;Keep your commits small.&lt;/li&gt;&lt;li&gt;Add a useful (but short) message to each commit on why you made the commit (not what you changed since the SCC handles that).  This should include a bug number if available.&lt;/li&gt;&lt;li&gt;Tag all your releases in SCC&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This brings my SCC rant to a close.  I feel much better now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-8387810473396355668?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/8387810473396355668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/04/not-using-source-code-control-is-insane.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8387810473396355668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8387810473396355668'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/04/not-using-source-code-control-is-insane.html' title='Not Using Source Code Control is Insane!'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-2997915569061266620</id><published>2008-04-20T15:53:00.000-07:00</published><updated>2010-01-12T09:10:15.024-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANTLR'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Using ANTLR to create an Excel Like Formula Parser in Flex</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Introduction&lt;/span&gt;&lt;br /&gt;One of my first Flex programming projects was to write an Excel-like expression parser.  This parser was written using the “shunting yard” algorithm by Edsger Dijkstra to transform infix notation to a reverse-polish notation (postfix) stack which is easily processed.  That code isn't publicly available but the algorithms are described in a paper I wrote &lt;a href="http://www.arcanearcade.com/Flex/FlexFormula/Evaluating%20Math%20-%20Robert%20Stehwien.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I decided to re-write the expression evaluator using &lt;a href="http://www.antlr.org/"&gt;ANTLR&lt;/a&gt;.  ANTLR is a parser generator that takes BNF-like notation and generates code for a target language.  The default target language is Java, but there are many other target languages including an &lt;a href="http://www.antlr.org/wiki/display/ANTLR3/Antlr3ActionScriptTarget"&gt;ActionScript target&lt;/a&gt; in the upcoming 3.1 version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Flex Formula Evaluator&lt;/span&gt;&lt;br /&gt;The actual Flex application is available &lt;a href="http://www.arcanearcade.com/Flex/FlexFormula"&gt;here&lt;/a&gt; with &lt;a href="http://www.arcanearcade.com/Flex/FlexFormula/srcview/index.html"&gt;source&lt;/a&gt; available. This is an example of a formula that can be evaluatedl feel free to copy and paste into the evaluator below (variables are noted in "[variable_name]"):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(1+2)*sum(9-8,5,17.5,[numarray])/if(or([string]="hello",1&gt;5),2,99)&lt;/span&gt;&lt;object height="340" width="150"&gt;&lt;br /&gt;&lt;embed src="http://www.arcanearcade.com/Flex/FlexFormula/FlexFormula.swf" height="600" width="600"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;How Does it Work?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The formula parser begins with the ANTLR grammar found in Formula.g and FormulaTree.g (in src com.arcanearcade.antlr).  ANTLR has 3 types of grammar rules:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lexer - Used to transform the character stream into a series of tokens.  Lexer rule names are written in all capital letters.  For example, the following code describes how to recognize variables which are any characters except [ or ] found between [ and ].&lt;br /&gt;&lt;/li&gt;&lt;pre&gt;VARIABLE : '[' ~('[' | ']')+ ']';&lt;/pre&gt;&lt;li&gt;Parser - Walks though the tokens to form sentences in the grammar.  Parser rules begin with lower case letters.  The following example shows how to recognize a percent token, which is a number token followed by the percent sign (both described in the parser grammar).  The '^' in the grammar is a special token that shows what the head of the created tree grammar looks like.  So "50%" is transformed into a tree with an s-expression notation of "(% 50)" and will be evaluated to the value "0.5" by the tree grammar.&lt;br /&gt;&lt;/li&gt;&lt;pre&gt;percent: NUMBER PERCENT^;&lt;/pre&gt;&lt;li&gt;Tree - This optional grammer taks the tree that can be created by parser grammar and with the help of native code snippets interprets the tree to produce output.  While you can use code snippets directly in the parser, using a tree grammer allows you to reuse the lexer and parser for other languages and write a (usually simpler) tree parser for each target language.  The following tree grammar shows how to evaluate addition where "6 + 7" was turned into "(+ 6 7)" by the parser and is evaluated to the number "13" by the ActionScript code between the {}&lt;br /&gt;&lt;/li&gt;&lt;pre&gt;operation returns [Object value]&lt;br /&gt;: ^(ADD a=expression b=expression)&lt;br /&gt;{ $value = Number($a.value) + Number($b.value); }&lt;/pre&gt;&lt;/ul&gt;The ANTLR tools parse the grammar files to produce native code as shown in the diagram below:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oZtRxJFUwRg/SAwUkZkc5QI/AAAAAAAAAtc/uVuECX-hOME/s1600-h/formulacodegen.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_oZtRxJFUwRg/SAwUkZkc5QI/AAAAAAAAAtc/uVuECX-hOME/s320/formulacodegen.png" alt="" id="BLOGGER_PHOTO_ID_5191547086022960386" border="0" /&gt;&lt;/a&gt;Code in FlexFormula.mxml evaluateFormula() takes a string, feeds it into the lexer, takes the output of the lexer feeds it into the parser, and then finally feeds that into the tree to evaluate the result.   FormulaTree#addFunction() adds new spreadsheet functions like "sum" and "if" and FormulaTree#lookupVariable sets the function callback to retrieve variables.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;What Next?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The expression parser isn't as friendly as it could be (it is just a demo).  To improve the formula engine to the point it could be used in a spreadsheet the FormulaLexer, FormulaParser, and FormulaTree in a class that would:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add all the common function.&lt;/li&gt;&lt;li&gt;Setup binding to watch for changes to the formula string and only call the lexer and parser when the formula changes.&lt;/li&gt;&lt;li&gt;Setup a public and bindable variable for the result value.&lt;/li&gt;&lt;li&gt;Add binding for all variables in an expression so when they change the tree can be re-evaluated.&lt;/li&gt;&lt;li&gt;Improve error handling&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-2997915569061266620?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/2997915569061266620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2008/04/using-antlr-to-create-excel-like.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2997915569061266620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2997915569061266620'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2008/04/using-antlr-to-create-excel-like.html' title='Using ANTLR to create an Excel Like Formula Parser in Flex'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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://4.bp.blogspot.com/_oZtRxJFUwRg/SAwUkZkc5QI/AAAAAAAAAtc/uVuECX-hOME/s72-c/formulacodegen.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-2635821025931395989</id><published>2007-10-05T08:55:00.000-07:00</published><updated>2010-01-12T09:10:15.042-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='FlaCC'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>C++ to ActionScript</title><content type='html'>One of the sneak peeks at Adobe MAX 2007 Chicago was a C++ to ActionScript translator by Scott Peterson.  This was the most interesting of the sneak peeks for me in part because I was a C++ developer for 12 years (until 3 weeks ago) and because of the implications of the translator.&lt;br /&gt;&lt;br /&gt;First check out the video here:&lt;br /&gt;&lt;a href="http://youtube.com/watch?v=0hX-Uh3oTcE"&gt;http://youtube.com/watch?v=0hX-Uh3oTcE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;During the demo he showed:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A C++ XSLT library turned into ActionScript&lt;/li&gt;&lt;li&gt;A fractal program from C++ to ActionScript simulating green threads using ActionScripts asyncronous calls.&lt;/li&gt;&lt;li&gt;Doom 2 running in Flash.&lt;/li&gt;&lt;/ul&gt;How does it work:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;C/C++ code is translated to ActionScript 3&lt;/li&gt;&lt;li&gt;AS3 code is compiled into a SWF&lt;/li&gt;&lt;li&gt;Run the code on Flash/AIR&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;What does it mean:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Easy porting useful open source C++ libraries/programs to ActionScript to run on the browser.&lt;/li&gt;&lt;li&gt;Porting interpreters for languges like Ruby, PHP, Lua, Python, Smalltalk. ... to run on Flash.&lt;/li&gt;&lt;li&gt;Writing your own DSL using ANTLR and porting the C code to ActionScript without having to write an ANTLR target language.  I recently wrote a shunting yard algorithm Lexer and RPN parser in ActionScript for an Excel like language where this would have saved me some time (but not the fun of writing my own Lexer/Parser).&lt;/li&gt;&lt;/ul&gt;Scott Peterson, if you ever read this and want an alpha/beta tester I have two projects in mind:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An AIR Subversion client.&lt;/li&gt;&lt;li&gt;Porting the Squeak Smalltalk core to AS to match the &lt;a href="http://vistasmalltalk.wordpress.com/"&gt;Vista Smalltalk in Silverlight&lt;/a&gt; project.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-2635821025931395989?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/2635821025931395989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/10/c-to-actionscript.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2635821025931395989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2635821025931395989'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/10/c-to-actionscript.html' title='C++ to ActionScript'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-837184817921430102</id><published>2007-10-03T06:41:00.000-07:00</published><updated>2010-01-12T09:10:15.117-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>What is Thermo?</title><content type='html'>Yesterday at Adobe MAX 2007 in Chicago, I had the pleasure of seeing a sneak peak at a potential future product of Adobe's codenamed &lt;a href="http://labs.adobe.com/wiki/index.php/Thermo"&gt;Thermo&lt;/a&gt;.  I'm a developer and not a designer and have never worked with a designer, but I can see the appeal of the product.  Plus it is technically cool.&lt;br /&gt;&lt;br /&gt;During the demo they took a UI mockup drawn in Adobe Photoshop with layers.  Thermo converted that mockup int MXML.  The converted MXML had new "graphics" tags that will be added to the language.  The graphics tags draw (as you may guess) graphics primitives (boxes, lines, etc), text, images, etc.  While not interactive yet, the mockup can be compiled as a Flex application.&lt;br /&gt;&lt;br /&gt;Then the magic comes in.  Graphics items are selected and turned into controls.  For example a box with some text in it was turned into text input.  Relatively simple yes, but the compiled Flex app was now interactive.  Next they turned a row of Album images with a drawing of a scroll bar in it into a scrollable list of albums.  Thermo took the images given to populate the list and could add data, import new images, or just duplicate the images so there was something to scroll.&lt;br /&gt;&lt;br /&gt;Interaction was added to the application in the form of a rollover on the albums that zoomed in and  showed the title and artist.  Overall it was an impressive show of the transformation of graphics to an application.&lt;br /&gt;&lt;br /&gt;The "Flex Roadmap" session shed some light on what might be going on behind the scenes in MXML for Thermo (and any other Flex development).  From what I hear skinning a control isn't easy (I haven't done so) but the future version will make it easy.  They will split the controls into a MVC like architecture with a Skin, Controller, and Model.&lt;br /&gt;&lt;br /&gt;The Model encapsulates data, the controller behavior, and skin all of the UI.  The skin is all done in declarative MXML using the graphics tags (including transitions).  During this demo they showed how to skin a list control to look like a standard list, list with icons, behavior, turning a list into tabs, turing a list into an accordion.&lt;br /&gt;&lt;br /&gt;I'm looking forward to the future of Flex.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-837184817921430102?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/837184817921430102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/10/what-is-thermo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/837184817921430102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/837184817921430102'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/10/what-is-thermo.html' title='What is Thermo?'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-561367005414298414</id><published>2007-09-04T20:01:00.000-07:00</published><updated>2010-01-12T09:10:15.124-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Shifting Gears to Adobe Flex and C#</title><content type='html'>Times change and so do jobs.  I'm starting a new job in two weeks working with rich internet applications - Microsoft SQL data store, C# middle-ware, and &lt;a href="http://flex.org/"&gt;Adobe Flex&lt;/a&gt; GUI.  None of which I have any professional experience but I'm eager to learn.&lt;br /&gt;&lt;br /&gt;So what this means is that Squeak, Erlang, and Rails take something of a back seat while I learn the technologies for my new job.  I plan on dabbling in Erlang and Rails for being the middle-ware for my own personal projects.&lt;br /&gt;&lt;br /&gt;Meanwhile, I wrote a Sudoku solver in Flex for my algorithm analysis class.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.arcanearcade.com/Flex/Sudoku/Sudoku.html"&gt;http://www.arcanearcade.com/Flex/Sudoku/Sudoku.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Overall I really like the Flex framework thus far.  It is nice to know that Flash 9 has a &lt;a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html"&gt;90% browser penetration&lt;/a&gt;, so it makes for a reliable platform for distributing my own Flex applications.  The applications look really nice as well - as a Windows application developer I've always found most web applications not quite up to snuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-561367005414298414?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/561367005414298414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/09/shifting-gears-to-adobe-flex-and-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/561367005414298414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/561367005414298414'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/09/shifting-gears-to-adobe-flex-and-c.html' title='Shifting Gears to Adobe Flex and C#'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-8747997693785917213</id><published>2007-08-29T07:10:00.000-07:00</published><updated>2010-01-12T09:10:15.006-08:00</updated><title type='text'>New Life For Squeak's UI</title><content type='html'>One of my sole complaints about Squeak is its ancient looking user interface and a lack of a standard GUI interface builder.  There are a couple of the latter and the community knows about the former and is working to correct things.  A squeaker named Gary Chambers is poised to commit some excellent UI improvements:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oZtRxJFUwRg/RtWA5rWRo7I/AAAAAAAAAsc/WG8dl-Zowhs/s1600-h/NewSqueakUI.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_oZtRxJFUwRg/RtWA5rWRo7I/AAAAAAAAAsc/WG8dl-Zowhs/s320/NewSqueakUI.jpg" alt="" id="BLOGGER_PHOTO_ID_5104127481071379378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Go &lt;a href="http://flickr.com/photos/65338133@N00/"&gt;here&lt;/a&gt; to see more images.&lt;/p&gt;&lt;p&gt;There is a &lt;a href="http://lists.squeakfoundation.org/mailman/listinfo/ui"&gt;UI mailing list&lt;/a&gt; for Squeak discussing this and other UI improvements.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-8747997693785917213?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/8747997693785917213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/new-life-for-squeak-ui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8747997693785917213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/8747997693785917213'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/new-life-for-squeak-ui.html' title='New Life For Squeak&amp;#39;s UI'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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://3.bp.blogspot.com/_oZtRxJFUwRg/RtWA5rWRo7I/AAAAAAAAAsc/WG8dl-Zowhs/s72-c/NewSqueakUI.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-2963041637285856142</id><published>2007-08-11T15:13:00.000-07:00</published><updated>2010-01-12T09:10:15.167-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><title type='text'>Reflections on the Demise of Dolphin Smalltalk</title><content type='html'>The Smalltalk community lost one of its vendors this week.  &lt;a href="http://www.object-arts.com/content/news/developmentDiscontinued.html"&gt;Dolphin Smalltalk threw in the towel&lt;/a&gt;.  While reading &lt;a href="http://lucky13linux.wordpress.com/2007/08/10/rip-dolphin-smalltalk-make-that-good-riddance/"&gt;this post&lt;/a&gt;, I reflected on Dolphin's developers and lucky13's comments on Dolphin and open source.&lt;br /&gt;&lt;br /&gt;This all reminds me of my first encounter with smalltalk over 10 years ago.  I had been a professional C++ developer for a little while and was curious about the origins of object oriented development.  After doing a little digging I became interested in learning Smalltalk... until I saw the price tag.&lt;br /&gt;&lt;br /&gt;At the time the only Smalltalk implementations I could find on a quick internet search cost hundreds or thousands of dollars.  I was interested but not that interested, so I dropped the idea and it has taken years for me to return.&lt;br /&gt;&lt;br /&gt;It is hard to win over developers to a new language and even harder when they have to fork over vast sums of money for the privilege.  Look at the popular languages for the last few years (Ruby, Python, PHP, Java, Erlang, even C/C++), with all of them the first hit is free.  Even Microsoft seems to have caught on in recent years; you have been able to get free versions of Visual Studio for a while and before that there was a command line C# compiler available for free.&lt;br /&gt;&lt;br /&gt;While I have often paid for a development tool or library, it has only been after my first free hit.   The only reason I have purchased Microsoft Development tools is because of the market pressure for a developer to work in that environment (it is where I make my living, even if C++/MFC/etc. aren't the "best").&lt;br /&gt;&lt;br /&gt;I don't think that Smalltalk will die but there are lessons to learn in gaining the hearts of alpha geeks that Smalltalk can learn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-2963041637285856142?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/2963041637285856142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/reflections-on-demise-of-dolphin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2963041637285856142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/2963041637285856142'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/reflections-on-demise-of-dolphin.html' title='Reflections on the Demise of Dolphin Smalltalk'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-4122053883727327854</id><published>2007-08-07T09:04:00.000-07:00</published><updated>2010-01-12T09:10:14.992-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Squeak'/><title type='text'>Squeak Smalltalk First Impressions</title><content type='html'>As mentioned before, I decided to learn Smalltalk and was interested in &lt;a href="http://www.croquetconsortium.org/"&gt;Croquet&lt;/a&gt; and &lt;a href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt;.  This made the choice of Smalltalk implementations clear - &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt;.  So I head on over to &lt;a href="http://www.squeak.org/"&gt;squeak.org&lt;/a&gt; and download the latest version.&lt;br /&gt;&lt;br /&gt;The first thing I notice is that the color choices in the UI are... unexpected and the UI appearance is circa 1980 (I opened a few windows and menus as an example, this isn't what you see at first):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oZtRxJFUwRg/RtK6IrWRo6I/AAAAAAAAAsU/Ix4bqex4WRo/s1600-h/DefaultSqueak.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_oZtRxJFUwRg/RtK6IrWRo6I/AAAAAAAAAsU/Ix4bqex4WRo/s320/DefaultSqueak.png" alt="" id="BLOGGER_PHOTO_ID_5103345986002068386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It doesn't bode well when your first impression of a development environment leaves you not wanting to make anything that looks like the environment.  But I press on and start playing with the environment.&lt;br /&gt;&lt;br /&gt;Smalltalk/Squeak isn't like other languages.  Instead of getting a compiler and using your favorite text editor, you are given a whole environment to learn all at once.  Squeak is your IDE and just about your whole OS.   Smalltalk doesn't use the file system in a conventional sense.  Instead everything is stored in the .image file that is essentially a snapshot of the running virtual machine.&lt;br /&gt;&lt;br /&gt;Here is a brief translation of the tools you need to know:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Code Editing - Class Browser, there are several to choose from (default, Refactoring Browser, OmniBrowser, Whisker Browser, etc).  The default squeak image&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Saving Code - Not needed, everything is saved in the image and changes file.  You can file out/in code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Source Code Control - Monticello (or digging out the changes)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unit Testing - SUnit&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.squeak.org/squeak/4"&gt;Basic Tools&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Here is a good place to start for more information on squeak: &lt;a href="http://wiki.squeak.org/squeak"&gt;http://wiki.squeak.org/squeak&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a nice programming tutorial in Squeak: &lt;a href="http://squeak.preeminent.org/tut2007/html/index.html"&gt;http://squeak.preeminent.org/tut2007/html/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is an excellent tutorial:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-4122053883727327854?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/4122053883727327854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/squeak-smalltalk-first-impressions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/4122053883727327854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/4122053883727327854'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/squeak-smalltalk-first-impressions.html' title='Squeak Smalltalk First Impressions'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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://4.bp.blogspot.com/_oZtRxJFUwRg/RtK6IrWRo6I/AAAAAAAAAsU/Ix4bqex4WRo/s72-c/DefaultSqueak.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1672895804033550553.post-580658740621917029</id><published>2007-08-06T05:02:00.000-07:00</published><updated>2010-01-12T09:10:15.176-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><title type='text'>Which Smalltalk?</title><content type='html'>There are many Smalltalk implementations to choose from but because of an interest in both Croquet and Seaside, my primary choice would be &lt;a href="http://squeak.org/"&gt;Squeak&lt;/a&gt;.  Squeak runs on many platforms (I'm on Mac OS X 10.4), is one of a few implementations of Smalltalk that runs Seaside and is the only one (that I know of) that runs Croquet.&lt;br /&gt;&lt;br /&gt;Here is an abbreviated list of Smalltalk environments available:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://squeak.org/"&gt;Squeak&lt;/a&gt; - A free cross-platform Smalltalk environment.  That I'll talk about more in a later post since I'm using it as my development enviornment.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cincomsmalltalk.com/"&gt;VisualWorks (Cincom)&lt;/a&gt; - A cross platform Smalltalk environment with a free community and commercial editions.  They support Seaside (in a big way), look better than Squeak (IMHO), provide great community support with tutorials documentation and screencasts, and have visual GUI editors.  The only thing stopping me from using them is that Croquet runs on Squeak and I just want to learn one Smalltalk environment for now.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.object-arts.com/"&gt;Dolphin Smalltalk (ObjectArts) &lt;/a&gt;- A Windows only Smalltalk environment.  There is a free community edition and commercial editions.  The product looks nice and has a native look and feel.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vistasmalltalk.wordpress.com/tag/vista-smalltalk/"&gt;Vista/Silverlight Smalltalk&lt;/a&gt; - Smalltalk running in Microsoft's Silverlight.  Pretty cool and cross-platform through Silverlight.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnu.org/software/smalltalk/smalltalk.html"&gt;GNU Smalltalk&lt;/a&gt; - POSIX version of Smalltalk.  Unlike the others in this list, GNU Smalltalk is less an all encompassing environment and working with it should be more familiar to most developers than the standard Smalltalk way of doing things.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.smalltalk.org/versions/"&gt;Other versions&lt;/a&gt; - There are several other versions of Smalltalk available.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-580658740621917029?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/580658740621917029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/which-smalltalk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/580658740621917029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/580658740621917029'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/which-smalltalk.html' title='Which Smalltalk?'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-1572329432540503164</id><published>2007-08-05T06:43:00.000-07:00</published><updated>2010-01-12T09:10:15.216-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><title type='text'>Why Smalltalk?</title><content type='html'>In my first post, I mentioned interest in Ruby, Erlang, and Smalltalk.  It is easy to understand why the first might be of interest given the large amount of press they have been getting lately.  But you may get to the last and ask:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt; "Why on earth would you be interested in Smalltalk? That ship set sail 30 years ago and hasn't been popular since the 80's.  Think you can find a job using that language buddy?"&lt;/blockquote&gt;Popularity and finding a job aren't my motivators for learning Smalltalk, but I do have several other motivations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Historical&lt;/span&gt; - Smalltalk was one of the first object oriented languages (Simula beat it) and as such forms the foundation of much many modern languages.  I might learn Lisp for the same reason.&lt;/li&gt;&lt;li&gt;More &lt;span style="font-weight: bold;"&gt;dynamic&lt;/span&gt; than even Ruby - As well as having the equivalent of Ruby's duck typing (you send "messages" to objects in Smalltalk), Smalltalk programs can be changed &lt;a href="http://www.cincomsmalltalk.com/files/bobw/screencasts/Refactoring_Steroids/"&gt;while the program is running&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt; - An interesting web development framework.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.opencroquet.org/"&gt;Croquet&lt;/a&gt; - A peer-to-peer 3D environment similar in concept to Second Life.  I'm planning on writing my master's thesis on "Peer-to-Peer Collaborative 3D&lt;br /&gt;Content Creation" using Croquet.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Interesting Environment&lt;/span&gt; - Smalltalk is more than a language, it is a complete environment and closer to an IDE or even an OS where you can reprogram everything including the compiler on the fly.  More on this later.&lt;/li&gt;&lt;/ul&gt;I may never make a living (or even a single penny) with Smalltalk, but I think it has valuable lessons to teach me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-1572329432540503164?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/1572329432540503164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/why-smalltalk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/1572329432540503164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/1572329432540503164'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/why-smalltalk.html' title='Why Smalltalk?'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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-1672895804033550553.post-3775842348923963115</id><published>2007-08-05T06:15:00.000-07:00</published><updated>2010-01-12T09:10:15.224-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Introduction</title><content type='html'>I've put off making a blog for a long time, mainly because I didn't have anything I wanted to talk about.  Now that I'm embarking on a voyage of discovery on the shores of software development, maybe I can find something interesting to talk about.  At the very least I can use the blog as a development log of sorts for my own use.  But first, a little about me.&lt;br /&gt;&lt;br /&gt;Software development isn't new to me, I've been a professional code monkey for 12 years now.  My paying gigs have mainly mainly been in C++Windows, Linux, and Mac OS X programming with a few ventures into Java based web development.  In my private time I have played with Perl, Python, and Ruby.  I've dabbled in other areas of the industry including technical support, product management, and plain management.  I even got an MBA before I learned that management really isn't for me because my passion is programming.&lt;br /&gt;&lt;br /&gt;My voyage began recently with a rekindling of my love for development.  First I taught a class on software specifications at the local university and then I decided to go get a Masters in Computer Science.  These events in turn have ignited an interest in dynamic, functional, and concurrent programming languages; mainly in the forms of Ruby, Erlang, and Smalltalk.   More on these in more focused posts later.&lt;br /&gt;&lt;br /&gt;My intention is to post at least once a week to capture what I have learned or thought about.  I have some catching up to do since I started over a month ago, so there will be a flurry of initial posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672895804033550553-3775842348923963115?l=arcanecoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arcanecoder.blogspot.com/feeds/3775842348923963115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/3775842348923963115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1672895804033550553/posts/default/3775842348923963115'/><link rel='alternate' type='text/html' href='http://arcanecoder.blogspot.com/2007/08/introduction.html' title='Introduction'/><author><name>Robert Stehwien</name><uri>http://www.blogger.com/profile/18158506849512588527</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>
