<?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-29484762</id><updated>2011-12-11T18:20:05.689-08:00</updated><category term='other'/><category term='vexidev'/><category term='docs'/><category term='feature'/><category term='javascript'/><category term='debugging'/><category term='tips'/><category term='marketing'/><category term='vexi'/><category term='performance'/><category term='events'/><category term='release'/><category term='game'/><category term='demo'/><category term='vunit'/><title type='text'>Vexi</title><subtitle type='html'>All about the Vexi Platform found on &lt;a href="http://vexi.sourceforge.net"&gt;vexi.sourceforge.net&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29484762.post-6579819889134142144</id><published>2010-12-01T15:00:00.000-08:00</published><updated>2010-12-01T15:03:55.285-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><title type='text'>Nearing commit 4000</title><content type='html'>&lt;p&gt;We are fast approaching revision 4000 in subversion, which is quite a milestone.  Also, since the project 'reset' it's revision number when moving from Darcs to Subversion, it is spiritually even more than 5000.&lt;/p&gt;

&lt;p&gt;Companies Web Enable IT and Rocket Logic continue to develop successfully with Vexi.  The short/medium term goal is to update the web presence so others may learn more easily of Vexi's capabilities.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-6579819889134142144?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/6579819889134142144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=6579819889134142144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/6579819889134142144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/6579819889134142144'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2010/12/nearing-commit-4000.html' title='Nearing commit 4000'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-4942521701500569324</id><published>2009-11-12T02:25:00.000-08:00</published><updated>2009-11-12T02:29:40.405-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><category scheme='http://www.blogger.com/atom/ns#' term='vexi'/><category scheme='http://www.blogger.com/atom/ns#' term='docs'/><title type='text'>Vexi Updates</title><content type='html'>&lt;p&gt;Lots of new features have been added to the JavaScript-like VexiScript over the past year.  We need to get a web page up detailing them all.&lt;/p&gt;

&lt;p&gt;Importantly, our documentation tools have come a long way and there is now &lt;a href="http://vexi.sourceforge.net/docs/3.0/"&gt;a reference&lt;/a&gt; generated directly from the Core source.  The website is on my radar, and is in the process of a (slow) transition to a newer version of MediaWiki.&lt;/p&gt;

&lt;p&gt;We at &lt;a href="http://www.webenableit.com"&gt;Web Enable IT&lt;/a&gt; are having great success using Vexi for our &lt;a href="http://www.emanate5.com"&gt;Emanate5&lt;/a&gt; platform.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-4942521701500569324?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/4942521701500569324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=4942521701500569324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4942521701500569324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4942521701500569324'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/11/vexi-updates.html' title='Vexi Updates'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-717647211945238231</id><published>2009-08-29T16:18:00.000-07:00</published><updated>2009-08-29T17:11:21.220-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='feature'/><category scheme='http://www.blogger.com/atom/ns#' term='vexi'/><title type='text'>Vexiscript Destructuring &amp; Iterating Values</title><content type='html'>&lt;p&gt;I have made a couple of improvements to vexi script (our dialect of javascript).&lt;p&gt;
&lt;h3&gt;1) Destructurings &lt;/h3&gt;
&lt;p&gt;
Destructurings in Vexscript are the same as those introduced in &lt;a href="https://developer.mozilla.org/en/New_in_JavaScript_1.7"&gt;Mozilla Javascript 1.7&lt;/a&gt;.&lt;/p&gt;

&lt;code&gt;
//Useful for swapping values&lt;br/&gt;
var a = 1;&lt;br/&gt;
var b = 2;&lt;br/&gt;
[a,b] = [b,a];&lt;br/&gt;
&lt;br/&gt;
// Or for handling multiple returns&lt;br/&gt;
var a,b,c; &lt;br/&gt;
[a,b,c] = f(); &lt;br/&gt;
&lt;/code&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;h3&gt;2)Improved for-in loop&lt;/h3&gt;

&lt;p&gt;Its pretty straightforward&lt;/p&gt;
&lt;code&gt;
var o = {a:3,b:2,c:1};&lt;br/&gt;
for(var k,v in o){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ...&lt;br/&gt;
}&lt;br/&gt;
&lt;br/&gt;
// one might use this convention for an array&lt;br/&gt;
var arr = ["a","b","c"];&lt;br/&gt;
for(var i,v in o){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ...&lt;br/&gt;
}&lt;br/&gt;
&lt;/code&gt;

