<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Angel "Java" Lopez on Blog</title>
	<atom:link href="http://ajlopez.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ajlopez.wordpress.com</link>
	<description>Software Development, in the Third Millenium</description>
	<lastBuildDate>Sat, 31 Oct 2009 13:14:32 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='ajlopez.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/6d646a25923112f8b0fb31b77125ff57?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Angel "Java" Lopez on Blog</title>
		<link>http://ajlopez.wordpress.com</link>
	</image>
			<item>
		<title>NHibernate running in the Azure Cloud</title>
		<link>http://ajlopez.wordpress.com/2009/10/31/nhibernate-running-in-the-azure-cloud/</link>
		<comments>http://ajlopez.wordpress.com/2009/10/31/nhibernate-running-in-the-azure-cloud/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 13:12:03 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/10/31/nhibernate-running-in-the-azure-cloud/</guid>
		<description><![CDATA[Yesterday, I was talking with Fabio Maulo (@fabiomaulo) about many things, related to software development, teaching programming and, of course, NHibernate. We are living in Buenos Aires, Argentina, and it was a pleasure to talk with him, as usual. Í’m following Fabio in Twitter, and I’m a suscriber of his blog. Fabio is collaborating with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=283&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yesterday, I was talking with <a href="http://fabiomaulo.blogspot.com" target="_blank">Fabio Maulo</a> (<a href="http://twitter.com/fabiomaulo" target="_blank">@fabiomaulo</a>) about many things, related to software development, teaching programming and, of course, NHibernate. We are living in Buenos Aires, Argentina, and it was a pleasure to talk with him, as usual. Í’m following Fabio in Twitter, and I’m a suscriber of <a href="http://fabiomaulo.blogspot.com" target="_blank">his blog</a>. Fabio is collaborating with NHibernate project for years, and he is a recognized developer in the .NET software community.</p>
<p>He told me details about a site built using NHibernate, and running on SQL Azure. You can see it online (Spanish content, Mexican site):</p>
<p><a title="http://salondetokio.autocosmos.com.mx/" href="http://salondetokio.autocosmos.com.mx/">http://salondetokio.autocosmos.com.mx/</a></p>
<p><img src="http://www.ajlopez.com/images/articles/nhibernateazure01.png" /> </p>
<p>Fabio and his team worked hard to write this site, in less of a month (I’m waiting the team posts, with more detailed info, so, I’ll write only about the public parts here).</p>
<p>Curiously, the site is running using WebForms, but without ViewState, and without form tags embracing the full body inner HTML. All we are waiting Maulo and his team, explaining the implementation details. The code is based on using Model View Presenter, and it was build using tests, mocks and stubs, from presentation to persistence. Hey, Fabio! Please, write about the process and architecture decisions! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>More info about NHibernate and Azure:</p>
<p><a href="http://ayende.com/Blog/archive/2009/09/05/nhibernate-on-the-cloud-sql-azure.aspx">NHibernate on the cloud: SQL Azure</a> Ayende NHibernate test results on Azure</p>
<p><a href="http://fabiomaulo.blogspot.com/2009/09/quick-news-nhibernate-with-sql-azure.html">Quick news NHibernate with SQL Azure</a> Fabio’s first steps “All work… even the SchemaExport.” !!</p>
<p><a href="http://fabiomaulo.blogspot.com/2009/10/nhibernate-dialect-for-sql-azure.html">NHibernate dialect for SQL Azure</a> Adjustments for SchemaExport</p>
<p>I’m collecting links about NHibernate and Azure at:</p>
<p><a title="http://delicious.com/ajlopez/nhibernate+azure" href="http://delicious.com/ajlopez/nhibernate+azure">http://delicious.com/ajlopez/nhibernate+azure</a></p>
<p>There is an excellent post serie from Brad Adams, explaining Azure, Azure SQL, NHibernate, Silverlight, RIA .NET Service, and more:</p>
<p><a href="http://blogs.msdn.com/brada/archive/2009/10/27/index-for-business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update.aspx" target="_blank">Index for Business Apps example for Silverligth 3 RTM and .NET RIA Services July Update</a></p>
<p>Related to NHibernate and Azure, in that series:</p>
<p><a href="http://blogs.msdn.com/brada/archive/2009/08/06/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-nhibernate.aspx" target="_blank">Part 20: NHibernate</a>     <br /><a href="http://blogs.msdn.com/brada/archive/2009/08/21/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-23-azure.aspx" target="_blank">Part 23: Azure</a></p>
<p>Any other project using NHibernate on the cloud?</p>
<p>Angel “Java” Lopez    <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>     <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/283/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=283&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/10/31/nhibernate-running-in-the-azure-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://www.ajlopez.com/images/articles/nhibernateazure01.png" medium="image" />
	</item>
		<item>
		<title>A 10 finger Multitouch User Interface</title>
		<link>http://ajlopez.wordpress.com/2009/10/15/a-10-finger-multitouch-user-interface/</link>
		<comments>http://ajlopez.wordpress.com/2009/10/15/a-10-finger-multitouch-user-interface/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:34:22 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[Interface]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/10/15/a-10-finger-multitouch-user-interface/</guid>
		<description><![CDATA[This a video demostration new ideas about a multitouch device from http://10gui.com/:
Over a quarter-century ago, Xerox introduced the modern graphical user interface paradigm we today take for granted.     That it has endured is a testament to the genius of its design. But the industry is now at a crossroads: New technologies [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=265&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This a video demostration new ideas about a multitouch device from <a href="http://10gui.com/">http://10gui.com/</a>:</p>
<blockquote><p>Over a quarter-century ago, Xerox introduced the modern graphical user interface paradigm we today take for granted.     <br />That it has endured is a testament to the genius of its design. But the industry is now at a crossroads: New technologies promise higher-bandwidth interaction, but have yet to find a truly viable implementation.      <br />10/GUI aims to bridge this gap by rethinking the desktop to leverage technology in an intuitive and powerful way. </p>
</blockquote>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/10/15/a-10-finger-multitouch-user-interface/"><img src="http://img.youtube.com/vi/zWz1KbknIZk/2.jpg" alt="" /></a></span></p>
<p>More info at <a title="http://10gui.com/background/" href="http://10gui.com/background/">http://10gui.com/background/</a>. You can follow Clayton Miller in Twitter: <a href="http://twitter.com/claymill" target="_blank">@claymill</a>.</p>
<p>It’s interesting to see the drawing pad idea now leveraged with multitouch. This way, we could add multitouch capabilities to any monitor, hardware, instead of using a dedicated multitouch display. The problem: the fingers are out of our vision. The solution: the fingers are tracked and displayed on screen, in the same way we usually track the mouse using the onscreen arrow cursor.</p>
<p>The other interesting point is the “con10uum”, and the finger set interaction. I guess it’s like learning to play a musical instrument: you must practice, but with little effort, the finger gestures seem practical.</p>
<p>Angel “Java” Lopez   <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>    <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/265/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=265&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/10/15/a-10-finger-multitouch-user-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/zWz1KbknIZk/2.jpg" medium="image" />
	</item>
		<item>
		<title>Time for simplicity?</title>
		<link>http://ajlopez.wordpress.com/2009/10/14/time-for-simplicity/</link>
		<comments>http://ajlopez.wordpress.com/2009/10/14/time-for-simplicity/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 12:00:50 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/10/14/time-for-simplicity/</guid>
		<description><![CDATA[ These days, Ted Neward wrote a very interesting post “Agile is treating the symptons, not the disease” quoting a phrase of Billy Hollis, from Patterns and Practice Submit this week in Redmond. I read:
“A lot of software written back in the 90&#8217;s was written by 1 or 2 guys working for just a few [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=264&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img style="display:inline;margin:0 20px 20px 0;" src="http://www.todocontenidos.com/images/articles/compsimp.png" align="left" /> These days, Ted Neward wrote a very interesting post <a href="http://blogs.tedneward.com/2009/10/12/quotAgile+Is+Treating+The+Symptoms+Not+The+Diseasequot.aspx" target="_blank">“Agile is treating the symptons, not the disease”</a> quoting a phrase of Billy Hollis, from Patterns and Practice Submit this week in Redmond. I read:</p>
<p><em>“A lot of software written back in the 90&#8217;s was written by 1 or 2 guys working for just a few months to slam something out and see if it was useful”</em></p>
<p><em>“The problem is the complexity of the tools we have available to us today preclude that kind of software development.”</em></p>
<p>I see the problem is more associated with technologies, not with the tools. Web services, as example. For me, web services are not a tool, like libraries, compilers, or IDE. Web services are technology. Most of the tools (i.e. Eclipse, Visual Studio) are fighting the complexity of the underlying technologies. 1 or 2 guys, today, can still create a wonderful open source library, but try to write with the same team an enterprise application, involving database, communications, security, manageability, instrumentation, and so on. There are lots of details in the underlying technologies to implement, that the complexity of any non trivial application could be (and usually is) dauting.</p>
<p>Back to web services. Did you visit <a href="http://en.wikipedia.org/wiki/Web_service" target="_blank">Wikipedia page</a> about that topic, recently? You&#8217;ll find dozens of specifications. You could spend weeks or months, trying to grasp all the technicalities involved in WS-Trust, WS-Addressing, WS-Transaction, WS-PutYourWordHere. I guess REST style adoption is a reaction to such madness (REST style, not REST principles, or RESTFul). Sometimes, libraries are coming to rescue, and sometimes, their fail. My preferred example of a failed trying to hide web service complexity is Windows Communication Foundation (WCF). I wrote about this at <a href="http://ajlopez.wordpress.com/2009/03/04/windows-communication-foundation-configuration-madness/">Windows Communication Foundation configuration madness</a>.</p>
<p>Complexity in software, is not bad for itself. It could be good. Software is in every human activity. Internet popularity, fueled by the World Wide Web adoption, is now in practically every place of our days. As software developers, we are contributing to such progress. We are not pursuing our comfort zone, we are looking for software value.</p>
<p>Now, customer requirements are more challenging: massive multiuser access, scalability, distributed processing, online availability, are usually included in most of current enterprise applications. And there is no simple solution now to cover all the corners.</p>
<p>Said that, complexity is still with us, and it could be fighted. I spend most of my work hours teaching programming, and the rest of the time working on software development. I suffer the complexity of the current state of affairs in software development. The amount of details to take into account (ORMs setups, dependency injection configuration, testing setup, mock libraries, WCF or JBoss configuration… ) is so big, that our minds are lost in the middle of such jungle.</p>
<p>Do you remember Petzoldian age? Lots of lines to write a simple “Hello world” program that runs on Windows. Then, Visual Basic was born. Visual Basic was an effective way to hide the Windows API and behaviour complexity, saving generations of developers of struggling with handles, and LONG values where the mouse coordinates are coming in the Windows messages. That was hell, truly hell.</p>
<p>Do you remember reading VTOCs in IBM disks? Writing Job Control Language? Writing macro assemblers? For each of those tools, there were a solution that hides the underlying complexity, using the “old trick”: raising the level of abstraction. Instead of thinking in registers and sectors, we could manage variables, and SQL statements.</p>
<p>I guess it was end of eighties, beginning of nineties, were the software development in PC arena reach the top of power/complexity ratio (Turbo Pascal, Visual Basic, Access): lots of power, low complexity. Since then, we are in a free fall. The “old trick” of “rise the abstraction level” didn&#8217;t embrace again: we are still building software using third generation languages, the macro assemblers of the sixties.</p>
<p>One way to escape is going for the next level of abstraction. We forget about registers and Branch And Link Register instruction and adopted general programming languages. Now, we need to write software in a higher level. My bet: Domain Specific Models and Languages. But it’s only a bet. Using DSLs, DSMs, code generation (do you realize that compiling your C# program is “code generation” NOW?), we could leverage the existing technology, hiding the underlying complexity.</p>
<p>With so many languages, libraries, technologies to use, there is no simple solution to hide all this mess. Note that there are many kinds of complexity. One is the complexity of the customer requirements: business logic, functional requirements. That&#8217;s ok. And I think that agile methodologies are attacking such kind of complexity. But the complexity that hurts us now, is the technological one. We should stop the journey towards a Petzoldian age. (recently, I found the concept of Accidental Complexity, in a <a href="http://en.wikipedia.org/wiki/Rich_Hickey" target="_blank">Rich Hickey</a> talk (hmmm… I guess he named it as incidental complexity). From Wikipedia page <a href="http://en.wikipedia.org/wiki/Accidental_complexity" target="_blank">about accidental complexity</a>:</p>
<p><em><b>Accidental complexity</b> is complexity that arises in </em><a href="http://en.wikipedia.org/wiki/Computer_program"><em>computer programs</em></a><em> or their development process (</em><a href="http://en.wikipedia.org/wiki/Computer_programming"><em>computer programming</em></a><em>) which is non-essential to the problem to be solved. While </em><a href="http://en.wikipedia.org/wiki/Essential_complexity"><em>essential complexity</em></a><em> is inherent and unavoidable, accidental complexity is caused by the approach chosen to solve the problem</em></p>
<p>)</p>
<p>Another interesting posts, triggered by Neward original one:</p>
<p>Jeffrey Palermos&#8217;s <a href="http://jeffreypalermo.com/blog/response-quot-agile-is-treating-the-symptoms-not-the-disease-quot-by-ted-neward/" target="_blank">Response: “Agile is treating the symptoms, not the disease” by Ted Neward</a>ç    <br />Phil Haack&#8217;s <a href="http://haacked.com/archive/2009/10/13/software-externalities.aspx" target="_blank">Software Externalities</a>    <br />Ted Neward’s response to Haack <a href="http://blogs.tedneward.com/2009/10/13/Haacked+But+Not+Content+Agile+Still+Treats+The+Disease.aspx" target="_blank">Haacked, but not content; agile still treats the disease</a>&#160;</p>
<p>I have so much to comment about all these writings and thoughts. But they deserve other commenting posts, not to comment now.</p>
<p>I want to remember one more thing here: complexity is not the only challange in software development. Every succesful project could suffer of complexity AND change. Those are the problems agile methodologies are treating: fighting complexity with baby steps, eating an elephant piece by piece, and stop fearing change, embracing it, adopting disciplines to lower the cost of change in the middle of the development.</p>
<p>Another point: with Internet adoption, our current software development culture is flourishing, with so many ideas, reference implementations, open source libraries, patterns, practices, frameworks, and programming languages (there a new set of dynamic languages, mounted over Java and .NET). The Pandora&#8217;s box was open: I don&#8217;t see any way to close it.</p>
<p>In his cited post, Ted Neward wrote:</p>
<p><em>Let me rephrase Billy&#8217;s talk this way: </em><em>Where is this decade&#8217;s Access?</em></p>
<p>I have some ideas, to response to that question. But now, I should go to teach .NET: I hope no big complexity hurts today class.</p>
<p>(Note: English is not my mother tongue, so, feel free to suggest corrections to my writing. Most of my ideas about the complexity subject should be expressed in a short way, that could be clear enough, I hope still this post could be understood: this is a fascinanting topic: how to improve the creation of software?)</p>
<p>Angel “Java” Lopez   <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>    <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/264/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=264&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/10/14/time-for-simplicity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://www.todocontenidos.com/images/articles/compsimp.png" medium="image" />
	</item>
		<item>
		<title>Exploring objects</title>
		<link>http://ajlopez.wordpress.com/2009/09/23/exploring-objects/</link>
		<comments>http://ajlopez.wordpress.com/2009/09/23/exploring-objects/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 09:38:10 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Smalltalk]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/09/23/exploring-objects/</guid>
		<description><![CDATA[I’m following @jarober (James A. Robertson) in Twitter, Cincom Smalltalk Product Evangelist. He post links about news and resources about Smalltalk, and Cincom Smalltalk in particular. He writes a blog:
http://www.cincomsmalltalk.com/blog/View.ssp
powered by Smalltalk. If you visit his blog, there are many entries about Smalltalk. Recently, Robertson posted:
Smalltalk Daily: Exploring Objects
There is the video:

Robertson wrote:
Many times, you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=261&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I’m following <a href="http://twitter.com/jarober" target="_blank">@jarober</a> (James A. Robertson) in Twitter, Cincom Smalltalk Product Evangelist. He post links about news and resources about Smalltalk, and Cincom Smalltalk in particular. He writes a blog:</p>
<p><a title="http://www.cincomsmalltalk.com/blog/View.ssp" href="http://www.cincomsmalltalk.com/blog/View.ssp">http://www.cincomsmalltalk.com/blog/View.ssp</a></p>
<p>powered by Smalltalk. If you visit his blog, there are many entries about Smalltalk. Recently, Robertson posted:</p>
<p><a href="http://www.cincomsmalltalk.com/blog/blogView?entry=3430713089" target="_blank">Smalltalk Daily: Exploring Objects</a></p>
<p>There is the video:</p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/23/exploring-objects/"><img src="http://img.youtube.com/vi/_4fUt3Bi_6E/2.jpg" alt="" /></a></span></p>
<p>Robertson wrote:</p>
<blockquote><p>Many times, you want to do something, know that it can be done &#8211; but just aren&#8217;t sure how to construct the code to do it. If you have an object, you can usually solve that problem by drilling into it with the inspector and looking at it. Today we learn how to programmatically change workspace page text by drilling into a workspace.</p>
</blockquote>
<p>It&#8217;s refreshing to see such interaction with objects, so “Smalltalk-way” of interaction.</p>
<p>I should work on my <a href="http://ajlopez.wordpress.com/category/ajtalk/" target="_blank">Smalltalk VM (interpreter) AjTalk</a>, to have support of visual interaction. My idea is to wire the current VM with .NET framework, WinForms. In this way, I could leverage the built-in GUI support in the framework. In these day, every language should take advantage of a class framework: .NET and Java are the obvious choice (see <a href="http://clojure.org" target="_blank">Clojure</a> as a “modern” example of this strategy)</p>
<p>Angel “Java” Lopez   <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>    <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=261&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/09/23/exploring-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/_4fUt3Bi_6E/2.jpg" medium="image" />
	</item>
		<item>
		<title>AjSharp programming language: a C#-like dynamic language</title>
		<link>http://ajlopez.wordpress.com/2009/09/21/ajsharp-programming-language-a-c-like-dynamic-language/</link>
		<comments>http://ajlopez.wordpress.com/2009/09/21/ajsharp-programming-language-a-c-like-dynamic-language/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 08:58:40 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AjSharp]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/09/21/ajsharp-programming-language-a-c-like-dynamic-language/</guid>
		<description><![CDATA[During the creation of AjGenesis, my code generation project, I defined an interpreted language, named AjBasic, used to write templates and tasks for code generation process. Last year, I began to separate AjBasic implementation of AjGenesis core, and as a proof of concept, I wrote AjSharp, another interpreted language but with more C#-like syntax, using [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=256&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>During the creation of <a href="http://ajgenesis.codeplex.com" target="_blank">AjGenesis</a>, my code generation project, I defined an interpreted language, named AjBasic, used to write templates and tasks for code generation process. Last year, I began to separate AjBasic implementation of AjGenesis core, and as a proof of concept, I wrote <a href="http://ajlopez.wordpress.com/category/ajsharp/" target="_blank">AjSharp</a>, another interpreted language but with more C#-like syntax, using the same core interpreter that I wrote for <a href="http://ajlopez.wordpress.com/category/ajbasic/" target="_blank">AjBasic</a>. The core machine was AjInterpreter. More info at:</p>
<p><a title="AjSharp- a C Sharp-like interpreter, work in progress" href="http://ajlopez.wordpress.com/2008/09/25/ajsharp-a-c-sharp-like-interpreter-work-in-progress/">AjSharp- a C Sharp-like interpreter, work in progress</a></p>
<p>Now, this year, I started a clean implementation, inside <a href="http://code.google.com/p/ajcodekatas" target="_blank">my AjCodeKatas Google Code</a>. The core interpreter is now AjLanguage, and AjSharp is the language with a parser that relies on the core “virtual machine” to build and execute an abstract tree:</p>
<p><img src="http://www.todocontenidos.com/images/articles/ajlanguage01.png" alt="" /></p>
<p>Current source code (under development) can be downloaded from:</p>
<p><a title="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage" href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage">http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage</a></p>
<h2>Variables, expressions and commands</h2>
<p>Variables are untyped, and are automatically declared when they are used:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">a = 1;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;margin:0;padding:0;">b = 2;</pre>
</div>
</div>
<p>These variables contain integer values, but they can be assigned to values of other types:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">a = “one”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;margin:0;padding:0;">b = “two”;</pre>
</div>
<p>The common commands are supported:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">if</span> (k&gt;0)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">return</span>;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">for</span> (k=1; k&lt;=10;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">k++)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> sum = k+sum;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">while</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">(j&lt;10)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> DoProcess(j);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">foreach</span> (element <span style="color:#0000ff;">in</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">elements)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> AddElement(element);</pre>
</div>
<p>Conditional expressions can be any expression, not only boolean ones. See above, False value explanation.</p>
<h2>Functions and Subroutines</h2>
<p>This is the sintax to write down a factorial function:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">function Factorial(n)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">{</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">if</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">(n&lt;=1)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">return</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">1;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">return</span> n * Factorial(n-1);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">}</pre>
</div>
<p>The word “sub” can be used to define subroutines.</p>
<p>Functions and subroutines are like any other values. They can be defined without name and assigned to variables:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Add1 = function (n) { <span style="color:#0000ff;">return</span> n+1; }</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">two = Add1(1);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">function Apply(func,values)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">{</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> list = <span style="color:#0000ff;">new</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">List();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">value</span> <span style="color:#0000ff;">in</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">values)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">list.Add(func(<span style="color:#0000ff;">value</span>));</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">return</span> list;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">}</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers = <span style="color:#0000ff;">new</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">List();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers.Add(1);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers.Add(2);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers.Add(3);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">function Square(n) { <span style="color:#0000ff;">return</span> n*n; }</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">squared = Apply(Square, numbers);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">squared2 = Apply(function (n) { <span style="color:#0000ff;">return</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">n*n; }, numbers);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
</div>
<h2>Native .NET objects</h2>
<p>One of the design goals of AjLanguage core is to have access to .NET objects. They can be created using the new keyword:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">ds = <span style="color:#0000ff;">new</span> System.Data.DataSet();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dinfo = <span style="color:#0000ff;">new</span> System.IO.DirectoryInfo(“.”);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">foreach</span> (fi <span style="color:#0000ff;">in</span> dinfo.GetFiles()) {</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">PrintLine(fi.FullName);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">}</pre>
</div>
<h2>Dynamic objects</h2>
<p>Dynamic objects can be created using the new keyword. A dynamic object accepts new members (variables and methods):</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj = <span style="color:#0000ff;">new</span> DynamicObject();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj.FirstName = “Adam”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj.LastName = "Genesis”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj.Age =</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">800;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj.FullName = function() { <span style="color:#0000ff;">return</span> FirstName + “ “ + LastName; }</pre>
</div>
<p>Another notation:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj = <span style="color:#0000ff;">new</span> { Name = “Adam”, Age = 800 };</pre>
</div>
<p>Another notation:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj = <span style="color:#0000ff;">new</span> { var FirstName = “Adam”; var LastName = “Genesis”; function</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">FullName() { <span style="color:#0000ff;">return</span> FirstName + “ “ + LastName; }</pre>
</div>
<p>Dynamic objects are defined automatically, setting theirs properties:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Database.Provider = “…”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Database.ConnectionString =</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">“…”;</pre>
</div>
<p>creates Project dynamic object, with a Database property pointing to another dynamic object. It’s equivalent to:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project = <span style="color:#0000ff;">new</span> DynamicObject();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Database = <span style="color:#0000ff;">new</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">DynamicObject();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Database.Provider =</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">“…”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Database.ConnectionString = “…”;</pre>
</div>
<p>An experiment: lists are defined automatically using Add method:</p>
<div id="codeSnippetWrapper">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Entities.Add(<span style="color:#0000ff;">new</span> { Name = “Customer”, Table = “dbo.Customers” });</pre>
<p>it’s equivalent to:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project = <span style="color:#0000ff;">new</span> DynamicObject();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Entities = <span style="color:#0000ff;">new</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">List();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Project.Entities.Add(<span style="color:#0000ff;">new</span> { Name = “Customer”, Table = “dbo.Customers”</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">});</pre>
</div>
<h2>Dynamic classes</h2>
<p>A class can be defined using this sintax:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">class</span> Person {</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> var FirstName;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> var</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">LastName;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> var Age;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> function</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">FullName {</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> <span style="color:#0000ff;">return</span> FirstName + “ “ +</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">LastName;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> }</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">}</pre>
</div>
<p>A new instance can be created as usual:</p>
<div id="codeSnippetWrapper">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">adam = <span style="color:#0000ff;">new</span> Person() { FirstName = “Adam”, LastName = “Genesis”, Age = 800 };</pre>
<p>The instance is dynamic: new members can be attached to it, and methods could be redefined:</p>
<div id="codeSnippetWrapper">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">adam.FullName = function() { <span style="color:#0000ff;">return</span> “The “ + FirstName; };</pre>
<p>You can create class as values:</p>
<div id="codeSnippetWrapper">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Person = <span style="color:#0000ff;">new</span> DynamicClass();</pre>
<p>but the interface to add members is still in flux.</p>
<h2>Defined Classes</h2>
<p>There are some predefined classes:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dynobj = <span style="color:#0000ff;">new</span> DynamicObject();</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">list = <span style="color:#0000ff;">new</span> List(); <span style="color:#008000;">// implementing </span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">IList</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">dict= <span style="color:#0000ff;">new</span> Dictionary(); // implementing IDictionary</pre>
</div>
<h2>Primitive Functions</h2>
<p>A few functions and subroutines are predefined:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Print(“Hello”);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">PrintLine(“Hello World”);</pre>
</div>
<p>There three predefined functions to execute and evaluate dinamic code:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Include(<span style="color:#006080;">"program.ajs"</span>);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Evaluate(<span style="color:#006080;">"k+1"</span>);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">Execute(<span style="color:#006080;">"k=1;"</span>);</pre>
</div>
<div id="codeSnippetWrapper">Include execute the commands in a file. Evaluate parses and evaluate an expression. And Execute compile and execute commands.</div>
<h2>False value</h2>
<p>Anything that is false, null, zero or empty string, is evaluated as false in conditional expression:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">if</span> (k)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> PrintLine(“<span style="color:#0000ff;">true</span>”);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">else</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">PrintLine(“<span style="color:#0000ff;">false</span>”);</pre>
</div>
<p>The above command prints “false” on execution, if k is zero or undefined. If a variable is undefined, any access to its member returns null, instead of a null exception:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">if</span> (Project.Database.ConnectionString)</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">PrintLine(“<span style="color:#0000ff;">true</span>”);</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">else</span></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"> PrintLine(“<span style="color:#0000ff;">false</span>”);</pre>
</div>
<p>This command prints “false” again, if variable Project is undefined.</p>
<h2>Arrays, List and Dictionaries</h2>
<p>Native arrays can be defined with length:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">firstprimes = <span style="color:#0000ff;">new</span> <span style="color:#0000ff;">int</span>[10];</pre>
</div>
<p>or with values:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">firstprimes = <span style="color:#0000ff;">new</span> <span style="color:#0000ff;">int</span>[] { 1, 2, 3, 5, 7, 9 };</pre>
</div>
<p>A list is created if you need a dynamic array:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[0] = “zero”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[1] = “one”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[2] =</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">“two”;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[3] = “three”;</pre>
</div>
<p>A dictionary is automatically created if the subindices are not numeric:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;"></pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[“one”] = 1;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[“two”] = 2;</pre>
<pre style="font-size:12pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:Courier New, courier, monospace;background-color:white;text-align:left;border-style:none;margin:0;padding:0;">numbers[“three”] = 3;</pre>
</div>
<p>If you need more feature, remember, you can use the native .NET framework.</p>
<h2>Console interface</h2>
<p>The project AjSharp.Console is a console application, where you can enter and execute AjSharp commands (not expressions):</p>
<p><img src="http://www.todocontenidos.com/images/articles/ajlanguage02.png" alt="" /></p>
<p>No command to exit, yet. Just control+c in Windows.</p>
<h2>Next steps</h2>
<p>There are so many features I want to add. Partial list:</p>
<p>- AjBasic as another language over AjLanguage</p>
<p>- Generics support</p>
<p>- Template support (as in AjGenesis)</p>
<p>- Integrate to <a href="http://ajgenesis.codeplex.com" target="_blank">AjGenesis</a> code generation</p>
<p>- Compile AST to Dynamic Language Runtime</p>
<p>Angel “Java” Lopez</p>
<p><a href="http://www.ajlopez.com">http://www.ajlopez.com</a></p>
<p><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/256/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=256&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/09/21/ajsharp-programming-language-a-c-like-dynamic-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://www.todocontenidos.com/images/articles/ajlanguage01.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/ajlanguage02.png" medium="image" />
	</item>
		<item>
		<title>Lord of the REPLs (Read Eval Print Loops) and CodePad</title>
		<link>http://ajlopez.wordpress.com/2009/09/15/lord-of-the-repls-read-eval-print-loops-and-codepad/</link>
		<comments>http://ajlopez.wordpress.com/2009/09/15/lord-of-the-repls-read-eval-print-loops-and-codepad/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 09:26:57 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[AjLisp]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/09/15/lord-of-the-repls-read-eval-print-loops-and-codepad/</guid>
		<description><![CDATA[These days, I&#8217;m implementing interpreted language. My first interest is Clojure, my work is an implementation using C#, written from scratch, you can see the progress at:
http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure
Last year I wrote a Lisp interpreter AjLisp- a Lisp interpreter in .NET, that I should improve, but past weeks, I started to write an Scheme-like language:
http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjScheme
With so much [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=255&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>These days, I&#8217;m implementing interpreted language. My first interest is Clojure, my work is an implementation using C#, written from scratch, you can see the progress at:</p>
<p><a title="http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure" href="http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure">http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure</a></p>
<p>Last year I wrote a Lisp interpreter <a title="AjLisp- a Lisp interpreter in .NET" href="http://ajlopez.wordpress.com/2008/07/30/ajlisp-a-lisp-interpreter-in-net/">AjLisp- a Lisp interpreter in .NET</a>, that I should improve, but past weeks, I started to write an Scheme-like language:</p>
<p><a title="http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjScheme" href="http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjScheme">http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjScheme</a></p>
<p>With so much activity on Lispy languages, I did research about many implementations. My discoveries were collected, as usual, in my delicious:</p>
<p><a href="http://delicious.com/ajlopez/lisp">http://delicious.com/ajlopez/lisp</a>     <br /><a href="http://delicious.com/ajlopez/clojure">http://delicious.com/ajlopez/clojure</a>     <br /><a href="http://delicious.com/ajlopez/scheme">http://delicious.com/ajlopez/scheme</a></p>
<p>One of the gems I discovered, is this Google App Engine tool:</p>
<p><a title="http://code.google.com/p/lotrepls/" href="http://code.google.com/p/lotrepls/">http://code.google.com/p/lotrepls/</a></p>
<blockquote><p>LotREPLs is a multi-lingual read-eval-print-loop in your browser powered by Google App Engine and the Java runtime. It&#8217;s a technical demo, not something to do serious work with. The following languages are supported: </p>
<ul>
<li>BeanShell </li>
<li>Clojure </li>
<li>JavaScript </li>
<li>Python </li>
<li>Ruby </li>
<li>Scala </li>
<li>Scheme </li>
</ul>
</blockquote>
<p>You can try it a:</p>
<p><a title="http://lotrepls.appspot.com/" href="http://lotrepls.appspot.com/">http://lotrepls.appspot.com/</a></p>
<p><img src="http://www.todocontenidos.com/images/articles/repl03.png" /> </p>
<p>You can enter your command, and see the result of evaluation, without installing nothing in your machine.</p>
<p>Another discovery, supporting C, C++, D, Haskell, Lua, Ocaml, PHP, Perl, Python, Ruby, Scheme, Tcl, is:</p>
<p><a title="http://codepad.org/" href="http://codepad.org/">http://codepad.org/</a></p>
<blockquote><p>codepad.org is an online compiler/interpreter, and a simple collaboration tool.      <br />Paste your code below, and codepad will run it and give you a short URL you can use to share it in chat or email. </p>
</blockquote>
<p><img src="http://www.todocontenidos.com/images/articles/repl01.png" /> </p>
</p>
<p>The code you enter and run, can be referenced by an URL, to share with other developers:</p>
<p><img src="http://www.todocontenidos.com/images/articles/repl02.png" /> </p>
<p>Some day, all our tools will be in the browser… <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Angel “Java” Lopez    <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>     <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/255/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=255&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/09/15/lord-of-the-repls-read-eval-print-loops-and-codepad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://www.todocontenidos.com/images/articles/repl03.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/repl01.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/repl02.png" medium="image" />
	</item>
		<item>
		<title>Microsoft Surface Demo: Patient Consultation Interface by Infusion</title>
		<link>http://ajlopez.wordpress.com/2009/09/08/microsoft-surface-demo-patient-consultation-interface-by-infusion/</link>
		<comments>http://ajlopez.wordpress.com/2009/09/08/microsoft-surface-demo-patient-consultation-interface-by-infusion/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 09:40:12 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/09/08/microsoft-surface-demo-patient-consultation-interface-by-infusion/</guid>
		<description><![CDATA[Currently, I’m working in an agile team, development a health care and administration application. I’m a newbie to health development world, but I’m impressed about the complexity and variety of requirements and opportunities to explore and exploit. It’s an exciting field for development.
Presenting patient information to medical professionals can be a challenging job. One of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=254&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Currently, I’m working in an agile team, development a health care and administration application. I’m a newbie to health development world, but I’m impressed about the complexity and variety of requirements and opportunities to explore and exploit. It’s an exciting field for development.</p>
<p>Presenting patient information to medical professionals can be a challenging job. One of the team members just discovered this video, from <a href="http://www.infusion.com">http://www.infusion.com</a> Microsoft partner, demoing a Surface application to view patient information:</p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/08/microsoft-surface-demo-patient-consultation-interface-by-infusion/"><img src="http://img.youtube.com/vi/Qf0WxOo3O4g/2.jpg" alt="" /></a></span></p>
<p>I read at Youtube video page information:</p>
<blockquote><p>MICROSOFT SURFACE PATIENT CONSULTAION INTERFACE     <br />The Microsoft Surface Patient Consultation Interface enables doctors to relate complex concepts through simple interactions.      </p>
<p>APPLICATION COMPONENTS      </p>
<p>The Surface Patient Consultation Interface augments and facilitates the conversations that a doctor regularly has with his or her patients through a unique, interactive representation on the Microsoft Surface. With the use of static and active media elements, a doctor is able to demonstrate and relate complex medical procedures or conditions in laymans terms to their patients.      </p>
<p>Doctors are able to use this tool to exchange content and information with their patients, adding a feeling of security to the transfer of electronic information between doctor and patient. Through the use of slide menus, touch interaction, and a simple navigation system, the application gives doctors the opportunity to provide their patients with a valuable educational experience.      </p>
<p>The application is divided into 2 distinct views and makes use of five interaction points:      </p>
<p>VIEWS:      </p>
<p>The Content View allows the viewing of shared content in a free-form fashion. This view facilitates easy observation and a simple summary of any topics shared during a session.      </p>
<p>The Anatomic View presents content for viewing in the context of the human body. This view enables the uncomplicated observation of specific diagnosis information and educational content.      </p>
<p>Within both views, content can be manipulated to allow doctor and patient to easily see and access information together. The three primary forms of content that can be displayed include: documents, photographs, and videos. The capability also exists for presenting additional content such as 3D models.      </p>
<p>INTERACTION POINTS:      </p>
<p>The Content and Anatomic views are traversed via 5 common elements.      </p>
<p>PERSONAL IDENTIFICATION components enable both the patient and doctor to share and store information. Identification occurs when the patient or doctor places their identification card on the Surface. For the patient, the identification card provides the ability to share and receive content from their Microsoft HealthVault account. For doctors, identification allows them to share generic and educational content with the patient.      </p>
<p>The ANATOMIC LOCATOR enables the doctor to focus on a specific area of the body. This action is performed by selecting and manipulating one of five body types that can be used for accessing content: exterior, organ, circulatory, nervous and skeletal.       </p>
<p>The ORB MENU draws data from the patients HealthVault account when a patient enters the content view. This hierarchical and easily navigated menu enables the selection of new content for the current session through the selection and dragging of content orbs located near the patients HealthVault card.      </p>
<p>The WEB MENU allows the doctor to display content within the Anatomical View. Once a body type is selected, key points on the body relating to the shared content are highlighted. This content includes documents, static images, and videos arranged around the point of interest.      </p>
<p>CONTENT ITEMS are a part of the overall interaction within the application and consist of documents, photographs, and videos. These multimedia tools are embedded into the patients information, interaction points within body types, or any other educational portion of the application.      </p>
<p>To learn more about Infusion and Microsoft Surface, visit: www.infusion.com or email surface@infusion.com. </p>
</blockquote>
<p>More info about Infusion works with Surface, at their blogs:</p>
<p><a title="http://www.infusion.com/surfaceblog/" href="http://www.infusion.com/surfaceblog/">http://www.infusion.com/surfaceblog/</a></p>
<p>There are interesting topics, as tips for Surface development and UI design.</p>
<p>Angel “Java” Lopez    <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>     <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/254/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=254&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/09/08/microsoft-surface-demo-patient-consultation-interface-by-infusion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/Qf0WxOo3O4g/2.jpg" medium="image" />
	</item>
		<item>
		<title>The mother of all Demos</title>
		<link>http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/</link>
		<comments>http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 10:39:11 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[Computer History]]></category>
		<category><![CDATA[Interface]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/</guid>
		<description><![CDATA[Last year, I wrote about this subject, but in Spanish:
http://msmvps.com/blogs/lopez/archive/2008/06/02/la-madre-de-todas-las-demos.aspx
The history is related in more detail at:
http://en.wikipedia.org/wiki/The_Mother_of_All_Demos
The Mother of All Demos is a name given retrospectively to Douglas Engelbart&#8217;s December 9, 1968 demonstration at the Fall Joint Computer Conference (FJCC) at the Convention Center in San Francisco, in which a number of experimental technologies that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=252&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Last year, I wrote about this subject, but in Spanish:</p>
<p><a href="http://msmvps.com/blogs/lopez/archive/2008/06/02/la-madre-de-todas-las-demos.aspx">http://msmvps.com/blogs/lopez/archive/2008/06/02/la-madre-de-todas-las-demos.aspx</a></p>
<p>The history is related in more detail at:</p>
<p><a href="http://en.wikipedia.org/wiki/The_Mother_of_All_Demos">http://en.wikipedia.org/wiki/The_Mother_of_All_Demos</a></p>
<blockquote><p><b>The Mother of All Demos</b> is a name given retrospectively to <a href="http://en.wikipedia.org/wiki/Douglas_Engelbart">Douglas Engelbart&#8217;s</a> December 9, 1968 demonstration at the Fall Joint Computer Conference (FJCC) at the Convention Center in <a href="http://en.wikipedia.org/wiki/San_Francisco">San Francisco</a>, in which a number of experimental technologies that have since become commonplace were presented. The demo featured the first <a href="http://en.wikipedia.org/wiki/Computer_mouse">computer mouse</a> the public had ever seen, as well as introducing interactive text, <a href="http://en.wikipedia.org/wiki/Video_conference">video conferencing</a>, <a href="http://en.wikipedia.org/wiki/Teleconference">teleconferencing</a>, <a href="http://en.wikipedia.org/wiki/Email">email</a>, and <a href="http://en.wikipedia.org/wiki/Hypertext">hypertext</a>.</p>
</blockquote>
<p>Yesterday, in a private email list, I received this list of videos. Enjoy! Info by <a href="http://www.youtube.com/user/bigkif">bigkif</a>:</p>
<blockquote><p>On December 9, 1968, Douglas C. Engelbart and the group of 17 researchers working with him in the Augmentation Research Center at Stanford Research Institute in Menlo Park, CA, presented a 90-minute live public demonstration of the online system, NLS, they had been working on since 1962. The public presentation was a session in the of the Fall Joint Computer Conference held at the Convention Center in San Francisco, and it was attended by about 1,000 computer professionals. This was the public debut of the computer mouse. </p>
</blockquote>
<p>But it was not only the mouse:</p>
<blockquote><p>But the mouse was only one of many innovations demonstrated that day, including hypertext, object addressing and dynamic file linking, as well as shared-screen collaboration involving two persons at different sites communicating over a network with audio and video interface.</p>
</blockquote>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/JfIgzSoTMOs/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/a11JDLBXtPQ/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/61oMy7Tr-bM/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/fNXLK78ZaFo/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/7zz1SwCTCEE/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/6dVNxlLYTsQ/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/XiJA7_Sw9aM/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/EI8LZKW5Lwk/2.jpg" alt="" /></a></span></p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/"><img src="http://img.youtube.com/vi/VYDg2wr2QfI/2.jpg" alt="" /></a></span></p>
<p>Angel “Java” Lopez   <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>    <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=252&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/09/03/the-mother-of-all-demos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/JfIgzSoTMOs/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/a11JDLBXtPQ/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/61oMy7Tr-bM/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/fNXLK78ZaFo/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/7zz1SwCTCEE/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/6dVNxlLYTsQ/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/XiJA7_Sw9aM/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/EI8LZKW5Lwk/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/VYDg2wr2QfI/2.jpg" medium="image" />
	</item>
		<item>
		<title>Augmented Reality in IPhone Application</title>
		<link>http://ajlopez.wordpress.com/2009/08/28/augmented-reality-in-iphone-application/</link>
		<comments>http://ajlopez.wordpress.com/2009/08/28/augmented-reality-in-iphone-application/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 09:18:17 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[Augmented Reality]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/08/28/augmented-reality-in-iphone-application/</guid>
		<description><![CDATA[These are exciting days to IPhone Applications. The API to Augmented Reality support in IPhone it will be released with the next version of the IPhone Operating System. But there are some applicactions now using the new features.
One (possible the first) application is the Paris Metro Subway app:

Yesterday, Robert Scolbe discovered an Augmented Reality easter [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=251&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>These are exciting days to IPhone Applications. The API to Augmented Reality support in IPhone it will be released with the next version of the IPhone Operating System. But there are some applicactions now using the new features.</p>
<p>One (possible the first) application is the <a href="http://www.metroparisiphone.com/index_en.html" target="_blank">Paris Metro Subway app</a>:</p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/08/28/augmented-reality-in-iphone-application/"><img src="http://img.youtube.com/vi/UMEnIRvAOoY/2.jpg" alt="" /></a></span></p>
<p>Yesterday, Robert Scolbe discovered an Augmented Reality easter egg in the new <a href="http://yelp.com/" target="_blank">Yelp applicacion</a>. According to:</p>
<p><a href="http://www.readwriteweb.com/archives/yelp_brings_first_us_augmented_reality_to_iphone_s.php">the new Yelp app includes an AR easter egg</a></p>
<blockquote><p>Social review service <a href="http://yelp.com">Yelp</a> has snuck the first Augmented Reality (AR) iPhone app specifically for the US into the iTunes App Store. The undisclosed new feature allows iPhone 3Gs owners to shake their phones three times to turn on a view called &quot;the Monocle.&quot; This view uses the phone&#8217;s GPS and compass to display markers for restaurants, bars and other nearby businesses on top of the camera&#8217;s view.</p>
</blockquote>
<p>Robert Scoble FriendFeed pub: <a title="http://friendfeed.com/scobleizer/e6e411b4/new-yelp-iphone-app-is-also-out-there-cool-easter" href="http://friendfeed.com/scobleizer/e6e411b4/new-yelp-iphone-app-is-also-out-there-cool-easter">http://friendfeed.com/scobleizer/e6e411b4/new-yelp-iphone-app-is-also-out-there-cool-easter</a></p>
<blockquote><p>Download the new Yelp app (came out yesterday). So you shake your iPhone 3 times. That activates a feature called Monocle. A message should come up if you activated it. A blue box will come up saying &quot;the Monocle has been activated.&quot; It will create a button in the top right corner. Now you should be able to look at the bars, restaurants, etc. Only works on iPhone 3GS. -</p>
</blockquote>
<p>And now, <a href="http://www.presselite.com/" target="_blank">Presslite</a> (the same company that made Paris Metro Subway) just added Augmented Reality to its <a href="http://www.londonbusesiphone.com/" target="_blank">London Bus app</a>:</p>
<p><span style="text-align:center; display: block;"><a href="http://ajlopez.wordpress.com/2009/08/28/augmented-reality-in-iphone-application/"><img src="http://img.youtube.com/vi/B_OPrXNt1og/2.jpg" alt="" /></a></span></p>
<p>There is no info about the API used (Presslite didn’t revealed nothing about tech). Candidates: <a href="http://www.hitl.washington.edu/artoolkit/">ARToolkit</a> ,<a href="http://www.iphonear.org">iPhoneARToolkit</a>, <a href="http://www.codza.com/custom-uiimagepickercontroller-camera-view">ChromelessImagePickerController</a>.</p>
<p>More info at:</p>
<p><a href="http://www.readwriteweb.com/archives/the_wall_has_fallen_3_augmented_reality_apps_now_l.php" target="_blank">The Wall Has Fallen: 3 Augmented Reality Apps Now Live in iPhone App Store</a>    <br /><a href="http://www.readwriteweb.com/archives/yelp_brings_first_us_augmented_reality_to_iphone_s.php" target="_blank">Yelp Brings First US Augmented Reality App to iPhone Store</a>    <br /><a href="http://www.readwriteweb.com/archives/first_iphone_augmented_reality_app_appears_live_in.php" target="_blank">First iPhone Augmented Reality App Appears Live in App Store</a></p>
<p>Angel “Java” Lopez   <br /><a href="http://www.ajlopez.com/en">http://www.ajlopez.com/en</a>    <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/251/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=251&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/08/28/augmented-reality-in-iphone-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/UMEnIRvAOoY/2.jpg" medium="image" />

		<media:content url="http://img.youtube.com/vi/B_OPrXNt1og/2.jpg" medium="image" />
	</item>
		<item>
		<title>Code generation and the Developer Job</title>
		<link>http://ajlopez.wordpress.com/2009/07/21/code-generation-and-the-developer-job/</link>
		<comments>http://ajlopez.wordpress.com/2009/07/21/code-generation-and-the-developer-job/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 15:15:03 +0000</pubDate>
		<dc:creator>ajlopez</dc:creator>
				<category><![CDATA[AjGenesis]]></category>
		<category><![CDATA[Code Generation]]></category>

		<guid isPermaLink="false">http://ajlopez.wordpress.com/2009/07/21/code-generation-and-the-developer-job/</guid>
		<description><![CDATA[Yesterday, July 20th, @hallo twittered:

 He received many response, this was mine, and another&#160; one:
 

We were doing code generation every day for decades. The tool is named: compiler. Do you remember the old days? Setting relays in the ENIAC? Or using the front panel to setup the first Altair microcomputer? The compiler generates code [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=249&subd=ajlopez&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yesterday, July 20th, <a href="http://twitter.com/hallo" target="_blank">@hallo</a> twittered:</p>
<p><img src="http://www.todocontenidos.com/images/articles/cgjob01.png" /></p>
<p> He received many response, this was mine, and another&#160; one:</p>
<p><img src="http://www.todocontenidos.com/images/articles/cgjob02.png" /> </p>
</p>
<p>We were doing code generation every day for decades. The tool is named: compiler. Do you remember the old days? Setting relays in the ENIAC? Or using the front panel to setup the first Altair microcomputer? The compiler generates code from a higher lever model: programming language.</p>
<p>But for the last three decades, we didn&#8217;t raise the level of abstraction. Exceptions: SQL language, or Visual Basic form designer (a graphic model that relieved us of pages and pages of Petzoldoid Windows code).</p>
<p>Code generation from a model (as I promote from my <a href="http://ajgenesis.codeplex.com" target="_blank">personal project AjGenesis</a>), is the way to get a new “language”: a domain specific language, or a domain specific model, or whatever you want to create.</p>
<p>Today we have so many technologies, with bunch of details and configurations. I think on combining Spring Framework, Hibernate, Struts 2, JavaServer Faces, ASP.NET MVC, Web Services, Windows Communication Foundation, etc… We are wiser on software developer, but current apps are polluted of tons of details and technicalities. Most of these details could be derived from a model.</p>
<p>It’s the same that saying: “a=fact(4)” is the model, and machine registers, stack manipulation, memory allocation, and so, are the details.</p>
<p>More answers:</p>
<p><img src="http://www.todocontenidos.com/images/articles/cgjob03.png" /> </p>
<p>Yes, manipulating processor registers could be cool the first time, but after hours and hours, it becomes boring (and troublesome). That was the motivation for assemblers, macro assembles, high level languages and compilers.</p>
<p>In my above tweet, I mentioned artificial intelligence. Well, I must admit it’s only an idea, but I think code generation is an appropiate field to apply &quot;artificial intelligence” approaches (yes, AI is broad term these days).</p>
<p>Another question:</p>
<p><img src="http://www.todocontenidos.com/images/articles/cgjob04.png" /> </p>
<p>Well, it’s hard in the short and medium term. First: there are lot of technologies, and every year we have a new kid of the block (Scala, Clojure, Rest, Cloud Computing, Sharding database, Mobile apps… etc). So, there is no single way of doing software. But in each of such niche, there are a lot of place to nurture abstraction, and to hide boring details.</p>
<p><img src="http://www.todocontenidos.com/images/articles/cgjob05.png" /> </p>
<p>I agree. But we could dream: applications creating applications… Could we have this kind of apps? In Star Trek future? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Code generation: sky is the limit (AjGenesis motto… <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Angel “Java” Lopez   <br /><a href="http://www.ajlopez.com">http://www.ajlopez.com</a>    <br /><a href="http://twitter.com/ajlopez">http://twitter.com/ajlopez</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajlopez.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajlopez.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajlopez.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajlopez.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajlopez.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajlopez.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajlopez.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajlopez.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajlopez.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajlopez.wordpress.com/249/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajlopez.wordpress.com&blog=378226&post=249&subd=ajlopez&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajlopez.wordpress.com/2009/07/21/code-generation-and-the-developer-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/086e1ed94cfc99c62fa27525e69b1a3b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajlopez</media:title>
		</media:content>

		<media:content url="http://www.todocontenidos.com/images/articles/cgjob01.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/cgjob02.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/cgjob03.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/cgjob04.png" medium="image" />

		<media:content url="http://www.todocontenidos.com/images/articles/cgjob05.png" medium="image" />
	</item>
	</channel>
</rss>