<?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-4999585674334737166</id><updated>2012-02-02T07:43:17.592-08:00</updated><category term='j2swf'/><category term='javaswf'/><category term='flash'/><category term='j2avm'/><category term='semantic-web'/><category term='java'/><category term='clojure'/><category term='as3'/><category term='freemind'/><category term='programming'/><category term='github'/><category term='OWL'/><category term='ontology'/><category term='avm2'/><category term='Scheme'/><category term='flex'/><category term='open-source'/><category term='prolog'/><title type='text'>Epistemological Engineering</title><subtitle type='html'>Supplier of Genuine Interociter Replacement Parts</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-2578966907902772871</id><published>2011-11-11T11:09:00.001-08:00</published><updated>2011-11-11T11:10:57.538-08:00</updated><title type='text'>HaXe and OCaml (and Racket ?)</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;(&lt;a href="https://plus.google.com/u/0/103813380778167261059/posts/EXBZnSKkbbh"&gt;x-post from G+&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;The more I look at HaXe as a hedge against the uncertainty in the Flash world, the more I like it. The only reason I've resisted promoting it in the workplace is the fact that the underlying toolchain (the compiler) is written in OCaml - a language I don't know and have never wanted to know, given that I have already spent the time to climb the Haskell learning curve.&lt;/span&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;The Adobe news this week made me reconsider, and I have been researching the OCaml language and ecosystem. It is not an inferior Haskell, and in many ways seems more practical. That fact that it has a stable bytecode format is really nice - especially when there are projects like this that translate the bytecode to Javascript:&amp;nbsp;&lt;/span&gt;&lt;a class="ot-anchor" href="http://ocsigen.org/js_of_ocaml/" style="background-color: white; color: #3366cc; cursor: pointer; font-family: arial, sans-serif; font-size: 13px; line-height: 18px; text-decoration: none;"&gt;http://ocsigen.org/js_of_ocaml/&lt;/a&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Then there is this LLVM language implementation tutorial that uses OCaml:&amp;nbsp;&lt;/span&gt;&lt;a class="ot-anchor" href="http://llvm.org/docs/tutorial/OCamlLangImpl1.html" style="background-color: white; color: #3366cc; cursor: pointer; font-family: arial, sans-serif; font-size: 13px; line-height: 18px; text-decoration: none;"&gt;http://llvm.org/docs/tutorial/OCamlLangImpl1.html&lt;/a&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;I&lt;/span&gt;&lt;wbr style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/wbr&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'ve been shopping around for a new systems programming language to replace Java (if Java can be considered a systems programming language). The languages I like, Clojure and Erlang, are both tied to VMs and the languages I really-really like, Prolog and Scheme, are not - for me - good systems languages. OCaml feels like it could be the one.&lt;/span&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;I am using DrRacket (the Racket Scheme IDE) for more and more of my UI prototyping experiments and would hate to abandon that (especially since OCaml's default graphics library uses X11). So I am thinking about ways to bring OCaml into my DrRacket environment - either through the FFI or by hacking the bytecode-&amp;gt;JS translator to emit Scheme instead.&lt;/span&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;br style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;I'm looking forward to getting my bytecode hacking mojo back !&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-2578966907902772871?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2578966907902772871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2578966907902772871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2578966907902772871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2578966907902772871'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2011/11/haxe-and-ocaml-and-racket.html' title='HaXe and OCaml (and Racket ?)'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-2194153387918969918</id><published>2011-07-20T17:38:00.000-07:00</published><updated>2011-07-20T17:38:28.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><category scheme='http://www.blogger.com/atom/ns#' term='avm2'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>ClojureScript</title><content type='html'>I just watched Rich Hickey's presentation of the new &lt;a href="https://github.com/clojure/clojurescript"&gt;ClojureScript&lt;/a&gt; tool and was very impressed.&lt;br /&gt;&lt;br /&gt;Having &lt;a href="http://epistemologicalengineering.blogspot.com/2010/06/crazy-idea-of-week-clojure-gwt.html"&gt;previously mused&lt;/a&gt; on the utility of translating Clojure to Javascript I'm glad that this has now become an official project.&lt;br /&gt;&lt;br /&gt;I am still digesting the implications but my initial thoughts are that this can form the basis of the Clojure to Flash project that is still being scoped out. It appears that the ClojureScript compiler is written in Clojure and introduces a post-analysis intermediate representation that would make it easier to write backends for different targets.&lt;br /&gt;&lt;br /&gt;Whether it would be easier to translate to ActionScript source or to AVM2 bytecode is a question. The bytecode route would hold out the promise of getting the ClojureScript compiler to actually run in the Flash player and allow a self-contained development environment.&lt;br /&gt;&lt;br /&gt;ClojureScript may also allow a backend for Scheme - to write iPad apps via Gambit Scheme.&lt;br /&gt;&lt;br /&gt;The wheels are turning...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-2194153387918969918?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2194153387918969918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2194153387918969918' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2194153387918969918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2194153387918969918'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2011/07/clojurescript.html' title='ClojureScript'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-2414785282195407469</id><published>2011-06-16T10:05:00.001-07:00</published><updated>2011-06-16T10:05:53.267-07:00</updated><title type='text'>Update to status of Flash projects</title><content type='html'>Update to&amp;nbsp;&lt;a href="http://epistemologicalengineering.blogspot.com/2011/03/status-of-flash-projects.html"&gt;http://epistemologicalengineering.blogspot.com/2011/03/status-of-flash-projects.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE - June 16, 2011 - I could not escape Flash. I'm finding that I actually need to resurrect and use the j2swf and (maybe j2avm) tools for a commercial project. I don't want to continue writing Java, so I might start adding new code in Clojure, or lift the whole thing up into a model and use code-generation. I'll write a new post when things are figured out.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-2414785282195407469?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2414785282195407469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2414785282195407469' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2414785282195407469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2414785282195407469'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2011/06/update-to-status-of-flash-projects.html' title='Update to status of Flash projects'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-2114213470158165983</id><published>2011-05-03T17:23:00.000-07:00</published><updated>2011-05-03T17:23:03.191-07:00</updated><title type='text'>This is what I am currently working on....</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ExotRylTBAQ/TcCcSmRczmI/AAAAAAAAAUk/Irax6vuMlwY/s1600/interocitor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://3.bp.blogspot.com/-ExotRylTBAQ/TcCcSmRczmI/AAAAAAAAAUk/Irax6vuMlwY/s320/interocitor.jpg" width="320" /&gt;&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/4999585674334737166-2114213470158165983?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2114213470158165983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2114213470158165983' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2114213470158165983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2114213470158165983'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2011/05/this-is-what-i-am-currently-working-on.html' title='This is what I am currently working on....'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/-ExotRylTBAQ/TcCcSmRczmI/AAAAAAAAAUk/Irax6vuMlwY/s72-c/interocitor.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-4528862544638041518</id><published>2011-03-29T08:28:00.000-07:00</published><updated>2011-06-16T10:04:45.988-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='j2swf'/><category scheme='http://www.blogger.com/atom/ns#' term='j2avm'/><category scheme='http://www.blogger.com/atom/ns#' term='javaswf'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Status of Flash Projects</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="color: #660000; font-size: large;"&gt;UPDATE - June 16, 2011 - I could not escape Flash. I'm finding that I actually need to resurrect and use the j2swf and (maybe j2avm) tools for a commercial project. I don't want to continue writing Java, so I might start adding new code in Clojure, or lift the whole thing up into a model and use code-generation. I'll write a new post when things are figured out.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;It's time to make it official - I no longer believe that I will ever resume work on my Flash-related projects (&lt;a href="http://www.anotherbigidea.com/javaswf/"&gt;JavaSWF&lt;/a&gt;&amp;nbsp;and its successors&amp;nbsp;&lt;a href="http://code.google.com/p/j2avm/"&gt;j2avm&lt;/a&gt; and &lt;a href="http://code.google.com/p/j2swf/"&gt;j2swf&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;[redacted]&lt;br /&gt;&lt;br /&gt;These days there are many, many open-source SWF libraries, so I do not feel that letting JavaSWF die is a loss.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I have made many friends as a result of my Flash projects, and I would like to thank everyone who encouraged me, gave me gigs, and heckled from the sidelines.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-4528862544638041518?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/4528862544638041518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=4528862544638041518' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4528862544638041518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4528862544638041518'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2011/03/status-of-flash-projects.html' title='Status of Flash Projects'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-6249106139361015113</id><published>2011-03-22T13:25:00.000-07:00</published><updated>2011-03-22T13:27:37.514-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='Scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic-web'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Ontology Driven Programs via Prolog Partial Evaluation</title><content type='html'>This is a quick post to let the world know that I am still alive and still coming up with crazy ideas that I have no time to execute.&lt;br /&gt;&lt;br /&gt;My current personal project involves building a stack for ontology-driven development. The "architecture" looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-UytedigCzNs/TYkCn1GVhmI/AAAAAAAAAT4/odjtgttc5F4/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-UytedigCzNs/TYkCn1GVhmI/AAAAAAAAAT4/odjtgttc5F4/s320/Untitled.png" width="258" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;That is..&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An interactive development environment built around a Prolog system (SWI) for reasoning with ontologies and building applications that use ontologies in their modeling layer.&lt;/li&gt;&lt;li&gt;A partial evaluator that can graph-reduce a particular Prolog query (or set of queries), theories and ontologies into an efficient procedural form that can be translated into Scheme or JavaScript.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;At the moment I am totally occupied with the partial evaluator. I also plan to use it to generate non-ontology apps for the Mac and iOS (via Gambit Scheme).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Notice that I didn't mention Yaks in this post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-6249106139361015113?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6249106139361015113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6249106139361015113' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6249106139361015113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6249106139361015113'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2011/03/ontology-driven-programs-via-prolog.html' title='Ontology Driven Programs via Prolog Partial Evaluation'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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='https://lh6.googleusercontent.com/-UytedigCzNs/TYkCn1GVhmI/AAAAAAAAAT4/odjtgttc5F4/s72-c/Untitled.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-5795849715383923091</id><published>2010-06-17T17:23:00.000-07:00</published><updated>2010-06-18T07:55:31.929-07:00</updated><title type='text'>Applescript Engine in Java</title><content type='html'>Why wasn't I told about this before ? Applescript is supported in Java (at least on Snow Leopard) !&lt;br /&gt;&lt;br /&gt;I was going down a rat-hole researching how to use the OS X scripting architecture and Apple Events when I discovered this.&lt;br /&gt;&lt;br /&gt;Going to use this to implement a Clojure REPL using OmniGraffle - poll the current diagram page for an unevaluated expression in a shape and respond by drawing shape(s) containing the result.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;import javax.script.ScriptEngine;&lt;br /&gt;import javax.script.ScriptEngineManager;&lt;br /&gt;import javax.script.ScriptException;&lt;br /&gt;&lt;br /&gt;public class Test {&lt;br /&gt;    public static void main( String[] args ) throws ScriptException {        &lt;br /&gt;        ScriptEngineManager mgr = new ScriptEngineManager();        &lt;br /&gt;        &lt;br /&gt;        ScriptEngine engine = mgr.getEngineByName("AppleScript");&lt;br /&gt;        engine.eval( "tell application \"iTunes\" to play" );        &lt;br /&gt;    }&lt;br /&gt;}&lt;/span&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/4999585674334737166-5795849715383923091?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5795849715383923091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5795849715383923091' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5795849715383923091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5795849715383923091'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/06/applescript-engine-in-java.html' title='Applescript Engine in Java'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-7311340104960227105</id><published>2010-06-12T12:05:00.000-07:00</published><updated>2010-06-12T19:41:54.705-07:00</updated><title type='text'>Crazy Idea of the Week - Clojure GWT</title><content type='html'>Still pondering whether to do this. The decompiler part is easy, it's the modifications to the Clojure Runtime that are the unknown.&lt;br /&gt;&lt;br /&gt;I'm also putting a lot of faith in the GWT compiler to aggressively optimize the code - but, having watched &lt;a href="http://code.google.com/events/io/2010/sessions/faster-apps-faster-gwt-compiler.html"&gt;this IO video&lt;/a&gt;, I think it is well placed.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #351c75;"&gt;&lt;b&gt;Update: So, after examining the bytecode generated by the Clojure compiler, this is not looking like such a nice approach. A Clojure defn becomes a class unto itself, with static initializers and other overhead. &amp;nbsp;It would be nice if a function was just a single method on a class representing the namespace it belongs to. That would allow GWT to translate it to a single Javascript function, which is how it should be.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #351c75;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #351c75;"&gt;&lt;b&gt;Will be hacking on the Clojure compiler itself - to generate GWT-friendly Java source instead of bytecode.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5Jqup-kC5TY/TBPY-eA9SZI/AAAAAAAAARs/PWhgb8dM_Uo/s1600/ClojureGWT.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/TBPY-eA9SZI/AAAAAAAAARs/PWhgb8dM_Uo/s640/ClojureGWT.png" width="422" /&gt;&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/4999585674334737166-7311340104960227105?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/7311340104960227105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=7311340104960227105' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7311340104960227105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7311340104960227105'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/06/crazy-idea-of-week-clojure-gwt.html' title='Crazy Idea of the Week - Clojure GWT'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/TBPY-eA9SZI/AAAAAAAAARs/PWhgb8dM_Uo/s72-c/ClojureGWT.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-6320992909574452613</id><published>2010-05-09T23:23:00.000-07:00</published><updated>2010-05-09T23:23:28.624-07:00</updated><title type='text'>Initial Tech Preview of ClojureMind on GitHub</title><content type='html'>I hate spending my Sunday learning a new wiki markup format and writing technical documentation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.github.com/nickmain/Anaphor/clojuremind"&gt;GitHub wiki.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-6320992909574452613?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6320992909574452613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6320992909574452613' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6320992909574452613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6320992909574452613'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/05/initial-tech-preview-of-clojuremind-on.html' title='Initial Tech Preview of ClojureMind on GitHub'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-294056006165101345</id><published>2010-04-25T22:55:00.000-07:00</published><updated>2010-04-26T10:11:21.027-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freemind'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Evaluating Clojure in Freemind - Initial GitHub Commit</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Quick update - see also, the video below.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Spent a bunch of time understanding namespaces in Clojure and how to "eval" an expression within a given namespace - not much joy (at least within the classloader environment of a Freemind plugin).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;So, the solution is to just use "load-string". This also means that you can run a script - not just eval a single expression.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;There is now a second eval command, "??", that loads the script in the node above it. This allows the script to be built by concatenating the text of the node and all its descendants. Ultimately it would be nice to leverage the tree structure of the mindmap to imply lists and sub-lists, removing the need to enclose everything in parentheses - but, for now, this is good enough.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Longer term goals are:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;import and export of external Clojure source into mindmap structures&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;attaching Clojure functions to nodes so that they run automatically when there is a change, and on mindmap load and save&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;general scripting of ad-hoc mindmaps&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;The bottom line is that I want to be able to develop 90% of my Clojure code in Freemind.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;I also learned some basic GIT and &lt;/span&gt;&lt;a href="http://github.com/nickmain/Anaphor/tree/master/clojure-mind/"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;pushed the code to GitHub&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;. The code is really small at this stage, and that is part of its beauty. No build script or install instructions yet - will fix that this week.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;object height="745" width="960"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JljPONNnuTY&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JljPONNnuTY&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="960" height="745"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-294056006165101345?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/294056006165101345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=294056006165101345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/294056006165101345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/294056006165101345'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/04/evaluating-clojure-in-freemind-initial.html' title='Evaluating Clojure in Freemind - Initial GitHub Commit'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-3548582096890275114</id><published>2010-04-19T20:16:00.001-07:00</published><updated>2010-04-19T20:41:52.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freemind'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><title type='text'>Freemind Clojure REPL - Hello World</title><content type='html'>Figured out how to embed Clojure in a Freemind plugin. The Clojure code implements a listener on the tree model and provides a simple REPL-like demo.&lt;br /&gt;&lt;br /&gt;&lt;object width="960" height="745"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oingjPNpUE8&amp;hl=en_US&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/oingjPNpUE8&amp;hl=en_US&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="960" height="745"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-3548582096890275114?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/3548582096890275114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=3548582096890275114' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3548582096890275114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3548582096890275114'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/04/freemind-clojure-repl-hello-world.html' title='Freemind Clojure REPL - Hello World'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-1866099253712357828</id><published>2010-04-18T13:43:00.000-07:00</published><updated>2010-04-18T13:43:35.193-07:00</updated><title type='text'>Freemind Brain Crack Plugins - Clojure REPL</title><content type='html'>It's been a while since my last post.&amp;nbsp; I changed jobs, so that took a lot of the wind out of my sails.&lt;br /&gt;&lt;br /&gt;This post is more about putting something out there than saying anything profound. (Also - testing the screen cast capabilities of Quicktime in Snow Leopard). One of my favorite ways of procrastinating is watching the &lt;a href="http://www.zefrank.com/theshow/archives/2006/07/071106.html"&gt;Ze Frank "Brain Crack" episode&lt;/a&gt; (skip to 0:32 - 1:33). So in that spirit...&lt;br /&gt;&lt;br /&gt;I just figured out how to implement Freemind plugins and how to listen to the model. The screen cap below shows my hello world plugin - it just listens for nodes with text "test" and adds some children to them.&lt;br /&gt;&lt;br /&gt;Why is that exciting ? Imagine if the text of the node was a Clojure expression and the plugin evaluated that expression and added the result(s) as child nodes. Instant Clojure REPL embedded in a mind map !&lt;br /&gt;&lt;br /&gt;Anyway - it sounds exciting to me. Will be working on it this week.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="960" height="745"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SUEi1ZVsrpE&amp;hl=en_US&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/SUEi1ZVsrpE&amp;hl=en_US&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="960" height="745"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-1866099253712357828?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/1866099253712357828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=1866099253712357828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1866099253712357828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1866099253712357828'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/04/freemind-brain-crack-plugins-clojure.html' title='Freemind Brain Crack Plugins - Clojure REPL'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-8552446956839912459</id><published>2010-01-22T12:58:00.000-08:00</published><updated>2010-01-22T13:22:43.007-08:00</updated><title type='text'>Prolog in Freemind</title><content type='html'>&lt;p style="font-family: verdana;"&gt;I really hate typing source code into a normal text editor or IDE.  It feels like I'm chiseling it onto a stone tablet. It has caused me to procrastinate and delay or abandon many projects.&lt;/p&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;On the other hand, drawing an &lt;a style="font-family: verdana;" href="http://www.omnigroup.com/applications/OmniGraffle/"&gt;OmniGraffle&lt;/a&gt; diagram or creating a &lt;a style="font-family: verdana;" href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;Freemind&lt;/a&gt; mindmap feels much more lightweight and throw-away. There isn't the same apprehension. Copying such a document in order to try a different approach is much easier than forking a multi-file code-base. It is much easier to have different versions of a diagram or mindmap in the same folder and open at the same time. It is much less traumatic to delete a diagram and admit to a failed experiment.&lt;/p&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;So, I am going to shave a yak this weekend.  This is a sketch of an idea for expressing Prolog code in a mindmap:&lt;/p&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Jqup-kC5TY/S1oUvJY1LoI/AAAAAAAAARE/WitnULqn3sA/s1600-h/prolog.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 299px;" src="http://2.bp.blogspot.com/_5Jqup-kC5TY/S1oUvJY1LoI/AAAAAAAAARE/WitnULqn3sA/s400/prolog.png" alt="" id="BLOGGER_PHOTO_ID_5429675100955029122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;Another yak is that the Prolog code I am writing is operating on OmniGraffle diagrams - but that's another post...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-8552446956839912459?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/8552446956839912459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=8552446956839912459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8552446956839912459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8552446956839912459'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/01/prolog-in-freemind.html' title='Prolog in Freemind'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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://2.bp.blogspot.com/_5Jqup-kC5TY/S1oUvJY1LoI/AAAAAAAAARE/WitnULqn3sA/s72-c/prolog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-1285833916037820246</id><published>2010-01-01T13:20:00.000-08:00</published><updated>2010-01-01T14:14:30.904-08:00</updated><title type='text'>Happy New Year !</title><content type='html'>First of all, I am declaring online bankruptcy with respect to the obligations that I don't have time for, or interest in maintaining. That is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I am archiving all the email in my in-box. Anything that needed a response will not get one.&lt;/li&gt;&lt;li&gt;I am shelving my open-source projects. Yes - they are dead (although the code may find new life in other projects).&lt;/li&gt;&lt;li&gt;I am closing down the Yahoo groups I own.&lt;/li&gt;&lt;/ul&gt;From now on I will be concentrating on one main premise - modeling and code-generation using semantic web technologies. I will also be focusing on &lt;a href="http://en.wikipedia.org/wiki/Prolog"&gt;Prolog&lt;/a&gt; as my main language in the modeling layer and &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt; as my main language in the runtime layer.&lt;br /&gt;&lt;br /&gt;To that end, I will be thinking about two big Clojure projects:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Visual Clojure (see my previous ramblings about &lt;a href="http://epistemologicalengineering.blogspot.com/2009/01/visual-scheme.html"&gt;visual representations&lt;/a&gt; for &lt;a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29"&gt;Scheme&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Clojure for other platforms - namely &lt;a href="http://www.adobe.com/devnet/actionscript/articles/avm2overview.pdf"&gt;AVM2&lt;/a&gt; (Flash) and Objective-C.&lt;/li&gt;&lt;/ol&gt;The intention is to drive these projects via modeling and code-generation.&lt;br /&gt;&lt;br /&gt;Initially, I will be using &lt;a href="http://www.omnigroup.com/applications/OmniGraffle/"&gt;OmniGraffle&lt;/a&gt; as my modeling tool but may build other tools that are more open-source friendly. The modeling languages will be &lt;a href="http://www.w3.org/TR/owl2-overview/"&gt;OWL2&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/rdf-primer/"&gt;RDF&lt;/a&gt;, processed by Prolog (&lt;a href="http://alice.unibo.it/xwiki/bin/view/Tuprolog/"&gt;on the JVM&lt;/a&gt;) and other related technologies such as &lt;a href="http://www.w3.org/TR/rdf-sparql-query/"&gt;SPARQL&lt;/a&gt; and &lt;a href="http://clarkparsia.com/pellet/"&gt;Pellet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I expect to continue &lt;a href="http://catb.org/jargon/html/Y/yak-shaving.html"&gt;shaving many yaks&lt;/a&gt;, but I plan to do it without guilt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-1285833916037820246?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/1285833916037820246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=1285833916037820246' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1285833916037820246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1285833916037820246'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2010/01/happy-new-year.html' title='Happy New Year !'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-5201285436228594985</id><published>2009-10-18T12:56:00.000-07:00</published><updated>2009-10-18T13:00:23.331-07:00</updated><title type='text'>Book Recommendation</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I am enjoying this book immensely. Highly recommended:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.codersatwork.com/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 167px; height: 246px;" src="http://3.bp.blogspot.com/_5Jqup-kC5TY/SttzpRNYl-I/AAAAAAAAAPU/U47KEQ8J_H0/s400/cover.jpg" alt="" id="BLOGGER_PHOTO_ID_5394032131537672162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://www.codersatwork.com/"&gt;http://www.codersatwork.com/&lt;/a&gt;&lt;/span&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/4999585674334737166-5201285436228594985?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5201285436228594985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5201285436228594985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5201285436228594985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5201285436228594985'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/10/book-recommendation.html' title='Book Recommendation'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SttzpRNYl-I/AAAAAAAAAPU/U47KEQ8J_H0/s72-c/cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-8902696609495713934</id><published>2009-10-06T12:58:00.000-07:00</published><updated>2010-04-09T14:35:11.438-07:00</updated><title type='text'>Updated Resume</title><content type='html'>Just in case:&lt;br /&gt;&lt;a href="http://www.anotherbigidea.com/NickMain-Resume-redacted-10-2009.html"&gt;http://www.anotherbigidea.com/NickMain-Resume-redacted-10-2009.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Any suggestions for improvements are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-8902696609495713934?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/8902696609495713934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=8902696609495713934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8902696609495713934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8902696609495713934'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/10/updated-resume.html' title='Updated Resume'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-7002520520393229596</id><published>2009-08-30T22:05:00.000-07:00</published><updated>2009-08-30T22:09:16.132-07:00</updated><title type='text'>Snow Leopard FTW</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5Jqup-kC5TY/SptaKdRJp8I/AAAAAAAAAOw/H68sAw00_M4/s1600-h/Screen+shot+2009-08-30+at+10.02.30+PM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 157px;" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/SptaKdRJp8I/AAAAAAAAAOw/H68sAw00_M4/s400/Screen+shot+2009-08-30+at+10.02.30+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5375989715898574786" /&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;My 32-bit-only first-gen Intel MBP finally has Java 6 !&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-7002520520393229596?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/7002520520393229596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=7002520520393229596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7002520520393229596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7002520520393229596'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/08/snow-leopard-ftw.html' title='Snow Leopard FTW'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SptaKdRJp8I/AAAAAAAAAOw/H68sAw00_M4/s72-c/Screen+shot+2009-08-30+at+10.02.30+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-5677239091078650898</id><published>2009-06-11T16:30:00.000-07:00</published><updated>2010-12-30T14:19:11.392-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic-web'/><title type='text'>OWL 2 Overview</title><content type='html'>&lt;span style="font-family: verdana;"&gt;An overview of the OWL 2 semantic web ontology language. The important elements and their relationships:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_5Jqup-kC5TY/Sj2Hmw8TcJI/AAAAAAAAAOg/Ej9zjcNJfMU/s1600-h/RDFS-OWL-Modeling.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5349581032428630162" src="http://2.bp.blogspot.com/_5Jqup-kC5TY/Sj2Hmw8TcJI/AAAAAAAAAOg/Ej9zjcNJfMU/s400/RDFS-OWL-Modeling.png" style="cursor: pointer; display: block; height: 352px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;If anyone wants the original Omnigraffle document, please let me know.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-5677239091078650898?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5677239091078650898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5677239091078650898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5677239091078650898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5677239091078650898'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/06/owl-2-overview.html' title='OWL 2 Overview'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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://2.bp.blogspot.com/_5Jqup-kC5TY/Sj2Hmw8TcJI/AAAAAAAAAOg/Ej9zjcNJfMU/s72-c/RDFS-OWL-Modeling.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-2574464880549959570</id><published>2009-05-31T21:18:00.000-07:00</published><updated>2009-05-31T21:30:57.685-07:00</updated><title type='text'>Visual Ontology Editor</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I've been taking a short sabbatical from all the Flash-related projects to work on future career options.&lt;/span&gt; &lt;span style="font-family:verdana;"&gt;Part of that is building a visual ontology editor.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Screenshot shows the early stages of an interactive visualization component plugged into the Protege ontology editor. The goal is to be able to create and edit semantic web ontologies entirely via diagrams.&lt;/span&gt;  &lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Exploring the infamous "Pizza" ontology:&lt;br /&gt;&lt;/span&gt; &lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Jqup-kC5TY/SiNZIrZGREI/AAAAAAAAANo/RnfXH0PBiNo/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_5Jqup-kC5TY/SiNZIrZGREI/AAAAAAAAANo/RnfXH0PBiNo/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5342211588613358658" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-2574464880549959570?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2574464880549959570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2574464880549959570' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2574464880549959570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2574464880549959570'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/05/visual-ontology-editor.html' title='Visual Ontology Editor'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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://2.bp.blogspot.com/_5Jqup-kC5TY/SiNZIrZGREI/AAAAAAAAANo/RnfXH0PBiNo/s72-c/Picture+1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-547148131739269868</id><published>2009-03-17T21:32:00.000-07:00</published><updated>2009-03-17T21:44:36.493-07:00</updated><title type='text'>Vector.&lt;Joy&gt; - J2AVM update</title><content type='html'>Just got the new Flash 10 "Vector.&amp;lt;&amp;gt;" typed arrays working. Using them to translate Java arrays, so those should be much faster.&lt;br /&gt;&lt;br /&gt;This means that J2AVM is now targeting Flash 10+ only.&lt;br /&gt;&lt;br /&gt;Somewhere along the way I lost the code generator for creating the Java representations of the classes in the Flash Player library SWC. Busy rewriting that so I can generate the Java for all the new Flash 10 classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-547148131739269868?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/547148131739269868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=547148131739269868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/547148131739269868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/547148131739269868'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/03/vector-j2avm-update.html' title='Vector.&amp;lt;Joy&amp;gt; - J2AVM update'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-5024993257945663608</id><published>2009-03-09T21:41:00.000-07:00</published><updated>2009-03-09T22:02:43.810-07:00</updated><title type='text'>Progress Update</title><content type='html'>&lt;span style="font-family:verdana;"&gt;J2AVM progress update:&lt;/span&gt;  &lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Figured out how to support Java Framework classes - effectively it's by including special implementations of them in the gener&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;ated SWF.  To-do is lazy inclusion of referenced methods so that this does not impose too much overhead. Currently this only implements some of the append methods of StringBuilder (which is how Java does its string concatenation).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Also, figured out a reasonable way to do event handler functions. A static "delegate" method call is translated to a fetch of a named method closure. Screenshot of Java code below should be self explanatory. The @Name annotation on the "onMove" method provides an explicit name for the generated member - otherwise the name would be mangled, such as "onMove(95c0166a)", where the number is a String hashcode of the parameter signature. This mangling scheme is necessary since Java method names can be overloaded.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Jqup-kC5TY/SbXyoyjngBI/AAAAAAAAANI/DOENPWVJD8w/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 158px;" src="http://2.bp.blogspot.com/_5Jqup-kC5TY/SbXyoyjngBI/AAAAAAAAANI/DOENPWVJD8w/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5311418118133219346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Next up - unit test framework.&lt;br /&gt;&lt;br /&gt;Also, considering going to Flash 10 as the default runtime target so that the new Vector class can be used to speed up array operations. This would also allow Pixel Bender support - write Kernels in Java !&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-5024993257945663608?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5024993257945663608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5024993257945663608' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5024993257945663608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5024993257945663608'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/03/progress-update.html' title='Progress Update'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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://2.bp.blogspot.com/_5Jqup-kC5TY/SbXyoyjngBI/AAAAAAAAANI/DOENPWVJD8w/s72-c/Picture+2.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-6585063535632401764</id><published>2009-03-01T21:34:00.000-08:00</published><updated>2009-03-01T21:36:07.387-08:00</updated><title type='text'>Refactoring Done</title><content type='html'>J2AVM codebase now in much more flexible shape.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/nickmain_/statuses/1268126244"&gt;http://twitter.com/nickmain_/statuses/1268126244&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-6585063535632401764?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6585063535632401764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6585063535632401764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6585063535632401764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6585063535632401764'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/03/refactoring-done.html' title='Refactoring Done'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-9209068508797733858</id><published>2009-01-31T17:10:00.000-08:00</published><updated>2009-01-31T17:24:24.149-08:00</updated><title type='text'>Throwing Components Into the Mix</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Thinking about how to represent components in Visual-KS (kitchen sink) and how that paradigm interacts with the expression-composition model of Scheme.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Lines can represent event propagation/listening and also inclusion of a sub-expression (or reference to something else in the scope). Will different arrow-heads be enough to make the distinction clear ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5Jqup-kC5TY/SYT4tUnhhcI/AAAAAAAAAMI/LEnpQ5trwn4/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 391px;" src="http://1.bp.blogspot.com/_5Jqup-kC5TY/SYT4tUnhhcI/AAAAAAAAAMI/LEnpQ5trwn4/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5297632519206831554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;The goal of all this musing is a visual programming/modeling tool that runs on the JVM and in Flash (via J2AVM).&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-9209068508797733858?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/9209068508797733858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=9209068508797733858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/9209068508797733858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/9209068508797733858'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/01/throwing-components-into-mix.html' title='Throwing Components Into the Mix'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SYT4tUnhhcI/AAAAAAAAAMI/LEnpQ5trwn4/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-7717965292718704267</id><published>2009-01-29T09:05:00.001-08:00</published><updated>2009-01-29T09:05:49.066-08:00</updated><title type='text'>A Dream</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Jqup-kC5TY/SYHh5dod4yI/AAAAAAAAAL4/EpyyPM-o8w0/s1600-h/Picture+5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 248px;" src="http://2.bp.blogspot.com/_5Jqup-kC5TY/SYHh5dod4yI/AAAAAAAAAL4/EpyyPM-o8w0/s400/Picture+5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5296763014087566114" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-7717965292718704267?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/7717965292718704267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=7717965292718704267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7717965292718704267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7717965292718704267'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/01/dream.html' title='A Dream'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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://2.bp.blogspot.com/_5Jqup-kC5TY/SYHh5dod4yI/AAAAAAAAAL4/EpyyPM-o8w0/s72-c/Picture+5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-15465973370775033</id><published>2009-01-28T20:25:00.001-08:00</published><updated>2009-01-28T20:30:29.942-08:00</updated><title type='text'>Visual ActionScript/Flex</title><content type='html'>Hmmm..  not sure yet if the "jigsaw puzzle piece" metaphor would also work for Flex/MXML/ActionScript.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5Jqup-kC5TY/SYEv53QeTAI/AAAAAAAAALw/FWkL9SdKzb8/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 375px; height: 400px;" src="http://1.bp.blogspot.com/_5Jqup-kC5TY/SYEv53QeTAI/AAAAAAAAALw/FWkL9SdKzb8/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5296567307896507394" border="0" /&gt;&lt;/a&gt;Of course, the colors would be less cheesy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-15465973370775033?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/15465973370775033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=15465973370775033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/15465973370775033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/15465973370775033'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/01/visual-actionscriptflex.html' title='Visual ActionScript/Flex'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SYEv53QeTAI/AAAAAAAAALw/FWkL9SdKzb8/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-5226772063577712197</id><published>2009-01-27T20:30:00.000-08:00</published><updated>2010-12-30T14:14:36.799-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scheme'/><title type='text'>Visual Scheme</title><content type='html'>Which is more readable .. this Scheme-like snippet:&lt;br /&gt;&lt;pre&gt;(foo&lt;br /&gt;  (value1&lt;br /&gt;    (+ a 1)&lt;br /&gt;    (apples oranges bananas)&lt;br /&gt;    value4)&lt;br /&gt;  (barbar wonka))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;..or this diagram ?&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_5Jqup-kC5TY/SX_gT2B4ZXI/AAAAAAAAALo/3pLBVeFGptc/s1600-h/Picture+1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5296198318336533874" src="http://1.bp.blogspot.com/_5Jqup-kC5TY/SX_gT2B4ZXI/AAAAAAAAALo/3pLBVeFGptc/s400/Picture+1.png" style="cursor: hand; cursor: pointer; display: block; height: 212px; margin: 0px auto 10px; text-align: center; width: 241px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Playing with some designs for "Visual Scheme"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-5226772063577712197?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5226772063577712197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5226772063577712197' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5226772063577712197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5226772063577712197'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/01/visual-scheme.html' title='Visual Scheme'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SX_gT2B4ZXI/AAAAAAAAALo/3pLBVeFGptc/s72-c/Picture+1.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-7532921791335478355</id><published>2009-01-04T19:02:00.000-08:00</published><updated>2009-01-04T19:21:01.921-08:00</updated><title type='text'>J2AVM Update</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;span style="font-family: verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;I've been working hard on the "it doesn't have to be perfect first time" mantra. I restarted J2AVM five times during 2008. There were many reasons why - stress, personal loss, job changes, lack of time and illness - but mostly it was the wanting it to be perfect first time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Well, it's not perfect, or complete, but it works. It will be refactored, many times, but that's OK. I wanted this entry to be much larger, and less personal, but life's short. This is just to let people know that J2AVM is under active development and a more formal announcement, and invitation for testers/participants, is on its way sometime within the next couple of months.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;The code is all up on Google Code as j2avm and j2swf (formerly JavaSWF) and I hope to be microblogging the progress more frequently.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;The screenshot below is the current test-case I am using - ugly Java code intended to flush out as many features of the Java Virtual Machine as possible. J2AVM translates the compiled Java bytecode into Flash AVM2 bytecode, and makes a Flash movie. It is intended to enable Java as a complete development language for Flash.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5Jqup-kC5TY/SWF4dr61uAI/AAAAAAAAALI/ZArYTg92bu4/s1600-h/j2avm.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 292px; height: 400px;" src="http://3.bp.blogspot.com/_5Jqup-kC5TY/SWF4dr61uAI/AAAAAAAAALI/ZArYTg92bu4/s400/j2avm.png" alt="" id="BLOGGER_PHOTO_ID_5287639888910727170" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-7532921791335478355?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/7532921791335478355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=7532921791335478355' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7532921791335478355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7532921791335478355'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2009/01/j2avm-update.html' title='J2AVM Update'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SWF4dr61uAI/AAAAAAAAALI/ZArYTg92bu4/s72-c/j2avm.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-8456185370533463300</id><published>2008-11-16T17:07:00.000-08:00</published><updated>2008-11-16T17:32:09.227-08:00</updated><title type='text'>Software Legos</title><content type='html'>This looks really interesting: &lt;a href="http://www.kamaelia.org/Home"&gt;http://www.kamaelia.org/Home&lt;/a&gt;&lt;br /&gt;A system of loosely-coupled Python components that can be used to build "anything".&lt;br /&gt;&lt;br /&gt;The one thing that always strikes me, though, is how systems like these have to use or invent various programming-language-level techniques in order to remain flexible, reusable and composable. The Kamaelia mechanism appears to be heavy use of Python generators.&lt;br /&gt;&lt;br /&gt;A language like Java doesn't have the dynamism or self-modification abilities of Python or Ruby, so we have to use frameworks such as Spring and AOP in order to achieve component-like composition. That is, large, complex and intrusive runtime engines.&lt;br /&gt;&lt;br /&gt;What I'd like to see are components that are more like intelligent code generators. Being abstracted from the limitations of a particular runtime environment these components could be composed in far more interesting and flexible ways. Visual composition would be much easier, too - since the inter-component protocols would not be limited to what is possible at runtime in a particular programming language.&lt;br /&gt;&lt;br /&gt;Something like this, that runs in the Flash Player/AIR, and can generate SWFs is the first goal...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-8456185370533463300?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/8456185370533463300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=8456185370533463300' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8456185370533463300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8456185370533463300'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/11/software-legos.html' title='Software Legos'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-2772915000308402038</id><published>2008-11-14T09:26:00.001-08:00</published><updated>2008-11-14T09:55:25.951-08:00</updated><title type='text'>In Anticipation of MAX</title><content type='html'>Not going to MAX this year. My day job no longer involves anything to do with Flash and the mouse has stopped all non-essential expenses.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, I will be watching the events at MAX closely. It seems like there will be announcements around the FlaCC C/C++ tool.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It seems odd to me that Adobe would be pushing C as a Flash development language and not Java. Is Java just a little too close to AS3 that it would cannibalize the AS ecosystem ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, if Adobe does not announce anything around Java as a Flash development language then it's game on. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-2772915000308402038?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2772915000308402038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2772915000308402038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2772915000308402038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2772915000308402038'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/11/in-anticipation-of-max.html' title='In Anticipation of MAX'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-5360490536271193107</id><published>2008-10-22T20:01:00.000-07:00</published><updated>2008-10-22T20:02:54.647-07:00</updated><title type='text'>Well, Scratch That</title><content type='html'>No XFL export in Flash CS4.&lt;br /&gt;&lt;br /&gt;Adobe screwed us.&lt;br /&gt;&lt;br /&gt;Plan B. Time to screw Adobe...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-5360490536271193107?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5360490536271193107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5360490536271193107' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5360490536271193107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5360490536271193107'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/10/well-scratch-that.html' title='Well, Scratch That'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-7743052918952980073</id><published>2008-10-15T22:00:00.000-07:00</published><updated>2008-10-15T22:16:31.095-07:00</updated><title type='text'>A new mission for JavaSWF ?</title><content type='html'>I've been looking for a new mission statement (cough) for JavaSWF - as a way to give it better focus and motivation.&lt;br /&gt;&lt;br /&gt;Assuming that XFL is really the complete "FLA as XML (with assets, inside a ZIP)" that has been talked about, and that the format is deterministic enough to be reverse engineered...&lt;br /&gt;&lt;br /&gt;The new mission of JavaSWF will be to implement a pure Java batch or command line SWF publishing tool that does the same as the publish command in the Flash IDE.  I have yet to see an XFL file, but the idea doesn't sound too implausible or unattainable (unless there are some legal hurdles in the way).  A sub-goal would be to create XFL's from SWFs for complete round-tripping (although not an AS3 decompiler).&lt;br /&gt;&lt;br /&gt;The other big thing is to get contributors involved in the project.  This is something that I've wanted to do for a long time but have never had the time or resources to attempt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-7743052918952980073?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/7743052918952980073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=7743052918952980073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7743052918952980073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/7743052918952980073'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/10/new-mission-for-javaswf.html' title='A new mission for JavaSWF ?'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-4832526245505014264</id><published>2008-08-23T13:59:00.000-07:00</published><updated>2008-08-23T14:15:05.601-07:00</updated><title type='text'>Book Recommendation: Maven, The Definitive Guide</title><content type='html'>&lt;span style="font-family: verdana;"&gt;I'm an ANT aficionado and have always thought that Maven was a Neo-Con conspiracy to dumb down the populace.  However, I am forced to work with Maven in my new position, so I went looking for a good book.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://www.sonatype.com/community/definitive_guide.html"&gt;"Maven, The Definitive Guide"&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; is currently a free HTML or PDF download and will be published by O'Reilly later this year.  It contains both an introduction and a reference for Maven, and is written in such a clear style that I am actually beginning to lose my fear of Maven.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;To quote the Preface: "Please don't throw a book this large at anyone in anger."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Recommended.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-4832526245505014264?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/4832526245505014264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=4832526245505014264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4832526245505014264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4832526245505014264'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/08/book-recommendation-maven-definitive.html' title='Book Recommendation: Maven, The Definitive Guide'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-1807553513590275074</id><published>2008-08-15T16:50:00.000-07:00</published><updated>2008-08-15T16:56:31.042-07:00</updated><title type='text'>Presentations on Pixel Bender and Compiling C to the Flash Player</title><content type='html'>&lt;span style="font-family: verdana;"&gt;The LLVM Developers' Meeting earlier this month included two interesting talks from Adobe on "Adobe Image Foundation and Adobe PixelBender" and "Flash C Compiler: Compiling C code to the Adobe Flash Virtual         Machine".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Link: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://llvm.org/devmtg/2008-08/"&gt;2008 LLVM Developers' Meeting&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-1807553513590275074?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/1807553513590275074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=1807553513590275074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1807553513590275074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1807553513590275074'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/08/presentations-on-pixel-bender-and.html' title='Presentations on Pixel Bender and Compiling C to the Flash Player'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-1773626593012843614</id><published>2008-08-12T12:35:00.000-07:00</published><updated>2008-08-12T12:49:49.561-07:00</updated><title type='text'>Disney.com 3.0 is no longer "In Progress"</title><content type='html'>&lt;span style="font-family: verdana;"&gt;The updated Disney.com website went live at 5am this morning.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;The Flash team did an amazing job - despite long hours, &lt;/span&gt;&lt;span style="font-family: verdana;"&gt;personal tragedies, and&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; many process and vendor failures. Jason, the Tech Writer, Ad-hoc Project Manager and Pep Squad, sums it up:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5Jqup-kC5TY/SKHmHDEU5wI/AAAAAAAAAI4/FuK30Mn6Ozc/s1600-h/-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/SKHmHDEU5wI/AAAAAAAAAI4/FuK30Mn6Ozc/s400/-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5233717250738153218" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;Now, apart from starting a new job next week, I hope to have much more time and energy for the JavaSWF and J2AVM projects.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-1773626593012843614?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/1773626593012843614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=1773626593012843614' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1773626593012843614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/1773626593012843614'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/08/disneycom-30-is-no-longer-in-progress.html' title='Disney.com 3.0 is no longer &quot;In Progress&quot;'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SKHmHDEU5wI/AAAAAAAAAI4/FuK30Mn6Ozc/s72-c/-1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-2146736729846496490</id><published>2008-06-09T20:20:00.000-07:00</published><updated>2008-06-09T20:38:20.639-07:00</updated><title type='text'>GPU Computing</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Interesting news about the inclusion of a GPU language in the next OS X "Snow Leopard":&lt;br /&gt;&lt;a href="http://www.apple.com/macosx/snowleopard/?sr=hotnews"&gt;http://www.apple.com/macosx/snowleopard/?sr=hotnews&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I know that Apple uses &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt; in their GPU pipeline - wonder if OpenCL is based on that.&lt;br /&gt;&lt;br /&gt;Also - does anyone know if &lt;a href="http://labs.adobe.com/wiki/index.php/AIF_Toolkit"&gt;Adobe's GPU language/technology for the future Flash Player&lt;/a&gt; can be used for general computing ? Maybe - feeding in data encoded as a bitmap and reading the result out of the resulting bitmap ?&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/4999585674334737166-2146736729846496490?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/2146736729846496490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=2146736729846496490' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2146736729846496490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/2146736729846496490'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/06/gpu-computing.html' title='GPU Computing'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-3818072713584525436</id><published>2008-05-18T21:33:00.000-07:00</published><updated>2008-05-18T21:35:06.442-07:00</updated><title type='text'>Python</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Just saying...&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5Jqup-kC5TY/SDEDOUG2iDI/AAAAAAAAAGw/lf1bgMP0DvI/s1600-h/Python.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5Jqup-kC5TY/SDEDOUG2iDI/AAAAAAAAAGw/lf1bgMP0DvI/s400/Python.png" alt="" id="BLOGGER_PHOTO_ID_5201942589040134194" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-3818072713584525436?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/3818072713584525436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=3818072713584525436' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3818072713584525436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3818072713584525436'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/05/python.html' title='Python'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SDEDOUG2iDI/AAAAAAAAAGw/lf1bgMP0DvI/s72-c/Python.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-3520145924166792795</id><published>2008-05-15T13:57:00.000-07:00</published><updated>2008-05-15T14:07:50.507-07:00</updated><title type='text'>Object Model for Java Code</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5Jqup-kC5TY/SCyj7kG2iCI/AAAAAAAAAGQ/sXgn2T311Kg/s1600-h/SimpleLanguageUML.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5Jqup-kC5TY/SCyj7kG2iCI/AAAAAAAAAGQ/sXgn2T311Kg/s400/SimpleLanguageUML.png" alt="" id="BLOGGER_PHOTO_ID_5200711913406105634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;I think this fully captures all the information that could be present in Java bytecode.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;It aggregates expression trees and collapses new-object into the constructor call.  Synchronization would be represented by virtual "monitorEnter/Exit()" method calls on the object instance.  Exception handlers are encoded as explicit Try/Catch statements.  Conditional expressions are explicit.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Any bytecodes that cannot be aggregated into expression trees can just be assigned to virtual local variables (there is no stack).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;I plan to go ahead and implement this as the intermediate format for J2AVM.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-3520145924166792795?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/3520145924166792795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=3520145924166792795' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3520145924166792795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3520145924166792795'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/05/object-model-for-java-code.html' title='Object Model for Java Code'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SCyj7kG2iCI/AAAAAAAAAGQ/sXgn2T311Kg/s72-c/SimpleLanguageUML.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-6785192785916966995</id><published>2008-05-13T21:45:00.000-07:00</published><updated>2008-05-13T22:10:21.833-07:00</updated><title type='text'>Abstracting the JVM instructions</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Jqup-kC5TY/SCpum0G2iBI/AAAAAAAAAGI/K_kATDopY3Q/s1600-h/JVM-Abstracted-Instructions.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5Jqup-kC5TY/SCpum0G2iBI/AAAAAAAAAGI/K_kATDopY3Q/s400/JVM-Abstracted-Instructions.png" alt="" id="BLOGGER_PHOTO_ID_5200090332854126610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;When operations are parameterized with types (etc.) the JVM instruction set collapses down nicely.  (Subroutines are omitted since they are deprecated in Java 5+)&lt;br /&gt;&lt;br /&gt;At this point I am trying to decide whether to write the code to map these instructions into the Flash AVM2 equivalents.  The decision revolves around whether a further stage of abstraction is needed.  For the most part the JVM and AVM2 stacks look the same with respect to each instruction type, however, there are a couple of problematic cases.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;AVM2 static invocations  require the class object to be pushed on the stack before the call arguments.  The JVM does not need a class object (the class name is encoded in the invoke_static instruction).  Since the call argument expressions could be composed of arbitrarily complex instruction sequences (possibly including branches) it is very hard to determine at what point in the translation to insert the AVM2 instructions that push the class object.  This would require an analysis that builds the expression trees for all the arguments.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The JVM creates new objects and then calls the constructor method on that object.  The AVM2 combines the creation and constructor call in a single instruction. Combining these two JVM operations into a single AVM2 operation requires a similar level of analysis as the static-call scenario.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;If the intermediate representation of the JVM code consisted of expression trees and abstracted away the stack (by introducing virtual local variables) then the above analyses would be trivial.  Building such an abstraction is not too hard, but is a fair chunk of work.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Therein lies the dilemma.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-6785192785916966995?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6785192785916966995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6785192785916966995' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6785192785916966995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6785192785916966995'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/05/abstracting-jvm-instructions.html' title='Abstracting the JVM instructions'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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://2.bp.blogspot.com/_5Jqup-kC5TY/SCpum0G2iBI/AAAAAAAAAGI/K_kATDopY3Q/s72-c/JVM-Abstracted-Instructions.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-5205584066299356772</id><published>2008-05-05T21:12:00.000-07:00</published><updated>2008-05-05T21:18:28.844-07:00</updated><title type='text'>JVM vs AVM2 Instruction Sets</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Mindmaps of the JVM and AVM2 instruction sets.&lt;br /&gt;&lt;br /&gt;It looks like the JVM set (left) is bigger than the AVM2 set - but if the different types (int, long, float, double etc.) are abstracted away, the JVM instructions are actually fewer and more regular than the AVM2 ones.  This is due to the requirement for the AVM2 to support both static typing and dynamic lookup.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5Jqup-kC5TY/SB_b_JkuyZI/AAAAAAAAAFo/f-P0s6-xMZI/s1600-h/Untitled.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/SB_b_JkuyZI/AAAAAAAAAFo/f-P0s6-xMZI/s400/Untitled.png" alt="" id="BLOGGER_PHOTO_ID_5197114372957063570" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-5205584066299356772?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5205584066299356772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5205584066299356772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5205584066299356772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5205584066299356772'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/05/jvm-vs-avm2-instruction-sets.html' title='JVM vs AVM2 Instruction Sets'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SB_b_JkuyZI/AAAAAAAAAFo/f-P0s6-xMZI/s72-c/Untitled.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-4601495078996385180</id><published>2008-05-04T10:15:00.000-07:00</published><updated>2008-05-04T10:37:06.853-07:00</updated><title type='text'>JVM becoming interesting for dynamic languages</title><content type='html'>&lt;span style="font-family: verdana;"&gt;This is an interesting post (from the JRuby lead) on optimizations and future machine-level support for dynamic languages on the JVM:&lt;br /&gt;&lt;a href="http://headius.blogspot.com/2008/05/power-of-jvm.html"&gt;http://headius.blogspot.com/2008/05/power-of-jvm.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One of the nice things about Tamarin Tracing (next-gen AVM2) is that it is an excellent JIT for dynamic languages.  It "traces" live code interpretation and then JIT's (compiles down to machine code) the ActionScript bytecode based on the actual runtime types that it observed.  This allows it to generate much tighter (type-specific) code than an up-front static JIT would be able to achieve, given a dynamic language.&lt;br /&gt;&lt;br /&gt;Charles Nutter's post implies that the JVM also does some form of runtime tracing before actually jitting the bytecode.  That, and some enhancements to the next JVM, may make it an equally efficient execution platform for dynamic languages.&lt;br /&gt;&lt;br /&gt;Which makes me wonder if it would be worth implementing an ABC (ActionScript bytecode) to JVM translator...&lt;br /&gt;&lt;br /&gt;Now that the SWF (and AVM2) specs are wide open for implementers, is the SWF file a useful code packaging format, even for code that runs on the JVM ?  Imagine writing your code once (in AS3 or Java - whatever) and then being able to run the same binary on the JVM and on the web in the Flash player (and on the AIR platform).&lt;br /&gt;&lt;br /&gt;Maybe, if such a thing existed, someone else could build a pure Java Flash player on top of it.&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/4999585674334737166-4601495078996385180?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/4601495078996385180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=4601495078996385180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4601495078996385180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4601495078996385180'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/05/jvm-becoming-interesting-for-dynamic.html' title='JVM becoming interesting for dynamic languages'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-4767888708875193515</id><published>2008-05-01T08:17:00.000-07:00</published><updated>2008-05-01T08:29:59.705-07:00</updated><title type='text'>SWF Spec is now less restrictive !</title><content type='html'>&lt;a href="http://www.adobe.com/aboutadobe/pressroom/pressreleases/200804/050108AdobeOSP.html"&gt;&lt;span style="font-family:verdana;"&gt;http://www.adobe.com/aboutadobe/pressroom/pressreleases/200804/050108AdobeOSP.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Years ago I wrote a SWF vector renderer in Java as part of a multimedia player being developed by Tekadence (went pop in the dot-com bubble).  It was hard and I never managed to figure out all the corner cases. So I don't expect to see a quality pure Java Flash Player any time soon.&lt;br /&gt;&lt;br /&gt;However, what this does mean is that I can see an opportunity for treating SWF as a standard vector format for general use and for AS3 bytecode as viable general binary code format.&lt;br /&gt;&lt;br /&gt;Look for more thoughts and announcements on the future of JavaSWF soon.&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/4999585674334737166-4767888708875193515?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/4767888708875193515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=4767888708875193515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4767888708875193515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4767888708875193515'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/05/swf-spec-is-now-less-restrictive.html' title='SWF Spec is now less restrictive !'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-4913732018815507596</id><published>2008-04-30T06:46:00.000-07:00</published><updated>2008-04-30T06:58:11.674-07:00</updated><title type='text'>A Decade of Web Programming</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Ten years ago this month I did my first bit of web development.&lt;br /&gt;&lt;br /&gt;While working at FileNET, developing Java and C++/ActiveX interfaces for the VisualWorkflo product, I wrote a small Java HTTP server.  It was an experiment in putting an HTML UI in front of the workflow engine.  I even wrote a simple template engine that looked very much like what JSP would later become.&lt;br /&gt;&lt;br /&gt;Ten years later and I'm still having discussions about what the best template engine would be and still writing code in Java. &lt;br /&gt;&lt;br /&gt;Kill me if I'm still doing this in 2018.&lt;br /&gt;&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/4999585674334737166-4913732018815507596?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/4913732018815507596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=4913732018815507596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4913732018815507596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/4913732018815507596'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/04/decade-of-web-programming.html' title='A Decade of Web Programming'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-3850525300429710279</id><published>2008-04-24T18:05:00.000-07:00</published><updated>2008-12-20T10:31:20.913-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scheme'/><title type='text'>Map of Scheme R5RS</title><content type='html'>&lt;span style="font-family:verdana;"&gt;While learning Scheme I drew this mindmap to get an idea of how big the language is.  It doesn't seem too implausible to implement it on top of the Flash 9 VM...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5Jqup-kC5TY/SBEvKpkuyYI/AAAAAAAAAFg/d0FeKJhd1lk/s1600-h/R5RS.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/SBEvKpkuyYI/AAAAAAAAAFg/d0FeKJhd1lk/s400/R5RS.png" alt="" id="BLOGGER_PHOTO_ID_5192983705340004738" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-3850525300429710279?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/3850525300429710279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=3850525300429710279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3850525300429710279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/3850525300429710279'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/04/map-of-scheme-r5rs.html' title='Map of Scheme R5RS'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SBEvKpkuyYI/AAAAAAAAAFg/d0FeKJhd1lk/s72-c/R5RS.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-663568968325289466</id><published>2008-04-17T16:01:00.000-07:00</published><updated>2008-12-20T10:31:52.409-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scheme'/><title type='text'>Breaking Hygiene</title><content type='html'>&lt;div class="hlcode"&gt;&lt;span style="font-family:verdana;"&gt;In learning Scheme one thing I really want to do is write macros that write macros.  Not only that, but macros that are only visible within a certain scope - the body of the meta-macro's input.&lt;br /&gt;&lt;br /&gt;Normal Scheme macro hygiene gets in the way.  The name of the internal macro gets "sanitized" so that it isn't accessible in the scope of the input.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;The example below was my breakthrough - it uses datum-&gt;syntax-object to make an internal macro name that is injected into the input's scope.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="syntax"&gt;&lt;pre&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define-syntax &lt;/span&gt;&lt;span class="nv"&gt;foo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;stx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;syntax-case&lt;/span&gt; &lt;span class="nv"&gt;stx&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;x&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;with-syntax&lt;/span&gt;&lt;br /&gt;    &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;macro-name&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;datum-&amp;gt;syntax-object&lt;/span&gt; &lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="ss"&gt;'x&lt;/span&gt; &lt;span class="ss"&gt;'bar&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;syntax&lt;/span&gt;&lt;br /&gt;   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let-syntax &lt;/span&gt;&lt;br /&gt;    &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;macro-name&lt;/span&gt;&lt;br /&gt;      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;syntax-rules &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;begin &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;write &lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;newline&lt;/span&gt;&lt;span class="p"&gt;))))))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="nv"&gt;body&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;)))))))&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This creates a "bar" sub-macro that can be referenced in the input.&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Sample DrScheme session (also works in SISC - but that is another story...):&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5Jqup-kC5TY/SAfZZm4g5zI/AAAAAAAAAFY/Fp5YvP4eefk/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/SAfZZm4g5zI/AAAAAAAAAFY/Fp5YvP4eefk/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5190356129525327666" border="0" /&gt;&lt;/a&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/4999585674334737166-663568968325289466?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/663568968325289466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=663568968325289466' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/663568968325289466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/663568968325289466'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/04/breaking-hygiene.html' title='Breaking Hygiene'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/SAfZZm4g5zI/AAAAAAAAAFY/Fp5YvP4eefk/s72-c/Picture+1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4999585674334737166.post-6508527574076358149</id><published>2008-01-23T09:10:00.000-08:00</published><updated>2008-01-23T09:27:38.432-08:00</updated><title type='text'>Fun with Tamarin Shell</title><content type='html'>&lt;ul&gt;&lt;li&gt;Get Tamarin shell binary from here: &lt;a href="ftp://ftp.mozilla.org/pub/js/tamarin/builds/tamarin-central/"&gt;ftp://ftp.mozilla.org/pub/js/tamarin/builds/tamarin-central/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Get the asc ActionScript compiler by downloading Flex Builder or the Flex SDK (pref v3).&lt;/li&gt;&lt;li&gt;Make the Tamarin shell executable (OSX:  chmod +x shell ).&lt;/li&gt;&lt;li&gt;Read this blog entry: &lt;a href="http://ecmascript.zwetan.com/2007/04/avmplus-101.html"&gt;avmplus 101&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Create the simple AS file (test.as):&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;br /&gt;package { &lt;br /&gt;       print( "hello world " );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Open up a terminal:&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;br /&gt;&gt; java -jar /Applications/Adobe\ Flex\ Builder\ 3/sdks/3.0.0/lib/asc.jar -exe shell  test.as&lt;br /&gt;&gt; ./shell test.abc&lt;br /&gt;hello world&lt;br /&gt;&gt; chmod +x test.exe&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Even though it has an exe extension it works on OS X..&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; ./test.exe&lt;br /&gt;hello world&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So... who wants to write Cocoa bindings for Tamarin ?&lt;br /&gt;Tamarin source is here: &lt;a href="http://hg.mozilla.org/tamarin-central/?archive/tip.zip"&gt;http://hg.mozilla.org/tamarin-central/?archive/tip.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-6508527574076358149?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6508527574076358149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6508527574076358149' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6508527574076358149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6508527574076358149'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/01/fun-with-tamarin-shell.html' title='Fun with Tamarin Shell'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-5201056068400005428</id><published>2008-01-04T14:50:00.001-08:00</published><updated>2008-01-04T15:17:13.625-08:00</updated><title type='text'>AVM1 to AVM2 Binary Translation</title><content type='html'>I'm currently deep in an effort to translate AVM1 bytecode to AVM2 bytecode.  It is looking good, but keeping 4 contexts in my head at the same time is brain-explody. (AVM1 bytecodes/execution model, AVM2 bytecodes/execution model, JavaSWF code that is doing the translation, ActionScript 3 runtime support for the translated bytecode.)&lt;br /&gt;&lt;br /&gt;I'm not sure how much, if any, of this will be open source since I am doing a lot of the coding during working hours (and the Mouse is especially stingy when it comes to I.P.).&lt;br /&gt;&lt;br /&gt;If there is time after this project I might go back and re-implement the translator in a way that can be o/s.   I have this fantasy about an intermediate code representation (probably in Tree-Static-Single-Assignment form) that can model AVM1, AVM2 and JVM bytecodes.  Translating between the different VM's would be straightforward...  (I did say "fantasy")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4999585674334737166-5201056068400005428?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/5201056068400005428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=5201056068400005428' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5201056068400005428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/5201056068400005428'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2008/01/avm1-to-avm2-binary-translation.html' title='AVM1 to AVM2 Binary Translation'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-6443917202257151601</id><published>2007-09-13T11:44:00.000-07:00</published><updated>2007-09-13T11:54:55.111-07:00</updated><title type='text'>Quick Update</title><content type='html'>&lt;span style="font-family: verdana;"&gt;For the last couple of weeks I've been heads-down to pull together a demo of J2AVM for a presentation &lt;/span&gt;&lt;span style="font-family: verdana;"&gt;on "Flash and Open Source" &lt;/span&gt;&lt;span style="font-family: verdana;"&gt;I was going to give at a company "Tech Summit" in Orlando.  The code worked, but it still needs a little refactoring, especially in the separation-of-concerns area, before announcing it to a wider audience.  It's all in the JavaSWF SVN over at Sourceforge, though.&lt;br /&gt;&lt;br /&gt;Boy - Florida is humid !  I'm glad I live in a desert climate.&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/4999585674334737166-6443917202257151601?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6443917202257151601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6443917202257151601' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6443917202257151601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6443917202257151601'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2007/09/quick-update.html' title='Quick Update'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-6961678511689065981</id><published>2007-08-22T14:41:00.000-07:00</published><updated>2007-08-22T14:49:48.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='javaswf'/><title type='text'>SWF Generation within the Flash Player</title><content type='html'>&lt;span style="font-family: verdana;"&gt;I just learned about the Loader class in AS3 - specifically about the ability to load a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SWF&lt;/span&gt; from a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ByteArray&lt;/span&gt;.  I already knew about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ByteArray&lt;/span&gt; and got pretty excited about that.&lt;br /&gt;&lt;br /&gt;This is even bigger.  It means that it is possible to generate a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;SWF&lt;/span&gt; in memory and then load it without the need to save it out over the network or to disk.  This includes &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;AVM&lt;/span&gt;2 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;bytecode&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;Now all that is required is something like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;JavaSWF&lt;/span&gt; but implemented in AS3 (or maybe &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;JavaSWF&lt;/span&gt; could be translated to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;AVM&lt;/span&gt;2 via J2&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;AVM&lt;/span&gt;).&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/4999585674334737166-6961678511689065981?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/6961678511689065981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=6961678511689065981' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6961678511689065981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/6961678511689065981'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2007/08/swf-generation-within-flash-player.html' title='SWF Generation within the Flash Player'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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-4999585674334737166.post-8292307839575888871</id><published>2007-08-22T11:41:00.000-07:00</published><updated>2007-08-22T12:33:18.705-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='avm2'/><category scheme='http://www.blogger.com/atom/ns#' term='j2avm'/><category scheme='http://www.blogger.com/atom/ns#' term='javaswf'/><title type='text'>J2AVM - Crystallizing the Approach</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5Jqup-kC5TY/RsyI9ClFalI/AAAAAAAAAAU/WQR7uxEMr2Y/s1600-h/J2AVM.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_5Jqup-kC5TY/RsyI9ClFalI/AAAAAAAAAAU/WQR7uxEMr2Y/s400/J2AVM.png" alt="" id="BLOGGER_PHOTO_ID_5101603060149742162" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;J2AVM is a Java-to-AVM2 translator that I am working on.  The AVM2 is the new ActionScript Virtual Machine in the Flash 9 Player.  The goal is to enable development of Flash and AIR applications in Java.&lt;br /&gt;&lt;br /&gt;Over the past few weeks I've been going back and forth between several different approaches to J2AVM.  Having too many options can be a bad thing.&lt;br /&gt;&lt;br /&gt;For a while I've been experimenting with the OpenJDK compiler (javac) in order to take Java source as the input and looking at the "asc" Jar in the Flex SDK (which will be open sourced later this year).  The benefit of that approach is that library support could be implemented by source-level transformations on the Java AST.  Using the Flex SDK to emit the AVM2 bytecode also means not having to maintain that code within JavaSWF (it already exists in a rough form).&lt;br /&gt;&lt;br /&gt;However, for several reasons, I've reverted back to the Java bytecode to AVM2 bytecode translator (using JavaSWF).&lt;br /&gt;&lt;br /&gt;I hope to present a prototype of J2AVM at a company meeting in 3 weeks time and bytecode-to-bytecode translation will get me further along in the limited time left.  It also holds out the possibility of translating JVM languages other than Java (Scala ?).&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/4999585674334737166-8292307839575888871?l=epistemologicalengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epistemologicalengineering.blogspot.com/feeds/8292307839575888871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4999585674334737166&amp;postID=8292307839575888871' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8292307839575888871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4999585674334737166/posts/default/8292307839575888871'/><link rel='alternate' type='text/html' href='http://epistemologicalengineering.blogspot.com/2007/08/j2avm-crystallizing-approach.html' title='J2AVM - Crystallizing the Approach'/><author><name>Nick Main</name><uri>http://www.blogger.com/profile/13564182601565706530</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/_5Jqup-kC5TY/RsyI9ClFalI/AAAAAAAAAAU/WQR7uxEMr2Y/s72-c/J2AVM.png' height='72' width='72'/><thr:total>3</thr:total></entry></feed>