&lt;p&gt;This is not the same as any of the methods (there are at least 2) you can use in mozilla javascript. They support the form &lt;i&gt;for(var [k,v] in o)&lt;/i&gt;, which is unfortunate at is makes it an ambiguous syntax. It could be seen as a destructuring of just the key (so its not usually possible to have an array as a key in javascript, but its still not a very good choice in my opinion).&lt;/p&gt;


&lt;p&gt;The other method is  &lt;i&gt;for each(var v in o)&lt;/i&gt;,  here the each key word just changes the behaviour of the loop. This is not really ideal as it is not useful if you need both the key and the value (which is the case perhaps as often as not).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-717647211945238231?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/717647211945238231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=717647211945238231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/717647211945238231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/717647211945238231'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/08/vexiscript-destructuring-iterating.html' title='Vexiscript Destructuring &amp; Iterating Values'/><author><name>mikeyg</name><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-29484762.post-5650219820128829394</id><published>2009-08-14T07:34:00.000-07:00</published><updated>2009-08-14T07:37:06.556-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='docs'/><title type='text'>Vexi Docs Preview</title><content type='html'>&lt;p&gt;Courteousy of Mike and his inginuity:&lt;br/&gt;
&lt;a href="http://vexi.sourceforge.net/docs/3.0/"&gt;http://vexi.sourceforge.net/docs/3.0/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is in need of improvement and organisation but it's starting to look good and proving useful already to those of us who need it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-5650219820128829394?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/5650219820128829394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=5650219820128829394' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5650219820128829394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5650219820128829394'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/08/vexi-docs-preview.html' title='Vexi Docs Preview'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-4904569561601200445</id><published>2009-07-01T02:45:00.000-07:00</published><updated>2009-07-01T03:22:55.090-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vexi'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='vexidev'/><title type='text'>Vexi 3.0 build 3539 and VexiDev 0.3.5 Released</title><content type='html'>&lt;p&gt;I uploaded a new build of Vexi, revision 3539 which has a slew of minor improvements and bugfixes.&lt;/p&gt;

&lt;p&gt;Release announcements: &lt;a href="http://sourceforge.net/forum/forum.php?forum_id=973527"&gt;Sourceforge&lt;/a&gt;, &lt;a href="http://freshmeat.net/projects/vexi/releases/301817"&gt;Freshmeat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mike also updated VexiDev 0.3.5 last week after we discussed there were some issues with the update site for 0.3.4 preventing it installing.&lt;/p&gt;

&lt;p&gt;Release announcements: &lt;a href="http://sourceforge.net/forum/forum.php?forum_id=973544"&gt;Sourceforge&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-4904569561601200445?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/4904569561601200445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=4904569561601200445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4904569561601200445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4904569561601200445'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/07/vexi-30-build-3539-and-vexidev-035.html' title='Vexi 3.0 build 3539 and VexiDev 0.3.5 Released'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-8877570454607897779</id><published>2009-06-29T05:31:00.000-07:00</published><updated>2009-06-29T05:36:37.863-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Vexillology</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Vexillology"&gt;Vexillology&lt;/a&gt; is the scholarly study of flags... and nothing to do with the vexi platform. I hope that clears things up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-8877570454607897779?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/8877570454607897779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=8877570454607897779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/8877570454607897779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/8877570454607897779'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/06/vexillology.html' title='Vexillology'/><author><name>mikeyg</name><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-29484762.post-1863299866427835467</id><published>2009-05-18T05:33:00.001-07:00</published><updated>2009-05-18T05:35:50.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><title type='text'>Vexi Website Updates</title><content type='html'>&lt;p&gt;A long overdue update is in now occurring.&lt;/p&gt;

&lt;p&gt;The Vexi &lt;a href="http://vexi.sourceforge.net/forum/"&gt;forum&lt;/a&gt; and &lt;a href="http://vexi.sourceforge.net/blog/"&gt;blog&lt;/a&gt; are now mostly done.  The wiki will take a bit longer (moving from Mediawiki 1.6 to 1.14).&lt;/p&gt;

&lt;p&gt;A more unified web presence and a better homepage should help Vexi retain the visitors to the website that don't seem to stick around at the moment.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-1863299866427835467?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/1863299866427835467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=1863299866427835467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/1863299866427835467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/1863299866427835467'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/05/vexi-website-updates.html' title='Vexi Website Updates'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-1653033839935109102</id><published>2009-04-30T16:43:00.000-07:00</published><updated>2009-04-30T16:54:07.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Tip: never return in a 'finally' block</title><content type='html'>&lt;p&gt;This one has had me a couple of times.  When you return in a finally block, Vexi will not log the exception because the return indicates that the function or trap has concluded successfully.&lt;/p&gt;

