<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1934380107719917056</id><updated>2011-11-03T04:28:09.695-07:00</updated><title type='text'>Notes and Miscellania</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-6531840383038673053</id><published>2011-11-03T04:28:00.000-07:00</published><updated>2011-11-03T04:28:09.704-07:00</updated><title type='text'>Programming: Sheep and Goats</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.eis.mdx.ac.uk/staffpages/r_bornat/"&gt;Prof Richard Bornat&lt;/a&gt; and &lt;a href="http://www.eis.mdx.ac.uk/research/PhDArea/saeed/"&gt;Saeed Dehnad&lt;/a&gt; gave a fascinating &lt;a href="http://www.mdx.ac.uk/aboutus/Schools/EIS/research/seminar.aspx"&gt;EIS seminar&lt;/a&gt; yesterday on New Insights into Learning and Teaching Programming. Here is the abstract:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Historically a high proportion (round 30%, sometimes up to 50%) of  novice programmers fails to learn to program, and the level of  achievement amongst the successful is often disappointing. Until  recently the reasons for this miserable state of affairs were  mysterious. Now we have some insight, we have a test which reveals  important differences between novices, and two potential explanations.  The gloomy explanation is that there is a 'geek gene'; even if that is  true, we may be able to identify the geeks. The hopeful explanation is  that there is something peculiar about programming courses, which  elevates difficulties into show-stopping obstacles; if true, we have at  last identified one such obstacle, we can hope to identify others, we  can diagnose those who are stuck and we may at last be able to do  something about it.&lt;/blockquote&gt;They have devised some tests to be given to first year students before and during a programming course. The tests are based on asking students to interpret programs and visual representations of system states in a way that identifies students that can induce the rules of a machine. The test identifies those that cannot work out the rules, those that can work out a consistent set of rules that happen to be wrong, and those that get the correct set of rules.&lt;br /&gt;&lt;br /&gt;I find this very persuasive since I noticed a change in my own programming abilities after being introduced to the &lt;a href="http://en.wikipedia.org/wiki/SECD_machine"&gt;SECD machine&lt;/a&gt; over 20 years ago. The SECD machine is for a particular language, but I hold to the principle that expert programmers have a facility for working with algebraic representations of system executions&amp;nbsp; on a variety of abstraction levels. Essentially, such machines support a data representation of current states, and both past and future actual and possible system executions. That is to be contrasted with axiomatic and denotational semantics that seem less oriented to humans than to mathematics, and with other forms of operational semantics such as &lt;a href="http://en.wikipedia.org/wiki/Operational_semantics#Structural_operational_semantics"&gt;SOS&lt;/a&gt; or program interpreters where complete executions are not conveniently modularized.&lt;br /&gt;&lt;br /&gt;The results of Bornat and Dehnad are also interesting because they can explain the often observed student learner division between sheep (those that can program) and goats (those that cannot). The claim is that introductory programming courses build topic on topic and that any programme of learning that has this feature will exhibit polarity in student results. Whilst offering no solution, it was observed that organizing programming courses for mixed ability might solve the problem of losing students at the initial hurdles.&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-6531840383038673053?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/6531840383038673053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/11/programming-sheep-and-goats.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/6531840383038673053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/6531840383038673053'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/11/programming-sheep-and-goats.html' title='Programming: Sheep and Goats'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5490831707181682584</id><published>2011-10-09T14:15:00.000-07:00</published><updated>2011-10-09T14:15:52.827-07:00</updated><title type='text'>Presentation on Model Driven CARA</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Last week I presented a &lt;a href="http://www.mdx.ac.uk/aboutus/Schools/EIS/research/seminar.aspx"&gt;School Research Seminar&lt;/a&gt; on Model Driven Context Aware Reactive Applications. The seminar generated some interesting questions, particularly about proving security and privacy aspects of applications given a precise representation such as that supported by the approach described in the slides below. This is something I had not really thought about, but is an important feature of mobile applications. Another important area is the incorporation of &lt;a href="http://en.wikipedia.org/wiki/Software_product_line"&gt;product lines&lt;/a&gt; into this approach. Static variability occurs because of the large number of (versions of) platforms and dynamic variability occurs due to changes in context (battery levels and location for example).&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_9620935" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/ClarkTony/context-aware-reactive-applications" title="Context Aware Reactive Applications"&gt;Context Aware Reactive Applications&lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse9620935" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=carapresentation-111009154944-phpapp02&amp;stripped_title=context-aware-reactive-applications&amp;userName=ClarkTony" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse9620935" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=carapresentation-111009154944-phpapp02&amp;stripped_title=context-aware-reactive-applications&amp;userName=ClarkTony" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ClarkTony"&gt;ClarkTony&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5490831707181682584?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5490831707181682584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/10/presentation-on-model-driven-cara.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5490831707181682584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5490831707181682584'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/10/presentation-on-model-driven-cara.html' title='Presentation on Model Driven CARA'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-120833407861547753</id><published>2011-10-01T01:39:00.000-07:00</published><updated>2011-10-01T01:42:28.596-07:00</updated><title type='text'></title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Attended a workshop yesterday on &lt;a href="http://www.kcl.ac.uk/nms/depts/informatics/composition.aspx"&gt;Composition and Evolution of Model Transformations at King's College, London&lt;/a&gt; organized by &lt;a href="http://www.dcs.kcl.ac.uk/staff/kcl/"&gt;Kevin Lano&lt;/a&gt; and &lt;a href="http://www.steffen-zschaler.de/"&gt;Steffen Zschaler&lt;/a&gt;. The presentations covered a wide range of topics including: composition of bidirectional model transformations; traceability issues in the composition of input-destructive model transformations; transformation reuse; composing &lt;a href="http://en.wikipedia.org/wiki/ATLAS_Transformation_Language"&gt;ATL transformations&lt;/a&gt;; verification logics for transformations; visualization of transformation traces; the use of Java agents for model transformations;&amp;nbsp; specifying transformations for model slicing; composition of &lt;a href="http://www.google.co.uk/url?sa=t&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CCsQFjAB&amp;amp;url=http%3A%2F%2Fis.ieis.tue.nl%2Fstaff%2Fpvgorp%2Fevents%2FTTC2010%2Fsubmissions%2Ffinal%2Fuml-rsds.pdf&amp;amp;rct=j&amp;amp;q=UML%20RSDS&amp;amp;ei=-tGGTqu6FKmQ0AXEp73UDw&amp;amp;usg=AFQjCNFP2ZqBUa5OOG05vzQM1COazcNNdQ&amp;amp;sig2=Ko6K61LoJgbFKcNAhhgsJQ&amp;amp;cad=rja"&gt;UML-RSDS&lt;/a&gt; transformations. My presentation (&lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/kings_workshop_clark_1.pdf"&gt;and associated paper&lt;/a&gt;) was on model slicing: &lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_9496823" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/ClarkTony/model-slicing" target="_blank" title="Model Slicing"&gt;Model Slicing&lt;/a&gt;&lt;/b&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9496823" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ClarkTony" target="_blank"&gt;ClarkTony&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-120833407861547753?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/120833407861547753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/10/attended-workshop-yesterday-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/120833407861547753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/120833407861547753'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/10/attended-workshop-yesterday-on.html' title=''/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-7458482980954556767</id><published>2011-09-18T01:24:00.000-07:00</published><updated>2011-09-18T01:24:09.679-07:00</updated><title type='text'>Model Driven Context Aware Reactive Applications</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The explosion of smartphones and tablets has created a demand for fairly simple applications that are essentially driven by user events and that have some element of context-awareness. Unfortunately, the complexity of&amp;nbsp; technology used to develop such applications is not commensurate with the complexity of the resulting app. Therefore, this is an area that is ripe for &lt;a href="http://en.wikipedia.org/wiki/Model-driven_engineering"&gt;Model Driven Engineering&lt;/a&gt;. There are currently a number of ongoing attempts at developing modelling languages and code generation in this domain, however many are complex, platform specific and/or incomplete. I am currently working on an approach that uses UML-style class and state diagrams to capture the structure and big-picture behaviour of such applications and uses a typed functional calculus equipped with essential context-aware reactive features to fill in the detail. The rest of this post describes the models, I'll post the calculus next time.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hquvLOAhB8Q/TnWjvKc7u-I/AAAAAAAAAIM/UT1FIW491Sk/s1600/pic1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-hquvLOAhB8Q/TnWjvKc7u-I/AAAAAAAAAIM/UT1FIW491Sk/s320/pic1.png" width="310" /&gt;&lt;/a&gt;&lt;/div&gt;The diagram on the left shows Tony's mobile phone.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-3NlpTuM_4SM/TnWjvsjkN5I/AAAAAAAAAIQ/b9qidknCkVc/s1600/pic2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-3NlpTuM_4SM/TnWjvsjkN5I/AAAAAAAAAIQ/b9qidknCkVc/s320/pic2.png" width="310" /&gt;&lt;/a&gt;Clicking on 'add' allows the current address book to be viewed and edited as shown on the right&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MZ9rGFlANKU/TnWjv2XSGpI/AAAAAAAAAIU/TwXLvaK4O7w/s1600/pic4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://2.bp.blogspot.com/-MZ9rGFlANKU/TnWjv2XSGpI/AAAAAAAAAIU/TwXLvaK4O7w/s400/pic4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;The owner is altered when a phone that occurs in the address book comes into range.&lt;br /&gt;&lt;br /&gt;There are several general features that occur in the application: hierarchical GUI; user-events; context-events; state-changes. These can be captured on stereotyped UML class diagrams and state machines.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-vLo5X8hy-MU/TnWlM8VOBWI/AAAAAAAAAIc/9zfb17PLqHM/s1600/main.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="521" src="http://1.bp.blogspot.com/-vLo5X8hy-MU/TnWlM8VOBWI/AAAAAAAAAIc/9zfb17PLqHM/s640/main.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;The model on the left shows the main screen. there is a single root class called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Main&lt;/span&gt;. Classes labelled&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; external&lt;/span&gt; are part of a user-defined library that must conform to a given interface and that raise events. Classes labelled &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;widget&lt;/span&gt; are user defined and can handle (via &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;handler&lt;/span&gt;), raise events (via &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;event&lt;/span&gt;) and perform commands (via &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;command&lt;/span&gt;). Events are processed according to a containment hierarchy. The main screen is shown in the screen-shot above.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-fcIaKhNe6P0/TnWlMSNiMYI/AAAAAAAAAIY/3jQTGOj4-Ag/s1600/add.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="401" src="http://2.bp.blogspot.com/-fcIaKhNe6P0/TnWlMSNiMYI/AAAAAAAAAIY/3jQTGOj4-Ag/s640/add.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;The model on the right shows the screen that is created when the 'add' button is pressed. The add screen is shown in the screen-shot above. It uses external widgets to handle the display and editing of lists of contacts. Notics the link back to the main screen that can be used when the back button is pressed. The delete screen is the same as the add screen.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GcAp72KYI5Q/TnWlOGrkN1I/AAAAAAAAAIg/NOGlmbzOAxI/s1600/notify.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://3.bp.blogspot.com/-GcAp72KYI5Q/TnWlOGrkN1I/AAAAAAAAAIg/NOGlmbzOAxI/s400/notify.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;The model on the left shows the screen that is created when the owner is notified of a contact that has come into range.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-67e1O8_NTW8/TnWlPeks3sI/AAAAAAAAAIk/BiL8bBMgktg/s1600/STM.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="387" src="http://2.bp.blogspot.com/-67e1O8_NTW8/TnWlPeks3sI/AAAAAAAAAIk/BiL8bBMgktg/s640/STM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;The behaviour is specified using a state machine where the states correspond to the root classes of the other models. The actions on the transitions are commands and transitions are fired in response to events (user or context).&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-7458482980954556767?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/7458482980954556767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/09/model-driven-context-aware-reactive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7458482980954556767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7458482980954556767'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/09/model-driven-context-aware-reactive.html' title='Model Driven Context Aware Reactive Applications'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hquvLOAhB8Q/TnWjvKc7u-I/AAAAAAAAAIM/UT1FIW491Sk/s72-c/pic1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-2615594054880834491</id><published>2011-06-14T14:42:00.000-07:00</published><updated>2011-06-14T14:46:50.707-07:00</updated><title type='text'>SoSym Theme Issue: Enterprise Modelling</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div align="center" class="Default" style="margin-right: -18pt; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-pCBTxqjHRKQ/TffRooAWW6I/AAAAAAAAAFM/uJJvq5jJlzQ/s1600/thumb.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-pCBTxqjHRKQ/TffRooAWW6I/AAAAAAAAAFM/uJJvq5jJlzQ/s320/thumb.png" width="236" /&gt;&lt;/a&gt;&lt;a href="http://www.sosym.org/theme_issues/"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #0067a8; font-family: Arial; font-size: 18pt;"&gt;SoSym Theme Issue: Enterprise Modelling&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="DefaultChar"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Modern organizations rely on complex configurations of distributed IT systems that implement key business processes, provide databases, data warehousing, and business intelligence. The current business environment requires organizations to comply with a range of externally defined regulations such as &lt;a href="http://en.wikipedia.org/wiki/Sarbanes%E2%80%93Oxley_Act"&gt;Sarbanes-Oxley&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Basel_II"&gt;BASEL II&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="DefaultChar"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Organizations need to be increasingly agile, robust, and be able to react to complex events, possibly in terms of dynamic reconfiguration.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;In order to satisfy these complex requirements, large organizations are increasingly using Enterprise Modelling (EM) technologies to analyze their business units, processes, resources and IT systems, and to show how these elements satisfy the goals of the business. EM describes all aspects of the construction and analysis of organizational models and supports enterprise use cases including:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Business Alignment:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt; elements of a business are shown to meet its goals.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Business Change Management:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;     &lt;i&gt;as-is&lt;/i&gt; and &lt;i&gt;to-be&lt;/i&gt; models are used to plan how a business is to be changed.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Governance and Compliance:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt; models are used to show that processes are in place to comply with regulations.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Acquisitions and Mergers&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;: models are used to analyze the effect of combining two or more businesses.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US" style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Enterprise Resource Planning&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;: models are used to analyze the use of resources within a business and to show that given quality criteria are achieved.&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 6pt; text-align: justify;"&gt;&lt;span class="DefaultChar"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Emerging technologies, methods and techniques currently proposed for EM include: &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Modelling Languages: &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;including&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span class="DefaultChar"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt;; &lt;a href="http://en.wikipedia.org/wiki/Systems_Modeling_Language"&gt;SysML&lt;/a&gt;; &lt;a href="http://en.wikipedia.org/wiki/ArchiMate"&gt;ArchiMate&lt;/a&gt;; &lt;a href="http://www.mod.uk/DefenceInternet/AboutDefence/WhatWeDo/InformationManagement/MODAF/"&gt;MODAF&lt;/a&gt;; &lt;a href="http://www.opengroup.org/togaf/"&gt;TOGAF&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Enterprise Views:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt; stakeholder identification; multiple linguistic communities.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Enterprise Patterns:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt; an organization is shown to conform to general (possibly executable) organizational principles.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Event Driven Architectures:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt; constructing enterprise architectures based on complex events.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: Symbol; font-size: 11pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt;Enterprise Simulation:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Adobe Garamond Pro&amp;quot;; font-size: 11pt;"&gt; executing configurations of organizational units in order to analyse and verify performance.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 28pt; text-align: justify; text-indent: -22pt;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: inherit; text-align: justify;"&gt;&lt;span class="DefaultChar"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;The &lt;i&gt;&lt;a href="http://www.sosym.org/"&gt;&lt;b&gt;Journal of Software and Systems Modeling&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/i&gt;(SoSyM) invites original, high-quality submissions for its theme issue on Enterprise Modelling&amp;nbsp; (EM). The aim of the theme issue is to bring together a collection of articles that describe a range of EM technologies and approaches in order to provide the reader with a single resource that captures the state of art. The theme issue will include an introduction to the field, an overview of the leading-edge languages and technologies used to undertake EM, and in-depth analysis of techniques or approaches for specific use-cases of EM.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Papers must be written in a scientifically rigorous manner with adequate references to related work.&lt;/span&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Submitted papers must not be simultaneously submitted in an extended form or in a shortened form to other journals or conferences. It is however possible to submit extended versions of previously published work if less than 75% of the content already appeared in a non-journal publication, or less than 40% in a journal publication. Please see the &lt;a href="http://www.sosym.org/submission/"&gt;SoSyM Policy Statement on Plagiarism&lt;/a&gt; for further conditions.&lt;/span&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Submitted papers do not need to adhere to a particular format or page limit, but should be prepared using font “Times New Roman” with a font size no smaller than 11 pt, and with 1.5 line spacing. Please consult the &lt;a href="http://www.sosym.org/submission/"&gt;SoSyM author information for submitting papers&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="Default" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-color: -moz-use-text-color -moz-use-text-color windowtext; border-style: none none solid; border-width: medium medium 1.5pt; padding: 0cm 0cm 1pt;"&gt;&lt;div class="Default" style="border: medium none; padding: 0cm; text-align: justify;"&gt;&lt;div style="font-family: inherit;"&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;Each paper will be reviewed by at least three reviewers.&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #000101;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #000101;"&gt;Important Dates:&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;&lt;span style="color: black; font-size: 12pt; text-decoration: none;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: inherit;"&gt;&lt;li&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;&lt;span style="color: black; font-size: 12pt; text-decoration: none;"&gt;Intent to submit &lt;/span&gt;&lt;span style="color: black; text-decoration: none;"&gt;: 01 Sep &amp;nbsp;11 &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;Paper submission&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;:&amp;nbsp; 01 Nov 11&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;Notification&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;: 01 Feb&amp;nbsp; 12&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;Publication:&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt; 2012&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span lang="EN-US" style="font-size: 11pt;"&gt;&amp;nbsp;&lt;a href="http://www.sosym.org/theme_issues/"&gt;Follow this link for more information&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-2615594054880834491?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/2615594054880834491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/06/sosym-theme-issue-enterprise-modelling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2615594054880834491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2615594054880834491'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/06/sosym-theme-issue-enterprise-modelling.html' title='SoSym Theme Issue: Enterprise Modelling'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-pCBTxqjHRKQ/TffRooAWW6I/AAAAAAAAAFM/uJJvq5jJlzQ/s72-c/thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-531127652750901265</id><published>2011-06-11T23:50:00.000-07:00</published><updated>2011-06-11T23:50:55.878-07:00</updated><title type='text'>Magic Gopher</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-y88EzvF9a_s/TfRgg5QSPjI/AAAAAAAAAFI/4Lmvv4aoP5c/s1600/gopher.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="202" src="http://4.bp.blogspot.com/-y88EzvF9a_s/TfRgg5QSPjI/AAAAAAAAAFI/4Lmvv4aoP5c/s320/gopher.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;My father pointed me at &lt;a href="http://www.learnenglish.org.uk/games/magic-gopher-central.swf"&gt;this British Council site&lt;/a&gt; (shown on the right). The games are used for&lt;a href="http://learnenglish.britishcouncil.org/en/"&gt; learning English&lt;/a&gt; however my children are amazed that the Gopher can read their mind and gets the answer right every time.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-531127652750901265?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/531127652750901265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/06/magic-gopher.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/531127652750901265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/531127652750901265'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/06/magic-gopher.html' title='Magic Gopher'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-y88EzvF9a_s/TfRgg5QSPjI/AAAAAAAAAFI/4Lmvv4aoP5c/s72-c/gopher.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-2740483394862004875</id><published>2011-06-06T12:16:00.000-07:00</published><updated>2011-06-06T13:54:47.337-07:00</updated><title type='text'>XMF Source Code</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The source code of XMF is now available for browsing via &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/"&gt;my home page&lt;/a&gt;. Look under XMF -&amp;gt; Source Code where there are two browser trees labelled com.ceteva.xmf.machine and com.ceteva.xmf.system. The first contains the source code of the XMF VM (in Java) and the second contains the source code of XMF (in XMF under xmf-src). Note that the Java source viewer will only work when navigating from a file within the source tree due to browser security issues.&lt;br /&gt;&lt;br /&gt;The browser trees were created by running the following XMF code over a root directory:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #2040a0;"&gt;context&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;Root&lt;/span&gt;&lt;br /&gt; @&lt;span style="color: #2040a0;"&gt;Operation&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;list&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;root&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;prefix&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #2040a0;"&gt;let&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;path&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;root&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span style="color: green;"&gt;"/"&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;prefix&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;then&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #2040a0;"&gt;dir&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;Directory&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;path&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;Seq&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;".*xmf"&lt;/span&gt;,&lt;span style="color: green;"&gt;".*java"&lt;/span&gt;,&lt;span style="color: green;"&gt;".*txt"&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #2040a0;"&gt;in&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;dir&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;build&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;1&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: #2040a0;"&gt;format&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: green;"&gt;"~V&amp;lt;li&amp;gt;&amp;lt;a href='#'&amp;gt;~S&amp;lt;/a&amp;gt;~%"&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;Seq&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;dir&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;splitBy&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;"/"&lt;/span&gt;,&lt;span style="color: red;"&gt;0&lt;/span&gt;,&lt;span style="color: red;"&gt;0&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;last&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: #2040a0;"&gt;format&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: green;"&gt;"~V&amp;lt;ul&amp;gt;~%"&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;Seq&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;     @&lt;span style="color: #2040a0;"&gt;For&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;x&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;in&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;dir&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;contents&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt; &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;      &lt;span style="color: #2040a0;"&gt;let&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;name&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;x&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;splitBy&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;"/"&lt;/span&gt;,&lt;span style="color: red;"&gt;0&lt;/span&gt;,&lt;span style="color: red;"&gt;0&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;last&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #2040a0;"&gt;in&lt;/span&gt; &lt;b&gt;if&lt;/b&gt; &lt;span style="color: #2040a0;"&gt;not&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;Set&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;".svn"&lt;/span&gt;,&lt;span style="color: green;"&gt;"META-INF"&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;includes&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: #2040a0;"&gt;then&lt;/span&gt;&lt;br /&gt;          &lt;b&gt;if&lt;/b&gt; &lt;span style="color: #2040a0;"&gt;x&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;isKindOf&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;Directory&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #2040a0;"&gt;then&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;list&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;root&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;prefix&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span style="color: green;"&gt;"/"&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;name&lt;/span&gt; ,&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;          &lt;b&gt;else&lt;/b&gt; &lt;br /&gt;           &lt;b&gt;if&lt;/b&gt; &lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;.&lt;span style="color: #2040a0;"&gt;hasSuffix&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;"java"&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: #2040a0;"&gt;then&lt;/span&gt; &lt;span style="color: #2040a0;"&gt;format&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: green;"&gt;"~V&amp;lt;li class='item'&amp;gt;&amp;lt;a onclick='display_java('~S');'&amp;gt;~S&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;~%"&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;Seq&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;prefix&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: green;"&gt;"/"&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;           &lt;b&gt;else&lt;/b&gt;&lt;br /&gt;            &lt;span style="color: #2040a0;"&gt;format&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: green;"&gt;"~V&amp;lt;li class='item'&amp;gt;&amp;lt;a href='~S' target='FILES'&amp;gt;~S&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;~%"&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;Seq&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;prefix&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: green;"&gt;"/"&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;name&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #2040a0;"&gt;format&lt;/span&gt;&lt;span&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;out&lt;/span&gt;,&lt;span style="color: green;"&gt;"~V&amp;lt;/ul&amp;gt;~%~V&amp;lt;/li&amp;gt;~%"&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;Seq&lt;/span&gt;&lt;span&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;,&lt;span style="color: #2040a0;"&gt;indent&lt;/span&gt;&lt;span&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;    &lt;br /&gt;  &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #2040a0;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-2740483394862004875?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/2740483394862004875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/06/xmf-source-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2740483394862004875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2740483394862004875'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/06/xmf-source-code.html' title='XMF Source Code'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-8878599585692457782</id><published>2011-05-25T10:51:00.000-07:00</published><updated>2011-05-25T10:51:26.186-07:00</updated><title type='text'>XMF and XModeler</title><content type='html'>Both XMF and XModeler are now available from my &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/"&gt;home page&lt;/a&gt;. Click on the links to the left to get instructions for download and for documentation. XMF is a language for developing &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;Domain Specific Languages&lt;/a&gt; and for &lt;a href="http://en.wikipedia.org/wiki/Language-oriented_programming"&gt;Language Oriented Programming&lt;/a&gt;. XModeler is an IDE for &lt;a href="http://en.wikipedia.org/wiki/Model-driven_engineering"&gt;Model Driven Engineering&lt;/a&gt; and for developing XMF programs.&lt;br /&gt;&lt;br /&gt;The download of XMF includes the source code. Since XMF is written in itself (on a small VM written in Java), this is an excellent place to start to see what you can do with the language. XMF supports both functional and object-oriented programming. Classes in XMF have optional grammars that can be used to create syntax-classes that extend the base language. XMF includes features for pattern matching, processing XML, writing prolog-style rules over object structures, threads, daemons, quasi-quotes for processing syntax. Virtually all aspects of the language are open for extension and reflection.&lt;br /&gt;&lt;br /&gt;The download of XModeler includes the source code (the actual sources will follow later) so you can browse through the implementation using the various editors. XModeler is written in XMF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-8878599585692457782?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/8878599585692457782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/05/xmf-and-xmodeler.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8878599585692457782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8878599585692457782'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/05/xmf-and-xmodeler.html' title='XMF and XModeler'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-2617211357066504021</id><published>2011-05-10T10:21:00.000-07:00</published><updated>2011-05-10T10:33:20.551-07:00</updated><title type='text'>XPL: A Functional Language for Language Oriented Programming</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;XPL is a functional language that has been developed to experiment with Domain Specific Languages and Language Oriented Programming.&amp;nbsp; It is written in Java. The source code for XPL v 0.1 can be downloaded &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Systems/xpl_0.1.zip"&gt;here&lt;/a&gt;. The language has first-class grammars that can be combined and has access to its own abstract syntax. Grammars use quasi-quotes to build new syntax structures that can be inserted into the XPL execution stream. This is like macros in Scheme (in that language features can be defined with a limited scope). However unlike Scheme XPL can define the syntax of each new language feature.&lt;br /&gt;&lt;br /&gt;Here is a simple language feature inspired by an example from Martin Fowler. Suppose that we get a stream of character codes as input. The stream contains information about customers and we need to chop up the input to produce data records. If there are a large number of different types of input data and they change regularly then it makes sense to define a declarative language construct that defines each type. The following XPL code defines a language construct for recovering structure from an input stream:&lt;br /&gt;&lt;pre&gt;export test1,test2&lt;br /&gt;&lt;br /&gt;// We need syntax constructors for Record and Field:&lt;br /&gt;&lt;br /&gt;import 'src/xpl/exp.xpl'&lt;br /&gt;&lt;br /&gt;// We need list operations:&lt;br /&gt;//   take([1,2,3],2) = [1,2]&lt;br /&gt;//   drop([1,2,3],2) = [3]&lt;br /&gt;//   foldr(f,g,b,[1,2,3]) = g(f(1),g(f(2),g(f(3),b)))&lt;br /&gt;&lt;br /&gt;import 'src/xpl/lists.xpl'&lt;br /&gt;&lt;br /&gt;// Define some functions to be used as args to foldr:&lt;br /&gt;&lt;br /&gt;combine(left,right) = [| fun(l) ${left}(l,fun(r,l) r + ${right}(l)) |]&lt;br /&gt;   id(x) = x&lt;br /&gt;   empty = [| fun(l) {} |]&lt;br /&gt;&lt;br /&gt;// Define a function that constructs *the syntax* of a field extractor:&lt;br /&gt;//   extractor('name',5) = [| fun(l,k) k({name=asString(take(l,5))},drop(l,5)) |]&lt;br /&gt;&lt;br /&gt;extractor(n,i) = &lt;br /&gt;  let record = Record([Field(n,[| asString(take(l,${i})) |])]) &lt;br /&gt;  in [| fun(l,k) k(${record},drop(l,${i})) |]&lt;br /&gt;&lt;br /&gt;// Define the grammar to consists of a sequence of fields.&lt;br /&gt;// Each field builds an extractor. All extractors are combined&lt;br /&gt;// into a mapping from a sequence of character codes to a record:&lt;br /&gt;&lt;br /&gt;grammar = {&lt;br /&gt;  fields -&amp;gt; fs=field* { foldr(id,combine,empty,fs) };&lt;br /&gt;  field -&amp;gt; n=name whitespace ':' i=int { extractor(n,i) };&lt;br /&gt;  int -&amp;gt; whitespace n=numeric+ { Int(asInt(n)) };&lt;br /&gt;  whitespace -&amp;gt; (32 | 10 | 9 | 13)*;&amp;nbsp; &lt;br /&gt;  name -&amp;gt; whitespace l=alpha ls=alpha* { asString(l:ls) }; &lt;br /&gt;  alpha -&amp;gt; ['a','z'];&lt;br /&gt;  numeric -&amp;gt; ['0','9']&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Here is a use of the language: a customer is a name (5 chars) followed&lt;br /&gt;// by an address (15 chars), followed by an account number (3 chars):&lt;br /&gt;&lt;br /&gt;customer = &lt;br /&gt;  intern grammar {&lt;br /&gt;    customer:5&lt;br /&gt;    address:15&lt;br /&gt;    account:3&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;// The customer map is used by applying it to a stream of char codes:&lt;br /&gt;&lt;br /&gt;input = [102,114,101,100,32,49,48,32,77,97,105,110,32,82,111,97,100,32,32,32,53,48,49]&lt;br /&gt; &lt;br /&gt;test1() = customer(input)&lt;br /&gt;&lt;br /&gt;// Just to show everything is first-class:&lt;br /&gt;&lt;br /&gt;test2() = map(customer,repeat(input,10))&lt;br /&gt;&lt;/pre&gt;To use XPL you download the ZIP file (link above). It is developed as an Eclipse project, but can also be run stand-alone. The interpreter is in the xpl package in the source folder. If you run the Interpreter as a Java application in Eclipse then the console becomes an XPL top-level loop that you can type XPL commands to. Here is a transcript of the example given above (user input after a '&amp;gt;' followed by XPL output):&lt;br /&gt;&lt;pre&gt;[src/xpl/xpl.xpl 2353 ms,136]&lt;br /&gt;&amp;gt; import 'src/xpl/split.xpl';&lt;br /&gt;[src/xpl/split.xpl 179 ms,262]&lt;br /&gt;[src/xpl/exp.xpl 26 ms,404]&lt;br /&gt;[src/xpl/lists.xpl 108 ms,164]&lt;br /&gt;&amp;gt; test1();&lt;br /&gt;{customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501}&lt;br /&gt;&amp;gt; test2();&lt;br /&gt;[{customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501},&lt;br /&gt; {customer=fred ;address=10 Main Road&amp;nbsp;&amp;nbsp; ;account=501}]&lt;br /&gt;&amp;gt;&amp;nbsp;&lt;/pre&gt;There is currently no user documentation (contact me if you are interested in this). But there are some technical articles: &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Modules.pdf"&gt;language modules in XPL&lt;/a&gt;, &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Modular%20Interpreters.pdf"&gt;modular interpreters in XPL&lt;/a&gt;, and &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Operators.pdf"&gt;parsing infix operators using XPL&lt;/a&gt;. In addition the source code contains a number of examples in the xpl folder.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-2617211357066504021?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/2617211357066504021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/05/xpl-functional-language-for-language.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2617211357066504021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2617211357066504021'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/05/xpl-functional-language-for-language.html' title='XPL: A Functional Language for Language Oriented Programming'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-1926554726316004410</id><published>2011-03-17T08:38:00.000-07:00</published><updated>2011-03-17T08:40:18.375-07:00</updated><title type='text'>Class Modelling</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-dUP-iAWvV1s/TYIoKHx_boI/AAAAAAAAAFA/yNthQUl0U3o/s1600/Hotel.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="640" src="https://lh6.googleusercontent.com/-dUP-iAWvV1s/TYIoKHx_boI/AAAAAAAAAFA/yNthQUl0U3o/s640/Hotel.jpg" width="433" /&gt;&lt;/a&gt;&lt;/div&gt;System modelling is something that students often find difficult to do. One possible reason for this is that they have difficulty mapping the models to a framework that can be used to validate their design, i.e. &lt;i&gt;what does the model do&lt;/i&gt;? Whilst modelling should be more abstract than&lt;i&gt; programming in pictures&lt;/i&gt;, I think that grounding the models in an implementation language, at least initially, is a good place to start.&lt;br /&gt;&lt;br /&gt;To that end, a while ago I produced and delivered some material that linked class modelling with Java implementations.This was quite well received and can be &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Systems/Hotel.zip"&gt;downloaded as a zip file&lt;/a&gt;.  The application is a small hotel booking system whose model is shown on the right. The material includes the Java code (as an Eclipse project) of a basic booking system, some slides, some student activities to extend the models and implementation, and the solutions. The models contained in the material were created using the open-source modelling tool called &lt;a href="http://staruml.sourceforge.net/en/"&gt;StarUML&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A nice feature of the implementation is that it can print out the state ofthe booking system as an XML document. This means that students can understand state changes in terms of pre and post-states of the system. A natural extension of the material would be to introduce pre and post conditions that can be articulated in terms of the XML system states.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-1926554726316004410?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/1926554726316004410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/03/class-modelling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/1926554726316004410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/1926554726316004410'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/03/class-modelling.html' title='Class Modelling'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-dUP-iAWvV1s/TYIoKHx_boI/AAAAAAAAAFA/yNthQUl0U3o/s72-c/Hotel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-3455623245160713946</id><published>2011-03-14T01:08:00.000-07:00</published><updated>2011-03-14T01:08:54.526-07:00</updated><title type='text'></title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-7ujqdV7x95c/TX3K7hp_oeI/AAAAAAAAAE8/lMHrOKIpoxc/s1600/india-map.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="https://lh3.googleusercontent.com/-7ujqdV7x95c/TX3K7hp_oeI/AAAAAAAAAE8/lMHrOKIpoxc/s320/india-map.gif" width="283" /&gt;&lt;/a&gt;&lt;/div&gt;Arrived back from a three week tour of India. We visited many companies and HE institutions to discuss collaboration in&amp;nbsp; &lt;a href="http://en.wikipedia.org/wiki/Thiruvananthapuram"&gt;Thiruvananthapuram&lt;/a&gt;&lt;b&gt; &lt;/b&gt;(Trivandrum), &lt;a href="http://en.wikipedia.org/wiki/Bangalore"&gt;Bangalore&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Chennai"&gt;Chennai&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Mumbai"&gt;Mumbai&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Pune"&gt;Pune&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/New_Delhi"&gt;New Delhi&lt;/a&gt;. The scale of operations of IT companies is huge. One commercial campus we visited has around 25 thousand employees; others are even larger.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-3455623245160713946?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/3455623245160713946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/03/arrived-back-from-three-week-tour-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3455623245160713946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3455623245160713946'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/03/arrived-back-from-three-week-tour-of.html' title=''/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-7ujqdV7x95c/TX3K7hp_oeI/AAAAAAAAAE8/lMHrOKIpoxc/s72-c/india-map.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5970192921250407603</id><published>2011-02-25T08:03:00.000-08:00</published><updated>2011-02-25T08:04:50.409-08:00</updated><title type='text'>ISEC 2011</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zpbbpZN_WXk/TWfQgpL0EWI/AAAAAAAAAE4/opyiTGUzca8/s1600/ISEC.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="239" src="http://4.bp.blogspot.com/-zpbbpZN_WXk/TWfQgpL0EWI/AAAAAAAAAE4/opyiTGUzca8/s320/ISEC.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;At the &lt;a href="http://www.csi-sigse.org/isec2011/"&gt;ISEC 2011&lt;/a&gt; Conference this week in &lt;a href="http://en.wikipedia.org/wiki/Thiruvananthapuram"&gt;&lt;span style="color: #333333; font-family: inherit; font-size: small;"&gt;Thiruvananthapuram&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #333333; font-family: inherit; font-size: small;"&gt;. The conference is held at TCS offices and the entrance lobby was decorated with flower petals as shown on the right. Someone posted &lt;a href="http://www.facebook.com/album.php?aid=59697&amp;amp;id=191696034177083&amp;amp;l=b0161a1019"&gt;photos&lt;/a&gt; (of a session I was not at).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333; font-family: inherit; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333; font-family: inherit; font-size: small;"&gt;Lots of interest in development methods at the conference, particularly &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile&lt;/a&gt; methods and &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28development%29"&gt;Scrum&lt;/a&gt;. I gave an invited talk on Domain Specific Modelling as Theory Building (see entry below) at the Advances in Model-based Software Engineering Workshop and gave a paper on Model Based Enterprise Architecture at the conference.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5970192921250407603?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5970192921250407603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2011/02/isec-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5970192921250407603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5970192921250407603'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2011/02/isec-2011.html' title='ISEC 2011'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-zpbbpZN_WXk/TWfQgpL0EWI/AAAAAAAAAE4/opyiTGUzca8/s72-c/ISEC.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5093718467498499908</id><published>2010-12-08T02:09:00.000-08:00</published><updated>2010-12-08T02:09:21.935-08:00</updated><title type='text'>Logic</title><content type='html'>The &lt;a href="http://www.bbc.co.uk/radio4/"&gt;BBC Radio 4&lt;/a&gt; weekly discussion programme &lt;a href="http://www.bbc.co.uk/programmes/b006qykl"&gt;In Our Time&lt;/a&gt; recently covered the history of Logic from &lt;a href="http://en.wikipedia.org/wiki/Socrates"&gt;Socrates&lt;/a&gt; through to computation with &lt;a href="http://en.wikipedia.org/wiki/Alan_Turing"&gt;Alan Turing&lt;/a&gt;. It is an interesting programme and well worth a listen. Necessarily broad in scope but more accessible than the recent hilarious attempt by the same programme to deal with imaginary numbers during which the presenter, &lt;a href="http://en.wikipedia.org/wiki/Melvyn_Bragg"&gt;Melvyn Bragg&lt;/a&gt;, tied himself in knots: 'yes... but what &lt;i&gt;are&lt;/i&gt; they?'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5093718467498499908?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5093718467498499908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/12/logic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5093718467498499908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5093718467498499908'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/12/logic.html' title='Logic'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-55734051168412980</id><published>2010-11-30T08:44:00.000-08:00</published><updated>2010-11-30T08:44:06.022-08:00</updated><title type='text'>Snow!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/TPUpoKBiJCI/AAAAAAAAAEs/55lhLARSbyg/s1600/IMG_4999.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_GLspyVdb5eg/TPUpoKBiJCI/AAAAAAAAAEs/55lhLARSbyg/s320/IMG_4999.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;The first snows of the season...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-55734051168412980?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/55734051168412980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/11/snow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/55734051168412980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/55734051168412980'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/11/snow.html' title='Snow!'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GLspyVdb5eg/TPUpoKBiJCI/AAAAAAAAAEs/55lhLARSbyg/s72-c/IMG_4999.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-175832870531627588</id><published>2010-11-02T10:49:00.000-07:00</published><updated>2010-11-02T10:53:51.492-07:00</updated><title type='text'>Don't Monkey Around with your Mobile</title><content type='html'>Dean Kramer tweeted the following method as part of the Android library:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/TNBQG8o1nQI/AAAAAAAAAEo/We-VKWf8QBs/s1600/monkey.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GLspyVdb5eg/TNBQG8o1nQI/AAAAAAAAAEo/We-VKWf8QBs/s1600/monkey.png" style="cursor: move;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-175832870531627588?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/175832870531627588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/11/dont-monkey-around-with-your-mobile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/175832870531627588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/175832870531627588'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/11/dont-monkey-around-with-your-mobile.html' title='Don&apos;t Monkey Around with your Mobile'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GLspyVdb5eg/TNBQG8o1nQI/AAAAAAAAAEo/We-VKWf8QBs/s72-c/monkey.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-7169627029647979493</id><published>2010-11-02T06:10:00.000-07:00</published><updated>2010-11-02T06:10:13.190-07:00</updated><title type='text'>Modelling as Theory Building</title><content type='html'>&lt;a href="http://www.semoris.com/"&gt;Balbir Barn&lt;/a&gt; pointed me to an old paper by Peter Naur: &lt;a href="http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B75C7-4909PNJ-16&amp;amp;_user=10&amp;amp;_coverDate=05%2F31%2F1985&amp;amp;_rdoc=1&amp;amp;_fmt=high&amp;amp;_orig=search&amp;amp;_origin=search&amp;amp;_sort=d&amp;amp;_docanchor=&amp;amp;view=c&amp;amp;_searchStrId=1523869143&amp;amp;_rerunOrigin=scholar.google&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=3fda439fc1511e5be9c189ae1010444f&amp;amp;searchtype=a"&gt;&lt;i&gt;Programming as theory building&lt;/i&gt;&lt;/a&gt; in the Journal of Microprocessing and Microprogramming, 15(5):253 – 261, 1985. Naur proposes that program designers should explicitly build theories of an application that address all features of the domain that are related to the desired behaviour, whether the features have any direct counterpart in the eventual implementation or not. The theory is implemented by mapping it to a target platform. In doing so, the theory faithfully represents what would now be called the &lt;i&gt;problem domain&lt;/i&gt; and represents the key development artifact that can be used to understand and maintain the application. This paper is very relevant to the activities of the DSM and DSL communities. In particular DSM development (for example &lt;a href="http://en.wikipedia.org/wiki/Profile_%28UML%29"&gt;profiles in UML&lt;/a&gt;) rarely pays attention to the semantics (the theory) of the language being defined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-7169627029647979493?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/7169627029647979493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/11/modelling-as-theory-building.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7169627029647979493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7169627029647979493'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/11/modelling-as-theory-building.html' title='Modelling as Theory Building'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5129810395327207361</id><published>2010-10-10T07:46:00.000-07:00</published><updated>2010-10-10T07:46:11.686-07:00</updated><title type='text'>OCL and Textual Modelling Workshop</title><content type='html'>The OCL and Textual Modelling Workshop at MODELS 2010 was well attended and we had excellent presentations. The day concluded with a review of the current state of the OCL standard maintained by the OMG and a discussion about features that OCL could include in the future. Jordi has &lt;a href="http://modeling-languages.com/blog/content/summary-ocl-and-textual-modelling-workshop-2010"&gt;blogged an overview of the presentations&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5129810395327207361?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5129810395327207361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/10/ocl-and-textual-modelling-workshop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5129810395327207361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5129810395327207361'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/10/ocl-and-textual-modelling-workshop.html' title='OCL and Textual Modelling Workshop'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-3586531567018796926</id><published>2010-09-18T01:45:00.000-07:00</published><updated>2010-09-18T01:45:40.260-07:00</updated><title type='text'>Tom Gilb Keynote</title><content type='html'>I attended the Keynote Presentation by &lt;a href="http://www.gilb.com/Site+Content+Overview"&gt;Tom Gilb&lt;/a&gt; at the &lt;a href="http://www.iwra2010.org/"&gt;International Workshop on Requirements Analysis (IWRA 2010)&lt;/a&gt; at &lt;a href="http://www.mdx.ac.uk/"&gt;Middlesex University&lt;/a&gt;. Tom's Keynote, entitled&lt;i&gt; What's Wrong with Requirements Methods &lt;/i&gt;included many examples of software projects with scarily large budgets where the requirements were vague and focus on software form and function rather than concrete measurable business drivers. He offered a definition of Requirement: &lt;i&gt;Stakeholder Valued End-State&lt;/i&gt; and associated decomposition onto a hierarchy of requirement-types that is intended to be more useful than the ubiquitous functional and non-functional categories of requirements. Tom's recent work includes the requirements engineering language Planguage and the associated book &lt;a href="http://www.result-planning.com/Books"&gt;Competitive Engineering.&lt;/a&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-3586531567018796926?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/3586531567018796926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/09/tom-gilb-keynote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3586531567018796926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3586531567018796926'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/09/tom-gilb-keynote.html' title='Tom Gilb Keynote'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-8268935714512797352</id><published>2010-09-12T04:22:00.000-07:00</published><updated>2010-09-12T04:22:32.932-07:00</updated><title type='text'>Exam Howlers</title><content type='html'>This week the &lt;a href="http://www.timeshighereducation.co.uk/"&gt;Times Higher Education&lt;/a&gt; magazine published some US responses to &lt;a href="http://www.timeshighereducation.co.uk/story.asp?sectioncode=26&amp;amp;storycode=407920&amp;amp;c=2"&gt;UK Exam Howlers&lt;/a&gt;. A personal favourite from the UK:&lt;br /&gt;&lt;blockquote&gt;[A tutor] was asked for a reference via the following message: "Will you please be a referee for a job for which I am appalling?"&lt;/blockquote&gt;And from the US:&lt;br /&gt;&lt;blockquote&gt;[A] lecturer cited a student's scathing observtion that "Prof seems to think that he knows more than the students."&lt;/blockquote&gt;Reminds me of an eminent UK Professor who recalled a student's query during a lecture:&lt;br /&gt;&lt;blockquote&gt;"Sir, are you making all this stuff up?"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-8268935714512797352?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/8268935714512797352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/09/exam-howlers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8268935714512797352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8268935714512797352'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/09/exam-howlers.html' title='Exam Howlers'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-8145561149990169175</id><published>2010-09-04T02:38:00.000-07:00</published><updated>2010-09-04T02:38:20.679-07:00</updated><title type='text'>IEEE Software Special Issue: Multiparadigm Programming</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_GLspyVdb5eg/TIIRc3plXdI/AAAAAAAAAEc/TOcFcI0fGG0/s1600/IEEE_SW_multiparadigm_programming.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_GLspyVdb5eg/TIIRc3plXdI/AAAAAAAAAEc/TOcFcI0fGG0/s200/IEEE_SW_multiparadigm_programming.jpg" width="145" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://deanwampler.com/"&gt;Dean Wampler&lt;/a&gt; and I have guest edited&lt;a href="http://www.computer.org/portal/web/csdl/abs/mags/so/2010/05/mso201005toc.htm"&gt; the recent issue&lt;/a&gt; of &lt;a href="http://www.computer.org/portal/web/software/home"&gt;IEEE Software&lt;/a&gt; on Multiparadigm Programming. From the guest editors' introduction:&lt;br /&gt;&lt;br /&gt;Programming languages, frameworks, and  platforms require the developer to use a collection of provided  programming features—abstractions—to            express data, implement  desired calculations, interact with other technologies, create user  interfaces, and so on. A collection            of coherent, often  ideologically or theoretically based abstractions constitutes a                          &lt;em&gt;programming paradigm&lt;/em&gt;. Often, a given programming technology is based on one particular paradigm.         &lt;br /&gt;&lt;div class="abs-content-large"&gt;Well-known  examples include object-oriented, relational, functional,  constraint-based, theorem-proving, concurrent, imperative,             and declarative. Less well-known (or perhaps less well-defined) examples  include graphical, reflective, context-aware, rule-based,             and agent-oriented.         &lt;/div&gt;&lt;div class="abs-content-large"&gt;A  particular paradigm leads to a specific type of implementation style and  is best suited to certain types of applications.            Relational  programming benefits information-rich applications, whereas imperative  programming is commonly used to control            hardware. But today's  applications are seldom homogeneous. They are frequently complex  systems, made up of many subcomponents            that require a mixture  of technologies. Thus, using just one language technology and paradigm  is becoming much less common,            replaced by                          &lt;em&gt;multiparadigm programming&lt;/em&gt; in which the heterogeneous  application consists of several subcomponents, each implemented with an  appropriate paradigm and            able to communicate with other  subcomponents implemented with a different paradigm. When more than one  language is used, we            call this                         &lt;em&gt;polyglot&lt;/em&gt; ("many tongues") programming.         &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-8145561149990169175?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/8145561149990169175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/09/ieee-software-special-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8145561149990169175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8145561149990169175'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/09/ieee-software-special-issue.html' title='IEEE Software Special Issue: Multiparadigm Programming'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GLspyVdb5eg/TIIRc3plXdI/AAAAAAAAAEc/TOcFcI0fGG0/s72-c/IEEE_SW_multiparadigm_programming.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5059948164491514791</id><published>2010-08-10T07:58:00.000-07:00</published><updated>2010-08-10T07:58:17.238-07:00</updated><title type='text'>Defunctionalization</title><content type='html'>Olivier Danvy's paper describing a&lt;a href="http://www.brics.dk/RS/03/Abs/BRICS-RS-03-Abs/BRICS-RS-03-Abs.html#BRICS-RS-03-33"&gt; rational deconstruction of the SECD machine&lt;/a&gt; is very interesting. It observes that if a machine uses lambda-abstractions to delay computations then this is equivalent, through a process called &lt;a href="http://en.wikipedia.org/wiki/Defunctionalization"&gt;defunctionalization&lt;/a&gt;, to the use of stateful machine instructions and a separate auxiliary top-level interpreter. He uses this process to 'discover' the machine instructions of SECD. Effectively the free variables in the closures that are created in order to delay the computations are captured in data structures (the stateful instructions) that are subsequently fed to top-level functions. Defunctionalization was discovered by &lt;a href="http://en.wikipedia.org/wiki/John_C._Reynolds"&gt;John Reynolds &lt;/a&gt;and, in a way, shows that higher-order functions are not fundamental to computation (a theory advocated&amp;nbsp; by &lt;a href="http://en.wikipedia.org/wiki/Joseph_Goguen"&gt;Joseph Goguen&lt;/a&gt;). However, writing programs in a defunctionalized style would be a real pain because all lambdas would have to lifted to the top-level. So perhaps higher-order functions are fundamental to programming after all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5059948164491514791?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5059948164491514791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/08/defunctionalization.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5059948164491514791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5059948164491514791'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/08/defunctionalization.html' title='Defunctionalization'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-449463129952935942</id><published>2010-07-29T23:17:00.000-07:00</published><updated>2010-07-29T23:17:42.607-07:00</updated><title type='text'>Lots of Tiny Languages - All Different</title><content type='html'>The &lt;a href="http://www.technologyreview.com/computing/25854/"&gt;MIT Technology Review&lt;/a&gt; reports on the &lt;a href="http://emerginglangs.com/"&gt;Emerging Language Camp&lt;/a&gt;. This looks like an indication of things to come. The article makes an interesting point that existing mainstream languages were designed for computational architectures that are rapidly becoming outdated. Software systems&amp;nbsp; are no longer based on single-processors, single-heaps, and reliable in-core execution paradigms. There seems to be increasing interest in languages that are not exclusively based around the all-conquering OO message-and-state mechanisms that emerged in the 80's. Part of the change seems to be driven by the rise of mobile devices and new styles of device interface. Is the era of the 'big language' (C++, Java) over?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-449463129952935942?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/449463129952935942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/07/lots-of-tiny-languages-all-different.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/449463129952935942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/449463129952935942'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/07/lots-of-tiny-languages-all-different.html' title='Lots of Tiny Languages - All Different'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-1828148062279334600</id><published>2010-07-03T03:13:00.000-07:00</published><updated>2010-07-03T03:13:29.313-07:00</updated><title type='text'>XCRI</title><content type='html'>I attended a meeting yesterday that introduced me to &lt;a href="http://www.xcri.org/"&gt;XCRI&lt;/a&gt;. This is an XML format for representing course information so that institutions can provide an XCRI feed, thereby publicizing their offerings for others to integrate into applications. Perhaps we are heading for a situation where it will be possible to specify your detailed HE requirements (skills, interests, teaching and learning methods) and for a system to generate matches, automatically enroll, produce learning portfolios, etc. Or perhaps its just a way for the UK government to measure and manage HE provision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-1828148062279334600?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/1828148062279334600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/07/xcri.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/1828148062279334600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/1828148062279334600'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/07/xcri.html' title='XCRI'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-6934864163598507225</id><published>2010-07-01T11:04:00.000-07:00</published><updated>2010-07-01T11:05:34.524-07:00</updated><title type='text'>Cycling for Charity</title><content type='html'>My brother-in-law has just set off on his cycle tour from John O'Groats to Lands End.&amp;nbsp; He is raising money for the Psoriasis Association. You can follow his progress via the following &lt;a href="http://jogle-sav.blogspot.com/"&gt;blog&lt;/a&gt; where there are &lt;a href="http://uk.virginmoneygiving.com/fundraiser-web/fundraiser/showFundraiserProfilePage.action?userUrl=ECC_JOGLE&amp;amp;isTeam=true"&gt;further details&lt;/a&gt; if you wish to support the charity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-6934864163598507225?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/6934864163598507225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/07/cycling-for-charity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/6934864163598507225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/6934864163598507225'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/07/cycling-for-charity.html' title='Cycling for Charity'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-4941965950203745717</id><published>2010-06-16T09:38:00.000-07:00</published><updated>2010-06-16T09:41:10.044-07:00</updated><title type='text'>Modular Interpreters</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GLspyVdb5eg/TBj7sUUQJ4I/AAAAAAAAADo/S5AQNccGF_s/s1600/Machine1.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="256" src="http://4.bp.blogspot.com/_GLspyVdb5eg/TBj7sUUQJ4I/AAAAAAAAADo/S5AQNccGF_s/s320/Machine1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;As part of the Language Factories work that &lt;a href="http://tratt.net/laurie/"&gt;Laurie Tratt&lt;/a&gt; and I started a while back, I have done some experiments to see whether a language family can be implemented using XPL and how far the differences between members of the family can be hidden. My experiment involved defining a language factory for state-machine languages. Such a factory is shown on the right where syntactic variations include the rules for the transition labels, and semantic variations include whether machine execution is single-threaded or multi-threaded and whether the labels are processed. I was particularly interested in designing a single machine interpreter that works with many different implementations. This turns out to have some relationship with &lt;a href="http://en.wikipedia.org/wiki/Monad_%28functional_programming%29"&gt;monads&lt;/a&gt; and &lt;a href="http://portal.acm.org/citation.cfm?id=199528"&gt;modular interpreters&lt;/a&gt; although I have not developed this with any rigour. A short article describing how this is implemented is &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Modular%20Interpreters.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-4941965950203745717?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/4941965950203745717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/06/modular-interpreters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4941965950203745717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4941965950203745717'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/06/modular-interpreters.html' title='Modular Interpreters'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GLspyVdb5eg/TBj7sUUQJ4I/AAAAAAAAADo/S5AQNccGF_s/s72-c/Machine1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-8586221892141863906</id><published>2010-06-04T20:34:00.000-07:00</published><updated>2010-06-04T20:34:48.689-07:00</updated><title type='text'>Workshop on OCL and Textual Modelling</title><content type='html'>&lt;a href="http://feeds2.feedburner.com/ModelingLanguages-blog"&gt;Jordi&lt;/a&gt; has &lt;a href="http://modeling-languages.com/blog/content/workshop-ocl-and-textual-modelling"&gt;blogged&lt;/a&gt; about out up-coming &lt;a href="http://modeling-languages.com/events/OCLWorkshop2010/calls.html"&gt;workshop on OCL and Textual Modelling&lt;/a&gt; at &lt;a href="http://models2010.ifi.uio.no/"&gt;MODELS 10&lt;/a&gt;. Please submit a paper and/or bring this event to the attention of your colleagues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-8586221892141863906?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/8586221892141863906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/06/workshop-on-ocl-and-textual-modelling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8586221892141863906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8586221892141863906'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/06/workshop-on-ocl-and-textual-modelling.html' title='Workshop on OCL and Textual Modelling'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-74415703326608595</id><published>2010-06-03T10:59:00.000-07:00</published><updated>2010-06-03T11:00:07.246-07:00</updated><title type='text'>Pune: Raining, Singing and a Grumpy Chef</title><content type='html'>A short visit to Pune where it had been raining so hard it had brought branches of trees down onto the road. My colleague Shakil Shaikh took me to a restaurant hidden in the middle of the hotel. The louder the band played the grumpier the chef looked (despite being asked to say 'panir'). Off to New Delhi....&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GLspyVdb5eg/TAftF4pa6dI/AAAAAAAAADY/VPj744RoxnA/s1600/Singing.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://3.bp.blogspot.com/_GLspyVdb5eg/TAftF4pa6dI/AAAAAAAAADY/VPj744RoxnA/s320/Singing.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_GLspyVdb5eg/TAftAyB7ncI/AAAAAAAAADQ/HEpbPnSJBLc/s1600/Shakil_Shaikh.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_GLspyVdb5eg/TAftAyB7ncI/AAAAAAAAADQ/HEpbPnSJBLc/s320/Shakil_Shaikh.jpg" width="214" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/TAftLDfA-9I/AAAAAAAAADg/OFv7MjFwsfM/s1600/Grumpy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="428" src="http://2.bp.blogspot.com/_GLspyVdb5eg/TAftLDfA-9I/AAAAAAAAADg/OFv7MjFwsfM/s640/Grumpy.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-74415703326608595?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/74415703326608595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/06/pune-raining-singing-and-grumpy-chef.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/74415703326608595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/74415703326608595'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/06/pune-raining-singing-and-grumpy-chef.html' title='Pune: Raining, Singing and a Grumpy Chef'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GLspyVdb5eg/TAftF4pa6dI/AAAAAAAAADY/VPj744RoxnA/s72-c/Singing.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-7564365141067751</id><published>2010-06-02T00:31:00.000-07:00</published><updated>2010-06-02T00:32:03.327-07:00</updated><title type='text'>Mumbai: Shopping</title><content type='html'>After finishing in Mumbai we went for some retail therapy. Mrs Bacha is a formidable shopper and seems to know all the shopkeepers. She made sure of 'local prices' in a fantastic carpet shop. Now off to &lt;a href="http://en.wikipedia.org/wiki/Pune"&gt;Pune&lt;/a&gt; 'the Oxford of the East' (which seems to be pronounced 'poon-a' and 'poon-ay' interchangeably. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GLspyVdb5eg/TAYHw9RYMaI/AAAAAAAAADA/8ltp5wxbVd8/s1600/Mrs+Bachi+Shopping.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_GLspyVdb5eg/TAYHw9RYMaI/AAAAAAAAADA/8ltp5wxbVd8/s320/Mrs+Bachi+Shopping.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GLspyVdb5eg/TAYH8l3o1rI/AAAAAAAAADI/gfPKJfj5YoM/s1600/Shopping.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_GLspyVdb5eg/TAYH8l3o1rI/AAAAAAAAADI/gfPKJfj5YoM/s320/Shopping.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-7564365141067751?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/7564365141067751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/06/mumbai-shopping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7564365141067751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7564365141067751'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/06/mumbai-shopping.html' title='Mumbai: Shopping'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GLspyVdb5eg/TAYHw9RYMaI/AAAAAAAAADA/8ltp5wxbVd8/s72-c/Mrs+Bachi+Shopping.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-4182841249237271959</id><published>2010-05-31T07:48:00.000-07:00</published><updated>2010-05-31T07:50:56.714-07:00</updated><title type='text'>Mumbai: Tube Maps and Umbrellas</title><content type='html'>Met the lovely people at the Mumbai Mdx Office. Mrs Bharati Bacha, a staff line up with myself (to prove I'm really here), a tube map (to prepare students for London sight-seeing). When I arrived back at the hotel a wedding was starting. The groom is perched on a horse with an umbrella. Amazingly the horse (and groom) were unfazed by deafening drums while waiting to be introduced to the bride (the groom not the horse).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GLspyVdb5eg/TAPK0BceOII/AAAAAAAAACo/DDRujCpX8Fs/s1600/Me+at+Mdx+Office+Mumbai.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="212" src="http://4.bp.blogspot.com/_GLspyVdb5eg/TAPK0BceOII/AAAAAAAAACo/DDRujCpX8Fs/s320/Me+at+Mdx+Office+Mumbai.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_GLspyVdb5eg/TAPIozE-ttI/AAAAAAAAACY/SXErBX_Wju0/s1600/Mrs+Bharati+Bacha.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://3.bp.blogspot.com/_GLspyVdb5eg/TAPIozE-ttI/AAAAAAAAACY/SXErBX_Wju0/s320/Mrs+Bharati+Bacha.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GLspyVdb5eg/TAPLUpNnXVI/AAAAAAAAAC4/7vRo14jsPYY/s1600/Waiting+to+get+married.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_GLspyVdb5eg/TAPLUpNnXVI/AAAAAAAAAC4/7vRo14jsPYY/s400/Waiting+to+get+married.jpg" width="265" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_GLspyVdb5eg/TAPLKqnNmrI/AAAAAAAAACw/SQJRKCCqs1g/s1600/Tube+Map.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://1.bp.blogspot.com/_GLspyVdb5eg/TAPLKqnNmrI/AAAAAAAAACw/SQJRKCCqs1g/s320/Tube+Map.jpg" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-4182841249237271959?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/4182841249237271959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/mumbai-tube-maps-and-umbrellas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4182841249237271959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4182841249237271959'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/mumbai-tube-maps-and-umbrellas.html' title='Mumbai: Tube Maps and Umbrellas'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GLspyVdb5eg/TAPK0BceOII/AAAAAAAAACo/DDRujCpX8Fs/s72-c/Me+at+Mdx+Office+Mumbai.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-3514432466122851864</id><published>2010-05-30T04:15:00.000-07:00</published><updated>2010-05-30T04:15:27.404-07:00</updated><title type='text'>Mumbai: Beaches, Taxis and Buried Treasure</title><content type='html'>Arrived at Mumbai for a week long visit. The hotel is on the beach, which was quite full earlier on, however this photo seems to make it look fairly empty:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GLspyVdb5eg/TAJGgPm7vEI/AAAAAAAAACA/V4AItYpIVgY/s1600/mumbai+beach2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://4.bp.blogspot.com/_GLspyVdb5eg/TAJGgPm7vEI/AAAAAAAAACA/V4AItYpIVgY/s320/mumbai+beach2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The front of the hotel is full of taxis, however not all of them seem to be reliable:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/TAJHxlgvZ3I/AAAAAAAAACI/fKvIzQEkWEQ/s1600/broken+down2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GLspyVdb5eg/TAJHxlgvZ3I/AAAAAAAAACI/fKvIzQEkWEQ/s320/broken+down2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;At the back of the hotel is an area of palm trees. I wonder if this is where the treasure is buried (not quite &lt;a href="http://en.wikipedia.org/wiki/It%27s_a_Mad,_Mad,_Mad,_Mad_World"&gt;a 'Big W'&lt;/a&gt;)?&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/TAJIW1raeHI/AAAAAAAAACQ/h7iZKaOduC0/s1600/the+big+w2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GLspyVdb5eg/TAJIW1raeHI/AAAAAAAAACQ/h7iZKaOduC0/s320/the+big+w2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-3514432466122851864?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/3514432466122851864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/mumbai-beaches-taxis-and-buried.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3514432466122851864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3514432466122851864'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/mumbai-beaches-taxis-and-buried.html' title='Mumbai: Beaches, Taxis and Buried Treasure'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GLspyVdb5eg/TAJGgPm7vEI/AAAAAAAAACA/V4AItYpIVgY/s72-c/mumbai+beach2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-599968668778928939</id><published>2010-05-26T12:51:00.000-07:00</published><updated>2010-05-26T12:51:45.671-07:00</updated><title type='text'>Objects and Recursion</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;I met &lt;a href="http://wcook.blogspot.com/"&gt;William Cook&lt;/a&gt; last year at &lt;a href="http://www.oopsla.org/oopsla2009/"&gt;OOPSLA 09&lt;/a&gt; (renamed &lt;a href="http://www.splashcon.org/"&gt;SPLASH&lt;/a&gt; as of this year) whose presentation and subsequent blog entry "&lt;i&gt;objects use  recursion everywhere&lt;/i&gt;" reminded me of work I did years ago on a pictorial representation of how recursion occurs in objects due to 'self' and 'inheritance' (leading to a colleague at the time commenting on how it reminded them of a &lt;a href="http://en.wikipedia.org/wiki/Klein_bottle"&gt;Klein Bottle&lt;/a&gt;). &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_GLspyVdb5eg/S_11ZO-FoCI/AAAAAAAAABI/oCHBTEjn0Dc/s1600/smalltalk_and_environment.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="72" src="http://1.bp.blogspot.com/_GLspyVdb5eg/S_11ZO-FoCI/AAAAAAAAABI/oCHBTEjn0Dc/s320/smalltalk_and_environment.jpg" width="320" /&gt;&lt;/a&gt;The basic idea is that an object is a rod of methods surrounded by an  environment of variable bindings as shown in cross section on the left. All methods can reference 'self' which can be shown as a hole that is drilled through the methods rod:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/S_12mf-RvxI/AAAAAAAAABQ/Gxne87bklno/s1600/self_hole.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://2.bp.blogspot.com/_GLspyVdb5eg/S_12mf-RvxI/AAAAAAAAABQ/Gxne87bklno/s200/self_hole.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;At this stage, the 'self hole' is waiting for an object to be supplied. Any object that conforms to the required interface can be supplied. Recursion occurs because the object that is used to fill the hole is the object itself...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...this is achieved by grabbing the top of the object, pulling it round and  feeding the object into its own 'self hole'...&lt;br /&gt;grab the top ...&lt;img border="0" src="http://3.bp.blogspot.com/_GLspyVdb5eg/S_13vVAiIJI/AAAAAAAAABY/zWsj3gLwX_8/s320/pull_round.jpg" /&gt; ...pull it round... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img border="0" src="http://4.bp.blogspot.com/_GLspyVdb5eg/S_135hPGqMI/AAAAAAAAABg/nI4vfZWk3qc/s320/and_round.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...feed the object in and keep going...&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_GLspyVdb5eg/S_14qqf2JgI/AAAAAAAAABo/oMqA8PskKcc/s320/feed_up.jpg" width="304" /&gt;&lt;br /&gt;&lt;br /&gt;This trick can be be used to explain super too. Instead of onw hole there are two holes:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GLspyVdb5eg/S_15gwMfZeI/AAAAAAAAABw/gD2dxqnWUDg/s1600/super.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GLspyVdb5eg/S_15gwMfZeI/AAAAAAAAABw/gD2dxqnWUDg/s320/super.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Inheritance means fitting rods together:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GLspyVdb5eg/S_15sC8viII/AAAAAAAAAB4/c_B3K8hmd1Y/s1600/inherit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_GLspyVdb5eg/S_15sC8viII/AAAAAAAAAB4/c_B3K8hmd1Y/s320/inherit.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;This idea was used to define a semantics for Smalltalk. The details can be found &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/The%20Semantics%20of%20Smalltalk.pdf"&gt;here&lt;/a&gt; &lt;b&gt;but beware&lt;/b&gt;, it is a scanned document and is over 60MB. This slightly less esoteric (but a similarly large scanned document) &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Intro%20to%20OOP%20%28I%29.pdf"&gt;set of notes&lt;/a&gt; on OOP and recursion is a useful introduction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-599968668778928939?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/599968668778928939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/objects-and-recursion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/599968668778928939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/599968668778928939'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/objects-and-recursion.html' title='Objects and Recursion'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GLspyVdb5eg/S_11ZO-FoCI/AAAAAAAAABI/oCHBTEjn0Dc/s72-c/smalltalk_and_environment.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5246133579153780924</id><published>2010-05-21T07:48:00.000-07:00</published><updated>2010-05-21T07:48:42.348-07:00</updated><title type='text'>Operators, Precedence and Associativity</title><content type='html'>Expression languages often come with infix operators. For example:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;x + y * z&lt;/span&gt;&lt;/blockquote&gt;It would be useful to be able to write a&lt;i&gt; &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Modules.pdf"&gt;language module&lt;/a&gt;&lt;/i&gt; that abstracts the key properties of expression languages so that the module can be reused in different contexts. One of the challenges is to abstract the precedence and associativity rules in order to reflect the following two parse outcomes:&lt;br /&gt;&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;x + (y * z) &lt;span style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;and &lt;/span&gt;(x + y) * z&lt;/span&gt;&lt;/blockquote&gt;Traditional approaches to parsing often use two approaches: (1) encode the precedence rules into the grammar rules; (2) write the parser so that it knows about certain types of operator. Both approaches have disadvantages: (1) complex grammar rules; (2) complex parsing machinery. The XPL parser, in conjunction with the language module approach, &lt;i&gt;&lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Operators.pdf"&gt;allows this to be achieved fairly painlessly&lt;/a&gt;&lt;/i&gt; without having to (1) encode the precedence in the rules; or (2) requiring the parser to know about operators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5246133579153780924?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5246133579153780924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/operators-precedence-and-associativity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5246133579153780924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5246133579153780924'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/operators-precedence-and-associativity.html' title='Operators, Precedence and Associativity'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-7160912780637124321</id><published>2010-05-14T06:25:00.000-07:00</published><updated>2010-05-14T06:25:45.351-07:00</updated><title type='text'>Language Modules</title><content type='html'>A language consists of syntax and semantics. The concrete syntax can be defined using a grammar and actions in grammar rules can provide a language with a semantics. For example, a grammar for a simple integer expression language can evaluate the expressions as the parse progresses. However,  fixing the semantics of a language too early means that the language cannot easily be viewed as a &lt;i&gt;reusable module&lt;/i&gt;. Why would we want reusable language modules? A key driver is that language engineering has become an increasingly important part of system engineering. Modern programming languages provide facilities for extensibility and &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;domain specific languages&lt;/a&gt; are developed as part of system architectures; therefore there are increasing opportunities for taking parts of one language and using them as the basis for another language.&lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Modules.pdf"&gt; Language modules&lt;/a&gt; and &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/language_factories.pdf"&gt;language factories&lt;/a&gt; aim to&amp;nbsp; develop an understanding of composibility and reusability in language engineering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-7160912780637124321?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/7160912780637124321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/language-modules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7160912780637124321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/7160912780637124321'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/language-modules.html' title='Language Modules'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-4072516329859077633</id><published>2010-05-09T12:06:00.000-07:00</published><updated>2010-05-09T12:08:53.886-07:00</updated><title type='text'></title><content type='html'>Sadly, &lt;a href="http://en.wikipedia.org/wiki/Peter_J._Landin"&gt;Peter Landin&lt;/a&gt; died last year after a short illness. Peter was my PhD supervisor and was a huge influence on myself and many others as recalled &lt;a href="http://www.springerlink.com/content/m8m8328v6724kw18/"&gt;here&lt;/a&gt;. Peter was responsible for a number of very important discoveries relating to Programming and Programming Languages. Although many of these were in the 1960s and 1970s, he was active throughout the time I knew him in the 90s and early 00s when he was developing the foundation of a topic he called Calculations:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;calculations&lt;/i&gt; seek to characterize the concept of what a  program &lt;i&gt;does&lt;/i&gt; without being prescriptive about how the desired  behaviour is achieved. By providing a way of abstractly capturing  program             behaviour, calculations offer: an approach to program  analysis, an approach to designing programs based on the desired  behaviour,             and a new approach to teaching about programming, [...] calculations are a missing concept in the study and             teaching of Computing. &lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GLspyVdb5eg/S-cGp0Eri3I/AAAAAAAAAA4/3ON-BJXd5HQ/s1600/calc9.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_GLspyVdb5eg/S-cGp0Eri3I/AAAAAAAAAA4/3ON-BJXd5HQ/s200/calc9.png" width="182" /&gt;&lt;/a&gt;&lt;/div&gt;A calculation is a historical record of what went on when a program executed with respect to some specific data items. An example calculation showing mutually dependent processing of integer streams is shown on the right. Peter's notes on calculations have been typed up and&lt;a href="http://www.springerlink.com/content/y082873411x03334/"&gt; recently published&lt;/a&gt; in the Journal of Higher-Order and Symbolic Computation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-4072516329859077633?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/4072516329859077633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/sadly-peter-landin-died-last-year-after.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4072516329859077633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4072516329859077633'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/sadly-peter-landin-died-last-year-after.html' title=''/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GLspyVdb5eg/S-cGp0Eri3I/AAAAAAAAAA4/3ON-BJXd5HQ/s72-c/calc9.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-3688543418714839830</id><published>2010-05-05T10:08:00.000-07:00</published><updated>2010-05-05T10:53:09.850-07:00</updated><title type='text'>Introducing Features for Superlanguages</title><content type='html'>&lt;span lang="EN-US"&gt;Modern programming languages increasingly contain features that allow the host language system to be extended by the programmer. The requirements for extensibility stem from a desire to allow problem and solution domain features to be represented directly or &lt;span style="font-style: italic;"&gt;declaratively&lt;/span&gt; in the program and for the execution engine of the host language to directly execute new features, thereby having knowledge of the language extensions. Features such as meta-programming in Smalltalk, the CLOS MOP, reflection in LISP and Java, Java Annotations, C++ Templates etc., in addition to features of more specialized languages, all offer various ways to achieve extensibility. However these languages are complex, and extensibility features are often incomplete. We will use the term &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Superlanguages.pdf"&gt;&lt;span style="font-style: italic;"&gt;superlanguage&lt;/span&gt;&lt;/a&gt; to describe a programming system that can be extended. This article is the first of a series that describes a simple core language that captures the essential features of being a superlanguage and shows examples of how it can be used to build languages from modular units.&lt;br /&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span lang="EN-US"&gt;A superlanguage offers the following features: &lt;/span&gt;&lt;/p&gt;    &lt;ul&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:14pt;"  lang="EN-US" &gt;&lt;span style=""&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=""&gt;&lt;span lang="EN-US"&gt;Concrete syntax processing&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt;. Such a feature must allow new language constructs to be defined.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:14pt;"  lang="EN-US" &gt;&lt;span style=""&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=""&gt;&lt;span lang="EN-US"&gt;First-class language modules&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt;. Language definitions should be data values, subject to normal scoping rules, parametric etc.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:14pt;"  lang="EN-US" &gt;&lt;span style=""&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;i style=""&gt;&lt;span lang="EN-US"&gt;Meta-Programming&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt;. Arbitrary computations can be performed when processing syntax in order to process declarative language constructs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:14pt;"  lang="EN-US" &gt;&lt;span style=""&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;i style=""&gt;&lt;span lang="EN-US"&gt;Access to the abstract syntax ADT&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt; of host programming language that can be used to construct and transform arbitrary programs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:14pt;"  lang="EN-US" &gt;&lt;span style=""&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=""&gt;&lt;span lang="EN-US"&gt;Control over the scope of languages&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt; so that, once defined, a new language feature can be placed in scope for a given extent of program text.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US"&gt;The ability to &lt;i style=""&gt;construct recursive definitions&lt;/i&gt; including those that involve grammars and language constructs.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;This is the first in a series of posts that analyze essential features of superlanguages. More detail about superlanguages and a simple example language is found &lt;a href="http://www.eis.mdx.ac.uk/staffpages/tonyclark/Papers/Superlanguages.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-3688543418714839830?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/3688543418714839830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/05/introducing-features-for-superlanguages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3688543418714839830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3688543418714839830'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/05/introducing-features-for-superlanguages.html' title='Introducing Features for Superlanguages'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-2792671108105363713</id><published>2010-04-25T02:33:00.000-07:00</published><updated>2010-04-25T08:57:28.754-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GLspyVdb5eg/S9QNZU0hW1I/AAAAAAAAAAw/bsQo4uQh3vw/s1600/250px-Logicomix_cover.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 229px; height: 320px;" src="http://1.bp.blogspot.com/_GLspyVdb5eg/S9QNZU0hW1I/AAAAAAAAAAw/bsQo4uQh3vw/s320/250px-Logicomix_cover.jpg" alt="" id="BLOGGER_PHOTO_ID_5464006976644143954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I came across &lt;a href="http://en.wikipedia.org/wiki/Logicomix"&gt;&lt;span style="font-style: italic;"&gt;Logicomix &lt;/span&gt;&lt;/a&gt;when browsing in a book store at St Pancras railway station. Amazingly, it is a graphic novel about the logical foundations of Mathematics told from the perspective of Bertrand Russell. I have not encountered graphic novels before but this is a fantastic introduction to the subject told with great pace and verve. Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-2792671108105363713?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/2792671108105363713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2010/04/i-came-across-logicomix-when-browing-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2792671108105363713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/2792671108105363713'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2010/04/i-came-across-logicomix-when-browing-in.html' title=''/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GLspyVdb5eg/S9QNZU0hW1I/AAAAAAAAAAw/bsQo4uQh3vw/s72-c/250px-Logicomix_cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-8004321127101124226</id><published>2009-11-24T14:41:00.000-08:00</published><updated>2009-11-24T14:43:04.158-08:00</updated><title type='text'>Refuctoring</title><content type='html'>A Tweet by Eelco Visser pointed at a presentation by Jason Gorman on &lt;a href="http://www.waterfall2006.com/gorman.html"&gt;Refuctoring&lt;/a&gt;. Very very funny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-8004321127101124226?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/8004321127101124226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2009/11/refuctoring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8004321127101124226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/8004321127101124226'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2009/11/refuctoring.html' title='Refuctoring'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-6889853038768481340</id><published>2009-10-26T12:50:00.001-07:00</published><updated>2009-10-26T13:05:15.199-07:00</updated><title type='text'>Language Components and Language Factories</title><content type='html'>Currently at &lt;a href="http://www.oopsla.org/oopsla2009/"&gt;OOPSLA 09&lt;/a&gt; and have just scribed for the &lt;a href="http://www.dsmforum.org/events/DSM09/"&gt;DSM 09 Workshop&lt;/a&gt; and co-organized the &lt;a href="http://www.industrialized-software.org/kiss-oopsla-2009"&gt;3rd KISS workshop&lt;/a&gt;. Interesting that in both these workshops there seems a great deal of interest in language components. This chimes with &lt;a href="http://planet-sl.org/sle-conference/index.php?option=com_content&amp;amp;task=view&amp;amp;id=143&amp;amp;Itemid=208"&gt;Role-based Approach Towards Modular Language Engineering&lt;/a&gt; presented at &lt;a href="http://planet-sl.org/sle2009/"&gt;SLE 09&lt;/a&gt;. Domain Specific Languages researchers seems to be looking for a way to define languages using reusable fragments. Of course there is no consensus on what a language component is, but the term 'semantics' comes up alot. &lt;a href="http://tratt.net/laurie/"&gt;Laurie Tratt&lt;/a&gt; and are working on this issue and have termed the overall approach 'Language Factories'. &lt;a href="http://itcentre.tvu.ac.uk/%7Eclark/Papers/language_factories.pdf"&gt;Our paper&lt;/a&gt; is to be presented at Onward! 09.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-6889853038768481340?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/6889853038768481340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2009/10/language-components-and-language.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/6889853038768481340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/6889853038768481340'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2009/10/language-components-and-language.html' title='Language Components and Language Factories'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-5082129797965969542</id><published>2009-10-21T00:24:00.000-07:00</published><updated>2009-10-21T00:35:01.365-07:00</updated><title type='text'>How to Define a DSL</title><content type='html'>Markus Voelter has written an article about &lt;a href="http://www.blogger.com/Best%20Practices%20for%20DSLs%20and%20Model-Driven%20Development"&gt;Best practices for DSLs and Model Driven Development&lt;/a&gt;. The article lists and analyses approaches to the development of DSLs and gives them a point score based on whether the author thinks they work or not. Lots of interesting ideas and good advice. I'm not sure I agree with all of them. On one point: how general purpose should a DSL be? I think this is tricky. In the days before DSLs were called DSLs, I was taught to start with a very small general purpose language with a well defined semantics and gradually sugar both syntax and semantics until it had been transformed into the required language. This approach seems to achieve both generality and specificity at the same time whilst being a repeatable step-by-step process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-5082129797965969542?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/5082129797965969542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2009/10/markus-voelter-has-written-article.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5082129797965969542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/5082129797965969542'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2009/10/markus-voelter-has-written-article.html' title='How to Define a DSL'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-4346142958433985310</id><published>2009-07-16T05:37:00.001-07:00</published><updated>2009-07-16T05:42:17.903-07:00</updated><title type='text'>Programming Sheep and Non-Programming Goats</title><content type='html'>Saeed Dehnadi and Richard Bornat have done some field work that claims to show that students aptitude for programming can be detected before a line of code is written. &lt;a href="http://www.cs.mdx.ac.uk/research/PhDArea/saeed/"&gt;Their approach&lt;/a&gt; involves a giving the students a programming test before starting a programming course. I recall being given a Swedish test in junior school to determine my aptitude for French and German.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-4346142958433985310?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/4346142958433985310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2009/07/programming-sheep-and-non-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4346142958433985310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/4346142958433985310'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2009/07/programming-sheep-and-non-programming.html' title='Programming Sheep and Non-Programming Goats'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-3281018630992848935</id><published>2009-07-14T10:41:00.001-07:00</published><updated>2009-07-14T10:44:07.326-07:00</updated><title type='text'>Teenage Media Behaviour</title><content type='html'>Dean Kramer pointed out this interesting profile of &lt;a href="http://media.ft.com/cms/c3852b2e-6f9a-11de-bfc5-00144feabdc0.pdf"&gt;teenage media behaviour&lt;/a&gt;.&lt;a href="http://media.ft.com/cms/c3852b2e-6f9a-11de-bfc5-00144feabdc0.pdf"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-3281018630992848935?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/3281018630992848935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2009/07/teenage-media-behaviour.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3281018630992848935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/3281018630992848935'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2009/07/teenage-media-behaviour.html' title='Teenage Media Behaviour'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1934380107719917056.post-1811839666047850540</id><published>2009-05-12T14:09:00.000-07:00</published><updated>2009-05-12T14:14:59.036-07:00</updated><title type='text'>Guy Steele Interviews John McCarthy, Father of Lisp</title><content type='html'>I had not seen this before: &lt;a href="http://www.infoq.com/interviews/Steele-Interviews-John-McCarthy"&gt;http://www.infoq.com/interviews/Steele-Interviews-John-McCarthy&lt;/a&gt;.  I particularly like the comment from John McCarthy that languages should have access to their own abstract syntax.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1934380107719917056-1811839666047850540?l=clarktony.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarktony.blogspot.com/feeds/1811839666047850540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clarktony.blogspot.com/2009/05/guy-steele-interviews-john-mccarthy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/1811839666047850540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1934380107719917056/posts/default/1811839666047850540'/><link rel='alternate' type='text/html' href='http://clarktony.blogspot.com/2009/05/guy-steele-interviews-john-mccarthy.html' title='Guy Steele Interviews John McCarthy, Father of Lisp'/><author><name>Tony Clark</name><uri>http://www.blogger.com/profile/17524940196551802352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_GLspyVdb5eg/Sgnov9gDhiI/AAAAAAAAAAM/DG_NE2dfHQw/S220/Tony.jpg'/></author><thr:total>0</thr:total></entry></feed>
