<?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-10708536</id><updated>2011-08-03T03:04:09.842+02:00</updated><title type='text'>Thoughts of Oz</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10708536.post-7784615221128799438</id><published>2007-05-14T22:43:00.000+02:00</published><updated>2007-05-14T22:45:56.830+02:00</updated><title type='text'>DSL - good servant, bad master</title><content type='html'>I'm always happy to read, hear or watch anyone writing, talking or presenting about Language Oriented Programming and/or Domain Specific Languages as it is my favourite topic and I have a soft spot for it.&lt;br /&gt;I dipped into &lt;span class="post-author"&gt;&lt;a href="http://memeagora.blogspot.com/"&gt;Neal Ford&lt;/a&gt;'s &lt;/span&gt;&lt;a href="http://www.nealford.com/downloads/conferences/Neal_Ford-Language_Oriented_Programming-handouts.pdf"&gt;presentation&lt;/a&gt; he had at &lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-1589&amp;yr=2007&amp;amp;track=9"&gt;JavaOne  conference&lt;/a&gt; entirely alike (I was not that lucky to hear the talk, however).&lt;br /&gt;Neal goes through the classical examples of DSLs and explains the main benefits of LOP. Although it mostly describes nothing new, I did like reading it since it proofs more people is starting to be interested in it.&lt;br /&gt;I liked the word &lt;span style="font-style: italic;"&gt;context&lt;/span&gt; he mentioned when talking about the main feature of DSL. It is certainly true that every specific language has a domain that can also be called its context and that this context is always implicitly given for each single DSL.&lt;br /&gt;But that is not the main thing I want to draw one's attention to.&lt;br /&gt;&lt;br /&gt;One thing struck me. The &lt;span style="font-weight: bold;"&gt;simplicity&lt;/span&gt; with which he added new language constructs into this language. I was not struck positively, however.&lt;br /&gt;I remember having similarly mixed feelings with overloaded operators in C++. Although it was contributing when used smartly for creating a completely new library (everyone is familiar with &lt;span style="font-family:courier new;"&gt;iostream&lt;/span&gt; library and &lt;span style="font-family:courier new;"&gt;&lt;&lt;&lt;/span&gt; operator), it was disservicable when a programmer overloaded his/her operators recklessly (and headache to read such code). One could be sure with nothing.&lt;br /&gt;I believe - it is good to create new languages as it is good to create tools to help design these new languages. But I do not believe that most people will be able to easily create new languages in the &lt;span style="font-style: italic;"&gt;correct way&lt;/span&gt; where correct way means &lt;span style="font-style: italic;"&gt;not to mess things up&lt;/span&gt;.&lt;br /&gt;Not many SW developers are skilled enough to design good API and creating a new language is not an easier task either. Design of languages is a job for language designers -&gt; simple way of adding new constructs to a language is not a feature intended for broad public. Moreover I believe that every non-trivial language should contain guidelines and design patterns to use this language. Again, to bring such patterns up is not a task for an ordinary programmer.&lt;br /&gt;&lt;br /&gt;P.S. It is also worthy to see this &lt;a href="http://video.google.com/videoplay?docid=-6700435476213800355&amp;amp;hl=en"&gt;video&lt;/a&gt;, an older Neal's presentation about DSL/LOP - some slides seem familiar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-7784615221128799438?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/7784615221128799438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=7784615221128799438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/7784615221128799438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/7784615221128799438'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2007/05/dsl-good-servant-bad-master.html' title='DSL - good servant, bad master'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-116724443815050367</id><published>2006-12-27T19:28:00.000+01:00</published><updated>2006-12-27T19:33:58.163+01:00</updated><title type='text'>Internal vs. External Domain Specific Languages</title><content type='html'>&lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; mentioned at the end of &lt;a href="http://www.infoq.com/presentations/domain-specific-languages"&gt;his speech&lt;/a&gt; he had recently on &lt;a href="http://www.jaoo.dk/conference/"&gt;JAOO conference&lt;/a&gt;, it is difficult to gauge the impact of Language Workbenches and inherently External Domain Specific Languages. Although neither &lt;a href="http://www.intentsoft.com/"&gt;Intentional Software&lt;/a&gt; nor &lt;a href="http://www.jetbrains.com/mps/"&gt;JetBrains&lt;/a&gt; have revealed themselves yet what they are up to, I do not believe people will start creating external DSLs recklessly sooner or later. It is much too difficult to create a new language, its parser and teach this language other people, simpler the language can be.&lt;br /&gt;&lt;br /&gt;What I believe more is that people start to realize their APIs and libraries in currently used general-purpose languages should resemble DSLs more so other people can use these as a new language with all properties a new language has. Thus the resulting application will be much better layered and different aspects of the project separated while keeping one (or few) programming language(s) with one syntax only within whole project.&lt;br /&gt;&lt;br /&gt;The main difference will not be in programming, it will be in thinking about programming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-116724443815050367?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/116724443815050367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=116724443815050367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/116724443815050367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/116724443815050367'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2006/12/internal-vs-external-domain-specific.html' title='Internal vs. External Domain Specific Languages'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-112470018906807950</id><published>2005-10-25T23:09:00.000+02:00</published><updated>2005-10-25T23:36:54.033+02:00</updated><title type='text'>History lesson</title><content type='html'>At the end of 1997 I started my job in &lt;a href="http://www.ics.cz/page/index.php"&gt;ICS&lt;/a&gt; (a small company, I was their 10th member) as a programmer. My main task was developing simple database applications for small &lt;a href="http://www.ics.cz/page/davkovel.php"&gt;bar-code readers&lt;/a&gt; (handy terminals in other words). These times, such a terminal was a computer with a numerical keyboard, a simple BW display, processor and most importantly with a laser or a CCD reader for reading bar codes. Pretty much it looked like a mobile phone. The usual project life I was participating on consisted of these steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Verbal agreement&lt;/li&gt;&lt;li&gt;Specification&lt;/li&gt;&lt;li&gt;Price estimation&lt;/li&gt;&lt;li&gt;Implementation&lt;/li&gt;&lt;li&gt;Documentation&lt;/li&gt;&lt;li&gt;Operator training&lt;/li&gt;&lt;li&gt;Maintenance&lt;/li&gt;&lt;/ol&gt;Documentation was usually a more detailed version of specification and the implementation was copied from sources of previous projects. At the time I was working on the third (very similar) project, I wrote a general library of common functions for storing, manipulating and searching data in a file, for drawing menus and input forms, even an implementation of &lt;a href="http://en.wikipedia.org/wiki/Avl_tree"&gt;AVL tree&lt;/a&gt; for fast search. Although these times I didn't suspect anyting about LOP, this library was an instance of &lt;a href="http://en.wikipedia.org/wiki/Domain_Specific_Language"&gt;DSL &lt;/a&gt;for writing these simple database applications.&lt;br /&gt;Soon I realized that this policy must have been changed and offered &lt;a href="http://podkopcem.sweb.cz/index_eng.htm"&gt;my boss&lt;/a&gt; - director of this company - to develop a project for creating these applications. Thanks to his enthusiasm to new projects, the project really started and got financed.&lt;br /&gt;First I supposed the tool would be a very simple source code generator using already mentioned libraries. Later, the company's management decided on possibility of selling this product (without re-selling the compiler) so it must not have only generated source code, it must have also run the code. This is the final idea that got also implemented:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Graphical IDE that helps the bar code expert to create an application&lt;/li&gt;   &lt;li&gt;The application will be then downloaded into the bar code scanner&lt;/li&gt;   &lt;li&gt;In the scanner runs an interpreter of this application.&lt;/li&gt; &lt;/ol&gt; Although we didn't have a single notion of terms like DSL or a domain expert we soon realized that more easy the tool would be, less general problems would it solve and less steep the learning curve of this tool would be. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/progen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/progen.jpg" alt="Project structure" title="Project structure" border="0" /&gt;&lt;/a&gt;We were also aware of the opposite - a more complex tool would never be used by non-programmers. Balance these two opposite requirements was the most difficult task. Finally, we (me and three other university mates) made it happen. In the tool is possible to define several entities (data tables, menus, input forms, variables and procedures) while it checks if all references are correct; it supports easy refactoring and also allows debugging. From its very beginning it supported 4 different platforms (DOS, Windows, and 2 bar code readers) all programmed in C/C++.&lt;br /&gt;From this description is clear, I hope, that the tool (named &lt;span style="font-weight: bold;"&gt;Karel&lt;/span&gt; after our parrot that shared a dormitory room with us these times; later it was renamed to a less poetic name &lt;span style="font-weight: bold;"&gt;ProGen&lt;/span&gt;) is nothing less than an instance of DSL provided with an editor exactly as it is described in &lt;a href="http://www.onboard.jetbrains.com/is1/articles/04/10/lop/"&gt;this great Sergey's article&lt;/a&gt;.&lt;br /&gt;Interestingly, I started participating in LOP/DSL area even before I realized this area will once exist. I noticed recently that the same idea - unintentional creation and use of DSL - is expressed in the &lt;a href="http://blog.intentionalsoftware.com/intentional_software/2005/10/maximal_fun_pro.html"&gt;new blog entry&lt;/a&gt; of Intentsoft. If one was interested, here are screenshots of the tool:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/table.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/table.jpg" alt="Data definition" title="Data definition" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/menu.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/menu.jpg" alt="Menu definition" title="Menu definition" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/form.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/form.jpg" alt="Form definition" title="Form definition" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/variable.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/variable.jpg" alt="Variables list" title="Variables list" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/variable_edit.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/variable_edit.jpg" alt="Variable definition" title="Variable definition" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/procedure1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/procedure1.jpg" alt="Procedure definition" title="Procedure definition" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/command_search1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/command_search1.jpg" alt="Search command definition" title="Search command definition" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/debug.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/debug.jpg" alt="Program debugging" title="Program debugging" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/debug_table.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/debug_table.jpg" alt="Data watching during debugging" title="Data watching during debugging" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/warning.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/warning.jpg" alt="Correct reference check" title="Correct reference check" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4911/569/1600/rename.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4911/569/400/rename.jpg" alt="Refactoring" title="Refactoring" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-112470018906807950?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/112470018906807950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=112470018906807950' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/112470018906807950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/112470018906807950'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/10/history-lesson.html' title='History lesson'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110790419395466886</id><published>2005-09-15T23:49:00.000+02:00</published><updated>2005-10-03T21:12:21.526+02:00</updated><title type='text'>On the subject of SMS typing</title><content type='html'>Have you ever thought how different or how easy the life would be if we didn't use our bad habits from the past? Just imagine the disaster if scientists proposed new much safer rules of car driving and enlightened politicians tried to put it in use even though it was much easier than the way cars are driven now. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/5/5f/Sweden1967.jpg"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 199px; height: 300px" src="http://upload.wikimedia.org/wikipedia/en/5/5f/Sweden1967.jpg" border="0" alt="Sweden on the day when switching to the right-hand traffic" title="Sweden on the day when switching to the right-hand traffic"/&gt;&lt;/a&gt;The long-term advantages are indisputable, however, the immediate results will discourage any brave politicians. No wonder that Britons never changed their left-hand driving... As the old saying states - can't teach an old dog new tricks. &lt;br /&gt;Similar thing happens, although with no such severe consequences, when typing an SMS (for those who never typed an SMS - sending text messages from mobile phones is fairly popular in Europe, especially in countries like Czech where calls are so expensive). Why are the letters shown in alphabetical order on the keypad? Wouldn't be the typing easier when all vowels and consonants were shuffled as they are on a computer keyboard? Certainly would. Let's do it! Is there any courageous mobile phone producer?&lt;br /&gt;Isn't a similar thing happening now in computer programming? Aren't we learning new tricks? If only we could drop all old tricks and start learning the new ones easily.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110790419395466886?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110790419395466886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110790419395466886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790419395466886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790419395466886'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/09/on-subject-of-sms-typing.html' title='On the subject of SMS typing'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-112351824330938442</id><published>2005-08-18T22:14:00.000+02:00</published><updated>2005-08-19T11:20:35.193+02:00</updated><title type='text'>Mother Nature</title><content type='html'>Many great human activities and inventions were inspired by nature in the history and computer science is no exception. In &lt;a href="http://blog.intentionalsoftware.com/intentional_software/2005/03/notations_and_p.html"&gt;this contribution&lt;/a&gt;, Charles expresses an idea that is inspired by the Nature. He compares the program generation (a method that should bridge the wide gap between problem description and its solution and also a method that Intentional Software aims at) to DNA - a description (of a problem) that Nature uses to generate whole human being (the solution). This comparison is a good one, I believe. The only thing that remains is to find the right enzymes producing healthy individuals and no rejects.&lt;br /&gt;&lt;br /&gt;Speaking of inspiration by Nature, there are other ideas concerning computer science. Although the &lt;a href="http://en.wikipedia.org/wiki/Recapitulation_theory"&gt;Recapitulation theory&lt;/a&gt; is being abandoned lately, the connection between Ontogeny and Phylogeny undeniably remains.&lt;br /&gt;&lt;br /&gt;If we compared the evolution of programming to Phylogeny and an evolution of one program to Ontogeny, we would get a simmilar connection. If the Ontogeny copies some steps of Phylogeny (as the Recapitulation theory claims), does it mean that in different stages of one program development, its authors should use different styles of programming? Should we start with very basic elements, then design fundamental procedures, create modules and finally use objects and find cross-cutting concerns? Or does it mean that in every well-written more complex program a different programming styles will inevitably appear?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-112351824330938442?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/112351824330938442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=112351824330938442' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/112351824330938442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/112351824330938442'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/08/mother-nature.html' title='Mother Nature'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-112308907285734767</id><published>2005-08-03T18:33:00.000+02:00</published><updated>2005-08-03T19:13:18.686+02:00</updated><title type='text'>Aspect limits second time</title><content type='html'>Although &lt;a href="http://blog.intentsoft.com/"&gt;this blog&lt;/a&gt; was opened six months ago, I've discovered its existence only recently. Interestingly, Charles' &lt;a href="http://blog.intentionalsoftware.com/intentional_software/2005/05/notations_and_p.html"&gt;contribution&lt;/a&gt; little formalizes &lt;a href="http://oozy.blogspot.com/2005/02/aspect-limits.html"&gt;an idea&lt;/a&gt; I mentioned six months ago. When I wrote about AOP use-cases and its limits I didn't suspect that it's exactly what Charles means by an insufficient degree of freedom. AOP allows advice to be woven before, around or after a method call only. It does not offer the possibility of waving it into critical section entry or leaving or even into different branch instructions (if, switch, for, while, etc.).&lt;br /&gt;&lt;br /&gt;If one intends to implement the same use-case - monitoring of locks acquiring and releasing via AOP - she has different possibilities whether she monitors Java built-in &lt;span style="font-weight: bold;"&gt;synchronized&lt;/span&gt; keyword or whether she waves into methods of the Java 5.0 API (the class java.util.concurrent.locks.Lock). In the former case, she fails; in the latter one, she can do it.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-112308907285734767?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/112308907285734767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=112308907285734767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/112308907285734767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/112308907285734767'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/08/aspect-limits-second-time.html' title='Aspect limits second time'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110790293242837391</id><published>2005-04-01T11:00:00.000+02:00</published><updated>2005-04-01T17:44:13.080+02:00</updated><title type='text'>Why language designers' mother tongue is not English</title><content type='html'>Experts, journalists and laymen interested in Language Oriented Programming wonder why there is that few LOP researchers natively speaking in English. Look at faces of these great men - &lt;a href="http://www.jetbrains.com/img/photo_sd.jpg"&gt;Сергей Дмитриев&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/Russian_language"&gt;Russian&lt;/a&gt;), &lt;a href="http://www.informatik.fh-kl.de/%7Eeisenecker/img/eisenecker.jpg"&gt;prof. Ulrich Eisenecker&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/German_language"&gt;German&lt;/a&gt;), &lt;a href="http://www.codegeneration.net/images/czarnecki.jpg"&gt;Krzysztof Czarnecki&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/Polish_language"&gt;Polish&lt;/a&gt;), &lt;a href="http://osl.iu.edu/%7Etveldhui/pics/AwendaMay2003.jpg"&gt;Todd Veldhuizen&lt;/a&gt; (I don't really know, &lt;a href="http://en.wikipedia.org/wiki/Swedish_language"&gt;Swedish&lt;/a&gt; by the name), &lt;a href="http://nenya.ms.mff.cuni.cz/%7Epanuska/images/face.jpg"&gt;me&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/Czech_language"&gt;Czech&lt;/a&gt;) and many others. None of them uses English as his first language. Why is it so?&lt;br /&gt;&lt;br /&gt;The answer is as simple as the English grammar. You don't have to be really gifted to figure out what is behind. Here is the explanation.&lt;br /&gt;&lt;br /&gt;Obviously, everybody thinks in the language he/she speaks in, so no wonder that a scientist thinks in his/her native language. By comparing the English grammar with any other European language it can be easily seen that English cannot compete in complexity. Therein lies the rub! Evidently, more complex grammar scientists must learn during their childhood, more advantages they can profit from during their research. Just look at the simple English grammar and compare it with complex, irregular one of Sergey's native language or even with &lt;a href="http://www.myczechrepublic.com/czech_culture/trapasy/eng/medicine.html"&gt;the fourth toughest language in Europe&lt;/a&gt; or look at &lt;a href="http://www.simonyi.ox.ac.uk/images/Charles.jpg"&gt;Charles&lt;/a&gt; and its &lt;a href="http://en.wikipedia.org/wiki/Hungarian_language"&gt;Hungarian&lt;/a&gt; with all its forms, case suffixes, moods, etc.&lt;br /&gt;&lt;br /&gt;Basically, if someone wants to put himself up by his bootstrap in the field of LOP, he must learn Hungarian, Czech or Russian first. Pity is that there are no &lt;a href="http://en.wikipedia.org/wiki/Chinese_language"&gt;Chinese&lt;/a&gt; researchers so far. God help us!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110790293242837391?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110790293242837391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110790293242837391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790293242837391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790293242837391'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/04/why-language-designers-mother-tongue.html' title='Why language designers&apos; mother tongue is not English'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110865563997836076</id><published>2005-02-28T21:53:00.000+01:00</published><updated>2005-03-01T13:13:38.126+01:00</updated><title type='text'>Programming by copying</title><content type='html'>Recently, I've seen a demo on &lt;a href="http://www.subtextual.org/"&gt;programming by copying&lt;/a&gt;. It takes just few minutes to see it and it's really worth to do that. Although it might be seen as a funny plaything first, a much deeper idea is hidden behind that. Not many programmers would admit that programming by copying is a good idea. Nor do I. On the other hand, say frankly, how many times did you program by copying? I did many times. What's wrong on that? It shows a bad concept of your program. What's good on that? It's fast and accurate; the copy becomes an original piece of code immediately and  you can adjust the copied code instantly without worrying about side-effects at another parts of your program. Shortly, copying is good when jotting down a prototype of your idea and you don't really bother about misconceptions – you know your program will need refactoring in the productize version, but all theory, dear friend, is gray, but the golden tree of life springs ever green (as &lt;a href="http://en.wikipedia.org/wiki/Johann_Wolfgang_von_Goethe"&gt;a great German writer&lt;/a&gt; once said). We don't always have time to refactor it, do we? In such a case programs made by copying get to products. So, what's the hidden idea? Here it is – program is not only a piece of text and programming is not just typing of it. It shows that text editors are still a weak substitute of real program editors. If an editor tracked all changes made on the program and remembered which parts of the program were made by copies of another parts, the editor could refactor the program without programmer's help. Moreover, the editor would refactor program without making mistakes, it wouldn't forget any possible side-effects. &lt;a href="http://www.subtextual.org/demo1.html"&gt;The demo&lt;/a&gt; shows one way to do that in not real textual editor and in not really common way. Similar idea can be implemented into more &lt;a href="http://www.jetbrains.com/idea/"&gt;sophisticated&lt;/a&gt; and &lt;a href="http://www.eclipse.org/"&gt;common&lt;/a&gt; editor. Much in programming has been changed since time of &lt;a href="http://en.wikipedia.org/wiki/Alan_Turing"&gt;Turing&lt;/a&gt; but not the way we program. It's like making cars with hammer and sickle only! I'm not saying – using primitive tools for making cutting edge technologies is impossible, I'm saying – let's do something with it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110865563997836076?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110865563997836076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110865563997836076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110865563997836076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110865563997836076'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/02/programming-by-copying.html' title='Programming by copying'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110866066602894881</id><published>2005-02-17T22:18:00.000+01:00</published><updated>2005-02-18T11:03:01.000+01:00</updated><title type='text'>Aspect limits</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;Aspect Oriented Programming&lt;/a&gt; (as most of people interested in LOP already know) enriches the world of languages with cross-cutting concerns. Although the idea is not &lt;a href="http://www.parc.com/research/csl/projects/aspectj/default.html"&gt;new&lt;/a&gt;, it is still being heavily researched.&lt;br /&gt;Typical use cases of AOP are logging, debugging and error handling, these examples can be found in every reference to AOP. But, isn't it too little? What are the other use cases of AOP? What are the real production use cases? Even though error handling is used in products, hardly can it be considered as the main feature of a product. Transaction handling, synchronization in multi-threaded environments, &lt;a href="http://en.wikipedia.org/wiki/Lazy_initialization"&gt;lazy initialization&lt;/a&gt;, security; all these fields are certainly other areas where AOP can be used appropriately, but what else?&lt;br /&gt;The lack of AOP use cases may result from little usability of AOP features. Look at the logging - AOP can log any call or return of a method but it can't log other branch instructions (if/else, switch/case) - scarcely it can be used for full logging of a program flow.&lt;br /&gt;Similar limitation exists for AOP usability in synchronization - AOP cannot handle monitor lock/unlock (entering into/leaving from a critical section) - this keeps automatic deadlock prevention tools from being implemented.&lt;br /&gt;Although the main two AOP projects have joined &lt;a href="http://dev.eclipse.org/viewcvs/indextech.cgi/%7Echeckout%7E/aspectj-home/aj5announce.html"&gt;recently&lt;/a&gt; to work on new releases together, many things still remain to improve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110866066602894881?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110866066602894881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110866066602894881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110866066602894881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110866066602894881'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/02/aspect-limits.html' title='Aspect limits'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110790250735772233</id><published>2005-02-08T23:41:00.000+01:00</published><updated>2005-02-17T21:19:55.766+01:00</updated><title type='text'>Why we have used notations and why they are not necessary anymore</title><content type='html'>In &lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;pa=showpage&amp;amp;pid=247"&gt;this great article&lt;/a&gt;, I've read recently, is a very interesting belief: "We believe that next-generation programming systems will most likely store source code as XML, rather than as flat text. Programmers will not see or edit XML tags; instead, their editors will render these models to create human-friendly views, just like Web browsers and other WYSIWYG editors."&lt;br /&gt;This is certainly true. As soon as I read the sentence above, it was clear why we have used notations in programming. Do you also ask, why there were invented such rules as &lt;a href="http://en.wikipedia.org/wiki/Hungarian_notation"&gt;Hungarian notation&lt;/a&gt;, indentation, firstLetterOfEveryMethodNameInCapitals, CONSTANT_NAMES_UPPER_CASED, etc? Here is the answer - we didn't have the&lt;a href="http://www.jetbrains.com/idea/"&gt; right&lt;/a&gt; &lt;a href="http://www.eclipse.org/"&gt;tools&lt;/a&gt; those days. We were lack of expressiveness and all the notations were merely poor escapes from that mud. Now, when any programmer may express his/her ideas in the proper way, these notations are not as important as they were before. I'm not saying, stop using them, but in case you do, it's much easier to refactor all the pile you wrote now than it has ever been before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110790250735772233?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110790250735772233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110790250735772233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790250735772233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790250735772233'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/02/why-we-have-used-notations-and-why.html' title='Why we have used notations and why they are not necessary anymore'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110790001357972439</id><published>2005-02-08T23:01:00.000+01:00</published><updated>2005-02-09T17:26:10.396+01:00</updated><title type='text'>Create your jargon first</title><content type='html'>As has been posted by many &lt;a href="http://www.sergeydmitriev.com/"&gt;smart&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Charles_Simonyi"&gt;men&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Domain_Specific_Language"&gt;Domain Specific Languages&lt;/a&gt; will drive the world of programming in the near future. As another great &lt;a href="http://en.wikipedia.org/wiki/Picasso"&gt;artist&lt;/a&gt; said: "Bad artists copy, great artists steal", the best of us try to be great. Actually, what we do is stealing ideas from native languages – the ones not to be as artificial as programming languages are.&lt;br /&gt;What's going on in the native languages? They change, they adapt to the environment they are used in. People working in one environment tend to create their own jargon – to express ideas of that domain more easily, more accurately and more concisely.&lt;br /&gt;Domain specific languages relates to general languages as well as different kinds of jargon relates to different native languages.&lt;br /&gt;As an example of a domain we may know a lot about, look at creating the IT jargon. In English it is done in a fairly different way than doing the same in Czech. In English, old words get new meanings so words like computer, web, network, file, etc. having their original interpretation have suddenly a new meaning. In Czech, however, most of the IT jargon is created by borrowing words from English. Thus, just few jargon words stay originally Czech. Although creating a jargon may be done differently in various languages, the purpose is always the same – to be concise in that particular domain.&lt;br /&gt;Jargon of native languages is the proof that DSL is the future of programming. To express your ideas properly - &lt;a href="http://oozy.blogspot.com/2005/02/create-your-jargon-first.html"&gt;create your jargon first&lt;/a&gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110790001357972439?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110790001357972439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110790001357972439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790001357972439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110790001357972439'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/02/create-your-jargon-first.html' title='Create your jargon first'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10708536.post-110789562513115777</id><published>2005-02-08T21:46:00.000+01:00</published><updated>2005-02-11T10:05:47.946+01:00</updated><title type='text'>Welcome</title><content type='html'>This web will, hopefully, comment anything in subjects I'm keen on, especially in the domain of &lt;a href="http://en.wikipedia.org/wiki/Language_Oriented_Programming"&gt;Language Oriented Programming&lt;/a&gt; and related areas. As I'm not a native English speaker, but a native of &lt;a href="http://en.wikipedia.org/wiki/Bohemia"&gt;Bohemia&lt;/a&gt; and my mother tongue is &lt;a href="http://en.wikipedia.org/wiki/Czech_language"&gt;Czech&lt;/a&gt;, please, respect my English.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10708536-110789562513115777?l=oozy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oozy.blogspot.com/feeds/110789562513115777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10708536&amp;postID=110789562513115777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110789562513115777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10708536/posts/default/110789562513115777'/><link rel='alternate' type='text/html' href='http://oozy.blogspot.com/2005/02/welcome.html' title='Welcome'/><author><name>Petr Panuška</name><uri>http://www.blogger.com/profile/17425204554328139974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://nenya.ms.mff.cuni.cz/~panuska/images/face.jpg'/></author><thr:total>0</thr:total></entry></feed>