&lt;p&gt;The symptom is code not being executed fully - a premature stop somewhere.  The premature stop to the code path is caused by an exception, e.g. accessing a property on a null object.&lt;/p&gt;

&lt;code&gt;var somefunc = function() {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nullobj;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nullobj.foo = "bar"; // error!&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;
}&lt;br/&gt;
&lt;br/&gt;
/** misguided function to return true on success, false otherwise */&lt;br/&gt;
var sometest = function() {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ret = false;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try { ret = somefunc(); }&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally { return ret; }&lt;br/&gt;
}&lt;/code&gt;

&lt;p&gt;Of course the above code path does look, as described, misguided.  However in more complicated scenarios, especially when working with RPC, it can be easy to forget the intended notion of a finally clause - to clean up necessary resources - and slip in a return.  Mostly it will be harmless but on the occasions that the code path embedded in the try clause throws an error, you'll find yourself dumbfounded as to why your code path is not completing and why there is no indication of the problem.&lt;/p&gt;

&lt;p&gt;There is a simple rule to follow to avoid this problem (which can take hours to diagnose!) and that is to either A) never 'return' in a 'finally' or B) always preceeded a 'finally' with a 'catch(e) { vexi.log.info(e); }' to make sure the error is logged.&lt;/p&gt;

&lt;p&gt;HTH!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-1653033839935109102?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/1653033839935109102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=1653033839935109102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/1653033839935109102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/1653033839935109102'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/04/tip-never-return-in-finally-block.html' title='Tip: never return in a &apos;finally&apos; block'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-4786754364704150296</id><published>2009-03-09T16:40:00.000-07:00</published><updated>2009-03-09T16:54:17.918-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Debugging Vexi Applications II</title><content type='html'>&lt;p&gt;As we've used Vexi over the last year, we have added little features here and there to help us get the most of out it.&lt;/p&gt;

&lt;p&gt;I'm always mindful of performance, so I don't like to use the 'try/throw/catch' method from the previous debugging tip in production code.  However chopping and changing code in a complex environment can be a pain, especially when you are working with code that has a far reaching impact and you want to be able to get a general sense of what is happening as you use your application.&lt;/p&gt;

&lt;p&gt;For this, I added the 'vexi.debug' property.  A simple boolean on the Vexi object, which can be enabled by either running vexi with the '-debug' flag or by putting 'true' or 'false' to the 'vexi.debug' property.&lt;/p&gt;

&lt;p&gt;This way, we can wrap fairly complex debugging operations in an if statement and avoid them in normal running.  For instance, we introduced 'vexi.js.stringify(&lt;i&gt;arg&lt;/i&gt;)' which takes a JS object and returns it as &lt;a href="http://json.org"&gt;JSON&lt;/a&gt;.  Doing this in heavily run code can be a bit of a waste of CPU power, but at the same time JSON is much more useful for debugging than the type/hash representation (e.g. object$1ab23e) of non-primitives.&lt;/p&gt;

&lt;code&gt;if (vexi.debug) {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var o = anExpensiveOperation();&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vexi.trace(info);&lt;br/&gt;
}&lt;/code&gt;

&lt;p&gt;Also, there is the call to vexi.trace which is another new function.  It is shorthand for:&lt;/p&gt;

&lt;code&gt;vexi.log.info(vexi.js.stringify(o));&lt;/code&gt;

&lt;p&gt;Of course, the ideal way to avoid days of debugging headaches is to do proper unit testing.  It takes time to get it right, but once you have a non-trivial application, a suite of tests can save you no end of trouble and make sure your application remains solid after major changes to the code.  See the &lt;a href="http://vexi.sourceforge.net/VUnit"&gt;VUnit&lt;/a&gt; documentation for more information on how to create tests.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-4786754364704150296?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/4786754364704150296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=4786754364704150296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4786754364704150296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4786754364704150296'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/03/debugging-vexi-applications-ii.html' title='Debugging Vexi Applications II'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-614446663774309046</id><published>2009-03-09T16:20:00.000-07:00</published><updated>2009-03-09T16:57:55.497-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><title type='text'>Marketing Vexi</title><content type='html'>&lt;p&gt;A revamp of the marketing message for Vexi is long overdue.  At the moment, the front page of the Vexi website is just a bit of a technical mess.  I need to work out exactly how to portray Vexi as a useful tool in today's market which is very favourable to Web 2.0 and not so favourable to technologies that fall outside of this misguided "inside the browser" paradigm.  The message has to be much more subtle than simply stating that we believe everybody else is wrong, but it has to assuage that conclusion upon a visitor.&lt;/p&gt;

&lt;p&gt;Technical advantages: integrated unit testing (&lt;a href="http://vexi.sourceforge.net/VUnit"&gt;VUnit&lt;/a&gt;), trap model, box layout, browser independence (Java 1.4 compatible), enhanced JavaScript (&lt;a href="http://vexi.sourceforge.net/VexiScript"&gt;VexiScript&lt;/a&gt;), sandbox security, complete UI control, intuitive syntax, and more.&lt;/p&gt;

&lt;p&gt;We can put these in a giant list and they'll appeal to some people, but to those whose mind is already made up, a different approach is required - illuminating the benefits brought to application development using a platform with the aforementioned technical advantages.  Of course, examples are always good, and we have something major to show the world Real Soon Now (tm).&lt;/p&gt;

&lt;p&gt;&lt;i&gt;To be continued...&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-614446663774309046?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/614446663774309046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=614446663774309046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/614446663774309046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/614446663774309046'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/03/marketing-vexi.html' title='Marketing Vexi'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-5334976573924421401</id><published>2009-02-19T14:14:00.000-08:00</published><updated>2009-02-19T15:12:41.152-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vunit'/><title type='text'>VUnit Explained</title><content type='html'>It has been said that languages without type verification don't need it because ultimately its just a limited form of testing and unit tests are a better way of doing things. Its fair to say that the argument is losing ground as people such as mozilla are &lt;a href="https://developer.mozilla.org/presentations/eich-media-ajax-2007/"&gt;looking at static type checking&lt;/a&gt;. Ultimately type information is much more than that, its also a way to navigate code.

In any case Vexi ought to have its own testing framework, and as it turns out it does in VUnit, just not much had been written about it and how to use it. This is no longer the case, as i've updated the wiki with an &lt;a href="http://vexi.sourceforge.net/VUnit"&gt;explanation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-5334976573924421401?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/5334976573924421401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=5334976573924421401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5334976573924421401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5334976573924421401'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/02/vunit-explained.html' title='VUnit Explained'/><author><name>mikeyg</name><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-29484762.post-5138220811668315010</id><published>2009-02-19T12:06:00.000-08:00</published><updated>2009-02-19T12:25:35.597-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vexidev'/><title type='text'>Vexidev 0.3.2</title><content type='html'>The latest release of the imaginitively titled eclipse plugin and vexi development environment 'vexidev' is now &lt;a href="http://vexi.sourceforge.net/VexiDev"&gt;available&lt;/a&gt;.

The new features are
&lt;ul&gt;&lt;li&gt;vunit launching&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;library management
&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-5138220811668315010?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/5138220811668315010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=5138220811668315010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5138220811668315010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5138220811668315010'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/02/vexidev-032.html' title='Vexidev 0.3.2'/><author><name>mikeyg</name><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-29484762.post-2018134991102628515</id><published>2009-02-14T09:39:00.000-08:00</published><updated>2009-03-09T17:03:47.924-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Bench marking vexi javascript</title><content type='html'>&lt;p&gt;Out of curiosity I decided to benchmark the javascript in vexi. The first benchmark i found was on a blog called &lt;a href="http://celtickane.com/webdesign/jsspeedarchive.php"&gt;celtickane.com&lt;/a&gt;. I am not entirely convinced by the methodology or the naming of the tests (error handling did not seem to have handling exceptions as its bottleneck), but it will do as a first effort.
&lt;/p&gt;&lt;p&gt;Below are the results for the benchmarks that I could run substantially unchanged in Vexi. All values are time in ms. Everything was run  on my fairly old T30 thinkpad.
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Vexi 3 build 3385&lt;/span&gt; &lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Firefox 3.06&lt;/span&gt; &lt;/td&gt;
&lt;td style="font-weight: bold;"&gt;IE 7.0.5730.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="font-weight: bold;"&gt;Array object&lt;/td&gt;
&lt;td&gt;210&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="font-weight: bold;"&gt;Error handling&lt;/td&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;181&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="font-weight: bold;"&gt;Math object&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;230&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="font-weight: bold;"&gt;String object&lt;/td&gt;
&lt;td&gt;560&lt;/td&gt;
&lt;td&gt;221&lt;/td&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="font-weight: bold;"&gt;Regex object&lt;/td&gt;
&lt;td&gt;521&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;711&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Remarks&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;The string object benchmark is essentially testing the performance of the replace method. The reason it might be running slowly in Vexi is that it always is interpreted as a regular expression, but this does not appear to be the case in the browsers. Perhaps this is something that should be corrected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-2018134991102628515?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/2018134991102628515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=2018134991102628515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/2018134991102628515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/2018134991102628515'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2009/02/bench-marking-vexi-javascript.html' title='Bench marking vexi javascript'/><author><name>mikeyg</name><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-29484762.post-1103117596754773</id><published>2007-09-20T15:04:00.000-07:00</published><updated>2009-03-09T16:39:17.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Debugging Vexi Applications I</title><content type='html'>&lt;p&gt;Most scripting languages are very hard to debug, especially as the code becomes complex and the variety of files and structures interacting with eachother becomes somewhat hard to have mapped in the mind.&lt;/p&gt;

&lt;p&gt;Fortunately VexiScript has kept some neat features from Java and some features of it's own that make debugging complex Vexi applications fairly easy!  For instance, a full stack trace with line numbers always accompanies an exception.&lt;/p&gt;

&lt;p&gt;Of course, it may be that you don't want to stop executing code to get an idea of where your code is up to.  In VexiScript, we can also throw and more importantly catch exceptions, much like in Java - but in VexiScript these exceptions are really easy to handle - just pass them to a vexi.log function and it will handle the rest.&lt;/p&gt;

&lt;code&gt;if (myval != correctval) {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try { throw "incorrect myval: "+myval; }&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch(e) { vexi.log.info(e); } // that's it!&lt;br/&gt;
}&lt;br/&gt;
// and the script continues uninterrupted&lt;/code&gt;

&lt;p&gt;It is as easy as that. ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-1103117596754773?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/1103117596754773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=1103117596754773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/1103117596754773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/1103117596754773'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/09/debugging-vexi-applications-i.html' title='Debugging Vexi Applications I'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-6452309686751185006</id><published>2007-07-27T18:02:00.000-07:00</published><updated>2007-07-27T18:08:07.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>Understanding Event Processing</title><content type='html'>&lt;p&gt;Understanding how events are propogated throughout the box model can enable you to pull off a lot of neat tricks when implementing more complicated widgets and user interfaces.  This basic template is an interactive demonstration.  Add extra traps (blocking and non-blocking) to understand exactly how traps and events work together.&lt;/p&gt;

&lt;code&gt;&amp;lt;vexi xmlns:ui="vexi://ui"&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ui:box tag="outer"&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vexi.ui.frame = thisbox;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ui:box id="innerbox" tag="inner" /&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var showTag = function(v) {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vexi.log.info(trapee.tag+": "+trapname);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cascade = v;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$innerbox.Press1 ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$innerbox.KeyPressed ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thisbox.Press1 ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thisbox.KeyPressed ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$innerbox._Press1 ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$innerbox._KeyPressed ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thisbox._Press1 ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thisbox._KeyPressed ++= showTag;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ui:box&gt;&lt;br/&gt;
&amp;lt;/vexi&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-6452309686751185006?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/6452309686751185006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=6452309686751185006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/6452309686751185006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/6452309686751185006'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/07/understanding-event-processing.html' title='Understanding Event Processing'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-6461004928426085688</id><published>2007-07-20T03:39:00.000-07:00</published><updated>2007-07-20T04:59:32.010-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Fortress</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fortress.sourceforge.net/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hkX3-IrPeJ8/RqCbhvfvJWI/AAAAAAAAAOk/duy54C1WZyE/s400/wiki.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5089238582916228450" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://fortress.sourceforge.net"&gt;Fortress&lt;/a&gt; is a castle building game written in Vexi which is in the early prototyping stages.  The game is isometric so a full isometric display engine is being built in Vexi.  This showcases the flexibility of Vexi as well as pushing it's performance, and may lead to a number of new features for Vexi as a platform.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-6461004928426085688?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/6461004928426085688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=6461004928426085688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/6461004928426085688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/6461004928426085688'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/07/fortress-is-castle-building-game.html' title='Fortress'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hkX3-IrPeJ8/RqCbhvfvJWI/AAAAAAAAAOk/duy54C1WZyE/s72-c/wiki.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-3861488732680361105</id><published>2007-07-11T14:59:00.000-07:00</published><updated>2007-07-11T15:07:56.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Changing Themes</title><content type='html'>&lt;p&gt;I just made a change to the surface widget that makes theming really really easy should you want a custom widget theme.&lt;/p&gt;

&lt;code&gt;&amp;lt;vexi xmlns:ui="vexi://ui" xmlns="vexi.widget"&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ui:box theme=".path.to.custom.theme" /&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;surface /&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ui:box&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// your app starts here&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vexi.ui.frame = thisbox;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ui:box&gt;&lt;br/&gt;
&amp;lt;/vexi&gt;&lt;/code&gt;

&lt;p&gt;If you omit the box declaring your theme, vexi.widget.surface will apply a default theme for you.  Nice and simple and no hardcoding - and it even opens the door for individual themes per surface with some more clever updates to vexi.widget.surface and the core.&lt;/p&gt;

&lt;p&gt;For the curious, the way vexi.widget.surface automatically handles the theming is rather straightforward.  If the theme attribute is defined, it applies to as a trap to the namespace vexi.theme, if not it just applies a default theme to that namespace:&lt;/p&gt;

&lt;code&gt;// no theme has been specified by the user&lt;br/&gt;
if (thisbox.theme == null)&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;theme = vexi..org.vexi.theme.win2k;&lt;br/&gt;
// set up the theme&lt;br/&gt;
vexi..vexi.theme ++= theme;&lt;br/&gt;
// apply the theme surface template&lt;br/&gt;
vexi..vexi.theme.surface(thisbox);&lt;/code&gt;

&lt;p&gt;Fairly easy, eh?  The downside is that you must apply vexi.widget.surface for theming to work but the reality is that few (if any) of the widgets will work without it being applied to the root boxes of your applications.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-3861488732680361105?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/3861488732680361105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=3861488732680361105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3861488732680361105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3861488732680361105'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/07/changing-themes.html' title='Changing Themes'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-9015797341052721115</id><published>2007-07-08T12:40:00.000-07:00</published><updated>2007-07-08T13:35:39.479-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='feature'/><title type='text'>The Children Trap</title><content type='html'>&lt;p&gt;New to Vexi3 is the &lt;tt&gt;Children&lt;/tt&gt; property.  It replaces the previous notion of &lt;tt&gt;ChildAdded&lt;/tt&gt; and &lt;tt&gt;ChildRemoved&lt;/tt&gt; events, which were rather weak.  Now we can completely control how boxes enter and leave as children of a box or template by placing read and write traps on it's &lt;tt&gt;Children&lt;/tt&gt; property.  As ever, an example is the best way to show off how this works.&lt;/p&gt;

&lt;p&gt;Let's create a basic grid widget.  Grids were removed from the core in Vexi2, so this is a useful example - although simplified - of how they are being replaced.&lt;/p&gt;

&lt;p&gt;First the basic template structure:&lt;/p&gt;

&lt;code&gt;&amp;lt;vexi xmlns:ui="vexi://ui"&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ui:box&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ui:box id="grid" orient="vertical" /&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// JS to go here&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ui:box/&gt;&lt;br/&gt;
&amp;lt;/vexi&gt;&lt;/code&gt;

&lt;p&gt;We have to have an inner box - &lt;tt&gt;$grid&lt;/tt&gt; - because we are adding/removing containing rows so this keeps that logic simple, that is we do not have to consider rows in our Children write and read traps.  Also &lt;tt&gt;$grid&lt;/tt&gt; has a vertical orient because it is more common to work in rows before columns.&lt;/p&gt;

&lt;p&gt;Let's start with the Children write trap which is fired every time &lt;tt&gt;thisbox[&lt;i&gt;index&lt;/i&gt;]&lt;/tt&gt; is put to:&lt;/p&gt;

&lt;code&gt;thisbox.Children ++= function(v) {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var i = arguments.trapname;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var c = i%numcols;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = vexi.math.floor(i/numcols);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (i+1 &gt; total) total = i+1;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (r &gt; $grid.numchildren - 1)&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$grid[$grid.numchildren] = vexi.box;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var row = $grid[r];&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (numcols &gt; row.numchildren - 1) {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var b = vexi.box;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.layout = "absolute";&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row[row.numchildren] = b;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// remove previous occupant&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ($grid[r][c][0])&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$grid[r][c][0] = null;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (v) $grid[r][c][0] = v;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br/&gt;
}&lt;/code&gt;

&lt;p&gt;A few things to notice from the above code:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The index is passed as &lt;tt&gt;arguments.trapname&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;The child (or &lt;tt&gt;null&lt;/tt&gt; if we are removing a child) is passed as the argument to the function&lt;/li&gt;
&lt;li&gt;We return at the end because we have already handled the child placement and do not want the core to place the child in the box on which we are trapping&lt;/li&gt;
&lt;li&gt;This handles non-null puts to an index with existing child in a different way than the core - the core inserts the new child, whereas this example overwrites the old child with the new one&lt;/li&gt;
&lt;li&gt;We are using absolute layout for the cells here to keep the example simple - if we use a packed layout then the columns are not guarranteed to line up if the content size of any cell is significant&lt;/ul&gt;

&lt;p&gt;So, now we are handling the destination of child boxes of this template, we want to be able to also control how children are accessed as well.  So we place a read trap on the &lt;tt&gt;Children&lt;/tt&gt; property:&lt;/p&gt;

&lt;code&gt;thisbox.Children ++= function() {&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var i = arguments.trapname;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var c = i%numcols;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = vexi.math.floor(i/numcols);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if the $grid[r] exists so does $grid[r][c]&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ($grid[r]) return $grid[r][c][0];&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// otherwise we are out of grid bounds&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;&lt;br/&gt;
}&lt;/code&gt;

&lt;p&gt;Simple enough, eh?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-9015797341052721115?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/9015797341052721115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=9015797341052721115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/9015797341052721115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/9015797341052721115'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/07/children-trap.html' title='The Children Trap'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-901182411872333953</id><published>2007-07-07T05:52:00.000-07:00</published><updated>2007-07-07T06:07:13.630-07:00</updated><title type='text'>Vexi Blog Revival</title><content type='html'>&lt;p&gt;There are too many cool &lt;a href="http://vexi.sourceforge.net/"&gt;Vexi&lt;/a&gt; developments to keep this thing closed, so it's coming back.  I'm going to be blocking about all the cool things going on around Vexi and lots of cool tricks you can do in it.  Look out for more posts in the near future on &lt;a href="http://vexi.blogspot.com/"&gt;vexi.blogspot.com&lt;/a&gt;! :-D&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-901182411872333953?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/901182411872333953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=901182411872333953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/901182411872333953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/901182411872333953'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/07/vexi-blog-revival.html' title='Vexi Blog Revival'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-5204928772542674967</id><published>2007-03-08T08:10:00.000-08:00</published><updated>2007-07-08T13:46:19.209-07:00</updated><title type='text'>Vexi website migrates to Wordpress</title><content type='html'>&lt;p&gt;The &lt;a href="http://vexi.sourceforge.net/"&gt;Vexi website&lt;/a&gt; has been migrated to Wordpress.  That kinda removes the need for this blog which I will leave purely for archival purposes or in case I want to post things that don't belong on the Vexi website but are related to Vexi.&lt;/p&gt;

&lt;p&gt;Go there: &lt;a href="http://vexi.sourceforge.net/"&gt;http://vexi.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-5204928772542674967?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/5204928772542674967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=5204928772542674967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5204928772542674967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/5204928772542674967'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/03/vexi-website-migrates-to-wordpress.html' title='Vexi website migrates to Wordpress'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-4998946347400757102</id><published>2007-01-04T04:56:00.000-08:00</published><updated>2007-07-08T13:46:55.364-07:00</updated><title type='text'>Vexi2 in Full Flow</title><content type='html'>&lt;p&gt;It's going well.  Mike and I are just smoothing over any remaining rough edges.  Documentation and demos are online although a bit more sparse than is desirable.  Now it's just a case of convincing people to use it.&lt;/p&gt;

&lt;p&gt;Anyway check out the Sourceforge website which is holding everything at the moment:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sourceforge.net/projects/vexi"&gt;http://sourceforge.net/projects/vexi&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-4998946347400757102?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/4998946347400757102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=4998946347400757102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4998946347400757102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/4998946347400757102'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2007/01/vexi2-in-full-flow.html' title='Vexi2 in Full Flow'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-3188906785543045539</id><published>2006-09-23T07:40:00.001-07:00</published><updated>2007-07-08T13:47:09.333-07:00</updated><title type='text'>Vexi2 Ready</title><content type='html'>&lt;p&gt;Well Vexi2 is pretty much ready.  There's just the demo to put up, more documentation, and a bit of profiling to do.&lt;/p&gt;

&lt;p&gt;Of course then the real challenge, the native builds, is up next.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-3188906785543045539?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/3188906785543045539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=3188906785543045539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3188906785543045539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3188906785543045539'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2006/09/vexi2-ready.html' title='Vexi2 Ready'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-3863911720951058307</id><published>2006-09-17T13:16:00.000-07:00</published><updated>2007-07-08T13:48:32.732-07:00</updated><title type='text'>Web Terminal</title><content type='html'>&lt;p&gt;&lt;a href="http://www.osnews.com/comment.php?news_id=15856"&gt;OSNews mentions&lt;/a&gt; an "AJAX operating system" called &lt;a href="http://atomos.sourceforge.net/"&gt;AtomicOS&lt;/a&gt;.  I wasn't very impressed with their version of a terminal, especially when there is a far superior implementation - the &lt;a href="http://masswerk.at/jsuix/"&gt;JS/UIX terminal&lt;/a&gt; which feels much more like a real terminal.&lt;/p&gt;

&lt;p&gt;Most AJAX / Web 2.0 applications really don't impress me.  If they did I wouldn't be working on Vexi.  HTML is a documentation tool, at best a presentation tool.  As nice as applications like GMail have become, they'll never be able to match real GUI applications.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-3863911720951058307?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/3863911720951058307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=3863911720951058307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3863911720951058307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3863911720951058307'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2006/09/web-terminal.html' title='Web Terminal'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-2539962123161704817</id><published>2006-09-12T18:10:00.000-07:00</published><updated>2007-07-08T13:48:19.281-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>The Future of RIA?</title><content type='html'>&lt;p&gt;RIA being Rich Internet Applications.  Slashdot is carrying &lt;a href="http://developers.slashdot.org/article.pl?sid=06/09/12/1636223"&gt;some story&lt;/a&gt; linking to an article on &lt;a href="http://blogs.zdnet.com/Hinchcliffe/?p=65"&gt;the future of them&lt;/a&gt;.  It covers some of the higher profile competing technologies to Vexi.&lt;/p&gt;

&lt;p&gt;I wouldn't be working on Vexi if I didn't believe in it.  With Mike having done wonders with Vexi2, and me getting my act together on the docs, widgets, and demo, we're in a good position to really push Vexi.  We'll see if we can make an impact in the coming year.&lt;/p&gt;

&lt;p&gt;The last real key to making Vexi happen is the native launcher and builds.  That's where the real expertise comes in though.  An activex launcher and Windows build won't happen overnight.  I need to start doing some research!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-2539962123161704817?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/2539962123161704817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=2539962123161704817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/2539962123161704817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/2539962123161704817'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2006/09/future-of-ria.html' title='The Future of RIA?'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29484762.post-3253769648043530904</id><published>2006-09-12T15:24:00.000-07:00</published><updated>2007-07-08T13:48:00.497-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><title type='text'>First Vexi Post...</title><content type='html'>&lt;p&gt;Well it falls upon me to update the Vexi demo.  It's been hanging over my head for what seems like an eternity and I have procrastinated magnificently, but today I started doing.&lt;/p&gt;

&lt;p&gt;First up was a clean up of the "text" demo tab and now it's nice and clean.   Next up is cleaning up the "other" demo tab which shows off a few of the other widgets.&lt;/p&gt;

&lt;p&gt;After that it's emailing Mike to coerce him into posting here too!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29484762-3253769648043530904?l=vexi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vexi.blogspot.com/feeds/3253769648043530904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29484762&amp;postID=3253769648043530904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3253769648043530904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29484762/posts/default/3253769648043530904'/><link rel='alternate' type='text/html' href='http://vexi.blogspot.com/2006/09/well-it-falls-upon-me-to-update-vexi.html' title='First Vexi Post...'/><author><name>Charlie</name><uri>http://www.blogger.com/profile/15870347109977095420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_hkX3-IrPeJ8/SchuDmPSfFI/AAAAAAAAA6o/6Pd0b75_mtM/S220/Blue_think.png'/></author><thr:total>0</thr:total></entry></feed>
