<?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-20616594</id><updated>2011-12-15T02:50:29.588Z</updated><category term='dbc'/><category term='eiffel'/><category term='meyer'/><category term='smarteiffel'/><category term='oosc2'/><category term='conference'/><category term='eiffelstudio'/><category term='talk'/><category term='libraries'/><category term='advocacy'/><category term='gobo'/><title type='text'>Team Eiffel</title><subtitle type='html'>A place for serious Eiffel users to post their experiences, news and commentary. Email Roger (roger@eiffel.demon.co.uk) if you'd like to contribute. Anyone may post comments.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default?start-index=101&amp;max-results=100'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>240</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20616594.post-7869455504956972630</id><published>2011-08-02T23:37:00.002Z</published><updated>2011-08-02T23:44:34.598Z</updated><title type='text'>From controller to request processing</title><content type='html'>Some lower level  details: obviously the controller listens on a socket, as soon as a connection is received, it handles this to a separate thread.&lt;br /&gt;&lt;br /&gt;The separate thread should handle everything else, which means reading environment/get/post/cookie variables, merging them, and handling the actual request. It's a bit unclear if &lt;a href="http://eiffel.seibostudios.se/wiki/EWSGI"&gt;The Eiffel Web Server Gateway Interface&lt;/a&gt; covers this properly. The spec appears to say yes, some of the code I've seen says no, but this can be easily fixed.&lt;br /&gt;&lt;br /&gt;Frameworks like this often provide url to handler mapping, but as I'm targeting a REST based framework, this works somewhat differently, and therefore I'll discuss possibilities and options in a later post.&lt;br /&gt;&lt;br /&gt;I wouldn't need authentication as the web server should handle this. Else resources not controlled by the Eiffel app (files) cannot be protected without hard-work.&lt;br /&gt;&lt;br /&gt;Authorisation is necessary, and often complex. I'll probably like to have some configuration mechanism, but it would be nice to have a central place of configuration. So could have a reusable authorisation class that takes the name of the user, the verb (GET/PUT), and the variables, and returns TRUE/FALSE and some error text. Might want to have the ability to do an override at the lowest level (resource) as well.&lt;br /&gt;&lt;br /&gt;More on resources in the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-7869455504956972630?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/7869455504956972630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=7869455504956972630' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7869455504956972630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7869455504956972630'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2011/08/from-controller-to-request-processing.html' title='From controller to request processing'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-3773138495712287656</id><published>2011-07-22T22:11:00.002Z</published><updated>2011-07-22T22:16:04.144Z</updated><title type='text'>The Eiffel Web Server Gateway Interface</title><content type='html'>Jocelyn Fiat alerted me to the &lt;a href="http://eiffel.seibostudios.se/wiki/EWSGI"&gt;The Eiffel Web Server Gateway Interface&lt;/a&gt; framework. This seems to be a useful proposal to write a standard framework for Eiffel apps.&lt;br /&gt;&lt;br /&gt;Would like to see some changes, particularly providing less implementation - unless eposix gets adapted :-) - but building upon that would mean it would be much easier to plug in other Eiffel components which know nothing about my FastCGI server implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-3773138495712287656?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/3773138495712287656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=3773138495712287656' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/3773138495712287656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/3773138495712287656'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2011/07/eiffel-web-server-gateway-interface.html' title='The Eiffel Web Server Gateway Interface'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-7203876006144484331</id><published>2011-07-22T07:51:00.003Z</published><updated>2011-07-22T08:12:19.033Z</updated><title type='text'>Eiffel framework for web applications</title><content type='html'>Some years ago I discussed the architecture of ejax. I'll promise that this time the name of the framework won't start with an "e", although Eiffel on Rails is tempting!&lt;br /&gt;&lt;br /&gt;The goal of ejax was to create small independent cgi applications: they are loaded fast, and that worked best with SmartEiffel, my Eiffel compiler of choice at that time.&lt;br /&gt;&lt;br /&gt;Some years later SmartEiffel has gone, and ISE Eiffel and Gobo Eiffel are now the compilers to use. ISE Eiffel doesn't like compiling a lot of cgi applications though. The disk space consumption would be huge, and compiling a lot of applications is slow.&lt;br /&gt;&lt;br /&gt;Modern frameworks like Drupal or Ruby on Rails use a central controller approach to web applications, and that will suite ISE Eiffel well: just a single application that will handle all requests. As it would be too slow to start that application for every request, the application will either need to do FastCGI or have a built-in web server.&lt;br /&gt;&lt;br /&gt;In both cases we need to determine how to handle requests: handling a request at a time is unacceptable. Event-driven frameworks are probably unsuitable (and hard to work with). We could fork upon request, and that would probably have been the most desirable model before SCOOP. But forks also limit scalability, i.e. we might be able to handle only a few hundred requests per 2GB of memory. But with SCOOP we supposedly have an extremely friendly way of doing multi-threading, and a potential to scale to thousands of concurrent requests per server.&lt;br /&gt;&lt;br /&gt;So that's the model I have chosen to implement my new web framework.&lt;br /&gt;&lt;br /&gt;More details in the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-7203876006144484331?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/7203876006144484331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=7203876006144484331' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7203876006144484331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7203876006144484331'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2011/07/eiffel-framework-for-web-applications.html' title='Eiffel framework for web applications'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-2414060349020444496</id><published>2011-07-14T04:50:00.002Z</published><updated>2011-07-14T05:20:15.331Z</updated><title type='text'>New Eiffel Technology Community</title><content type='html'>Thomas Beale posted &lt;a href="http://netc.se.inf.ethz.ch/bin/view/Main/WorkshopWriteUp"&gt;the results of the Eiffel Technology workshop,&lt;/a&gt; an attempt to revive interest in Eiffel.&lt;br /&gt;&lt;br /&gt;Unfortunately I couldn't attend, but my initial question to the mailing list captured my reservations: &lt;span style="font-style:italic;"&gt;what's the itch&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;People having as a goal to do X, instead of solving an actual problem, won't have the motivation and the time to continue. So such projects won't achieve much. What it could achieve would be to create a set "how do I X in Eiffel?" I.e. how do I open a file in Eiffel series. In a wiki style, or perhaps better &lt;a href="http://stackoverflow.com/questions/tagged/eiffel"&gt;stackoverflow&lt;/a&gt; style these days. Or maybe use stackoverflow, they have the infrastructure. Just answer your own question!&lt;br /&gt;&lt;br /&gt;I myself have largely given up on the question to promote Eiffel for the sake of Eiffel. I find it uninteresting. I'm doing a lot of Eiffel, there is simply no competitive, current compiled language which covers as many platforms as Eiffel. So I use it.&lt;br /&gt;&lt;br /&gt;I'll be returning to these pages soon to start my thoughts on a new Eiffel webplatform. I've worked and done a lot with "ejax", but I'm using only ISE Eiffel and gec now, and secondly there's SCOOP so time to do something different!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-2414060349020444496?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/2414060349020444496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=2414060349020444496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/2414060349020444496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/2414060349020444496'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2011/07/new-eiffel-technology-community.html' title='New Eiffel Technology Community'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-6257954045135072806</id><published>2010-04-28T22:36:00.002Z</published><updated>2010-04-28T22:37:37.613Z</updated><title type='text'>Quad cores: worth it if you use Eiffel</title><content type='html'>Compiling with ISE Eiffel is noticeably faster with my quadcore laptop. ISE really uses all cores, very nice. It might be that with 8 cores I hardly will speak of compile time at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-6257954045135072806?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/6257954045135072806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=6257954045135072806' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6257954045135072806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6257954045135072806'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2010/04/quad-cores-worth-it-if-you-use-eiffel.html' title='Quad cores: worth it if you use Eiffel'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-7427931294855720999</id><published>2009-05-26T07:08:00.002Z</published><updated>2009-05-26T07:13:13.852Z</updated><title type='text'>"A Direct Path to Dependable Software"</title><content type='html'>"&lt;a href="http://cacm.acm.org/magazines/2009/4/22960-a-direct-path-to-dependable-software/fulltext"&gt;A Direct Path to Dependable Software&lt;/a&gt;" is the title of a recent article in the CACM. It piques the interest, but otherwise has few details on how the approach would work. But an interesting quote:&lt;br /&gt;&lt;blockquote&gt;As the required level of confidence rises, though, testing soon becomes prohibitively expensive, and the use of more sophisticated methods is likely to be more economical. Invariants may be harder to write than test cases, but a single invariant defines an infinite number of test cases, so a decision to write one (and use a tool that checks all the cases it defines) will pay off very soon.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-7427931294855720999?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/7427931294855720999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=7427931294855720999' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7427931294855720999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7427931294855720999'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2009/05/direct-path-to-dependable-software.html' title='&quot;A Direct Path to Dependable Software&quot;'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-1069014174097876816</id><published>2009-02-23T05:50:00.003Z</published><updated>2009-02-23T05:53:29.746Z</updated><title type='text'>Eiffel versus C performance</title><content type='html'>Interesting thread on Eiffel Software mailing list. Basically the difference between C and Eiffel code is negligible when enabling the right optimisations:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Now I have found out what makes the difference. If I pass the array t be&lt;br /&gt;sorted as an argument of the sort function instead of using an&lt;br /&gt;attribute, I get a significant speed up of EiffelStudio.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  ES finalized(+inline-void+arg):  8.403 sec&lt;br /&gt;&lt;pre&gt;  C/C++ with g++ -O3:              8.133 sec&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The difference is marginal and no longer significant.&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-1069014174097876816?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/1069014174097876816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=1069014174097876816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/1069014174097876816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/1069014174097876816'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2009/02/interesting-thread-on-eiffel-software.html' title='Eiffel versus C performance'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-6217838129374790379</id><published>2008-03-19T12:05:00.004Z</published><updated>2008-03-19T12:11:00.120Z</updated><title type='text'>CDD EiffelStudio Video available</title><content type='html'>CDD EiffelStudio has matured quite a lot recently. Quite a few bugs have been fixed and usability issues addressed. Some more will be addressed shortly.&lt;br /&gt;&lt;br /&gt;The CDD website is new and improved. Featuring more documentation and better installation instructions. Visit it at  &lt;a href="http://dev.eiffel.com/CddBranch"&gt;http://dev.eiffel.com/CddBranch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In particular there is a new video that demonstrates the automatic extraction of test cases: &lt;a href="http://se.ethz.ch/people/leitner/cdd/video/"&gt;http://se.ethz.ch/people/leitner/cdd/video/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Andreas&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-6217838129374790379?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/6217838129374790379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=6217838129374790379' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6217838129374790379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6217838129374790379'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2008/03/cdd-eiffelstudio-video-available.html' title='CDD EiffelStudio Video available'/><author><name>Andreas Leitner</name><uri>http://www.blogger.com/profile/11983518664176693960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-5342138105555045445</id><published>2008-02-18T20:20:00.002Z</published><updated>2008-02-18T20:24:06.203Z</updated><title type='text'>Self Printing JavaScript Literals</title><content type='html'>We Eiffel programmers often take a lot for granted, things that &lt;a href="http://ajaxian.com/archives/self-printing-javascript-literals"&gt;other languages just struggle with&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Are you ever sick of seeing Object get printed out when you try to output a variable to your console.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;We Eiffel programmers just say:&lt;br /&gt;&lt;pre&gt;  object.out&lt;br /&gt;&lt;/pre&gt;It's that easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-5342138105555045445?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/5342138105555045445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=5342138105555045445' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/5342138105555045445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/5342138105555045445'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2008/02/self-printing-javascript-literals.html' title='Self Printing JavaScript Literals'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-2298525795157846152</id><published>2008-02-08T14:01:00.000Z</published><updated>2008-02-08T14:28:37.281Z</updated><title type='text'>CDD Extension for EiffelStudio</title><content type='html'>The &lt;a href="http://dev.eiffel.com/CddBranch"&gt;CDD extension for EiffelStudio&lt;/a&gt; is an ETH Zurich project which adds support for unit testing to EiffelStudio 6.1. The current status is "beta 2", and it's released for Linux and Windows. Features include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;visualization of test cases and their outcomes&lt;/li&gt;&lt;li&gt;one button creation of manual test cases&lt;/li&gt;&lt;li&gt;limiting of visible test cases using predefined filters and custom tags&lt;/li&gt;&lt;li&gt;test case management through tags&lt;/li&gt;&lt;/ul&gt;Two further features are particularly interesting. Testing can be configured to occur in the background, and is described as "undisruptive to the developer". If an unexpected exception is thrown, a new test case is automatically created to reproduce the exception. Features like these can make the difference between a testing system that is useful as opposed to one that is merely usable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-2298525795157846152?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/2298525795157846152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=2298525795157846152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/2298525795157846152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/2298525795157846152'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2008/02/cdd-extension-for-eiffelstudio.html' title='CDD Extension for EiffelStudio'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-5767108559127034338</id><published>2008-02-05T16:45:00.000Z</published><updated>2008-02-05T17:18:27.472Z</updated><title type='text'>Opening black boxes, and Eiffel games</title><content type='html'>For many years Bertrand Meyer and others have advocated teaching object oriented programming by using objects as "black boxes" then progressively opening up those black boxes to see how they work. This is "inverted" compared to the traditional curriculum which starts with the lowest level of raw constructs and builds progressively more sophisticated constructs from them.&lt;br /&gt;&lt;br /&gt;One way to motivate students is to let them design computer games. James McKim was using Eiffel for that in the early 1990s, and the topic regularly came up at the "Eiffel in Education" conferences.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_X9g3spjhdmI/R6iZe0PvCcI/AAAAAAAABBE/FDJUnvqu_O4/s1600-h/antworld.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_X9g3spjhdmI/R6iZe0PvCcI/AAAAAAAABBE/FDJUnvqu_O4/s200/antworld.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5163545727480039874" /&gt;&lt;/a&gt;At ETH Zurich, first-year computer science students are combining these ideas, using a high-level Eiffel game library to design games. The library is EiffelMedia, started by Till Bay and developed and maintained by students under his oversight, and now exceeding 500,000 lines of code.&lt;br /&gt;&lt;br /&gt;EiffelMedia is comprehensive, covering 2D graphics, text, sound, sprites, collision detection, 3D graphics, networking, high-score tracking, game-oriented widgets, game saving, level management, error reporting and peripheral interfacing.&lt;br /&gt;&lt;br /&gt;EiffelMedia, its use, and some of the games developed with it, are described in an article at the Journal of Object Technology: "&lt;a href="http://www.jot.fm/issues/issue_2008_01/article5/"&gt;A production-quality multimedia library and its application to game-based teaching&lt;/a&gt;". This code snippet (adapted from that article) shows the high-level use of the sound library:&lt;br /&gt;&lt;pre&gt;if audio_subsystem.is_enabled then&lt;br /&gt;   audio_subsystem.mixer.open&lt;br /&gt;   create player.make_with_file("hello.ogg")&lt;br /&gt;   player.set_repeat(true)&lt;br /&gt;   player.play&lt;br /&gt;end&lt;/pre&gt;EiffelMedia and many of the games written for it (such as AntWorld, shown above) are freely downloadable. EiffelMedia itself won second prize in the 2005 Eiffel Struggle competition. According to the article, the prize money is used for release parties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-5767108559127034338?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/5767108559127034338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=5767108559127034338' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/5767108559127034338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/5767108559127034338'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2008/02/opening-black-boxes-and-eiffel-games.html' title='Opening black boxes, and Eiffel games'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_X9g3spjhdmI/R6iZe0PvCcI/AAAAAAAABBE/FDJUnvqu_O4/s72-c/antworld.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-1167769108098044343</id><published>2008-01-07T22:08:00.000Z</published><updated>2008-01-07T22:35:54.626Z</updated><title type='text'>YEPP, the Eiffel Parser Producer</title><content type='html'>Bottom-up shift-reduce parsers (such as those generated by &lt;a href="http://www.gobosoft.com/eiffel/gobo/geyacc/"&gt;Gobo Eiffel Yacc&lt;/a&gt;) are flexible and efficient. They run fast because as they scan the input tokens they consider multiple possible constructs at the same time (in parallel, if you like).&lt;br /&gt;&lt;br /&gt;Their downside is that it's mighty hard to code them in such a way as to get them to emit really good error messages when they encounter a syntax error. By the time you have added enough error handling to achieve good syntax error messages, you may well have lost the power, convenience and flexibility originally offered by the shift-reduce approach.&lt;br /&gt;&lt;br /&gt;An alternative approach is the top-down parser, which in modern programming languages usually makes use of recursive descent to climb down the parse tree. It's likely to be a bit slower than a shift-reduce parser, particularly for grammars that are very complex at the lower levels (expressions downwards).&lt;br /&gt;&lt;br /&gt;But if there's a syntax error, the top-down parser can give a very clear and helpful error message based on where it's up to in the descent of the parse tree.&lt;br /&gt;&lt;br /&gt;Top-down parsers are fairly straightforward to write, but they are tedious. There's lots of code which follows a fairly repetitive pattern, but with just enough variation from construct to construct that it's hard to abstract out the patterns. If you don't want to write the parser manually, you can use a parser generator (whereas with a shift-reduce parser, you would almost always use a parser generator because of its added complexity).&lt;br /&gt;&lt;br /&gt;Cyril Adrian has put together the YEPP Eiffel Parser Producer. It's meant to replace the venerable lex/yacc couple for SmartEiffel users. Its input files use an Eiffelish syntax extended to allow simple grammar declarations in an EBNF notation. Its output is an Eiffel class. It is built using (both in itself and for its output) ESE's parse library, which implements a top-down parsing strategy.&lt;br /&gt;&lt;br /&gt;YEPP is part of the &lt;a href="http://ese.sourceforge.net/"&gt;Enterprise SmartEiffel&lt;/a&gt; project&lt;br /&gt;&lt;br /&gt;Top-down parsing is also found in Java's &lt;a href="http://www.antlr.org/"&gt;ANTLR&lt;/a&gt; parser-generator. Shift-reduce parsing is found in yacc and &lt;a href="http://www.gnu.org/software/bison/"&gt;bison&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-1167769108098044343?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/1167769108098044343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=1167769108098044343' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/1167769108098044343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/1167769108098044343'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2008/01/yepp-eiffel-parser-producer.html' title='YEPP, the Eiffel Parser Producer'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-7762845822671690695</id><published>2008-01-04T14:47:00.000Z</published><updated>2008-01-04T15:25:55.954Z</updated><title type='text'>Recent version updates</title><content type='html'>EiffelStudio is now at &lt;a href="http://www.eiffel.com/general/news/2007/eiffelstudio61_release.html"&gt;version 6.1&lt;/a&gt; . Basic elements of the ECMA Eiffel attached type mechanism are supported, as is non-conforming inheritance. ISE describes their non-conforming inheritance as &lt;span style="font-style:italic;"&gt;"a first among object-oriented languages"&lt;/span&gt;, which will surprise many people including those who have been using the corresponding SmartEiffel facility for a year or two, and those who were using the corresponding Sather facility over 15 years ago. Nevertheless it's welcome. (&lt;a href="https://www2.eiffel.com/download/download_info.aspx?id=eiffelstudio&amp;info=false&amp;mirrors=eiffelstudio"&gt;downloads&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;By the way, if you are still using the original "agent" syntax of the tilde character, you should change your Eiffel code to use the 'agent' keyword, as your code is going to be broken by a future release of EiffelStudio, where tilde will be used as an operator. ISE offers &lt;a href="http://eiffelstudio.origo.ethz.ch/download/116"&gt;a tool&lt;/a&gt; to help automate this, although if you don't run Windows you're out of luck as it's Windows-only. ISE Eiffel is promoted as being multi-platform, so it would have made more sense to release this as Eiffel source code. At EiffelRoom there's &lt;a href="http://www.eiffelroom.org/poll/agents_are_you_still_using_or_do_you_still_have_some_code_using_the_old_syntax_for_agent_that_i"&gt;a poll running&lt;/a&gt; where you can let the developers know whether you still have code using the old agent syntax.&lt;br /&gt;&lt;br /&gt;In November, Eric Bezault released &lt;a href="https://sourceforge.net/forum/forum.php?forum_id=753035"&gt;Gobo version 3.7&lt;/a&gt;, which supports ISE Eiffel 5.7.64493, 6.0.6.9618 and 6.1.7.1007 (Classic and .NET), SmartEiffel 1.2r7, and Gobo Eiffel Compiler 3.7. The Gobo tools are now bootstrapped by a C program, rather than by Windows and Linux executables as in previous versions.&lt;br /&gt;&lt;br /&gt;Also, Berend de Boer has released version 3.0.1 of &lt;a href="http://www.berenddeboer.net/eposix/index.html"&gt;eposix&lt;/a&gt;, his Eiffel to POSIX binding. This is a minor update, to fix a segmentation fault that affected Windows users of &lt;span style="font-style:italic;"&gt;STDC_TIME.to_utc&lt;/span&gt;. No other users need to update.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-7762845822671690695?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/7762845822671690695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=7762845822671690695' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7762845822671690695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7762845822671690695'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2008/01/recent-version-updates.html' title='Recent version updates'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-6073918896457887742</id><published>2007-12-01T14:28:00.000Z</published><updated>2007-12-01T14:34:27.962Z</updated><title type='text'>Top Eiffel search queries</title><content type='html'>These are the top search queries over the past 24 months, from the EiffelZone search box and also from the no-longer-maintained Eiffel custom search engine:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;None&lt;/li&gt;&lt;li&gt;EiffelStore&lt;/li&gt;&lt;li&gt;tutorials programs&lt;/li&gt;&lt;li&gt;tutorial&lt;/li&gt;&lt;li&gt;biplanes&lt;/li&gt;&lt;li&gt;eiffel&lt;/li&gt;&lt;li&gt;algorithm+infix to prefix in C&lt;/li&gt;&lt;li&gt;precondition&lt;/li&gt;&lt;li&gt;gestalt&lt;/li&gt;&lt;li&gt;ecma&lt;/li&gt;&lt;li&gt;serialization eiffel&lt;/li&gt;&lt;li&gt;Eiffel Course Managment System&lt;/li&gt;&lt;li&gt;sql&lt;/li&gt;&lt;li&gt;array&lt;/li&gt;&lt;li&gt;EIFFEL&lt;/li&gt;&lt;li&gt;linked list programs...&lt;/li&gt;&lt;li&gt;.NET&lt;/li&gt;&lt;li&gt;ECMA&lt;/li&gt;&lt;li&gt;opengl&lt;/li&gt;&lt;li&gt;web&lt;/li&gt;&lt;li&gt;event processing&lt;/li&gt;&lt;li&gt;gobo&lt;/li&gt;&lt;li&gt;mixin&lt;/li&gt;&lt;li&gt;Bernd Schoeller&lt;/li&gt;&lt;li&gt;serialization eiffel use&lt;/li&gt;&lt;/ol&gt;I have no idea why "None" is at the top of the list, not even capitalized as an Eiffel class name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-6073918896457887742?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/6073918896457887742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=6073918896457887742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6073918896457887742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6073918896457887742'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/12/top-eiffel-search-queries.html' title='Top Eiffel search queries'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-4421159731525510581</id><published>2007-11-15T20:27:00.000Z</published><updated>2007-11-16T09:42:17.223Z</updated><title type='text'>The next browser must be written in Eiffel</title><content type='html'>&lt;a href="http://ajaxian.com/archives/ajax-browsers-running-out-of-time"&gt;The browser isn't a stable platform&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;Now I fear history may be repeating itself. Yesterday, I had Firefox 2 for linux crash 5 times, and IE7 for XP crash 7 times. The cause? Too many fat Ajax applications. Zimbra, the whole Google bestiary of applications, Yahoo Mail, etc.. These are all long running applications that I keep open for most of the day. Then all of a sudden the Browser is gone and I have to relaunch and login all over again.&lt;/blockquote&gt;&lt;br /&gt;Yes, and why isn't it stable? It is extremely hard to write a large scale C++ application.&lt;br /&gt;Take for example &lt;a href="http://pavlovdotnet.wordpress.com/2007/11/10/memory-fragmentation/"&gt;memory fragmentation&lt;/a&gt;. How do you solve that? Add another layer of manual memory management? Things like that are simply not an issue with ISE Eiffel because it has a moving garbage collector, so the heap is continually compacted.&lt;br /&gt;&lt;br /&gt;And yes, VCs email me if you think a stable browser is a market :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-4421159731525510581?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/4421159731525510581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=4421159731525510581' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4421159731525510581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4421159731525510581'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/11/next-browser-must-be-written-in-eiffel.html' title='The next browser must be written in Eiffel'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-4114107314748505547</id><published>2007-11-11T22:20:00.000Z</published><updated>2007-11-11T22:41:35.657Z</updated><title type='text'>End of the road for EiffelZone</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i7.tinypic.com/6k5b1a9.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 160px;" src="http://i7.tinypic.com/6k5b1a9.png" border="0" alt="" /&gt;&lt;/a&gt;I've put up a banner on every page at &lt;a href="http://eiffelzone.com/"&gt;eiffelzone.com&lt;/a&gt; mentioning that the site is no longer maintained.&lt;br /&gt;&lt;br /&gt;I set up EiffelZone as a resource for the Eiffel community, but there isn't really an Eiffel community anymore. Instead, there are two communities - the insular EiffelStudio community and the vestigial SmartEiffel community.&lt;br /&gt;&lt;br /&gt;The days of libraries and applications being usable with both SmartEiffel and EiffelStudio are pretty-much over, so there's not much use anymore for the &lt;a href="http://eiffelzone.com/esd/"&gt;Eiffel Software Directory&lt;/a&gt;. SmartEiffel users can find what they need at &lt;a href="http://smarteiffel.loria.fr/"&gt;http://smarteiffel.loria.fr/&lt;/a&gt; and EiffelStudio users can find what they need by starting from &lt;a href="http://eiffelroom.com/"&gt;http://eiffelroom.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-4114107314748505547?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/4114107314748505547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=4114107314748505547' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4114107314748505547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4114107314748505547'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/11/end-of-road-for-eiffelzone.html' title='End of the road for EiffelZone'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i7.tinypic.com/6k5b1a9_th.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-3242647178485218676</id><published>2007-10-03T02:06:00.001Z</published><updated>2007-10-03T02:11:32.989Z</updated><title type='text'>Metamodel-based model conformance and multiview consistency checking</title><content type='html'>People interested in BON might want to check out &lt;a href="http://portal.acm.org/citation.cfm?id=1243987.1243989"&gt;Metamodel-based model conformance and multiview consistency checking&lt;/a&gt;. It's about the relation between tools and models of software.&lt;br /&gt;&lt;br /&gt;The article doesn't reference &lt;a href="http://ebon.sourceforge.net/"&gt;the work of Joseph Kiniry&lt;/a&gt;, I believe he had done some work to formalize BON as well, but perhaps it wasn't useful.&lt;br /&gt;&lt;br /&gt;Anyway interesting article.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-3242647178485218676?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/3242647178485218676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=3242647178485218676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/3242647178485218676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/3242647178485218676'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/10/metamodel-based-model-conformance-and.html' title='Metamodel-based model conformance and multiview consistency checking'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-3193993226994087544</id><published>2007-10-02T19:58:00.000Z</published><updated>2007-10-02T20:08:08.527Z</updated><title type='text'>New EiffelStudio 6.1 Development Release</title><content type='html'>Emmanuel Stapf has &lt;a href="http://eiffelstudio.origo.ethz.ch/node/20"&gt;announced&lt;/a&gt; the release of EiffelStudio 6.1.7.0472, featuring&lt;br /&gt;&lt;ul&gt;&lt;li&gt;improved completion list&lt;/li&gt;&lt;li&gt;speed up of degree 3&lt;/li&gt;&lt;li&gt;eporting of calls on a void target in finalized mode (through a project setting)&lt;/li&gt;&lt;li&gt;full support of GCC under Windows&lt;/li&gt;&lt;li&gt;syntax errors are reported for multiple classes (previously the compiler stopped at the first erroneous class)&lt;/li&gt;&lt;/ul&gt;The download page is &lt;a href="http://eiffelstudio.origo.ethz.ch/download"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The above announcement is one of the first items posted to the new &lt;a href="http://eiffelstudio.origo.ethz.ch/forum"&gt;EiffelStudio forum&lt;/a&gt;, for those who prefer to interact with a web forum instead of a mailing list. For now, the mailing lists will continue to operate too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-3193993226994087544?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/3193993226994087544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=3193993226994087544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/3193993226994087544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/3193993226994087544'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/10/new-eiffelstudio-61-development-release.html' title='New EiffelStudio 6.1 Development Release'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-107051280638569449</id><published>2007-09-27T15:04:00.000Z</published><updated>2007-09-27T15:13:54.840Z</updated><title type='text'>Eiffellists need a Good Sense of Humor</title><content type='html'>This is from the &lt;a href="http://tech.groups.yahoo.com/group/eiffel_software/"&gt;Eiffel Software list&lt;/a&gt; at YahooGroups:&lt;br /&gt;&lt;br /&gt;Bruce Mount &lt;a href="http://tech.groups.yahoo.com/group/eiffel_software/message/11284"&gt;wrote&lt;/a&gt;:&lt;blockquote&gt;&lt;i&gt;...sigh...I'm sure this is easy, but Ive spent a lot of time on this and I have not figured it out yet. How do you search in a BINARY_SEARCH_TREE?&lt;/i&gt;&lt;/blockquote&gt; Emmanuel Stapf replied:&lt;blockquote&gt;&lt;i&gt;There is no query to give you the item you looked for. For the moment, you may need to extend BINARY_SEARCH_TREE to add this feature.&lt;/i&gt;&lt;/blockquote&gt;It's always good to get the definitive answer from Manu - but this time I don't know whether to laugh or cry...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-107051280638569449?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/107051280638569449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=107051280638569449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/107051280638569449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/107051280638569449'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/09/eiffellists-need-good-sense-of-humor.html' title='Eiffellists need a Good Sense of Humor'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-6376509315128590124</id><published>2007-09-23T20:32:00.000Z</published><updated>2007-09-23T21:13:19.268Z</updated><title type='text'>7 reasons I switched back to PHP after 2 years on Rails</title><content type='html'>As I'm doing a lot of PHP at the moment, I'm following PHP news with interest. But &lt;a href="http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html"&gt;7 reasons I switched back to PHP after 2 years on Rails&lt;/a&gt; is interesting for Eiffel programmers as well. For example:&lt;br /&gt;&lt;blockquote&gt;I was nearly killing my company in the name of blindly insisting Rails was the answer to all questions, timeframes be damned.&lt;br /&gt;But when I took a real emotionless non-prejudiced look at it, I realized the language didn’t matter that much.&lt;br /&gt;Ruby is prettier. Rails has nice shortcuts. But no big shortcuts I can’t code-up myself in a day if needed.&lt;br /&gt;&lt;/blockquote&gt;Update, one more observation I couldn't agree with more:&lt;br /&gt;&lt;blockquote&gt;Speaking of tastes: tiny but important thing : I love SQL. I dream in queries. I think in tables.&lt;br /&gt;I was always fighting against Rails and its migrations hiding my beloved SQL from me.&lt;/blockquote&gt;Although I prefer &lt;a href="http://www.pobox.com/%7Eberend/xplain/"&gt;Xplain&lt;/a&gt;, the issue is the same. All that active record, hiding the database, somehow making it object oriented, is a complete waste of energy. Databases and objects are two different worlds. Storing objects is possible and can be abstracted nicely. Then try to do fast searching, combining data, data warehousing, and that nice little object oriented world falls apart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-6376509315128590124?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/6376509315128590124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=6376509315128590124' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6376509315128590124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6376509315128590124'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/09/7-reasons-i-switched-back-to-php-after.html' title='7 reasons I switched back to PHP after 2 years on Rails'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-4439251233197917516</id><published>2007-08-10T21:52:00.000Z</published><updated>2007-08-10T22:59:09.168Z</updated><title type='text'>Eiffel download cgi</title><content type='html'>Although most of my work the last few months has been PHP, there are still times were Eiffel is unavoidable. I needed an image upload tool that could give a user feedback on the upload progress. You can't write this in PHP as it doesn't allow you to work at the level you need to, to implement this.&lt;br /&gt;&lt;br /&gt;There are some Perl scripts out there, but it introduces dependencies on libraries and who knows how well those scripts work when there are no invariants to give some peace of mind.&lt;br /&gt;&lt;br /&gt;So with some minor modifications to eposix it is now possible to override certain EPX_MIME classes so one can save uploaded files to a given name instead of a temporary file. And now it is possible for a script to report on the size of the file that is being created.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-4439251233197917516?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/4439251233197917516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=4439251233197917516' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4439251233197917516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4439251233197917516'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/08/eiffel-download-cgi.html' title='Eiffel download cgi'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-6866425886316354348</id><published>2007-07-11T21:01:00.000Z</published><updated>2007-07-11T21:21:37.436Z</updated><title type='text'>SmartEiffel 2.3 released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_X9g3spjhdmI/RpVJvHqQ7CI/AAAAAAAAA90/06zSl5jogDg/s1600-h/se-logo-small.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_X9g3spjhdmI/RpVJvHqQ7CI/AAAAAAAAA90/06zSl5jogDg/s400/se-logo-small.png" alt="" id="BLOGGER_PHOTO_ID_5086052428043840546" border="0" /&gt;&lt;/a&gt;The SmartEiffel team has announced the release of SmartEiffel 2.3 (&lt;a href="http://gforge.inria.fr/frs/?group_id=184"&gt;downloads&lt;/a&gt;, &lt;a href="http://smarteiffel.loria.fr/wiki/en/index.php/Versions_history"&gt;version history&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Changes include:&lt;ul&gt;&lt;li&gt;Refinement of the &lt;a href="http://smarteiffel.loria.fr/wiki/en/index.php/Typing_policy"&gt;new typing policy&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A new class loading algorithm, which formalises the notions of cluster and subcluster. You can now have more than one class with the same name, and the system decides which one to use according to the "distance" between classes. This obsoletes the "rename.se" files.&lt;/li&gt;&lt;li&gt;There is now a configuration directory, into which package maintainers can drop configuration files.&lt;/li&gt;&lt;li&gt;The eiffeltest tool is included.&lt;/li&gt;&lt;li&gt;The fictional type mark NONE is gone! Where you used to write {NONE}, you now just write {}.&lt;/li&gt;&lt;li&gt;Microsoft Visual C++ 2005 is now supported as a back-end compiler.&lt;/li&gt;&lt;li&gt;A Regular Expression library is included.&lt;/li&gt;&lt;/ul&gt;Finally, you may remember the &lt;a href="http://smarteiffel.loria.fr/wiki/en/index.php/Logo_contest"&gt;SmartEiffel logo competition&lt;/a&gt;. SmartEiffel now has a shiny new logo, chosen from the entries to that competition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-6866425886316354348?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/6866425886316354348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=6866425886316354348' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6866425886316354348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6866425886316354348'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/07/smarteiffel-23-released.html' title='SmartEiffel 2.3 released'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_X9g3spjhdmI/RpVJvHqQ7CI/AAAAAAAAA90/06zSl5jogDg/s72-c/se-logo-small.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-4992927962571168046</id><published>2007-06-15T17:03:00.000Z</published><updated>2007-06-15T18:45:44.916Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='libraries'/><category scheme='http://www.blogger.com/atom/ns#' term='gobo'/><title type='text'>Gobo 3.6 released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_X9g3spjhdmI/RnLeO8dF3xI/AAAAAAAAAAY/qGyqQ8etGak/s1600-h/gobo_logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_X9g3spjhdmI/RnLeO8dF3xI/AAAAAAAAAAY/qGyqQ8etGak/s400/gobo_logo.gif" alt="" id="BLOGGER_PHOTO_ID_5076364078327652114" border="0" /&gt;&lt;/a&gt;Eric Bezault has &lt;a href="http://tech.groups.yahoo.com/group/gobo-eiffel/message/1586"&gt;announced&lt;/a&gt; the release of &lt;a href="http://www.gobosoft.com/eiffel/gobo/Readme.txt"&gt;version 3.6&lt;/a&gt; of the &lt;a href="http://www.gobosoft.com/"&gt;Gobo tools and libraries&lt;/a&gt;. This release should work with the forthcoming release of ISE's EiffelStudio 6.0.&lt;br /&gt;&lt;br /&gt;In response to input from the community, the license has been changed to the permissive MIT license. This license is compatible with many licenses, including the GPL and the Eiffel Forum License. MIT-licensed software can be used within open source and proprietary projects.&lt;br /&gt;&lt;br /&gt;The Gobo package no longer contains compiled executables of the basic tools. Instead, a C-package is provided together with scripts to compile it for the target platform.&lt;br /&gt;&lt;br /&gt;The package has been tested under Windows XP and Ubuntu Linux. It supports ISE Eiffel 5.6, 5.7 and 6.0 classic and dotNet, plus SmartEiffel 1.2r7. Visual Eiffel support has been dropped, to allow future versions of Gobo to use facilities such as agents that are not supported by VE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-4992927962571168046?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/4992927962571168046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=4992927962571168046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4992927962571168046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/4992927962571168046'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/06/gobo-36-released.html' title='Gobo 3.6 released'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_X9g3spjhdmI/RnLeO8dF3xI/AAAAAAAAAAY/qGyqQ8etGak/s72-c/gobo_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-8144728720441928273</id><published>2007-05-15T23:34:00.000Z</published><updated>2007-05-15T23:36:15.160Z</updated><title type='text'>Eiffel and Bertrand Meyer win the ACM Software System Award</title><content type='html'>&lt;a href="http://www.ecma-international.org/news/PressReleases/PR_Eiffel%20Award%2007.htm"&gt;ECMA press release&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;Ecma is proud to announce that &lt;strong&gt;Dr. Bertrand Meyer&lt;/strong&gt; is this year’s recipient of the &lt;a href="http://awards.acm.org/software_system/"&gt;ACM Software Systems Award&lt;/a&gt;, one of the most prestigious awards in computer science, for his design of the Eiffel programming language and environment. &lt;strong&gt;Dr. Bertrand Meyer&lt;/strong&gt; is one of the few European scientists to receive this honour.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-8144728720441928273?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/8144728720441928273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=8144728720441928273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/8144728720441928273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/8144728720441928273'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/05/eiffel-and-bertrand-meyer-win-acm.html' title='Eiffel and Bertrand Meyer win the ACM Software System Award'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-6788716000287888659</id><published>2007-05-10T20:39:00.000Z</published><updated>2007-05-10T20:52:38.816Z</updated><title type='text'>The Ultimate Eiffel application</title><content type='html'>A wonderful Eiffel application would be a browser written in Eiffel. I have to restart FireFox at least once a day, it just becomes slower and slower, and consumes more and more memory, and starts to behave erratically at last.&lt;br /&gt;&lt;br /&gt;I would be a huge job. You want Firebug of course, JavaScript, CSS, SVG. But if it would be written in ISE Eiffel you can also take advantages of its excellent moving garbage collection.&lt;br /&gt;&lt;br /&gt;A super stable browser, what a thought.&lt;br /&gt;&lt;br /&gt;Any people with money should &lt;a href="mailto:berend@pobox.com"&gt;contact my by email&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-6788716000287888659?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/6788716000287888659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=6788716000287888659' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6788716000287888659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/6788716000287888659'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/05/ultimate-eiffel-application.html' title='The Ultimate Eiffel application'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-7142554017376862644</id><published>2007-05-08T02:35:00.000Z</published><updated>2007-05-08T03:32:17.410Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='eiffel'/><category scheme='http://www.blogger.com/atom/ns#' term='advocacy'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Advocating Eiffel at the Regional Free Software Conference</title><content type='html'>The Regional Free Software Conference is one of the largest Free Software events in Latin America. The &lt;a href="http://jornadas.lugmen.org.ar/"&gt;6th and most recent one&lt;/a&gt;, in October 2006, was organized at Mendoza, Argentina.&lt;br /&gt;&lt;br /&gt;Last year I decided to take there a presentation about Eiffel, oriented to developers who never heard about it, saying mostly "Hey, there is a language you don't know called Eiffel, you can use it, it's cool!". My presentation is available (&lt;a href="http://except.com.ar/downloads/2006/10/20061013-eiffel.odp"&gt;OpenDocument slides&lt;/a&gt;/&lt;a href="http://except.com.ar/downloads/2006/10/20061013-eiffel.ppt"&gt;Powerpoint slides, converted&lt;/a&gt;; both are in spanish) are available under a creative commons by-nc-sa license. If you know about Eiffel you will probably  understand most of the slides, even if you don't speak spanish. The strong side I perhaps noted most was that Eiffel allows you to have high-level development and efficiency at the same time. They're not the points I like most, but I thought those could get the attention from the public in a 45' talk.&lt;br /&gt;&lt;br /&gt;The reaction from the public was interesting. Most questions were about availability of toolkits/libraries (RDBMS, GUI) than for the language itself. Even after years of having these kind of conversations, I still get surprised about how little people care about a language for itself, and how language and library are so hard to split apart. I got the attention for a few people, anyway, more advanced developers mainly: some guys from the python crowd (the python community here is quite large) and a couple of C++ guys that were really hooked (one of them a contributor of &lt;a href="http://www.boost.org/"&gt;Boost&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Still, it's hard to prepare a talk advocating Eiffel for the masses. I want to retry again this year, at the &lt;a href="http://jornadas.grulic.org.ar"&gt;7th conference&lt;/a&gt;; but would like to look for better ways to "sell" Eiffel. So, if any of you had good ideas about what kind of stuff would be nice to present at an "Introducing Eiffel" talk, you will earn a place at my "Thanks!" slide. Thanks! (in advance).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-7142554017376862644?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/7142554017376862644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=7142554017376862644' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7142554017376862644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/7142554017376862644'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/05/advocating-eiffel-in-regional-free.html' title='Advocating Eiffel at the Regional Free Software Conference'/><author><name>Daniel F Moisset</name><uri>http://www.blogger.com/profile/11550350763702904614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117559080097848821</id><published>2007-04-03T08:57:00.000Z</published><updated>2007-05-08T03:50:11.455Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='meyer'/><title type='text'>ACM Award for Bertrand Meyer</title><content type='html'>&lt;a href="http://campus.acm.org/public/pressroom/press_releases/3_2007/eiffel.cfm"&gt;The ACM reports that&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;Bertrand Meyer is Recipient of Software System Award for Impact on Software Quality ... More than just a programming language, Eiffel is a general method for constructing software systems. It has applications from requirements analysis through design, implementation and maintenance, and is both seamless and reversible. A central feature is the development of a method known as Design by Contract, originated by Dr. Meyer. This approach enables Eiffel to adapt techniques used in proving the correctness of programs to all stages of design and development. It is based on the principles of object technology, of which Dr. Meyer was an early and vocal proponent. In November 2006, Eiffel became a standard of the International Standards Organization (ISO).&lt;br /&gt;&lt;/blockquote&gt;A very well deserved recognition. There currently is no compiled language that gives programmers the kind of trust in the software they write that Eiffel gives. And the ease of doing so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117559080097848821?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117559080097848821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117559080097848821' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117559080097848821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117559080097848821'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/04/acm-award-for-bertrand-meyer.html' title='ACM Award for Bertrand Meyer'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117364551929243003</id><published>2007-03-11T21:33:00.000Z</published><updated>2007-05-08T03:49:21.886Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffel'/><title type='text'>Eiffel and PHP</title><content type='html'>About a week ago I did &lt;a href="http://www.pobox.com/~berend/eiffel/eiffel-and-php.pdf"&gt;a presentation on Eiffel and PHP&lt;/a&gt; for my local PHP user group. Particular focus on Design by Contract.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117364551929243003?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117364551929243003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117364551929243003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117364551929243003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117364551929243003'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/03/eiffel-and-php.html' title='Eiffel and PHP'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117353088731900504</id><published>2007-03-10T12:38:00.000Z</published><updated>2007-05-08T03:50:51.151Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='dbc'/><title type='text'>Slashdot mulls why DBC is not more popular</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/2268/149/1600/773393/topicprogramming.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/2268/149/200/56887/topicprogramming.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;At &lt;a href="http://slashdot.org/"&gt;slashdot.org&lt;/a&gt;, there's a discussion running about &lt;a href="http://ask.slashdot.org/article.pl?sid=07/03/10/009237"&gt;why DBC is not more popular&lt;/a&gt;. &lt;a href="http://jedidiah.stuff.gen.nz/wp/"&gt;Leland McInnes&lt;/a&gt; writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Design by Contract, writing pre- and post-conditions on functions, seemed like straightforward common sense to me. Such conditions, in the form of executable code, not only provide more exacting API documentation, but also provide a test harness ... despite being available (to varying degrees of completeness) for many languages other than Eiffel ... the concept has never gained significant traction, particularly in comparison to unit testing frameworks (which DbC complements nicely), and hype like 'Extreme Programming'. So why did Design by Contract fail to take off?&lt;/i&gt;&lt;/blockquote&gt;No doubt some TeamEiffel readers will have valuable comments to post at Slashdot...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117353088731900504?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117353088731900504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117353088731900504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117353088731900504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117353088731900504'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/03/slashdot-mulls-why-dbc-is-not-more.html' title='Slashdot mulls why DBC is not more popular'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117319106321124250</id><published>2007-03-06T14:21:00.000Z</published><updated>2007-05-08T03:52:06.254Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='oosc2'/><title type='text'>OOSC2 as an ebook?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/7722/2308/1600/213135/Object-Oriented%20Software%20Construction.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://photos1.blogger.com/x/blogger/7722/2308/1600/213135/Object-Oriented%20Software%20Construction.jpg" border="0" alt="" /&gt;&lt;/a&gt;Does anyone know whether the availability of OOSC2 as an ebook is legitimate?&lt;br /&gt;&lt;br /&gt;[update: I've removed the link, as Bernd says it's not legit.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117319106321124250?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117319106321124250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117319106321124250' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117319106321124250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117319106321124250'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/03/oosc2-as-ebook.html' title='OOSC2 as an ebook?'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117287154057121864</id><published>2007-03-02T21:35:00.000Z</published><updated>2007-03-02T21:39:00.596Z</updated><title type='text'>New eposix beta</title><content type='html'>&lt;a href="http://www.pobox.com/~berend/eposix/index.html#interimrelease"&gt;There is a new eposix beta available&lt;/a&gt; for those interested. &lt;a href="http://tech.groups.yahoo.com/group/eposix/message/609"&gt;Lots of new things&lt;/a&gt;. This will become the 3.0 release hopefully soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117287154057121864?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117287154057121864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117287154057121864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117287154057121864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117287154057121864'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/03/new-eposix-beta.html' title='New eposix beta'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117214487020064421</id><published>2007-02-22T11:39:00.000Z</published><updated>2007-02-22T11:48:51.820Z</updated><title type='text'>Eiffelroom</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eiffelroom.com/"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/2268/149/400/41853/eiffelroom.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Emmanuel Stapf has announced &lt;a href="http://www.eiffelroom.com/"&gt;Eiffelroom&lt;/a&gt;, an ISE-sponsored &lt;span style="font-style:italic;"&gt;"one-stop page for everything Eiffel-related"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;At Eiffelroom you will find links to Eiffel blogs, mailing lists, discussion groups, articles, tips, polls, tools, libraries, updates, FAQs, glossaries, and much more.&lt;br /&gt;&lt;br /&gt;Manu writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Make sure to try Eiffelroom and watch it grow. We're sure you'll want to bookmark it as your premier Eiffel resource on the Web.&lt;/i&gt;&lt;/blockquote&gt;(Needless to say, you won't find too much about SmartEiffel there.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117214487020064421?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117214487020064421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117214487020064421' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117214487020064421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117214487020064421'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/eiffelroom.html' title='Eiffelroom'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117206964900477265</id><published>2007-02-21T14:44:00.000Z</published><updated>2007-05-08T03:49:21.886Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffel'/><title type='text'>Eiffel and Java's Properties</title><content type='html'>Elliotte Rusty Harold writes in his blog &lt;a href="http://cafe.elharo.com/"&gt;The Cafes&lt;/a&gt; about proposals for adding Properties to Java 7:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;...The proper design of properties was invented in Eiffel over a decade ago...&lt;/i&gt;&lt;/blockquote&gt;See: What Properties in Java Should Have Looked Like&lt;br /&gt;&lt;a href="http://cafe.elharo.com/java/what-properties-in-java-should-have-looked-like/"&gt;http://cafe.elharo.com/java/what-properties-in-java-should-have-looked-like/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(via Tristram Brelstaff)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117206964900477265?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117206964900477265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117206964900477265' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117206964900477265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117206964900477265'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/eiffel-and-javas-properties.html' title='Eiffel and Java&apos;s Properties'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117169649326903187</id><published>2007-02-17T06:42:00.000Z</published><updated>2007-05-08T03:49:21.887Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffel'/><title type='text'>Eiffel and Perl</title><content type='html'>I just converted an extremely small Perl program into Eiffel. That led me to ponder a few differences between these two languages. First of all the task: any time a line is received in standard input, write the current &lt;a href="http://en.wikipedia.org/wiki/Unix_time"&gt;unix time&lt;/a&gt; (number of seconds since the epoch which is 1970) plus 7 seconds to standard output.&lt;br /&gt;&lt;br /&gt;The Perl program is brief:&lt;br /&gt;&lt;pre&gt;#!/usr/bin/perl&lt;br /&gt;$| = 1;&lt;br /&gt;while (&lt;STDIN&gt;) {&lt;br /&gt;    print time() + 7, "\n";&lt;br /&gt;}&lt;/pre&gt;The Eiffel variant is considerably longer:&lt;br /&gt;&lt;pre&gt;class&lt;br /&gt;&lt;br /&gt; TIMESTAMPS&lt;br /&gt;&lt;br /&gt;inherit&lt;br /&gt;&lt;br /&gt; STDC_CURRENT_PROCESS&lt;br /&gt;&lt;br /&gt; CAPI_TIME&lt;br /&gt;  export&lt;br /&gt;   {NONE} all&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;creation&lt;br /&gt;&lt;br /&gt; make&lt;br /&gt;&lt;br /&gt;feature {NONE} -- Initialization&lt;br /&gt;&lt;br /&gt; make is&lt;br /&gt;  local&lt;br /&gt;   s: STRING&lt;br /&gt;   future: INTEGER&lt;br /&gt;  do&lt;br /&gt;   stdout.set_no_buffering&lt;br /&gt;   from&lt;br /&gt;    create s.make (16)&lt;br /&gt;   until&lt;br /&gt;    False&lt;br /&gt;   loop&lt;br /&gt;    stdin.read_line&lt;br /&gt;    future := posix_time + interval&lt;br /&gt;    future.append_in (s)&lt;br /&gt;    s.append_character ('%N')&lt;br /&gt;    stdout.put_string (s)&lt;br /&gt;    s.wipe_out&lt;br /&gt;   end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;feature -- Access&lt;br /&gt;&lt;br /&gt; interval: INTEGER is 7&lt;br /&gt;   -- Number of seconds&lt;br /&gt;&lt;br /&gt;end&lt;/pre&gt;That the Eiffel program is much longer is due to the fact that it is written to be a bit longer, for example the number of seconds has become a constant, something that is good practice, but more naturally done in Eiffel.&lt;br /&gt;&lt;br /&gt;Also in Perl many things are somehow available. For example access to standard input. Although they are in SmartEiffel as well, that would lead to code that is not portable. And one can argue that standard input should not always be available. What is the meaning of standard input on a mobile? For a GUI program? There is no such thing. So I have to pull those in explicitly using the STDC_CURRENT_PROCESS class. Just as well as for the definition to retrieve the Unix time using CAPI_TIME. Both are &lt;a href="http://www.pobox.com/~berend/eposix/"&gt;eposix classes&lt;/a&gt; by the way.&lt;br /&gt;&lt;br /&gt;A couple of lines in the Eiffel program are taken up by building the string. Of course, I could have written:&lt;br /&gt;&lt;pre&gt; stdout.put_string ((posix_time + interval).out + "%N")&lt;/pre&gt;But that would have required the inclusion (and minor overhead) of the garbage collector. Because this program runs in a loop, is of minimal importance and should therefore not really bother the CPU, I didn't want to include a garbage collector. So I could not call a query like &lt;i&gt;out&lt;/i&gt; which creates a new string every time it is called. I would run out of memory after a few months. So I had to use some SmartEiffel specific code here to very careful turn the integer into an existing string. This string &lt;i&gt;s&lt;/i&gt; is created only once. No other objects are created in the loop, so no garbage collector needs to be included.&lt;br /&gt;&lt;br /&gt;Perl probably creates new objects in its loop and has to garbage collect them. But the Perl interpreter contains a garbage collector anyway.&lt;br /&gt;&lt;br /&gt;The readability is also different. The integer to string conversion in the Eiffel code is its most unreadable part, the other lines are self explanatory. But in Perl, what does the line:&lt;br /&gt;&lt;pre&gt; $| = 1;&lt;/pre&gt; do? From the Eiffel code we can learn it turns off buffering of standard output. Actually the whole story behind this line &lt;a href="http://perl.plover.com/FAQs/Buffering.html"&gt;is rather long&lt;/a&gt;. It actually means to turn off buffering for the hot file handle. &lt;a href="http://www.cs.usyd.edu.au/~sholden/pythonperl.html"&gt;Insert rant here&lt;/a&gt; (see section "Bad documentation").&lt;br /&gt;&lt;br /&gt;A line like&lt;pre&gt;while (&lt;STDIN&gt;) {&lt;/pre&gt;isn't also not immediately readable. It has something to do with standard input, and it looks like a loop that while there is something on standard input do something.&lt;br /&gt;&lt;br /&gt;The run-time overhead is probably also different, but with todays CPU cycles not really relevant.&lt;br /&gt;&lt;br /&gt;The last thing is installation. The Eiffel program has no dependencies except on standard system libraries. To run the Perl program the Perl interpreter must be installed on the target system.&lt;br /&gt;&lt;br /&gt;So this particular program is perhaps not the best use case for Eiffel. But it is always fun to write Eiffel code, so the more lines of Eiffel, the more fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117169649326903187?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117169649326903187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117169649326903187' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117169649326903187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117169649326903187'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/eiffel-and-perl.html' title='Eiffel and Perl'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117164766232100997</id><published>2007-02-16T17:26:00.000Z</published><updated>2007-05-08T03:52:47.996Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>TOOLS Conferences are back</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/2268/149/1600/667907/tools45.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/2268/149/320/391787/tools45.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Long-time Eiffelists will recall the TOOLS Conferences of the 1990s - eclectic but serious software conferences with a strong Eiffel flavour.&lt;br /&gt;&lt;br /&gt;The ascendancy of TOOLS occurred during the Object heyday of the early 1990s, when OOPSLA ruled the roost but was criticised by some for giving too much time and space to C++. This led to some memorable and intense flamewars between Eiffel and C++ luminaries, although these may have been lost to posterity as they been deleted from the Google Groups cache. The TOOLS conferences picked up some of the slack, catering for those who had strayed from the mainstream of OO.&lt;br /&gt;&lt;br /&gt;Anyway ... TOOLS is back. The Conference Chair is (as many times previously) Bertrand Meyer, and the 45th conference in the series takes place at ETH in Zurich, Switzerland on 24-28 June 2007. The theme for &lt;a href="http://tools.ethz.ch/"&gt;TOOLS Europe 2007&lt;/a&gt; is &lt;b&gt;Objects, Models, Components, Patterns&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://tools.ethz.ch/index.php?id=62"&gt;call for papers&lt;/a&gt; specifies yesterday as the deadline for abstract submission, and says that this is "firm", but you could try your luck on submitting a paper because &lt;a href="http://tools.ethz.ch/dates.html"&gt;another page&lt;/a&gt; says that the deadline was going to be February 1 with "no extensions" which obviously didn't hold. There is still time to propose &lt;a href="http://tools.ethz.ch/callforworkshops.html"&gt;workshops&lt;/a&gt; and &lt;a href="http://tools.ethz.ch/callfortutorials.html"&gt;tutorials&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117164766232100997?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117164766232100997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117164766232100997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117164766232100997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117164766232100997'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/tools-conferences-are-back.html' title='TOOLS Conferences are back'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117164356050901813</id><published>2007-02-16T16:24:00.000Z</published><updated>2007-02-16T16:34:06.820Z</updated><title type='text'>Bay Area Friends of Eiffel Meeting for February 21, 2007</title><content type='html'>This is an open invitation to a gathering of the Bay Area Friends of Eiffel, for everyone interested in the Eiffel programming language.&lt;br /&gt;&lt;h3&gt;W H E N&lt;/h3&gt;February 21, starting at 6:30 PM. &lt;br /&gt;&lt;h3&gt;W H E R E&lt;/h3&gt;The meeting will be held at the offices of AXA Rosenberg in Orinda CA.Directions there are at the end of this announcement.&lt;br /&gt;&lt;h3&gt;A G E N D A&lt;/h3&gt;&lt;h4&gt;Business:&lt;/h4&gt;Should we be renamed the Bay Area Friends of ECMA Eiffel?&lt;br /&gt;&lt;br /&gt;A few months ago I stopped monitoring the SmartEiffel project, and I don't know of any participant in BAFOEiffel who uses SmartEiffel. Much of our focus in meetings has been on EiffelStudio and ECMA. The Gobo Project has also announced support for an ECMA-compatible compiler, and is certainly of interest to the group. Are people also interested in news regarding SmartEiffel? If not, then I would propose a name change to make the ECMA focus of the group clear.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Recent Announcements:&lt;/h4&gt;These are largely harvested from the Team Eiffel Blog, so either attend the meeting or read other announcements in this blog to get caught up on recent happenings in the Eiffel world.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Presentation:&lt;/h4&gt;Ulrich Weiss will give a presentation on the Eiffel Logging classes he recently wrote. These have been incorporated into the SVN repository hosted by ETH:&lt;br /&gt;&lt;a href="http://elogger.origo.ethz.ch/index.php/Main_Page"&gt;http://elogger.origo.ethz.ch/index.php/Main_Page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Other Items:&lt;/h4&gt;Whatever you would like to talk about, plus appetizers and beverages. I bring&lt;br /&gt;the cheap stuff. If that's not good enough for you, then bring the good stuff.&lt;br /&gt;&lt;h3&gt;D I R E C T I O N S&lt;/h3&gt;Directions are here:&lt;br /&gt;&lt;a href="http://www.axarosenberg.com/axar-contact.htm/axar-location-orinda.htm"&gt;http://www.axarosenberg.com/axar-contact.htm/axar-location-orinda.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The meeting will be in building E, in the conference room near the lobby. As you approach building E from the parking lot, you'll see a large sliding glass door. If the main entrance is locked you'll find a telephone in a box beside the door. You can dial extension &lt;br /&gt;343 to get the attention of those inside.&lt;br /&gt;&lt;br /&gt;For further information, contact Greg C at gmc444@yahoo.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117164356050901813?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117164356050901813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117164356050901813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117164356050901813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117164356050901813'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/bay-area-friends-of-eiffel-meeting-for.html' title='Bay Area Friends of Eiffel Meeting for February 21, 2007'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117098016110134090</id><published>2007-02-09T00:14:00.000Z</published><updated>2007-05-08T04:13:19.675Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffel'/><category scheme='http://www.blogger.com/atom/ns#' term='advocacy'/><title type='text'>Roger F. Osmond on Eiffel</title><content type='html'>A post from Roger F. Osmond on Why Eiffel deserves a wider audience than the ISE mailing list. It is copied verbatim below.&lt;br /&gt;&lt;br /&gt;It is important to consider the tools, certainly, but we must also consider the whole process.  I believe this is your point, in fact.  In my experience, the best big-think benefit of using Eiffel as a tool, is that it's more than a tool.  I have been responsible for some pretty big projects over the years and I have learned that Eiffel pays dividends beyond the initial phases of product development.  With the Eiffel approach (and yes, the Eiffel tools), the real-world model you develop (the one in your head and on the white board) translates into Eiffel implementation without the semantic chasm that is inherent in all other mainstream approaches.&lt;br /&gt;&lt;br /&gt;As good a tool as java is for slapping together something from parts (face it folks, it's popular for a reason), a huge problem with using it for anything non-trivial is in that the implementation doesn't reflect the real-world model.  Even die-hard java folks will admit this (after some friendly persusion, possibly aided by beverage of choice).&lt;br /&gt;&lt;br /&gt;The up-front sales pitch for using Eiffel includes all the quality arguments, the reuse and such, but the clincher for me is the fact that the product you build, all the way down to the feature signatures, reflects faithfully the problem you tried to solve in the first place.  This is more than an academic nicety.  It translates into real life benefits for your organization.  It means that when the requirements or the problem change, you know where to go to make the changes in your design and code (they're the same thing in Eiffel of course).  When there is an error in the code (a semantic error), you will know where and why because the product as implemented doesn't accurately reflect the solution you modeled, and you'll know what to do.&lt;br /&gt;&lt;br /&gt;With every other tool/language that I have used, this just isn't the case.  The best organizations might have some documentation to map the gap, so to speak, but you know full well that this documentation, by being out-of-band, is by defintion out-of-date by the time it is written.  Eiffel well written really does give you what you need to sustain your product and your organization, better than the other tools available.&lt;br /&gt;This is not to say that the other tools are without merit.  Entity relationship diagrams, state machines and even DFDs all have a place, but they are not, nor can they ever be the in-band toolset that Eiffel is.&lt;br /&gt;&lt;br /&gt;As for BON itself, it's a good notation, but it's still just a notation.  I have found that using a subset of it (pretty much the bubbles and arrows) to describe relationships is very effective and requires no learning time.  DFD folks might have trouble with the arrow direction at first, but that oinly lasts for a few minutes.  If you're thinking in an object way, then it works very well.&lt;br /&gt;&lt;br /&gt;In practice, I (almost) never go from diagram-to-code in estudio.  I go the other way around, when using a computer at least.  My design work is invariably done using a kind or BON-light and a whiteboard.  This is true for every Eiffel practiioner with whom I have worked.  It's whiteboard to code and back.&lt;br /&gt;&lt;br /&gt;Having the diagramming built into estudio is a nice thing sometimes.  When teaching beginners, I will use the class construction facility in estudio, but the rest of the time, I simply write the class in my (external)  text editor.   I take the same approach when building user interfaces, in Eiffel Vision or in HTML/js/java or whatever.  I find that the graphical tools (the grunt-and-point interfaces) are great until you're comfortable, and then they get in the way.  It's important to have such tools for ramp-up, but you and the problems you are trying to solve will quickly outgrow them.&lt;br /&gt;&lt;br /&gt;Apart from maybe being ridiculed by the ignorantia, you will never regret moving to Eiffel.  Even if you must work in other languages, your Eiffel experience will stay with you.  It will make you a better programmer and a better designer.  Let's face it, you will be a better person, and even your hair will take on a healthy sheen (OK, that was a little over the top).  You will, however, never be content using other language tools again, so consider this fair warning (really).  A good friend of mine once confided "How am I supposed to work with these other tools now that I have known Eiffel.  I don't want to go back."  He was quite serious.  The cold truth is that you will have to use non-Eiffel, maybe most of the time.  It can be frustrating, but that's why they pay you the big bucks.  Despite this inevitable lament, it's worth it.  It's like finally getting an eyeglass prescription that really works.  Sure, you could get around OK before, but now, you can really see!  Eiffel's like that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117098016110134090?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117098016110134090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117098016110134090' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117098016110134090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117098016110134090'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/roger-f-osmond-on-eiffel.html' title='Roger F. Osmond on Eiffel'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117096803288019831</id><published>2007-02-08T20:43:00.000Z</published><updated>2007-05-08T04:10:05.891Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>Right-click menus coming to EiffelStudio</title><content type='html'>Right-click context-sensitive menus are being added to EiffelStudio. "At last!", I hear from the back rows.&lt;br /&gt;&lt;br /&gt;This won't replace the current right-click pick-and-drop mechanism. The first entry on each context menu will be "Pick", and the developers are looking at other ideas, such as auto-pick if the right button is held down for more than a certain (short) time.&lt;br /&gt;&lt;br /&gt;The developers are &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Context_Menu"&gt;asking for feedback&lt;/a&gt;, which you can provide at the EiffelStudio wiki.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117096803288019831?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117096803288019831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117096803288019831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117096803288019831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117096803288019831'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/right-click-menus-coming-to.html' title='Right-click menus coming to EiffelStudio'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117096143459599272</id><published>2007-02-08T18:53:00.000Z</published><updated>2007-02-08T19:03:54.616Z</updated><title type='text'>Eiffel Wrapper Libraries Collection 0.1</title><content type='html'>Paolo Redaelli has announced the release of version 0.1 of the &lt;a href="http://home.gna.org/eiffel-libraries/"&gt;Eiffel Wrapper Libraries Collection&lt;/a&gt;, a set of SmartEiffel wrappers for many of the major Free Software libraries.&lt;br /&gt;&lt;br /&gt;There's an incomplete yet working GTK+ library including the necessary Glib and Gobject classes, plus wrappers for libGlade (a dynamic interface loader for GTK+), SQLite and GnomeDB (databases), FFMPEG (a multimedia encoding/decoding library), Curl (a full-featured HTTP client library) and XMLRPC (a lightweight RPL library based on XML and HTTP).&lt;br /&gt;&lt;br /&gt;The Eiffel Wrapper Libraries Collection project (EWLC) wants to break the chicken-and-egg vicious circle that has hindered the spread of Eiffel. Noboby is using Eiffel because there are no libraries, and there are too few libraries because too few people are using Eiffel. Ongoing &lt;a href="https://gna.org/projects/eiffel-libraries/"&gt;development&lt;/a&gt; and &lt;a href="http://download.gna.org/eiffel-libraries/eiffel-libraries-0.1.tar.bz2"&gt;downloads&lt;/a&gt; are at gna.org.&lt;br /&gt;&lt;br /&gt;The license is LGPL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117096143459599272?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117096143459599272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117096143459599272' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117096143459599272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117096143459599272'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/eiffel-wrapper-libraries-collection-01.html' title='Eiffel Wrapper Libraries Collection 0.1'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-117067913800338477</id><published>2007-02-05T12:18:00.000Z</published><updated>2007-02-05T12:38:58.063Z</updated><title type='text'>Ian Joyner's C++ critique and more</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/2268/149/1600/121930/ian-filtered.png"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/2268/149/400/263898/ian-filtered.png" border="0" alt="" /&gt;&lt;/a&gt;Long-time Eiffelist and Mac evangelist Ian Joyner has updated &lt;a href="http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Home.html"&gt;his website&lt;/a&gt; and is now hosting his publications, some of which have for many years been mirrored around the web. Ian's documents include:&lt;ul&gt;&lt;li&gt;&lt;a href="http://web.mac.com/joynerian/iWeb/Ian%20Joyner/ODP.html"&gt;Open Distributed Processing: &lt;span style="font-style:italic;"&gt;Unplugged&lt;/span&gt;!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Windows%20or%20Macintosh.html"&gt;Windows or Macintosh?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Into%20Eiffel.html"&gt;Into Eiffel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://web.mac.com/joynerian/iWeb/Ian%20Joyner/C++.html"&gt;C++??&lt;/a&gt; (a critique of C++ and programming language trends of the 1990s, which was later extended to become the book &lt;a href="http://www.amazon.com/Objects-Unencapsulated-Eiffel-Component-Technology/dp/0130142697/sr=8-1/qid=1170546918/ref=sr_1_1/102-0901399-2316927?ie=UTF8&amp;s=books"&gt;Objects Unencapsulated: Java, Eiffel and C++??&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-117067913800338477?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/117067913800338477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=117067913800338477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117067913800338477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/117067913800338477'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/02/ian-joyners-c-critique-and-more.html' title='Ian Joyner&apos;s C++ critique and more'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116964407703079903</id><published>2007-01-24T12:55:00.000Z</published><updated>2007-01-24T13:07:57.056Z</updated><title type='text'>Gobo 3.5 released</title><content type='html'>Eric Bezault has announced the release of version 3.5 of the &lt;a href="http://www.gobosoft.com/eiffel/gobo/index.html"&gt;Gobo Eiffel package&lt;/a&gt;, a substantial set of Eiffel libraries and tools (&lt;a href="http://www.gobosoft.com/eiffel/gobo/Readme.txt"&gt;more details&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Major new libraries and tools since the last release include an elegant and powerful Eiffel library for command-line argument passing, an XSLT processor written entirely in Eiffel using the Gobo Eiffel XML library, and an Eiffel compiler - &lt;span style="font-style:italic;"&gt;"still under development but already able to compile all the Eiffel code contained in the Gobo package"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Over the years, Eric has been known for his herculean efforts to support as many Eiffel compilers as possible. Even so, the Gobo Eiffel Package has had to move with the times and this is likely to be the last version that supports Visual Eiffel (on account of its lack of support for language features such as agents which have been supported in other compilers for many years). SmartEiffel 2.x is also not supported, because of its language changes. As Eric says, &lt;span style="font-style:italic;"&gt;"it implements another language than the one supported in Gobo"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The Gobo package supports ISE Eiffel 5.6, 5.7 and 6.0 but Eric has marked the support for 5.7 and 6.0 as "unofficial" as a protest against the way that these versions have slugged users with the ECF system files, leaving some users stuck with 5.6 for now at least.&lt;br /&gt;&lt;br /&gt;Finally, there's the great news that future versions of Gobo will be released under the MIT license.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116964407703079903?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116964407703079903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116964407703079903' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116964407703079903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116964407703079903'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/01/gobo-35-released.html' title='Gobo 3.5 released'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116956164891026046</id><published>2007-01-23T14:02:00.000Z</published><updated>2007-05-08T04:10:05.891Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>EiffelStudio to move to FreeElks</title><content type='html'>Emmanuel ("Manu") Stapf has confirmed on the ES-devel mailing list that EiffelStudio will eventually replace its "base" library classes with the corresponding classes from the open source &lt;a href="http://sourceforge.net/projects/freeelks/"&gt;FreeElks project&lt;/a&gt;, which is administered by Emmanuel Stapf and Eric Bezault.&lt;br /&gt;&lt;br /&gt;At first glance this seems rather odd. FreeElks was established (with ISE's blessing and initial donation of code) to provide a free implementation of EiffelBase - but this was before EiffelStudio itself became open source.&lt;br /&gt;&lt;br /&gt;So why the switch? There's one key difference between the FreeElks and EiffelStudio libraries - FreeElks will not have any dependencies on the EiffelStudio runtime. This will make it possible to use the same core kernel library library - with bug-for-bug compatibility - for both EiffelStudio and Eric's &lt;a href="http://gobo-eiffel.sourceforge.net/gec/index.html"&gt;Gobo Eiffel Compiler&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Manu advises that the switch will take place "when elks compiles". Although freeelks is under active development, it may be a while yet before it's a "drop-in replacement".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116956164891026046?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116956164891026046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116956164891026046' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116956164891026046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116956164891026046'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/01/eiffelstudio-to-move-to-freeelks.html' title='EiffelStudio to move to FreeElks'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116910564451922633</id><published>2007-01-18T07:20:00.000Z</published><updated>2007-05-08T04:14:27.593Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='dbc'/><title type='text'>Design by Contract to Improve Software Vigilance</title><content type='html'>Yves Le Traon, Benoit Baudry and Jean-Marc Jézéquel have written a &lt;a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?isnumber=35945&amp;arnumber=1703388&amp;count=8&amp;index=4"&gt;very useful article on how DbC improves vigilance and diagnosability&lt;/a&gt;. It appeared in the IEEE Transactions of Software Engineering, vol 32, no. 8, August 2006 (yes, magazine somehow ended up at the bottom of my stack). Abstract:&lt;br /&gt;&lt;blockquote&gt;Design by Contract is a lightweight technique for embedding elements of formal specification (such as invariants, pre and postconditions) into an object-oriented design. When contracts are made executable, they can play the role of embedded, online oracles. Executable contracts allow components to be responsive to erroneous states and, thus, may help in detecting and locating faults. In this paper, we define Vigilance as the degree to which a program is able to detect an erroneous state at runtime. Diagnosability represents the effort needed to locate a fault once it has been detected. In order to estimate the benefit of using Design by Contract, we formalize both notions of Vigilance and Diagnosability as software quality measures. The main steps of measure elaboration are given, from informal definitions of the factors to be measured to the mathematical model of the measures. As is the standard in this domain, the parameters are then fixed through actual measures, based on a mutation analysis in our case. Several measures are presented that reveal and estimate the contribution of contracts to the overall quality of a system in terms of vigilance and diagnosability.&lt;/blockquote&gt;&lt;br /&gt;The article uses the &lt;a href="http://www.nenie.org/eiffel/pylon/index.html"&gt;Franck's Pylon library&lt;/a&gt;, which isn't maintained anymore. The article would have even been more useful if the authors had looked at the widely used Gobo libraries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116910564451922633?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116910564451922633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116910564451922633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116910564451922633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116910564451922633'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/01/design-by-contract-to-improve-software.html' title='Design by Contract to Improve Software Vigilance'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116908889550080120</id><published>2007-01-18T02:50:00.000Z</published><updated>2007-01-18T02:54:55.516Z</updated><title type='text'>JSON support in EJAX</title><content type='html'>EJAX has now support for JSON output. I recently had a real need for this when I had a page that was rendered differently depending on if the user was logged on or not. &lt;a href="http://www.pobox.com/~berend/rest/authentication.html"&gt;Using my optional login technique&lt;/a&gt; I could not simply depend on the browser returning an optional Authentication header. This can be faked, because for optional authentication the browser always send this header, but the server doesn't validate it.&lt;br /&gt;&lt;br /&gt;So the parts of the page where personal information was shown was loaded using a script tag which got its information from a protected part of the site, where the Authentication header was really checked. This part &lt;a href="http://dangermoose.blogspot.com/2005/04/ajax-with-dynamic-script-tags-revised.html"&gt;returned JSON wrapped in a callback function&lt;/a&gt;. Works great.&lt;br /&gt;&lt;br /&gt;The JSON is returned by simply emitting the result of a SQL call (using ECLI) as JSON.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116908889550080120?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116908889550080120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116908889550080120' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116908889550080120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116908889550080120'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/01/json-support-in-ejax.html' title='JSON support in EJAX'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116903943542459514</id><published>2007-01-17T13:00:00.000Z</published><updated>2007-05-08T04:10:05.891Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>EiffelStudio is Jolt Award finalist</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/2268/149/1600/917975/studio4.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/2268/149/320/675737/studio4.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;EiffelStudio 5.7 has been selected as one of the finalists in this year's &lt;a href="http://www.joltawards.com/2007/"&gt;Jolt Product Excellence and Productivity Awards&lt;/a&gt; in the category of Development Environments.&lt;br /&gt;&lt;br /&gt;Other contenders in the category are IntelliJ IDEA (from JetBrains), IronPython (from Microsoft), Microsoft XNA Game Studio Express, Microsoft XNA Framework, NetBeans IDE (from Sun Microsystems) and Wolfram Workbench (from Wolfram Research).&lt;br /&gt;&lt;br /&gt;The winner will be announced in March at &lt;a href="http://www.sdexpo.com/"&gt;SD West 2007&lt;/a&gt; in Santa Clara.&lt;br /&gt;&lt;br /&gt;EiffelStudio was also a finalist back in 2002, in the category of Languages and Development Environments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116903943542459514?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116903943542459514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116903943542459514' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116903943542459514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116903943542459514'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2007/01/eiffelstudio-is-jolt-award-finalist.html' title='EiffelStudio is Jolt Award finalist'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116551339101590961</id><published>2006-12-07T17:41:00.000Z</published><updated>2006-12-07T17:43:11.033Z</updated><title type='text'>Meta</title><content type='html'>I'll be away for a month. If anything needs to be done to this blog, about half of the contributors have Admin privileges.&lt;br /&gt;&lt;br /&gt;Thanks to all who have contributed and helped to make TeamEiffel a useful news and discussion resource for the Eiffel community.&lt;br /&gt;&lt;br /&gt;Have a great festive season, and may all your assertions remain True.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Roger Browne&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116551339101590961?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116551339101590961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116551339101590961' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116551339101590961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116551339101590961'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/12/meta.html' title='Meta'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116528768598570458</id><published>2006-12-05T02:13:00.000Z</published><updated>2006-12-05T03:04:21.416Z</updated><title type='text'>What AJAX framework should I use</title><content type='html'>The most often asked AJAX question seems to be: What AJAX framework should I use. Let me give a few principles that will help to narrow down the selection from the current 300 or so into some that will be applicable:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Does the website target visitors that only use the site occassionally? Or is it more like an intranet site where people use it for a long time?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In the first case choose a light framework with downloads less than 200KB. With compression and gzipping that might get you down into the safe 50-100KB range. For sites where people stay long the initial download might be annoying but after that the cache should hopefully work (if you're stuck with IE 6 clients, no the cache won't work) so larger downloads are acceptable.&lt;br /&gt;&lt;br /&gt;Frameworks that have the option to load code piecemeal might be acceptable in the first case, but if the first page is fairly slow and the second is fairly slow, don't expect people to stay longer.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Is AJAX used to enhance an existing site or is it one that is built from scratch?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In the first case use a light framework, such as &lt;a href="http://prototype.conio.net/"&gt;prototype.js&lt;/a&gt;. If it is for a new site you can even choose &lt;a href="http://code.google.com/webtoolkit/"&gt;a tool that requires Java all the way&lt;/a&gt;. Even a tool that claims you don't have to know JavaScript (snicker).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Do you have an existing backend or preference for a certain language/approach at the backend?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Some tools &lt;a href="http://code.google.com/webtoolkit/"&gt;such as GWT&lt;/a&gt; are integrated tools and requires a commitment to the back-end as well. Other tools such as &lt;a href="http://www.tibco.com/devnet/index.html"&gt;Tibco GI&lt;/a&gt; are independent of the back-end. Other tools like prototype.js are backend independent but are designed to work particularly well with Ruby (on Rails).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Will the site require many specific widgets? Examples are tabs, grids, date controls, type-ahead and such?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;If many widgets are required, it would be better to choose a framework that already has the widgets. Writing them from scratch takes time. Combining widgets from different frameworks is hard as drag/drop, color selection, and styling are not portable.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;This should narrow down potential candidates. After that come more minor questions as can CSS be used to style widgets? How difficult is the HTML that must be generated in order for the widget to work? Or is the widget smart enough to insert the padding HTML itself?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116528768598570458?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116528768598570458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116528768598570458' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116528768598570458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116528768598570458'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/12/what-ajax-framework-should-i-use.html' title='What AJAX framework should I use'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116509789870346482</id><published>2006-12-02T22:09:00.000Z</published><updated>2007-05-08T04:17:03.637Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>Eweasel regression testing tool for ISE Eiffel</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://eiffelsoftware.origo.ethz.ch/images/thumb/a/ab/Mustela_erminea.jpg/180px-Mustela_erminea.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 180px;" src="http://eiffelsoftware.origo.ethz.ch/images/thumb/a/ab/Mustela_erminea.jpg/180px-Mustela_erminea.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Emmanuel Stapf has announced the &lt;a href="http://origo.ethz.ch/pipermail/es-devel/2006-December/001343.html"&gt;open-sourcing of the Eweasel regression testing tool&lt;/a&gt; for the ISE Eiffel compiler. It is now hosted at Origo together with EiffelStudio. Emmanuel writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;We have been using eweasel for quite some time now and the rule at Eiffel Software is that when you change something in the compiler, you have to run all the tests to ensure that no regression occurs.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;Any one who wants to modify the compiler, can now run the tests to ensure he is not breaking anything else.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The tests are evolving and we are adding a test each time we found a compiler bug. So if you find one, it would speed up its resolution by providing the corresponding eweasel test as part of the bug report.&lt;/i&gt;&lt;/blockquote&gt;The history of the tool is told at the &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Eweasel"&gt;Eweasel wiki page&lt;/a&gt;:&lt;blockquote&gt;&lt;i&gt;EiffelWeasel, also known as eweasel, is a tool originally written by David Hollenberg from MOSIS (a division of the University of Southern California's Information Sciences Institute) in the early 1990's when the first Eiffel 3 compiler was released.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt; The tool's goal was to ensure conformance of the ISE Eiffel compiler to the recently published specification and to detect any unforeseen regression from version to version. In 2006, USC agreed to open-source EiffelWeasel and it is now hosted as part of the EiffelStudio project repository.&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116509789870346482?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116509789870346482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116509789870346482' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116509789870346482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116509789870346482'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/12/eweasel-regression-testing-tool-for.html' title='Eweasel regression testing tool for ISE Eiffel'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116398316782807380</id><published>2006-11-20T00:35:00.000Z</published><updated>2006-11-20T00:39:27.846Z</updated><title type='text'>Emacs Eiffel mode beta release available</title><content type='html'>As people might be aware, I've become the maintainer of the Eiffel Emacs mode. I've gone through the various comments and requests people have send since 2004 and updated the mode accordingly. Some innocent requests have required huge changes unfortunately.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sourceforge.net/project/showfiles.php?group_id=162961"&gt;There is a beta release available&lt;/a&gt; for those who want to test out the changes. There's also &lt;a href="https://sourceforge.net/mail/?group_id=162961"&gt;an email list&lt;/a&gt; you can subscribe to if you use Emacs or XEmacs.&lt;br /&gt;&lt;br /&gt;Colin Paul Adams has been invaluable in testing the changes, so I believe it will work better than before. But some changes might be controversial, so sign up to that mailing list and give your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116398316782807380?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116398316782807380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116398316782807380' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116398316782807380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116398316782807380'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/emacs-eiffel-mode-beta-release.html' title='Emacs Eiffel mode beta release available'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116385010668693528</id><published>2006-11-18T11:14:00.000Z</published><updated>2007-05-08T04:17:03.637Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>Differences between ETL, ECMA Eiffel and EiffelStudio</title><content type='html'>On the comp.lang.eiffel newsgroup, Colin Adams asked:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Does anyone know of a list of syntax changes between OOSC2 and ECMA Eiffel (or EiffelStudio 5.7)?&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;I want to insert sheets of paper into the front of copies of OOSC2 so Eiffel learners don't get confused.&lt;/i&gt;&lt;/blockquote&gt;Here are two pages related to this question:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/30_compiler/10_ise_eiffel_specific/ecma.html"&gt;Differences between EiffelStudio and ECMA Eiffel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/30_compiler/10_ise_eiffel_specific/index.html"&gt;Differences between ETL Eiffel and EiffelStudio&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Also of interest is the task list showing &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/ECMA_Implementation"&gt;progress towards implementing ECMA Eiffel&lt;/a&gt; in EiffelStudio.&lt;br /&gt;&lt;br /&gt;See also the section "Language Changes from the Previous Edition" in Bertrand Meyer's &lt;a href="http://se.ethz.ch/~meyer/#Progress"&gt;draft of the book "Standard Eiffel"&lt;/a&gt; (which will supersede ETL).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116385010668693528?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116385010668693528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116385010668693528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116385010668693528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116385010668693528'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/differences-between-etl-ecma-eiffel.html' title='Differences between ETL, ECMA Eiffel and EiffelStudio'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116377872956557753</id><published>2006-11-17T15:31:00.000Z</published><updated>2006-11-17T15:52:09.920Z</updated><title type='text'>The type system of ECMA Eiffel</title><content type='html'>&lt;a href="http://www.ecma-international.org/publications/standards/Ecma-367.htm"&gt;ECMA Eiffel&lt;/a&gt; brings a number of changes and refinements to the type system of Eiffel. Matthias Konrad has been carefully analysing these, and is documenting his work at the &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Main_Page"&gt;EiffelStudio wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Matthias has worked out a &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/DynBindModel"&gt;mathematical model of dynamic binding for ECMA Eiffel&lt;/a&gt;, and supported this with a &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/DynBindModelExamples"&gt;substantial worked example&lt;/a&gt; and a &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/DynBindModelHaskell"&gt;formal implementation of the model&lt;/a&gt; in &lt;a href="http://www.haskell.org/haskellwiki/Haskell"&gt;Haskell&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The ECMA Eiffel Standard defines the "Unfolded Form" of an Eiffel class, and uses this to describe the semantics of various language elements of ECMA Eiffel, such as precursor and repeated inheritance. &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/ECMA_unfolded"&gt;Matthias examines unfolding&lt;/a&gt;, and its consequences on "rename", "select" and "precursor". He also looks at transposition of inherited features into a descendant (for production of the flat-short representation, or in the definition of some unfolded forms), which has &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Transposition"&gt;consequences for repeated inheritance&lt;/a&gt; (with or without covariant redefinition). &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Replication"&gt;Replication&lt;/a&gt; is given a page of its own. There's also an article under development on &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Multiple_constraints"&gt;multiple generic constraints&lt;/a&gt;, for which Matthias proposes two possible solutions, neither of which appears to be completely satisfactory.&lt;br /&gt;&lt;br /&gt;The ECMA standard introduces a new solution to the "CAT call" problem, by disallowing covariant argument redefinition except to a detachable type. Matthias notes that this &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/New_CAT_call"&gt;considerably weakens the power of covariance in Eiffel&lt;/a&gt;, especially if the solution is extended to covariant generics (which doesn't appear to be explicitly addressed in ECMA Eiffel). Also see Matthias' work on the &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/DynamicTypeSet"&gt;Dynamic Type Set&lt;/a&gt; and CAT call freeness detection algorithms.&lt;br /&gt;&lt;br /&gt;Finally there are some notes of &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Minor-ECMA-problems"&gt;minor ECMA problems&lt;/a&gt; that will presumably be addressed in a future revision of the specification.&lt;br /&gt;&lt;br /&gt;All in all, a most interesting set of pages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116377872956557753?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116377872956557753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116377872956557753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116377872956557753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116377872956557753'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/type-system-of-ecma-eiffel.html' title='The type system of ECMA Eiffel'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116363083086534084</id><published>2006-11-15T22:20:00.000Z</published><updated>2006-11-15T22:57:14.296Z</updated><title type='text'>"Eiffel Specification" package updated</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/espec_logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/espec_logo.png" border="0" alt="" /&gt;&lt;/a&gt;The &lt;a href="http://www.cse.yorku.ca/~sel/espec/"&gt;ESpec project&lt;/a&gt; has released a new version of their package, to work with the final release of EiffelStudio 5.7.&lt;br /&gt;&lt;br /&gt;ESpec (Eiffel Specification) is a Software Quality Workbench supporting Specification Driven Development by helping developers to write and execute acceptance tests as well as unit tests within the same environment.&lt;br /&gt;&lt;br /&gt;ESpec provides support for writing testable requirements and specifications at multiple stages of software development process. Developers can write requirements and specification such as Fit tests, unit tests, contracts as early as possible.&lt;br /&gt;&lt;br /&gt;ESpec is a combination of three main components:&lt;ul&gt;&lt;li&gt;ES-Fit: An Acceptance Testing framework for capturing and testing customer requirements in the form of HTML tables used for Validation&lt;/li&gt;&lt;li&gt;ES-Test: A Unit Testing framework for testing specifications. A combination of Unit tests and Contracts are used for lightweight Verification&lt;/li&gt;&lt;li&gt;ES-Verify: A translator from Eiffel to Perfect language used for full Verification&lt;/li&gt;&lt;/ul&gt;ESpec focuses on Unit Tests and Contracts as testable specifications and Fit Tables as testable requirements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116363083086534084?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116363083086534084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116363083086534084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116363083086534084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116363083086534084'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/eiffel-specification-package-updated_15.html' title='&quot;Eiffel Specification&quot; package updated'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116325302308235980</id><published>2006-11-11T13:35:00.000Z</published><updated>2006-11-11T13:50:23.126Z</updated><title type='text'>Progress in the Wrappers Collection</title><content type='html'>The &lt;a href="https://gna.org/projects/eiffel-libraries/"&gt;Eiffel Wrapper Libraries Collection&lt;/a&gt; is a project to provide SmartEiffel bindings to several commonly used Free libraries. Since its &lt;a href="http://teameiffel.blogspot.com/2006/03/gnu-eiffel-wrapper-libraries.html"&gt;announcement in March&lt;/a&gt;, it has come a long way. &lt;a href="http://gtk.org/"&gt;GTK+&lt;/a&gt; bindings (which includes GDK, Glib, Gobject and Pango) are quite usable now and planning a beta release soon. Also included are &lt;a href="http://glade.gnome.org/"&gt;libglade&lt;/a&gt; bindings, so you can now develop GUI Eiffel applications with a RAD builder.&lt;br /&gt;There is a lot of work in progress into the database APIs too.&lt;br /&gt;And a recent newcomer to the collection is a wrapper to the &lt;a href="http://ffmpeg.mplayerhq.hu/"&gt;ffmpeg&lt;/a&gt; library, also at a usable level (want to do real time video playback in Eiffel? now you can!).&lt;br /&gt;Of course, anyone interested in contributing more libraries (or time to help with the existing one) is welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116325302308235980?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116325302308235980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116325302308235980' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116325302308235980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116325302308235980'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/progress-in-wrappers-collection.html' title='Progress in the Wrappers Collection'/><author><name>Daniel F Moisset</name><uri>http://www.blogger.com/profile/11550350763702904614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116281776200552512</id><published>2006-11-06T12:53:00.000Z</published><updated>2006-11-06T12:57:13.416Z</updated><title type='text'>New and Used Preconditions for Sale</title><content type='html'>Whilst testing the &lt;a href="http://eiffelzone.com/search.html"&gt;Eiffel Search Engine&lt;/a&gt; yesterday I was surprised to see this advertisement. I've seen some pretty weird eBay ads before, but this one tops them all!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/precondition-ad.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/precondition-ad.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116281776200552512?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116281776200552512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116281776200552512' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116281776200552512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116281776200552512'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/new-and-used-preconditions-for-sale.html' title='New and Used Preconditions for Sale'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116267968702400713</id><published>2006-11-04T22:21:00.000Z</published><updated>2006-11-04T22:34:47.046Z</updated><title type='text'>Eiffel Search Engine launched</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://eiffelzone.com/search.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px;" src="http://eiffelzone.com/search.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I've implemented an &lt;a href="http://eiffelzone.com/search.html"&gt;Eiffel Search Engine&lt;/a&gt; that performs a Google search across hundreds of hand-picked Eiffel sites. It's made possible through the &lt;a href="http://www.google.com/coop"&gt;Google Co-op&lt;/a&gt; program.&lt;br /&gt;&lt;br /&gt;The main Eiffel sites are included in their entirety, and I've also added lots of individual project sites as well as individual web pages that contain tutorials, critiques, blogs, reports etc. So why not try out the search, and bookmark it for use whenever you're looking for someting Eiffel-related?&lt;br /&gt;&lt;br /&gt;If there's an Eiffel source I've missed, you can post a comment here or on the search page itself and I'll add it to the Eiffel Search Engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116267968702400713?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116267968702400713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116267968702400713' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116267968702400713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116267968702400713'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/eiffel-search-engine-launched.html' title='Eiffel Search Engine launched'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116248255292008166</id><published>2006-11-02T15:47:00.000Z</published><updated>2006-11-03T12:02:33.246Z</updated><title type='text'>Why Eiffel Might Be Worth a Second Look</title><content type='html'>Great article about Eiffel. &lt;a href="http://www.kuro5hin.org/story/2006/10/31/20640/115"&gt;Check it out!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Edit by Roger Browne:&lt;/i&gt; Links in comments are not clickable, so here's a clickable copy of the Digg link posted in the comments by adamsits: &lt;a href="http://digg.com/programming/Speed_of_c_Garbage_collection_like_Java_and_cross_platform"&gt;http://digg.com/programming/Speed_of_c_Garbage_collection_like_Java_and_cross_platform&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116248255292008166?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116248255292008166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116248255292008166' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116248255292008166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116248255292008166'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/why-eiffel-might-be-worth-second-look.html' title='Why Eiffel Might Be Worth a Second Look'/><author><name>Brian Heilig</name><uri>http://www.blogger.com/profile/08214420787979905343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116247116580195156</id><published>2006-11-02T11:51:00.000Z</published><updated>2006-11-02T12:43:45.096Z</updated><title type='text'>Eiffel Forum License deprecated</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/eiffel-nice.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/eiffel-nice.jpg" border="0" alt="" /&gt;&lt;/a&gt;The Board of &lt;a href="http://eiffel-nice.org/"&gt;NICE&lt;/a&gt;, the Nonprofit International Consortium for Eiffel, has passed the following &lt;a href="http://groups.yahoo.com/group/eiffel-nice-board/message/843"&gt;motion&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;To reduce license proliferation and confusion, NICE encourages users of the &lt;a href="http://www.opensource.org/licenses/ver2_eiffel.php"&gt;EFL2&lt;/a&gt; license to consider relicensing under the &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT&lt;/a&gt; License. We do *not* wish to discourage programmers from using other popular &lt;a href="http://www.gnu.org/licenses/license-list.html"&gt;GNU and GNU-compatible licenses&lt;/a&gt; like the &lt;a href="http://www.opensource.org/licenses/bsd-license.php"&gt;BSD&lt;/a&gt; license.&lt;/i&gt;&lt;/blockquote&gt;&lt;b&gt;Can I continue to use the Eiffel Forum License?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Certainly. This motion is an "encouragement" and nothing more. You are free to continue using the Eiffel Forum License (version &lt;a href="http://www.opensource.org/licenses/eiffel.php"&gt;1&lt;/a&gt; or &lt;a href="http://www.opensource.org/licenses/ver2_eiffel.php"&gt;2&lt;/a&gt;) if it suits your needs.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Will the Eiffel Forum License retain its OSI certification?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Yes. The Eiffel Forum License retains its status as an OSI-certified open source software license.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why is NICE deprecating the Eiffel Forum License?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;OSI, the &lt;a href="http://www.opensource.org/"&gt;Open Source Initiative&lt;/a&gt;, recently listed the Eiffel Forum License as redundant because it is essentially equivalent to other more widely used software licenses. Proliferation of redundant licenses runs counter to the goals of the open source movement because it can make interoperability more awkward. Also, some corporations are wary of open-source software and may not be able to use software using niche licenses that have not been reviewed by their legal department.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why is NICE encouraging the MIT license rather than the similar BSD license?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The MIT license is already more widely used within the Eiffel community, including for the &lt;a href="http://smarteiffel.loria.fr/"&gt;SmartEiffel&lt;/a&gt; &lt;a href="http://smarteiffel.loria.fr/libraries/index.html"&gt;libraries&lt;/a&gt;. It is very short and clear.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What if I prefer to use the BSD license, the GPL, the LGPL or some other license?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Feel free to use another license if it meets your needs. All that NICE is doing is encouraging you to consider the MIT license as an alternative to the Eiffel Forum License.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What about compatibility with the GPL?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The MIT license is compatible with the GPL, just as the Eiffel Forum License is. This means that you can take MIT or EFL code and freely combine it with GPL code, provided the resulting work is licensed under the GPL.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;But I like the part of the Eiffel Forum License that encourages distributors of compiled code to release their source modifications back into the community.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No problem. That part of the Eiffel Forum License is not legally binding, so you can append it to the MIT license text with equal effect.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I maintain code that is released under the Eiffel Forum License. What should I do?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The choice is yours: you can continue to license your code under the EFL if you wish. Or, you could license future releases under the MIT or some other license. OSI stated in correspondence to NICE that they were not aware of any problems that would arise moving from the EFL2 license to the MIT license.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is the text of the MIT license?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Copyright (c) &amp;lt;year&amp;gt; &amp;lt;copyright holders&amp;gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116247116580195156?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116247116580195156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116247116580195156' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116247116580195156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116247116580195156'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/11/eiffel-forum-license-deprecated.html' title='Eiffel Forum License deprecated'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116178436914047155</id><published>2006-10-25T13:38:00.000Z</published><updated>2007-05-08T04:19:26.219Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>EiffelStudio 5.7 released</title><content type='html'>&lt;img align="right" src="http://photos1.blogger.com/blogger/2268/149/400/eiffelstudio_logo.jpg"&gt;EiffelStudio 5.7.64493 &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/EiffelStudio_5.7_Releases"&gt;&lt;span style="font-style:italic;"&gt;(changelog)&lt;/span&gt;&lt;/a&gt; has been released as "EiffelStudio 5.7 Final".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://eiffelsoftware.origo.ethz.ch/downloads/builds/"&gt;Downloads&lt;/a&gt; are available for FreeBSD x86, Irix MIPS, Linux (PPC, Sparc, x86 32 bit, x86 64 bit), OpenBSD x86, Solaris (Sparc and x86, 32 and 64 bit), Windows (32 and 64 bit). There is also a PorterPackage that can be used to bootstrap EiffelStudio on other platforms.&lt;br /&gt;&lt;br /&gt;Downloads will also be available from &lt;a href="http://eiffel.com/"&gt;eiffel.com&lt;/a&gt; in a few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116178436914047155?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116178436914047155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116178436914047155' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116178436914047155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116178436914047155'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/eiffelstudio-57-released.html' title='EiffelStudio 5.7 released'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116119230878474533</id><published>2006-10-18T17:08:00.000Z</published><updated>2006-10-18T18:20:20.336Z</updated><title type='text'>RIP affairs: the unique case</title><content type='html'>Yesterday, i had the surprise to discover that  the keyword &lt;span style="font-weight: bold;"&gt;unique&lt;/span&gt; has deappeared! Hmm, well, lastly it disappeared from the Eiffel language of ECMA.&lt;br /&gt;&lt;br /&gt;There are many good reasons to remove that keyword.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;there is no way to have coercition to the defined subset by the language except by putting in many contracts that x.in_range(my_first,my_last)&lt;/li&gt;&lt;li&gt;there is no way to specify a mapping to a given numeric sequence (ex: as in C, to tell the value of the first, the remaining being set with increments of one) what can be usefull in cases&lt;/li&gt;&lt;ul&gt;&lt;li&gt;where mapping the first element to zero has good algorithmic properties&lt;/li&gt;&lt;li&gt;where a same integer can receive values of 2 or more not overlapping series, but:&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;compilers are free to make sequences that overlap (for example all the sequences begin with zero), then,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the consistancy of select have to be checked: when a unique feature appears in some expression of the when clause, all the expressions in all when clauses of the select must be features of the same uniqe list.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So who will regret a so weird keyword?&lt;br /&gt;&lt;br /&gt;Frankly, me! I will regret it a lot, because in spite of all these disavantages, I made use of it often and regularly.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;Rest in peace dear keyword.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;We will never forget you, you was so unique!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And now? What to do for my programs that after 200 lines of features enumeration just say: INTEGER is unique? Well for it, I have a good solution. Because they are generated by some scripts, I would update these scripts if in one hypothetical  day I have to program for ECMA eiffel.&lt;br /&gt;&lt;br /&gt;And for my day to day programming where I need few features in the list? Okay I will use my delicate fingers on all these unpleasant keys to enter explicitly the type and the value. Does somebody have a better idea for a lazy man?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116119230878474533?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116119230878474533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116119230878474533' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116119230878474533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116119230878474533'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/rip-affairs-unique-case.html' title='RIP affairs: the unique case'/><author><name>José Bollo</name><uri>http://www.blogger.com/profile/14860115975552789010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116069266235654895</id><published>2006-10-12T22:19:00.000Z</published><updated>2006-10-12T22:37:42.440Z</updated><title type='text'>Forms in EJAX</title><content type='html'>Forms in EJAX are either the normal HTML controls or XForms controls. The former can of course be created by any designer, the latter will probably need a programmer with an HTML editor. XForms controls are translated to HTML controls through the final pass with &lt;tt&gt;ejax_page_formatter.xsl&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;To display controls with data in it, an application could create HTML output with controls with value statements. But that violates the EJAX principle of separation of concerns: HTML code should be separate from data as much as feasible.&lt;br /&gt;&lt;br /&gt;This problem is solved within XForms as well. The idea is to bind controls, through an XPath statement, to an instance. When the EJAX page formatter style sheet formats an HTML page, it basically copies the HTML nodes to the output. And does something special in certain cases. If the HTML control has an id element, the page formatter checks to see if there is a response with the same id as the form (and with type = 'model') and if the contents is an XForms model. If so, it will check if this model as a bind statement with an id equal to the id of the control. If so, it will use the specified XPath statement to select the data from the also supplied xforms:instance element.&lt;br /&gt;&lt;br /&gt;EJAX also has support for other attributes that can be specified with an xforms:bind element such as if the control should be readonly. If so, it sets the readonly attribute.&lt;br /&gt;&lt;br /&gt;It would be much easier of course if all browsers would support XForms out of the box. This probably won't happen. So XForms has to be emulated somehow. It is probably possible to emulate XForms with JavaScript, but that might lead to significant initial download times as also an XSL JavaScript implementation has to be provided. So EJAX emulates XForms as much as possible at the server side, emitting pure HTML as output.&lt;br /&gt;&lt;br /&gt;And we end up with a system where we have achieved separation of concerns: the HTML can be maintained and touched outside the hand of programmers (within certain limitations of course), and the HTML is connected to the data by passing in an instance with the XML representation of the data and the bind statements to select the appropriate values from this instance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116069266235654895?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116069266235654895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116069266235654895' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116069266235654895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116069266235654895'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/forms-in-ejax.html' title='Forms in EJAX'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116068633803185985</id><published>2006-10-12T20:24:00.000Z</published><updated>2006-10-12T20:52:18.226Z</updated><title type='text'>On the Reading Table</title><content type='html'>Read three interesting articles in a week. That's not bad. The first was "A Study of Design Characteristics in Evolving Software Using Stability as a Criterion", in IEEE Transactions on Software Engineering, May 2006 (yes, I'm behind sometimes).&lt;br /&gt;&lt;br /&gt;A study of software that has been in use, and has significantly evolved for three decades. What is still the same, and what has changed? The example has some Fortran specific bits in it, but this was a pretty interesting and unique article.&lt;br /&gt;&lt;br /&gt;Then we had Componentization: The Visitor Example. By our own Bertrand Meyer and Mrs Bezault.&lt;br /&gt;&lt;br /&gt;A really bad article was "Designing for Recovery". Can people please, please read OOSC2 and what Eiffel's view on exception handling is? This article was absolutely confusing because of the absence of clear definitions.&lt;br /&gt;&lt;br /&gt;And did you know that Knuth's volume four has been published? Found out why this has been kept secret in "The Atrocity Archives" by Charles Stross.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116068633803185985?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116068633803185985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116068633803185985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116068633803185985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116068633803185985'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/on-reading-table.html' title='On the Reading Table'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116067879573617857</id><published>2006-10-12T18:13:00.000Z</published><updated>2006-10-12T18:46:42.296Z</updated><title type='text'>The Zen of Python - Part III</title><content type='html'>&lt;p&gt;This is a followup to a series of previous posts; the previous one was &lt;a href="http://teameiffel.blogspot.com/2006/07/zen-of-python-part-ii.html"&gt;The Zen of Python - Part II&lt;/a&gt; and the introduction is at  &lt;a href="http://teameiffel.blogspot.com/2006/06/zen-of-python-part-i.html"&gt;The Zen of Python - Part I&lt;/a&gt;. If you are lazy to read that introduction, this is about some &lt;a href="http://python.org"&gt;Python&lt;/a&gt; design principles analyzed from an Eiffel perspective and comparing it with other languages (specially Python itself).&lt;/p&gt;&lt;h3&gt;Simple is better than complex.&lt;/h3&gt;&lt;p&gt;Simplicity is one of the most shining aspects of Eiffel. It lacks several features present in other languages, providing instead a few consistent but powerful ones that solve several problems together. For example, the Eiffel "class" concept serves also as a "module" concept (present in other languages as a separate thing). There are no functions and methods, everything is a class feature. Access routines and attributes are slightly different concepts in some cases, but for most purposes they are just "queries". Eiffel inheritance serves the purpose that other languages solve with inheritance, module importing, interfaces, mixins and a plethora of other constructs.&lt;/p&gt;&lt;p&gt;The nice thing is that most of this concepts are powerful but still follow simple and easy to understand rules. They are not swiss-army chainsaws, they are tools that simple adapt to several tasks, making the user unaware that they are actually different tasks.&lt;/p&gt;&lt;p&gt;One of the examples of this is the way that multiple inheritance (MI) works in Eiffel. The possibility  of using MI is one of the things that make Eiffel inheritance so powerful. However, among other languages with MI, Eiffel has some of the simplest rules available, thanks to the properties of "one name, one feature", symmetrical inheritance (the parents of a class have no "order") and explicit conflict solving. Compare this with languages which use the &lt;a href="http://www.python.org/download/releases/2.3/mro/"&gt;C3 method resolution order&lt;/a&gt;; C3 has nice mathematical properties, but gets a little hard to explain. So most developers of these languages (I have informally polled several python developers), don't know&lt;br /&gt;actually how their MI works. It is hard to understand intuitively what will happen in a class hierararchy with heavy use of MI and repeated inheritance; the Eiffel library has a lot of that and still method resolution is simple (I would dare saying obvious) to understand.&lt;/p&gt;&lt;h3&gt;Complex is better than complicated&lt;/h3&gt; &lt;p&gt;This is one of my favourite points in "The Zen of Python". Although "simple is better than complex" is easy to defend, there is always a limit about how much simplification you can add to a language without forcing the developer to workaround the "simple" mechanism, creating code that is actually more complex than the complexity that would have been added by a new language mechanism. As Albert Einstein used to say "Make everything as simple as possible, but not simpler".&lt;/p&gt;&lt;p&gt;I find an example of this in the ability of having multiple constructors in Eiffel. It sure is "simpler" to do as most other popular languages (C++, Java, Python) and offer a single constructor in each class; but when there is the need to initialize an instance of a class in several different ways, the "simple" solution turns out to be more complicated: it demands the programmer choosing different types to do syntactic overloading, or adding "flags" to the constructor, or using arguments with default values and have a complex logic with if's inside the constructor trying to guess what kind of construction is needed (the last two options get worse when trying to inherit constructors). Eiffel offers the possibility of having more than one creation routine, which is a bit more complex than other "simple" languages, but actually removes complexity from the software construction process.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116067879573617857?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116067879573617857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116067879573617857' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116067879573617857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116067879573617857'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/zen-of-python-part-iii.html' title='The Zen of Python - Part III'/><author><name>Daniel F Moisset</name><uri>http://www.blogger.com/profile/11550350763702904614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116052680521343218</id><published>2006-10-11T00:30:00.000Z</published><updated>2006-10-11T00:33:55.826Z</updated><title type='text'>LA LA Land</title><content type='html'>&lt;a href="http://teameiffel.blogspot.com/2006/07/ejax-html-controls.html"&gt;I have been critical&lt;/a&gt; of the approach taken in .NET that you don't need to learn JavaScript. It seems &lt;a href="http://ajaxian.com/archives/helmi-technologies-releases-open-source-java-ajax-platform"&gt;the Ajaxian agrees&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;The platform is in the style of "you will not need to learn JavaScript". Instead, Java developers stay in Java land, put their hands over their ears and shout LA LA LA LA.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116052680521343218?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116052680521343218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116052680521343218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116052680521343218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116052680521343218'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/la-la-land.html' title='LA LA Land'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-116005229038073811</id><published>2006-10-05T12:08:00.000Z</published><updated>2006-10-05T12:44:50.926Z</updated><title type='text'>Google Code Search and Eiffel</title><content type='html'>Google has launched &lt;a href="http://www.google.com/codesearch"&gt;Google Code Search&lt;/a&gt;, a source code search engine. And what a search engine it is, even though it's still in beta!&lt;br /&gt;&lt;br /&gt;Searching for symbols is no problem, and there's full regular expression search. Wow, that must be computationally expensive.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.google.com/codesearch"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/codesearch_logo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;You can search by license - although the Eiffel Forum License is not recognised - perhaps that's another reason why the &lt;a href="http://teameiffel.blogspot.com/2006/07/osi-and-eiffel-forum-license.html"&gt;Eiffel community should standardise on something like the MIT license&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can restrict your search by language - just add &lt;span style="font-style:italic;"&gt;lang:eiffel&lt;/span&gt; to your search.&lt;br /&gt;&lt;br /&gt;Putting it all together, we could search for Gobo classes that contain old-style creation instructions: &lt;a href="http://www.google.com/codesearch?hl=en&amp;lr=&amp;q=Gobo+%22%21%21%22+lang%3Aeiffel&amp;btnG=Search"&gt;Gobo "!!" lang:eiffel&lt;/a&gt;. Naturally this search will also include other uses of "!!" within Eiffel code, yet the data we want is there too.&lt;br /&gt;&lt;br /&gt;I don't think it will be long before Google Code Search becomes almost indispensible. All we need now is some accepted protocol for the use of indexing clause tags and we will finally be able to realise the potential of indexing clauses!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-116005229038073811?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/116005229038073811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=116005229038073811' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116005229038073811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/116005229038073811'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/10/google-code-search-and-eiffel.html' title='Google Code Search and Eiffel'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115929857775367841</id><published>2006-09-26T19:20:00.000Z</published><updated>2006-09-26T19:22:57.783Z</updated><title type='text'>Bay Area Friends of Eiffel Meeting</title><content type='html'>Greg C has posted an open invitation to a gathering of the Bay Area Friends of Eiffel, for everyone interested in the Eiffel programming language.&lt;br /&gt;&lt;br /&gt;The meeting is September 27, 2006 and will start at 6:30 PM, and will be held at the offices of AXA Rosenberg in Orinda CA.&lt;br /&gt;&lt;br /&gt;Mark Howard will give an overview of important new ECMA features, especially those that will be available in the upcoming release of EiffelStudio 5.7 such as inline agents.&lt;br /&gt;&lt;br /&gt;For further information, contact Greg C at gmc444@yahoo.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115929857775367841?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115929857775367841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115929857775367841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115929857775367841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115929857775367841'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/bay-area-friends-of-eiffel-meeting.html' title='Bay Area Friends of Eiffel Meeting'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115921903876032754</id><published>2006-09-25T21:16:00.000Z</published><updated>2006-09-25T22:37:32.946Z</updated><title type='text'>Limitations of SCOOP</title><content type='html'>Bertrand Meyer has posted a new article on the EiffelWorld Column called &lt;a href="http://www.eiffel.com/general/monthly_column/2006/June.html"&gt;The Challenge of Concurrency&lt;/a&gt;. I currently work on a project that is highly distributed. The project has about 15 processes, each with about 8 threads. We are constantly running into bugs caused by some concurrency issue we failed to foresee.&lt;br /&gt;&lt;br /&gt;The normal developer action taken to handle concurrency is to wrap every function with a mutex. There is of course no substitute for careful design when it comes to concurrency, so the everything-gets-a-mutex solution inevitably results in hard-to-fix deadlock.&lt;br /&gt;&lt;br /&gt;One time a developer was locking a mutex in a signal handler (yeah, we told her it was a bad idea). It would intermittently result in deadlock. Since the signal handler was running in kernel space (I think) it would bring the processor to a halt! We had a very difficult time debugging that, an effort that took an entire week. So, my team and I are very interested in an elegant solution to this complex problem.&lt;br /&gt;&lt;br /&gt;I've struggled through the &lt;a href="http://se.ethz.ch/research/scoop/#examples"&gt;examples&lt;/a&gt; at the ETH SCOOP web site. I kind of understand them (although I wish there were examples without the GUI). What I have been unable to find anywhere is an explanation of the limitations of SCOOP. I don't mean limitations due to lack of implementation or support. I mean theoretical limitations. I've read that SCOOP can not support the active object model; I understand this. What I don't understand is what this means for me. Does this rule out SCOOP for my project? Can all concurrent problems be solved using SCOOP?&lt;br /&gt;&lt;br /&gt;One thing I've learned with Eiffel is that it sometimes takes a brain retraining. I've seen many people, including myself, stating that something is impossible in Eiffel, only to find that their paradigm was the limiting factor. I'm afraid I might have a limited paradigm (packed with semaphores and mutexes) when it comes to solving concurrent problems. Fully using SCOOP might require a dramatic shift in the way multiple processors are utilized to solve problems, but I don't know. Do any of you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115921903876032754?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115921903876032754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115921903876032754' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115921903876032754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115921903876032754'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/limitations-of-scoop.html' title='Limitations of SCOOP'/><author><name>Brian Heilig</name><uri>http://www.blogger.com/profile/08214420787979905343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115917734280542338</id><published>2006-09-25T09:22:00.000Z</published><updated>2007-05-08T04:17:03.638Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiffelstudio'/><title type='text'>EiffelBase ugliness</title><content type='html'>EiffelBase is a nice library for the beginner. But when you start working with it, you will see more and more of its ugly faces. I have recently stumbled over a feature in the &lt;b&gt;FILE&lt;/b&gt; class that captures two of the major deficiencies at the same time:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6992/820/1600/FILE_append.1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6992/820/320/FILE_append.1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Please note that we are not talking about a minor, unimportant feature in an seldomly used class. &lt;br /&gt;&lt;br /&gt;The first deficiency is easily visible: we are trying a strengthen a precondition by using &lt;i&gt;require else&lt;/i&gt;, something that just does not work in DbC. It is just wrong. It shows that inheritance was used inapproprately (Why is a FILE a SEQUENCE? Why does SEQUENCE not offer an opaque precondition for append? We are talking about two classes from the same library!).&lt;br /&gt;&lt;br /&gt;But the second problem is even more irritating: why do we need to pass two closed files? Normally we append to already open files. In my case, I wanted to write some output to a file, append another one, then continue writing, perhaps appending a second one and then close the final result. Instead, I have to write to a file, close it only for append, directly open it afterwards, and so on. EiffelBase does too much for the user, and by this limits the reusablity of the library.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115917734280542338?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115917734280542338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115917734280542338' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115917734280542338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115917734280542338'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/eiffelbase-ugliness.html' title='EiffelBase ugliness'/><author><name>Bernd Schoeller</name><uri>http://www.blogger.com/profile/09317416947657209694</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115913300959460843</id><published>2006-09-24T21:13:00.000Z</published><updated>2006-09-24T21:23:29.610Z</updated><title type='text'>Slashdot considers DbC for C++</title><content type='html'>A recent "Ask Slashdot" post starts with an anonymous reader looking for ways to use &lt;a href="http://ask.slashdot.org/article.pl?sid=06/09/22/2019224"&gt;Design By Contract in C++&lt;/a&gt;. He wrote:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;...I can imagine that a lot of the ideas from Eiffel can be applied there. I have looked around on the net and found a few articles talking about different ways of applying design by contract using assert statements and the like. I also found the dlib C++ library on SourceForge which, among other things, puts a design by contract face on a lot of API calls. So, there are obviously people doing it. What is everyone's experience with Design by Contract in C++? What tools are there that help make it a workable system? Lastly, are there any pitfalls to taking this approach in C++?&lt;/i&gt;&lt;/blockquote&gt;The discussion that followed contained plenty of suggestions (some informed, some misinformed, some humorous - this is &lt;a href="http://slashdot.org/"&gt;Slashdot&lt;/a&gt; after all).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Brian Heilig&lt;/span&gt; pointed out five ways in which Eiffel's "genuine" DbC worked better than simulations in C++. Briefly, these were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Contract inheritance is not properly supported in C++&lt;/li&gt;&lt;li&gt;You don't get fine-grained control of runtime checking in C++&lt;/li&gt;&lt;li&gt;You can't use "old" in C++ assertions&lt;/li&gt;&lt;li&gt;Class invariant checking should be suppressed during unqualified calls&lt;/li&gt;&lt;li&gt;It's hard to support loop variants in C++&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style:italic;"&gt;Coryoth&lt;/span&gt; agreed, concluding that&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Eiffel is actually an extremely elegant language with powerful DbC built into at the core. If DbC is something that's important to you Eiffel probably is your best choice.&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115913300959460843?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115913300959460843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115913300959460843' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115913300959460843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115913300959460843'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/slashdot-considers-dbc-for-c.html' title='Slashdot considers DbC for C++'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115894364504104052</id><published>2006-09-22T16:36:00.000Z</published><updated>2006-09-22T16:47:25.063Z</updated><title type='text'>AutoTest presentation at Google conference</title><content type='html'>&lt;a href="https://se.inf.ethz.ch/people/leitner/auto_test/"&gt;AutoTest&lt;/a&gt; (by Andreas Leitner and Ilinca Ciupa) is a fully-automatic testing tool for Eiffel software, based on Design by Contract. AutoTest analyses the contracts then generates and runs test cases. It tries to satisfy the preconditions whilst seeing if it can break the postconditions. Well, it does more than that, but that's the basics.&lt;br /&gt;&lt;br /&gt;Andreas Leitner was accepted to present &lt;span style="font-style:italic;"&gt;"AutoTest: Push Button Testing using Contracts"&lt;/span&gt; at Google's recent Test Automation Conference in London, and a &lt;a href="http://video.google.com/videoplay?docid=-4914296609640869140&amp;q=label%3Altac"&gt;video of his presentation&lt;/a&gt; can be viewed at Google Video.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/autotest.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/autotest.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115894364504104052?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115894364504104052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115894364504104052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115894364504104052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115894364504104052'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/autotest-presentation-at-google.html' title='AutoTest presentation at Google conference'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115892639611167803</id><published>2006-09-22T11:51:00.000Z</published><updated>2006-09-22T12:01:47.776Z</updated><title type='text'>The right tool for the job</title><content type='html'>SmartEiffel includes an embedded debugger. You compile your application with the &lt;tt&gt;-sedb&lt;/tt&gt; option, and run it. You can then step through and inspect it by using a command-line interface.&lt;br /&gt;&lt;br /&gt;Damian Dobroczyński wanted to wrap the SmartEiffel debugger in a GUI. Not wanting to hack the SmartEiffel source code, he looked around for the right tools for the job.&lt;br /&gt;&lt;br /&gt;The "expect" utility is designed to talk to command-line applications: it feeds them input, and captures and analyses the output. The Tk widgets provide a quick way to knock up a graphical user interface, and the whole lot can be tied together with the TCL scripting language. And so was born the &lt;a href="http://eiffelzone.com/esd/sedbov/index.html"&gt;Sedbov project&lt;/a&gt; - the SmartEiffel Embedded Debugger Output Visualiser - a human interface to the SmartEiffel debugger.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://opensvn.csie.org/traccgi/sedbov/wiki/WikiStart"&gt;Damian writes&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;This is one of the weirdest projects I've made in my short life. I tried to make human interface to SmartEiffel embedded debugger and I proved that it is possible&lt;/i&gt;&lt;/blockquote&gt;The fruits of Damian's labour are a &lt;a href="https://opensvn.csie.org/traccgi/sedbov/browser/trunk/sedbov.tcl"&gt;1238-line TCL script&lt;/a&gt;, which produces the interface shown below (click for an enlargement):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://eiffelzone.com/esd/sedbov/sedbov2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px;" src="http://eiffelzone.com/esd/sedbov/sedbov2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115892639611167803?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115892639611167803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115892639611167803' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115892639611167803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115892639611167803'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/right-tool-for-job.html' title='The right tool for the job'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115887040955804562</id><published>2006-09-21T19:26:00.000Z</published><updated>2006-09-21T20:29:17.120Z</updated><title type='text'>Do users need a truly open Eiffel compiler?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/525580_open.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/525580_open.jpg" border="0" alt="" /&gt;&lt;/a&gt;The recent SmartEiffel fracas highlighted a situation that's been developing for more than a decade. The Eiffel community has several open source compilers, but does not yet have an open compiler.&lt;br /&gt;&lt;br /&gt;The open-sourcing of EiffelStudio has provided an abundance of goodies to Eiffel developers, but the product directions of EiffelStudio are not set by the users of the open source edition. Naturally, the product directions are set by the need of ISE to service their commercial customers, and by the needs imposed by the use of EiffelStudio at ETH.&lt;br /&gt;&lt;br /&gt;Similarly, the development of SmartEiffel is driven by the goals of Dominique and his team, and it's pretty clear that those goals often differ from those of the SmartEiffel users.&lt;br /&gt;&lt;br /&gt;Visual Eiffel has been open source for a while too, yet it has a provision that patches cannot be accepted into the trunk unless they are also suitable for the proprietary edition.&lt;br /&gt;&lt;br /&gt;A truly open Eiffel compiler, with an open development process controlled by its users, would offer many advantages. Foremost of these is that users would discover that it's actually worth their time to contribute - patches will be accepted if considered useful by the users as a whole. This creates a positive feedback loop whereby more people contribute, the product gets better, more people use the product, and even more people contribute.&lt;br /&gt;&lt;br /&gt;Another advantage is that open projects tend to emphasize interoperability. To paraphrase something I found at &lt;a href="http://www.rosegardenmusic.com/tour/integration/"&gt;rosegardenmusic.com&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Because of the spirit of openness and co-operation, there's an incentive for people working on quite different applications, libraries and tools to make them work together so as to strengthen all of the pieces.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;This is quite unlike the situation we have now where each compiler has its own language and tools, and refuses to support the others.&lt;/i&gt;&lt;/blockquote&gt;Stay tuned...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115887040955804562?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115887040955804562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115887040955804562' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115887040955804562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115887040955804562'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/do-users-need-truly-open-eiffel.html' title='Do users need a truly open Eiffel compiler?'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115877358447889323</id><published>2006-09-20T15:09:00.000Z</published><updated>2006-09-20T17:33:04.686Z</updated><title type='text'>$200 prize for someone familiar with gcc</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/gccegg-65.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/gccegg-65.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Are you (even a little bit) familiar with the inner workings of gcc?&lt;br /&gt;&lt;br /&gt;If so, the Visual Eiffel community would appreciate your help in making Visual Eiffel work with recent versions of gcc (4.x) under Linux. Currently, if you want to bootstrap Visual Eiffel you need to use gcc 2.95, although you don't need it just to run Visual Eiffel (or even to build Visual Eiffel if you are not bootstrapping the code generation part).&lt;br /&gt;&lt;br /&gt;Eugene Melekhov wrote: &lt;blockquote&gt;&lt;i&gt;"the VE runtime at the moment can be compiled only by gcc 2.95 due to dependecy on gcc code generation - function prologue/epilogue, stack allocation etc."&lt;/i&gt;&lt;/blockquote&gt;I am offering a $200 prize to anyone who can remove the dependency on gcc 2.95 before the end of 2006.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115877358447889323?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115877358447889323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115877358447889323' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115877358447889323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115877358447889323'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/200-prize-for-someone-familiar-with.html' title='$200 prize for someone familiar with gcc'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115861454643521389</id><published>2006-09-18T21:11:00.000Z</published><updated>2007-05-08T04:18:15.612Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='smarteiffel'/><title type='text'>Whither SmartEiffel?</title><content type='html'>A few fairly innocent questions by Phil Taylor on the SmartEiffel mailing list led to an extraordinary amount of vitriol from main SmartEiffel contributors. In the end, one of the main SmartEiffel users outside the inner SmartEiffel circules decided to leave as well. Roger Browne, main contributor to this blog wrote:&lt;br /&gt;&lt;blockquote&gt;That creates an atmosphere in which I can't contribute usefully to SmartEiffel. Bye.&lt;br /&gt;&lt;/blockquote&gt;Strange how the one compiler that opened up Eiffel to the open source community is led by people who have a talent and willingness to plant the boot into the face of everyone actually using their product. Very sad.&lt;br /&gt;&lt;br /&gt;Outside the core SmartEiffel contributors we now only have Daniel F. Moisset, the guy behind the SmartEiffel Transitional release and Cyril Adrian, who wrote in the same thread:&lt;br /&gt;&lt;blockquote&gt;Note that ESE will be my last attempt to do something viable with SmartEiffel. I'm quite fed up with hearing that the project is not open enough when we have been doing all we could to open up, KNOWING THAT SmartEiffel is not easily "openable" itself since it is primarily a research project (and the lab is a bit lukewarm in that respect).&lt;/blockquote&gt;Kinda vague. Greg C., another Eiffelist who has been around, wrote:&lt;br /&gt;&lt;blockquote&gt;Over two hundred messages on this one lame topic?&lt;br /&gt;&lt;br /&gt;That's it. I'm done.&lt;/blockquote&gt;Let's just hope that the Gobo Eiffel compiler will be ready soon. Although ISE Eiffel is open source, compiling a simple program with ISE Eiffel isn't simple. And although with my new laptop compilation is fast, it wasn't with my old Pentium III 650. And ISE takes up a huge amount of disk space. The story changes of course for large programs, where ISE Eiffel is a must. Recompilation speed with ISE is blindingly fast in such cases, and painful with the SmartEiffel approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115861454643521389?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115861454643521389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115861454643521389' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115861454643521389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115861454643521389'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/whither-smarteiffel.html' title='Whither SmartEiffel?'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115858247582373364</id><published>2006-09-18T12:11:00.000Z</published><updated>2006-09-18T12:27:55.996Z</updated><title type='text'>Eiffel repositories and svk version control</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://svk.elixus.org/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/svk-logo.0.png" border="0" alt="" /&gt;&lt;/a&gt;Most open-source Eiffel projects use &lt;a href="http://svk.elixus.org/"&gt;Subversion&lt;/a&gt; ("svn") for version control. Typically, the server is configured to allow anyone with an internet connection and a svn client to access the entire version control history (logs, revisions, etc).&lt;br /&gt;&lt;br /&gt;Instead of the svn client, you can use the svk client. This enhahces the functionality of the svn client by allowing you to mirror the entire repository on your local system (and keep the two in sync). Furthermore, svk supports distributed version control - you can maintain different patched versions, and synchronise with other svk users without needing to go through the project's central Subversion server.&lt;br /&gt;&lt;br /&gt;Svk can be used on any Subversion-hosted project; no special server settings are needed. But beware of trying to mirror the entire history of the project on your local machine. For a large or long-running project this sucks up huge amounts of bandwidth, and takes up huge amounts of space on your local machine, for data that you are unlikely to ever need.&lt;br /&gt;&lt;br /&gt;Better is to use svk to synchronise with the latest version of the project "trunk", then to mirror forward from that point.&lt;br /&gt;&lt;br /&gt;If you must have the entire history, it's much more efficient if you start from a history dump that has been prepared on the project server.&lt;br /&gt;&lt;br /&gt;The level of interest in svk has been growing, and the &lt;a href="http://smarteiffel.loria.fr/"&gt;SmartEiffel project&lt;/a&gt; has recognised this by offering an svk history dump for those who want it.&lt;br /&gt;&lt;br /&gt;Instructions on &lt;a href="http://smarteiffel.loria.fr/wiki/en/index.php/Development_release"&gt;using svk with the SmartEiffel repository&lt;/a&gt; are provided, whether you wish to use it for the trunk going forward, or for the entire project history.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115858247582373364?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115858247582373364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115858247582373364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115858247582373364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115858247582373364'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/eiffel-repositories-and-svk-version.html' title='Eiffel repositories and svk version control'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115833874947536017</id><published>2006-09-15T16:16:00.000Z</published><updated>2006-09-15T16:45:50.023Z</updated><title type='text'>The Power of DBC</title><content type='html'>I hadn't changed any code since my last successful test run so I wasn't expecting an error.  I was puzzled when the debugger reported a stack overflow.  Within minutes I realized the problem. In an object like:&lt;br /&gt;&lt;br /&gt;MY_CONTENT&lt;br /&gt;&lt;br /&gt;parent: MY_CONTENT&lt;br /&gt;&lt;br /&gt;the reference to parent was set to Current.  Obviously, some of my new content was being imported improperly.  I felt panic rise in my stomach.  My content import code is complex and hadn't changed in a while; I had no idea where to look for the problem.  The panic quickly gave way to relief when I realized it was just a missing invariant.  I added:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;invariant&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  valid_parent: parent /= Void implies not parent = Current&lt;br /&gt;  &lt;br /&gt;and re-ran my content import program.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dictionary.reference.com/search?q=bingo&amp;x=0&amp;y=0"&gt;Bingo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115833874947536017?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115833874947536017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115833874947536017' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115833874947536017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115833874947536017'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/power-of-dbc.html' title='The Power of DBC'/><author><name>Neal Lester</name><uri>http://www.blogger.com/profile/09983805241835697981</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://www.mysafetyprogram.com/neal.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115826874830308257</id><published>2006-09-14T20:54:00.000Z</published><updated>2006-09-14T21:19:09.400Z</updated><title type='text'>Rumours of Bertrand Meyer's death were exaggerated</title><content type='html'>My only claim to Wikipedia fame is that I wrote the &lt;a href="http://en.wikipedia.org/wiki/Wikipedia:UuU"&gt;oldest edit still to survive on Wikipedia&lt;/a&gt;, a minor edit which I made on the second day of its existence.&lt;br /&gt;&lt;br /&gt;But some people are famous enough to have an article about them at Wikipedia, and &lt;a href="http://en.wikipedia.org/wiki/Bertrand_Meyer"&gt;Bertrand Meyer, inventor of Eiffel&lt;/a&gt;, is justifiably one of those people. In fact, there is also an &lt;a href="http://de.wikipedia.org/wiki/Bertrand_Meyer"&gt;article about him&lt;/a&gt; on the &lt;a href="http://de.wikipedia.org/wiki/Hauptseite"&gt;German version of Wikipedia&lt;/a&gt;. And something went wrong there last December...&lt;br /&gt;&lt;br /&gt;A prankster (possibly a student) added the German translation of the following text to the entry about Bertrand Meyer:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;According to the latest reports, Bertrand Meyer died on 24.12.2005 in Zurich. On 23.12.2005, exam results were published; links between that publication and his death couldn't be confirmed.&lt;/b&gt;&lt;/blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/bertrand-meyer.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/bertrand-meyer.jpg" border="0" alt="" /&gt;&lt;/a&gt;According to Wikipedia:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The hoax was reported five days later by the Heise News Ticker and the article was immediately corrected. Many major news media in Germany and Switzerland picked up on the story, creating the German Wikipedia's version of a Seigenthaler affair. Meyer went on to publish a positive evaluation of Wikipedia, concluding "The system succumbed to one of its potential flaws, and quickly healed itself. This doesn't affect the big picture. Just like those about me, rumors about Wikipedia's downfall have been grossly exaggerated."&lt;/i&gt;&lt;/blockquote&gt;Bertrand wrote at length about this in his January 2006 column "&lt;a href="http://www.eiffel.com/general/monthly_column/2006/January.html"&gt;Defense and illustration of Wikipedia&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;I chuckled at the part where Meyer writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;McHenry ... dismisses the entry overall as a paper that "might be expected of a high school student, and at that [...] a C paper at best" (a reference to the grade, not the programming language).&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115826874830308257?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115826874830308257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115826874830308257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115826874830308257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115826874830308257'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/09/rumours-of-bertrand-meyers-death-were.html' title='Rumours of Bertrand Meyer&apos;s death were exaggerated'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115702858842199296</id><published>2006-08-31T12:31:00.000Z</published><updated>2006-08-31T12:49:48.570Z</updated><title type='text'>The Windows Eiffel Library migrating to Unicode</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://docs.eiffel.com/eiffelstudio/libraries/wel/samples/hello/index.html"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/wel-hello.png" border="0" alt="" /&gt;&lt;/a&gt;The &lt;a href="http://www.eiffel.com/libraries/wel.html"&gt;Windows Eiffel Library&lt;/a&gt; (part of EiffelStudio) is migrating to &lt;a href="http://www.unicode.org/"&gt;Unicode&lt;/a&gt;. Here's a summary of the migration strategy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Starting from the 5.7.0826 development release, WEL has switched from being ASCII based to Unicode.&lt;/li&gt;&lt;li&gt;All WEL routines that used to have an argument of STRING have been changed to STRING_GENERAL, which is a common ancestor to STRING and STRING_32 (the Unicode version of STRING).&lt;/li&gt;&lt;li&gt;All WEL queries whose return type was STRING now return a STRING_32.&lt;/li&gt;&lt;li&gt;For the 5.7 release, STRING_32 will convert to STRING.&lt;/li&gt;&lt;li&gt;In the 5.8 release, this conversion will be made obsolete and in 5.9 it will be gone.&lt;/li&gt;&lt;li&gt;This gives users some time to migrate their code.&lt;/li&gt;&lt;li&gt;The &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/WEL_and_Unicode"&gt;migration strategy page&lt;/a&gt; at the &lt;a href="http://eiffelsoftware.origo.ethz.ch/index.php/Main_Page"&gt;EiffelStudio wiki&lt;/a&gt; gives more details, and describes handling for cases where STRING was used as an actual generic parameter&lt;/li&gt;&lt;/ul&gt;Although I'm not currently running Windows, back in the day I did use WEL and found it to be the most solid Eiffel Windows library that I had encountered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115702858842199296?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115702858842199296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115702858842199296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115702858842199296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115702858842199296'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/windows-eiffel-library-migrating-to.html' title='The Windows Eiffel Library migrating to Unicode'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115642880630011304</id><published>2006-08-24T13:53:00.000Z</published><updated>2006-08-24T14:16:00.513Z</updated><title type='text'>38 Cool Things Eiffel Does</title><content type='html'>&lt;a href="http://www.eiffel.com/"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/simple-elegant-powerful.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;/a&gt;The &lt;a href="http://www.eiffel.com/"&gt;ISE website&lt;/a&gt; contains a puff piece listing a whole bunch of &lt;a href="http://www.eiffel.com/developers/cool_things.html"&gt;cool ways to use Eiffel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some of the bullet points will be familiar to most of us (&lt;span style="font-style:italic;"&gt;"Easily add contracts to classes for robust, unbreakable code"&lt;/span&gt;). Some of them may be new to some people (&lt;span style="font-style:italic;"&gt;"Do multiple and repeated inheritance from .NET classes, just as if they were Eiffel classes"&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;"Contain WinForms components in EiffelVision2 and vice-versa"&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;"Use DBC transparently across COM servers"&lt;/span&gt;). Some of them might stretch the imagination a little (&lt;span style="font-style:italic;"&gt;"Easily track down bugs at execution without debugging and almost without cost"&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;"Create your business model and then use it directly to implement"&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;But amongst the 38 "Cool Things" there are sure to be some nifty ways of using Eiffel that you haven't yet explored.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115642880630011304?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115642880630011304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115642880630011304' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115642880630011304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115642880630011304'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/38-cool-things-eiffel-does.html' title='38 Cool Things Eiffel Does'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115635933922637355</id><published>2006-08-23T18:33:00.000Z</published><updated>2006-08-23T18:55:39.563Z</updated><title type='text'>Equality of expanded objects</title><content type='html'>David Hollenberg &lt;a href="http://origo.ethz.ch/pipermail/es-devel/2006-August/000868.html"&gt;noticed&lt;/a&gt; that EiffelStudio 5.7 is accepting the following code fragment. Although the compiler emits two VWEQ warnings, the fragment compiles and runs (printing "False" twice):&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;local&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;a: INTEGER&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;b: BOOLEAN&lt;br /&gt;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;print (3 = True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;print (a = b)&lt;br /&gt;end&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;David asked (on the &lt;a href="http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-devel"&gt;EiffelStudio Developers mailing list&lt;/a&gt;):&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Is this really allowed by ECMA-367 or does the compiler have a problem? If ECMA-367 allows this, should it?&lt;/i&gt;&lt;/blockquote&gt;Bertrand Meyer &lt;a href="http://origo.ethz.ch/pipermail/es-devel/2006-August/000869.html"&gt;replied&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;This is permitted by the ECMA language definition. The matter was discussed at length in the committee over several meetings; the deciding point was that it's not quite realistic to enforce the earlier rule that the type of either of the arguments should conform to the other. This prevents comparing objects of types C and D, both of which conform to both of A and B, but not to each other. Then variables of these types can actually be attached to the same object.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The definition of x = y for reference semantics (see 8.21.3 in the standard) is that x and y are attached to the same object. For expanded semantics as in your example, it's that they are attached to equal objects, where equal objects must have both the same type and the same value.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;In the end it was felt that one should be able to ask a question, without first asking the question of whether one may ask the question.&lt;/i&gt;&lt;/blockquote&gt;I must admit that I did a double-take at the above sentence: isn't that what static typing is all about?&lt;br /&gt;&lt;br /&gt;Bertrand continues:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;There could have been a special rule for the expanded case -- since we know in advance that there is no conformance and that the result will always be False -- but this seemed to complicate the rules too much.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;As a general rule I am wary of relying on warnings but this seems to be a valid use for them: an indication by the compiler that things are not necessarily wrong but that the construction is unusual and needs to be checked.&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115635933922637355?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115635933922637355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115635933922637355' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115635933922637355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115635933922637355'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/equality-of-expanded-objects.html' title='Equality of expanded objects'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115569693377350788</id><published>2006-08-16T02:54:00.000Z</published><updated>2006-08-16T02:55:33.790Z</updated><title type='text'>ESE news</title><content type='html'>&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;(this is a copy of the mail sent to the SmartEiffel user list)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It begins to work!&lt;br /&gt;&lt;br /&gt;A first tool already exists, which will be used to build other ESE tools - but you can use it too.&lt;br /&gt;&lt;br /&gt;It is called &lt;span style="font-weight: bold;"&gt;ESEB&lt;/span&gt; (ESE Binder); it takes a DTD file and produces a bunch of classes that parse the corresponding XML files and build the corresponding tree.&lt;br /&gt;&lt;br /&gt;I also wrote the &lt;span style="font-weight: bold;"&gt;ESE installer&lt;/span&gt;. It is quite rough still but uses the most recent SmartEiffel configuration handling which uses directories instead of a single plain file. This feature will also be very convenient for packagers (Debian and such).&lt;br /&gt;&lt;br /&gt;Everything happens there: &lt;a href="http://ese.sourceforge.net"&gt;http://ese.sourceforge.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy hacking,&lt;br /&gt;&lt;br /&gt;Cyril&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115569693377350788?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115569693377350788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115569693377350788' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115569693377350788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115569693377350788'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/ese-news.html' title='ESE news'/><author><name>Cyril ADRIAN</name><uri>https://profiles.google.com/100388810006463519079</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-d90pUeD0dkI/AAAAAAAAAAI/AAAAAAAAAiQ/V8GoEy9_vlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115559157122751129</id><published>2006-08-14T21:25:00.000Z</published><updated>2006-08-14T21:39:31.246Z</updated><title type='text'>Command completion for EiffelStudio bashers</title><content type='html'>For some months, a &lt;a href="http://teameiffel.blogspot.com/2006/05/command-completion-for-smarteiffel.html"&gt;command completion utility for SmartEiffel&lt;/a&gt; has been available. Now EiffelStudio users have a similar tool, thanks to Patrick Ruckstuhl.&lt;br /&gt;&lt;br /&gt;Command completion works with the ec command-line compiler under the bash shell, and enables you to &lt;a href="http://www.faqs.org/docs/bashman/bashref_99.html"&gt;type in just the first few letters&lt;/a&gt; of options such as &lt;span style="font-style:italic;"&gt;-quick_melt&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;-precompile&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://eiffelsoftware.origo.ethz.ch/svn/contrib/users/patrickr/"&gt;Patrick's bash autocompletion script&lt;/a&gt; can be found in the EiffelStudio subversion repository.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115559157122751129?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115559157122751129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115559157122751129' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115559157122751129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115559157122751129'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/command-completion-for-eiffelstudio.html' title='Command completion for EiffelStudio bashers'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115559062900307148</id><published>2006-08-14T21:14:00.000Z</published><updated>2006-08-14T21:23:49.030Z</updated><title type='text'>EiffelMedia 0.9.0 released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2268/149/1600/em_0_9_0_kingfisher.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2268/149/400/em_0_9_0_kingfisher.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;a href="http://se.inf.ethz.ch/people/bay"&gt;Till G Bay&lt;/a&gt; has announced the release of version 0.9.0 ("kingfisher") of his &lt;a href="http://eiffelmedia.origo.ethz.ch"&gt;EiffelMedia&lt;/a&gt; package.&lt;br /&gt;&lt;br /&gt;EiffelMedia wraps the SDL graphics library to allow Eiffel to be used to develop multimedia applications that use video, audio, mouse, keyboard, joystick, CD-ROM etc.&lt;br /&gt;&lt;br /&gt;New in this version is support for procedural texture generation, and an improved 3D API. There are new examples, and EM_SURFACE can now save to PNG files. The EiffelMedia Vision2 widget no longer requires a patched SDL on Windows. Code changes have been made for EiffelStudio 5.7 compatibility.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(&lt;a href="http://eiffelzone.com/esd/esdl-tgb/index.html"&gt;EiffelMedia entry at EiffelZone.com&lt;/a&gt;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115559062900307148?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115559062900307148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115559062900307148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115559062900307148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115559062900307148'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/eiffelmedia-090-released.html' title='EiffelMedia 0.9.0 released'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115512808632208466</id><published>2006-08-09T12:26:00.000Z</published><updated>2006-08-09T12:54:46.700Z</updated><title type='text'>Are Those Comments?</title><content type='html'>Yesterday my co-worker and I were struggling to get data into and out of our embedded system because of a lack of PC software. We have several Linux boxes but they all have some security software that prevents us from accessing the serial port unless the administrator sets up a configuration file. The Windows boxes come installed with Hyper Terminal which is great for displaying data received from a serial port, but not so good at sending data into a serial port. Our options were:&lt;br /&gt;&lt;br /&gt;1. Call the administrator to have him set up a mini-com configuration file&lt;br /&gt;2. Call the administrator to have him install &lt;a href="http://www.symantec.com/procomm/"&gt;Procomm&lt;/a&gt; assuming we have a license.&lt;br /&gt;3. Code it in Eiffel!&lt;br /&gt;&lt;br /&gt;I told my co-worker I was going to code it in Eiffel and I'd be back in 10 minutes. 15 minutes later I arrived with a full duplex terminal I developed using &lt;a href="http://secom.sourceforge.net"&gt;secom&lt;/a&gt;. The program was fully tested and came equipped with proper error and exception handling. It was fully configurable via command line parameters. And it almost worked the first time (the embedded system wanted CR/LF when I was only sending it LF).&lt;br /&gt;&lt;br /&gt;In all fairness most of what I needed (command line parsing and error handling) was already coded in a secom example. I just modified this example to get what I wanted. It's possible I could have modified some C++ program I had that did most of what I needed. But for some reason, more often than not, I just don't get this kind of reuse from my C++ code. Chances are something would have snagged me if I was re-writing a C++ program. And it's not that I haven't tried to write &lt;i&gt;good&lt;/i&gt; C++ code, I have! Anyway, the best part of this story is my co-worker's response to seeing the code: "This is Eiffel code? Are those comments?" To which I responded, "No man, that's code." "Woa."&lt;br /&gt;&lt;br /&gt;The component model of software is a necessity for the advancement of software development. Without it we are doomed to make the same mistakes over and over. Eiffel supports the component model very well (or at least it lays a rock solid foundation). The advantage of the Eiffel language and style is that they support a truly open approach. Joe Coder can quickly get reuse from Eiffel code because it is designed to be so reusable, to anyone. So keep those reusable components coming!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115512808632208466?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115512808632208466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115512808632208466' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115512808632208466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115512808632208466'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/are-those-comments.html' title='Are Those Comments?'/><author><name>Brian Heilig</name><uri>http://www.blogger.com/profile/08214420787979905343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115452314696882222</id><published>2006-08-02T12:37:00.000Z</published><updated>2006-08-02T22:25:10.880Z</updated><title type='text'>All those versions ...</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Since the open sourcing of EiffelStudio everybody has now also access to all those exciting interim releases of EiffelStudio via &lt;a href="http://eiffelsoftware.origo.ethz.ch/downloads/builds/"&gt;http://eiffelsoftware.origo.ethz.ch/downloads/builds/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;With the ability to have a peak at the very latest features also comes the burden of constantly installing and switching between all those versions. &lt;a href="http://se.ethz.ch/people/schoeller/"&gt;Bernd&lt;/a&gt; and I hacked together a little script that simplifies both installing and switching between the various versions. The script is called &lt;a href="http://se.ethz.ch/people/leitner/estudio_tools.sh"&gt;estudio_tools.sh&lt;/a&gt; . Just safe it somewhere on your (Unix) machine and source it in your &lt;code&gt;.bashrc&lt;/code&gt;. This will give you two new commands:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# install_estudio [version]&lt;br /&gt;#   &lt;br /&gt;#      Installs the given version of Eiffel Studio. It first&lt;br /&gt;#      downloads the version and then unpacks it into ${LOCAL_ROOT}&lt;br /&gt;#      (see configuration section below). When no version is given the&lt;br /&gt;#      function lists the installable versions. When the version "default"&lt;br /&gt;#      is given it installs the latest version. Note that this function&lt;br /&gt;#      does not set any environment variables neccessary to run&lt;br /&gt;#      EiffelStudio. To accomplish this have a look at the function&lt;br /&gt;#      `activate_estudio'.&lt;br /&gt;#    &lt;br /&gt;# activate_estudio [version]&lt;br /&gt;#&lt;br /&gt;#      Activates the given version of Eiffel Studio. It sets/changes&lt;br /&gt;#      the environment variables ${ISE_EIFFEL}, ${ISE_LIBRARY}, and&lt;br /&gt;#      ${PATH}. When no version is given the function lists the installed&lt;br /&gt;#      version of EiffelStudio. When the version "default" is given the latest&lt;br /&gt;#      version will be activated.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have the following in my &lt;code&gt;.bashrc&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;source /usr/local/bin/estudio_tools.sh&lt;br /&gt;activate_estudio default&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The above first loads the function definitions and then activates the default EiffelStudio version. But let's see what the commands do on an clean and empty system. After sourcing estudio_tools.sh on a clean system invoking &lt;code&gt;install_estudio&lt;/code&gt; yields the following (today):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ install_estudio&lt;br /&gt;57_gpl_62110&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This means that the only installable version is 57_gpl_62110. I can then install this version via:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ install_estudio default&lt;br /&gt;Downloading EiffelStudio version 57_gpl_62110 ...&lt;br /&gt;Finished download.&lt;br /&gt;Unpacking EiffelStudio version 57_gpl_62110 ...&lt;br /&gt;Finished unpacking.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now the requested version of EiffelStudio is installed but not ready to use. We still have to set a few environment variables. But first lets use &lt;code&gt;activate_estudio&lt;/code&gt; to verify this version is installed:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ activate_estudio&lt;br /&gt;57_gpl_62110&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And indeed the version is installed. What is left now is to activate this version. Note that you will have to activate for every shell-session a new.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ activate_estudio default&lt;br /&gt;aleitner@bruck:~$ ec -version&lt;br /&gt;ISE EiffelStudio version 5.7.62110 GPL Edition&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The tool is very unintrusive. It simply installs all versions into a common directory. This directory (and some other details) can be changed by editing the the top part of the script. Chances are that if you already have such a directory where you store the various versions you can just reuse this directory. The script will probably recognize your old installations and offer you to install new ones too.&lt;br /&gt;&lt;br /&gt;have fun,&lt;br /&gt;Andreas&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115452314696882222?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115452314696882222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115452314696882222' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115452314696882222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115452314696882222'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/all-those-versions.html' title='All those versions ...'/><author><name>Andreas Leitner</name><uri>http://www.blogger.com/profile/11983518664176693960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115439764316591424</id><published>2006-08-01T01:56:00.000Z</published><updated>2006-08-01T09:40:51.830Z</updated><title type='text'>Feedback from OSI legal affairs</title><content type='html'>I've been in contact with OSI legal affairs and told them we in the Eiffel community considered switching to MIT. I asked them for any ramifications. Their response:&lt;br /&gt;&lt;blockquote&gt;The only substantial legal difference I would ask you about is that the MIT license says "free of charge" and the EFLv2 doesn't mention this at all.  Is the "free of charge" verbiage OK with the community? I don't think it precludes people from charging for software if they offer something more such as support, etc.&lt;br /&gt;&lt;br /&gt;EFLv2 also suggests things that the MIT license doesn't (it suggests distributing changed software needed by a program that is distributed) but since it doesn't REQUIRE that people do this, and people can still do it if they want, I see no legal difference there.&lt;br /&gt;&lt;br /&gt;I don't see any issues with combining the licenses. Is there something specific that you're concerned about?&lt;/blockquote&gt;So basically combining MIT with EFLv2 libraries isn't an issue. She mentions two other issues we might want to think about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115439764316591424?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115439764316591424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115439764316591424' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115439764316591424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115439764316591424'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/08/feedback-from-osi-legal-affairs.html' title='Feedback from OSI legal affairs'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115436135586019201</id><published>2006-07-31T15:42:00.000Z</published><updated>2006-07-31T15:57:05.216Z</updated><title type='text'>ECMA Eiffel 2nd Edition</title><content type='html'>&lt;a href="http://www.ecma-international.org/default.htm"&gt;&lt;img src="http://photos1.blogger.com/blogger/2268/149/400/ecma-logo.0.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;A second edition of ECMA Eiffel, dated June 2006, &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-367.htm"&gt;has been published&lt;/a&gt; (&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-367.pdf"&gt;PDF&lt;/a&gt;). It has been adopted by the General Assembly of ECMA as ECMA-367, and by ISO as ISO standard 25436.&lt;br /&gt;&lt;br /&gt;From the document:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The First Edition was completed in April of 2005 and approved by the General Assembly of ECMA in June of 2005. As a result, authors of major Eiffel compilers and tools have committed to supporting the language as described in the Standard; compilers are quickly progressing towards full compliance. The present Second Edition introduces no major change of substance but clarifies and corrects a number of points arising from the experience of using the First Edition and from the feedback of compiler writers and the user community&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;...&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;To produce this Standard, TC39-TG4 conducted: 18 face-to-face meetings (15 up to the First Edition), most of them over three full days; numerous phone meetings; and extensive technical correspondence (about 1500 email messages by June 2006).&lt;/i&gt;&lt;/blockquote&gt;I cannot find any list of changes between the first and second editions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115436135586019201?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115436135586019201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115436135586019201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115436135586019201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115436135586019201'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/ecma-eiffel-2nd-edition.html' title='ECMA Eiffel 2nd Edition'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115432515821387334</id><published>2006-07-31T05:42:00.000Z</published><updated>2006-07-31T05:52:38.226Z</updated><title type='text'>Coffee: blessing or curse?</title><content type='html'>I could not sleep this night, for having swallowed way too much coffee last evening. So I coded instead.&lt;br /&gt;&lt;br /&gt;My mind found the solution for  simply integrating forthcoming &lt;a href="http://smarteiffel.loria.fr"&gt;SE&lt;/a&gt; extensions (esp. &lt;a href="http://ese.sf.net"&gt;ESE&lt;/a&gt;) without having to re-parse and re-write SE's main config file.&lt;br /&gt;Well, in fact, I did not &lt;span style="font-style: italic;"&gt;invent&lt;/span&gt; the solution. Others did, Debian in particular.&lt;br /&gt;&lt;br /&gt;The principle is to replace a simple configuration file with a configuration &lt;span style="font-style: italic;"&gt;directory&lt;/span&gt;, with a priority system (of course, configuration files are still supported). I coded it all this night.&lt;br /&gt;&lt;br /&gt;Now, SmartEiffel users will be able to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;keep system's defaults while changing only some of them (typically: add a C mode, change or add a local loadpath...)&lt;/li&gt;&lt;li&gt;install an external SmartEiffel package (e.g. ESE) without changing either the system config file or their own config&lt;/li&gt;&lt;/ul&gt;And it will help distro package maintainers too. All I have left to do is to fix the installer to take that into account.&lt;br /&gt;&lt;br /&gt;Eiffel is cool. SE 2.3 will be cooler yet :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115432515821387334?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115432515821387334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115432515821387334' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115432515821387334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115432515821387334'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/coffee-blessing-or-curse.html' title='Coffee: blessing or curse?'/><author><name>Cyril ADRIAN</name><uri>https://profiles.google.com/100388810006463519079</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-d90pUeD0dkI/AAAAAAAAAAI/AAAAAAAAAiQ/V8GoEy9_vlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115408392475027130</id><published>2006-07-28T10:46:00.000Z</published><updated>2006-07-29T09:35:19.906Z</updated><title type='text'>Open Source Survey</title><content type='html'>Till G Bay, from ETH Zurich, has asked me to post this survey request on behalf of Professor Brian Fitzgerald. The survey explores the interaction between a "company" such as Eiffel Software (ISE) or, I suppose, Loria and an open source community (such as the community of ISE Eiffel or SmartEiffel users/developers).&lt;br /&gt;&lt;br /&gt;The survey took me less than five minutes to complete. If you choose to supply your name and email address you are entered into the draw for a Nokia internet tablet.&lt;br /&gt;&lt;br /&gt;Professor Fitzgerald writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Free/Libre/Open Source Software (FLOSS) has in many ways revolutionised software development. We have recently seen a new mode of outsourcing, what we term 'open-sourcing', whereby companies seek to grow a community of open source developers around what has typically (but not always) been a proprietary product previously. Both the company and the developer community have mutual expectations of each other, and if these are not fulfilled, the initiative may not be successful.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;We have derived a set of expectations for successful open-sourcing and would like your feedback on these at &lt;a href="http://www.calibre.ie/survey/index.php"&gt;http://www.calibre.ie/survey/index.php&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115408392475027130?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115408392475027130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115408392475027130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115408392475027130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115408392475027130'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/open-source-survey.html' title='Open Source Survey'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115395672818402674</id><published>2006-07-26T18:43:00.000Z</published><updated>2006-07-26T23:48:08.936Z</updated><title type='text'>Eiffel Shared Libraries and Incremental Compilation</title><content type='html'>As a previous C user, and now addicted Eiffel user, I have been thinking about and working on improvements in Eiffel tools and libraries, and I think that there are some aspects of C program building that Eiffel should adopt.&lt;br /&gt;&lt;br /&gt;I wish Eiffel to be seen as a possible primary language choice, not just for single, isolated, projects but for all-encompassing packages like KDE/Gnome etc, and there is one major roadblock in the way of that choice.&lt;br /&gt;&lt;br /&gt;Some 20 years ago, it was recognized that with all programs being statically linked, the file system and RAM/Swap have needless duplication of identical code for each of thousands of distinct programs. This is a performance issue, in that for most programs the library code is most of the application, say 80%, so that a given size of RAM can support 4-5 times the number of processes (not swapping) with shared libraries than it could without.&lt;br /&gt;&lt;br /&gt;There is a performance loss, for a single program, in using shared library technology, but the gain in loading from disk only the 20% of code not in the library is substantial.&lt;br /&gt;&lt;br /&gt;Once multiple shared libraries are available, then the following is feasible:&lt;br /&gt;&lt;br /&gt;Load library L1, containing classes A, B, C etc&lt;br /&gt;Load library L2, containing (updated) class B&lt;br /&gt;Register classes from library L1&lt;br /&gt;Register classes from library L2, overriding/hiding class B in L1&lt;br /&gt;For each registered class, allocate class IDs and register routines and attribute offsets etc&lt;br /&gt;Proceed through creation of root class instance ...&lt;br /&gt;&lt;br /&gt;The above provides for incremental compilation during program development, enables libraries to be shared by distinct programs, and makes possible the dynamic loading at run-time of additional libraries containing classes that inherit from classes present in the base library class set, making possible what is now possible in Java but not in Eiffel.&lt;br /&gt;&lt;br /&gt;I think there are lessons to learn from what has been achieved with C/C++/Java infrastructure, if not from their syntax and semantics! Let the discussion commence...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115395672818402674?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115395672818402674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115395672818402674' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115395672818402674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115395672818402674'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/eiffel-shared-libraries-and.html' title='Eiffel Shared Libraries and Incremental Compilation'/><author><name>Howard Thomson</name><uri>http://www.blogger.com/profile/02250845566863238903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115374904358927407</id><published>2006-07-24T13:47:00.000Z</published><updated>2006-07-24T13:50:43.603Z</updated><title type='text'>Which SmartEiffel release do you use?</title><content type='html'>Cyril Adrian (from the SmartEiffel team) is planning to package SmartEiffel and started an online poll to know which version of SmartEiffel people are using most.&lt;br /&gt;I find this an interesting question, beyond the issue of packaging; Berend and I had a recent discussion about usage trends of SmartEiffel versions on #eiffel.&lt;br /&gt;&lt;br /&gt;The poll is at &lt;a href="http://cadrian.freepolls.com/cgi-bin/polls/001/poll_center.htm"&gt;http://cadrian.freepolls.com/cgi-bin/polls/001/poll_center.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115374904358927407?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115374904358927407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115374904358927407' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115374904358927407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115374904358927407'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/which-smarteiffel-release-do-you-use.html' title='Which SmartEiffel release do you use?'/><author><name>Daniel F Moisset</name><uri>http://www.blogger.com/profile/11550350763702904614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115348587031064451</id><published>2006-07-21T12:17:00.000Z</published><updated>2006-07-21T12:44:30.740Z</updated><title type='text'>OSI and the Eiffel Forum License</title><content type='html'>The &lt;a href="http://opensource.org/index.php"&gt;Open Source Initiative&lt;/a&gt; is "a non-profit corporation dedicated to managing and promoting the Open Source Definition". One of the things they do is to certify software licenses as open-source, which means that the license complies with OSI's &lt;a href="http://opensource.org/docs/definition.php"&gt;Open Source Definition&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;OSI certification became important for getting software accepted into open source software distributions such as Debian Linux. Although the &lt;a href="http://opensource.org/licenses/eiffel.php"&gt;Eiffel Forum Freeware License&lt;/a&gt; pre-dated OSI by a few years, it became desirable to get them to certify the EFFL as an open-source license. This took a few years of bureaucratic haggling with OSI, but we got there in the end.&lt;br /&gt;&lt;br /&gt;Later, the &lt;a href="http://opensource.org/licenses/ver2_eiffel.php"&gt;Eiffel Forum License version 2&lt;/a&gt; was created. It was more liberal than the EFFL, so that EFL2-licensed software could be incorporated into GPL-licensed projects. Unlike the EFFL, the EFL2 is pretty similar to the liberal &lt;a href="http://opensource.org/licenses/mit-license.html"&gt;MIT&lt;/a&gt; and &lt;a href="http://opensource.org/licenses/bsd-license.php"&gt;BSD&lt;/a&gt; licenses. The Free Software Foundation confirmed that the EFL2 was GPL-compatible, and OSI certified it as "open source".&lt;br /&gt;&lt;br /&gt;For the last year or so, OSI has been pondering the proliferation of open source software licenses. One downside of having so many licenses is that it can hinder software re-use. There are two reasons for this. The first reason is that licenses sometimes have incompatible terms, and software covered by them cannot be legally combined.&lt;br /&gt;&lt;br /&gt;The second problem hindering re-use of software covered by many difference licenses is that many organizations are cautious by nature and feel unable to use software under a new license until their lawyers have checked it out at great expense. Clearly, this problem is compounded by the sheer volume of open source licenses that now exist.&lt;br /&gt;&lt;br /&gt;It's no surprise that OSI has concluded that the ELF2 license is redundant. This doesn't mean that the EFL2 will lose its open-source certification, it just means that OSI thinks the license is not a useful alternative to other more popular licenses.&lt;br /&gt;&lt;br /&gt;Berend de Boer has opened &lt;a href="http://groups.yahoo.com/group/eiffel-nice-discuss/message/1074"&gt;a discussion about this&lt;/a&gt; on the &lt;a href="http://groups.yahoo.com/group/eiffel-nice-discuss/"&gt;NICE-Discuss mailing list&lt;/a&gt;. He writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Minimising licenses is obviously a good goal and it helps code sharing. On the other hand everyone knows the Eiffel Forum License and many in the Eiffel community use it.&lt;/i&gt;&lt;/blockquote&gt;You may wish to hop over there to post your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115348587031064451?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115348587031064451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115348587031064451' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115348587031064451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115348587031064451'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/osi-and-eiffel-forum-license.html' title='OSI and the Eiffel Forum License'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115335373202769755</id><published>2006-07-19T23:58:00.000Z</published><updated>2006-07-20T00:02:12.043Z</updated><title type='text'>Even spammers now mention Eiffel</title><content type='html'>As the actual operation of my spam filter can best be described as: if it's not on your white list it is spam (although I'm sure the design requirements are entirely different), I regularly go through my spam to check if there's something I've unintentionally discarded. And occasionally I search the subjects for particular keywords to make sure I haven't missed anything.&lt;br /&gt;&lt;br /&gt;One of the keywords I use is Eiffel. That turned up two hits today. I can now buy a patch that will make a certain body organ bigger than the Eiffel Tower. Boy, will my wife be "happily" surprised...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115335373202769755?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115335373202769755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115335373202769755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115335373202769755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115335373202769755'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/even-spammers-now-mention-eiffel.html' title='Even spammers now mention Eiffel'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115328083502883271</id><published>2006-07-19T02:56:00.000Z</published><updated>2006-07-19T07:46:00.616Z</updated><title type='text'>EJAX HTML controls</title><content type='html'>I'm a big fan of the approach of &lt;a href="http://domscripting.com/presentations/xtech2006/"&gt;using progressive enhancement to build websites&lt;/a&gt;. In short this approach builds websites that begin with content/markup (HTML), use CSS to change the style and presentation, and use JavaScript to add behaviour. If you have to support IE with its limited support for CSS you might have to twist your content a bit, but with a decent browser this approach works very well. It will lead to websites that work everywhere and even work when JavaScript is disabled. It will give you quite a bit of guidenance in building robust websites, believe me.&lt;br /&gt;&lt;br /&gt;This is also the approach that one should take with HTML controls and capabilities like auto complete support that are possible with AJAX techniques. Make sure the control works when JavaScript is disabled. Use CSS to make it look nice. Use JavaScript to make it work better.&lt;br /&gt;&lt;br /&gt;The question is how to add these additional capabilities to HTML. Because in the end, the browser reads and interprets HTML. It uses CSS for the styling and JavaScript for the behaviour. That's how this environment works. And programmers should not be shielded from that. That is how the web really works. Having some magic to make it appear that this isn't the case is very detrimental to any programmer's internal model of how web applications work.&lt;br /&gt;&lt;br /&gt;I've occassion these days to do a lot of work with Visual Studio 2005, C#, ASP.NET and Atlas. And the result is horrible. Microsoft's behaviour can be best explained if you believe that they want lock-in. It explains why they will try to shield you from HTML, CSS and JavaScript. They allow absolute positioning of controls. A favorite technique in examples. Because drag/drop of controls works better that way. Woo the programmer who tries such a website on anything else than a pair of perfect eyes, perfect color perception, IE and the screen size of the original programmer. The web isn't a Win32 Visual Basic app. Making it appear so, will only lead people to build an internal model of web programming that is fundamentally untrue.&lt;br /&gt;&lt;br /&gt;The same is true for Microsoft's postback approach. How many websites work somewhat fine on intranet and then fundamentally fail on the internet? Again, Microsoft Visual Studio's approach is to give the programmer the idea he is building a Win32 form. He isn't.&lt;br /&gt;&lt;br /&gt;And then the controls. You have all those Microsoft controls like asp:Button. What's that? Is it an HTML button? Something else? You set its properties using background color and such. And that doesn't end up in some CSS style sheet let me tell you that. Programmer doesn't need to know CSS because this is just a win32 form.&lt;br /&gt;&lt;br /&gt;And then the Atlas toolkit. Exactly how one shouldn't design a toolkit unless you want to shield programmers even more. For example you can extend an existing control with auto complete support. It's supposedly declarative (another rant, I promise). The good thing is that you can extend a normal HTML input. The bad thing is that you have to write that support in some declarative JavaScript, called XMLScript (good luck finding any documentation on that) or with using an atlas:AutoCompleteExtender element in your source. Copy and paste some sample code and things work. That's cool. But how does it all work? The last thing Microsoft wants you to learn is HTML and JavaScript. You have to be shielded from that you know. Instead of JavaScript you write XMLScript. And when ignorance is bliss I suppose this will do.&lt;br /&gt;&lt;br /&gt;But sometimes you get paid to take the red pill. And you will need to dynamically, at the client, create an input control and it should get AutoComplete behaviour. And while the mirror starts dissolving you have to take the plunge into how stuff really works.&lt;br /&gt;&lt;br /&gt;No need for pills and ignorance does get you nowhere. That summarises EJAX's fundamental approach to HTML controls. It is an explicit design goal to not shield the programmer from the underlying mechanisms. Controls should work such that they guide the programmer into building the proper internal model. This to allow the programmer to easily use the control outside the presented toy example. Create some dynamic HTML? Even if the toy example presented static HTML it should be intuitively clear how to apply that knowledge for that scenario as well. And for returning HTML by some AJAX call, etc. So the control is HTML. The behaviour is applied with a JavaScript call.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115328083502883271?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115328083502883271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115328083502883271' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115328083502883271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115328083502883271'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/ejax-html-controls.html' title='EJAX HTML controls'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115321438109290070</id><published>2006-07-18T09:05:00.000Z</published><updated>2006-07-18T09:19:41.110Z</updated><title type='text'>SCons Builder for EiffelStudio 5.6</title><content type='html'>&lt;a href="http://www.scons.org"&gt;SCons&lt;/a&gt; is an alternative to make. It's cross-platform and, because it's scripted in a general-purpose programming language (&lt;a href="http://www.python.org"&gt;Python&lt;/a&gt;), it's extremely flexible.&lt;br /&gt;&lt;br /&gt;I've written a &lt;a href="http://www.scons.org/wiki/EiffelStudio56Tool#preview"&gt;SCons tool to automate EiffelStudio 5.6&lt;/a&gt;&lt;a href="http://www.scons.org/wiki/EiffelStudio56Tool#preview"&gt; builds&lt;/a&gt;. It probably also works with 5.5, 5.4, etc., but I've only tested it with 5.6 on Windows and on Mac OS X 10.4.7.&lt;br /&gt;&lt;br /&gt;It definitely won't work with EiffelStudio 5.7, which replaces the venerable .ace file with the shiny new .ecf file. I'll also have to update my SCons tool when I upgrade to 5.7.&lt;br /&gt;&lt;br /&gt;If you're frustrated with make files, give SCons a go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115321438109290070?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115321438109290070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115321438109290070' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115321438109290070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115321438109290070'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/scons-builder-for-eiffelstudio-56.html' title='SCons Builder for EiffelStudio 5.6'/><author><name>Peter Gummer</name><uri>http://www.blogger.com/profile/01091695547014757336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115296402440027141</id><published>2006-07-15T11:41:00.000Z</published><updated>2006-07-15T11:48:02.260Z</updated><title type='text'>Enterprise SmartEiffel (ESE) project news</title><content type='html'>&lt;a href="http://www.cadrian.net/~cyril"&gt;Cyril Adrian&lt;/a&gt; writes, on the &lt;a href="http://smarteiffel.loria.fr/support/mailing-list.html"&gt;SmartEiffel mailing list&lt;/a&gt;:&lt;blockquote&gt;&lt;i&gt;Thanks to some fixes in SmartEiffel the XML backend of EDC now fully works (storage and retrieval of relational data in an XML  database).&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The ARG cluster has been improved and now works in most normal cases. This cluster is used to parse a command line.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The ESEB tool is not yet functional but code writing is hot those days. ESEB is the ESE Binder that builds classes that represent the tree of a provided DTD file (something like JAXB for java people) and an XML parser for such files. This tool will be useful to build other tools that will use XML files.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&lt;a href="http://ese.sourceforge.net"&gt;http://ese.sourceforge.net&lt;/a&gt; - see you there!&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115296402440027141?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115296402440027141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115296402440027141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115296402440027141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115296402440027141'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/enterprise-smarteiffel-ese-project.html' title='Enterprise SmartEiffel (ESE) project news'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115284409218389668</id><published>2006-07-14T02:12:00.000Z</published><updated>2006-07-14T03:31:14.976Z</updated><title type='text'>EJAX parameter validation</title><content type='html'>A verb operating on a resource can take &lt;a href="http://teameiffel.blogspot.com/2006/06/ejax-how-rest-determines-its.html"&gt;zero or more parameters&lt;/a&gt;. EJAX has three levels of parameter validation. The first level is entirely browser based and fires if JavaScript is active. The EJAX frameworks spits out a JSON description of the parameters. This looks like this:&lt;br /&gt;&lt;pre&gt;var my_form_parameters_text = {&lt;br /&gt;system_id:&lt;br /&gt;  {type: "positiveInteger"},&lt;br /&gt;company_name:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;contact_name:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;email:&lt;br /&gt;  {type: "string", minLength: 1, maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;password:&lt;br /&gt;  {type: "string", minLength: 1, maxLength: 32, whiteSpace: "collapse"},&lt;br /&gt;password2:&lt;br /&gt;  {type: "string", maxLength: 32, whiteSpace: "collapse"},&lt;br /&gt;address1:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;address2:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;city:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;state:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;zip:&lt;br /&gt;  {type: "string", maxLength: 16, whiteSpace: "collapse"},&lt;br /&gt;country:&lt;br /&gt;  {type: "string", maxLength: 256, whiteSpace: "collapse"},&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;It's pretty equal to the parameter description for the resource. The EJAX.FORM.validate routine in &lt;tt&gt;ejax.js&lt;/tt&gt; can take such a description and validate the controls, match the id in the parameters description against the contents of the controls. If an error occurs, the control is focused and an error message is displayed near it.&lt;br /&gt;&lt;br /&gt;This validation isn't always enough. For example password validation cannot be done in this manner. So there is a second level validation as well. This is a collaboration between the browser and the client, again, only if JavaScript is enabled. It takes the contents of all form controls using prototype.js' Form.serialize() and sends it to the action specified in the form. But with one twist: it adds the ejax:validate parameter.  When this input is found by the EJAX generated resource classes they will only validate the control and just return a response code such as 200 OK or 400 Form invalid. The error response contains a detailed description of what control had the wrong input and what the user should do to fix it.&lt;br /&gt;&lt;br /&gt;If JavaScript is disabled, or if the form is still submitted, or if some malicous program tries to send bad data to an EJAX resource the third level of validation comes into play. This is the final defense and takes place at the server. It simply validates the given user input against the specified parameter data types, before any other action will take place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115284409218389668?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115284409218389668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115284409218389668' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115284409218389668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115284409218389668'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/ejax-parameter-validation.html' title='EJAX parameter validation'/><author><name>Berend de Boer</name><uri>http://www.blogger.com/profile/11433622686361556089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://bp3.blogger.com/_wuSD2D936o0/R6IyNOEfytI/AAAAAAAAAAY/riRQ94su2uU/S220/berend_20070808_small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115257347847700687</id><published>2006-07-10T23:14:00.000Z</published><updated>2006-07-12T21:21:52.136Z</updated><title type='text'>BAFOE Meeting Minutes for July</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;Minutes of the 27 June 2006 Gathering of the Bay Area Friends of Eiffel&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Attendance was good, especially given the very short notice given for the meeting. Again I apologize, I'd recently returned from Asia, and several of the people who wanted to attend were leaving the &lt;st1:country-region st="on"&gt;&lt;st1:place st="on"&gt;US&lt;/st1:place&gt;&lt;/st1:country-region&gt; at the end of that week.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Emmanuel Bouyer gave a very nice presentation on concurrent processing and Eiffel. Emmanuel began with a discussion of the limitations the current SCOOP specification. He explained in particular why SCOOP could not be used to implement Eiflex. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;He then presented an overview of the Eiflex distributed object framework. The Eiflex framework provides a reliable platform-independent, multithreaded client/server architecture and is the basis of the Chicago Board of Trade's PRICE system. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Emmanuel then ran a "Dining Philosophers" demonstration that involved a GUI client and two server processes. One important aspect of the demo was the fault tolerance. You can kill the servers, but when they are restarted they will carry on where they left off, having preserved their state. Eiflex is highly also scalable. At CBOT, Windows clients connect to over one hundred Solaris servers, with each server running two hundred or more threads.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;After Emmanuel's presentation, the gatherers congratulated Eric and Karine on their wedding, spent a little time surfing the Team Eiffel blog for interesting tidbits, and talked about what is going on with the various Open Source Eiffel projects around the world.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;The next meeting will be held in September (too many people are traveling in August). I promise to give earlier advance notice.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Future meetings will be every other month, with a special effort to overlap with visits by Eric and Karine.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;Emmanuel's presentations were based on those made by Gordon Jones (Emmanuel's partner at Eiflex) for a conference at &lt;st1:placename st="on"&gt;York&lt;/st1:PlaceName&gt; &lt;st1:placetype st="on"&gt;University&lt;/st1:PlaceType&gt; in the &lt;st1:place st="on"&gt;&lt;st1:country-region st="on"&gt;UK&lt;/st1:country-region&gt;&lt;/st1:place&gt;.&lt;br /&gt;&lt;a href="http://www.artist-embedded.org/FP6/ARTIST2Events/Events/Cordie06/"&gt;http://www.artist-embedded.org/FP6/ARTIST2Events/Events/Cordie06/&lt;o:p&gt;&lt;/o:p&gt;&lt;/a&gt;&lt;/p&gt;More information about Eiflex can be found here:&lt;br /&gt;&lt;a href="http://www.eiflex.com/"&gt;http://www.eiflex.com/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;      &lt;p class="MsoNormal"&gt;The Team Eiffel blog is here:&lt;br /&gt;&lt;a href="http://teameiffel.blogspot.com/"&gt;http://teameiffel.blogspot.com/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;A good starting point for more information about Eiffel is at Cetus Links:&lt;br /&gt;&lt;a href="http://www.cetus-links.org/oo_eiffel.html"&gt;http://www.cetus-links.org/oo_eiffel.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Don't miss future announcements! You can subscribe to the BAFOEiffel mailing list,&lt;br /&gt;&lt;a href="http://groups.yahoo.com/group/BAFOEiffel/"&gt;http://groups.yahoo.com/group/BAFOEiffel/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;by sending an email to BAFOEiffel-subscribe@yahoogroups.com&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115257347847700687?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115257347847700687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115257347847700687' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115257347847700687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115257347847700687'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/bafoe-meeting-minutes-for-july.html' title='BAFOE Meeting Minutes for July'/><author><name>Greg C</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115246239600633060</id><published>2006-07-09T16:22:00.000Z</published><updated>2006-07-09T16:27:55.313Z</updated><title type='text'>Seeking Eiffel and VB.net programmer</title><content type='html'>&lt;a href="mailto:brotherbill@mail.com"&gt;Brother Bill&lt;/a&gt; is seeking an additional programmer for a project in Lilburn Georgia (Northeast Atlanta), between Lake Lanier and Stone Mountain.&lt;br /&gt;&lt;br /&gt;The project uses Visual Basic.net for the front end, and EiffelStudio for the database end.&lt;br /&gt;&lt;br /&gt;The candidate will have experience in VB.net and an interest in Eiffel. Brother Bill writes:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The project is challenging.  There is a lot of code to grind out, and this may be a good opportunity for an unemployed developer.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The pay will be low, but on completion, will most likely get some kind of real profit sharing.&lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115246239600633060?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115246239600633060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115246239600633060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115246239600633060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115246239600633060'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/seeking-eiffel-and-vbnet-programmer.html' title='Seeking Eiffel and VB.net programmer'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115236180806331679</id><published>2006-07-08T11:09:00.000Z</published><updated>2006-07-10T23:21:41.906Z</updated><title type='text'>EiffelStudio Precompiled Libraries</title><content type='html'>Day-to-day compiling in EiffelStudio (known as &lt;span style="font-style: italic;"&gt;melting&lt;/span&gt;) is very quick, but doing a full rebuild of a project (a &lt;span style="font-style: italic;"&gt;freeze&lt;/span&gt; or a&lt;span style="font-style: italic;"&gt; finalize&lt;/span&gt;) is very slow compared with a lot of other programming languages.&lt;br /&gt;&lt;br /&gt;If the project uses a lot of big libraries like &lt;span style="font-style: italic;"&gt;gobo&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;vision2&lt;/span&gt;, then it's unbearably slow.&lt;br /&gt;&lt;br /&gt;Some months after I started using EiffelStudio 5.5, I discovered that I could speed up my builds by making my own &lt;span style="font-style: italic;"&gt;precompiled libraries&lt;/span&gt;. I had been using the precompiled libraries (&lt;span style="font-style: italic;"&gt;base&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;wel&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;vision2&lt;/span&gt;) that are part of the EiffelStudio installation. Making my own precompiled library that included many of the gobo clusters sped the builds up significantly. This remained true when I upgraded to EiffelStudio 5.6.&lt;br /&gt;&lt;br /&gt;Back then, I was building .NET Eiffel projects. These days I'm building classic Eiffel projects on Windows. Naturally, having learned the benefits of precompiled libraries, I did the same as I had done on the earlier project.&lt;br /&gt;&lt;br /&gt;I was disappointed, though, to find that my eleven projects continued taking about thirty minutes to build, despite using proecompiled libraries. As well as adding gobo, I added some of our own more stable clusters to a precompiled library. It didn't help.&lt;br /&gt;&lt;br /&gt;So I did some timings, with different sets of precompiled libraries, of how long it took to finalize and then finish freezing the eleven projects.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Build A&lt;/span&gt; was with precompiled libraries for &lt;span style="font-style: italic;"&gt;base&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;time&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;wel&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;gobo&lt;/span&gt; plus some of our own clusters.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Build B&lt;/span&gt; was the same as Build A, but excluded our clusters from the precompile.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Build C&lt;/span&gt; used no precompiled libraries at all.&lt;/li&gt;&lt;/ul&gt;The builds were all done at the command line with EiffelStudio 5.6.1218 and Microsoft C/C++ 14.00.50727.42 32-bit for 80x86:&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;  ec -batch -ace &lt;span style="font-style: italic;"&gt;file -project_path path -finalize -keep -c_compile&lt;br /&gt;  finish_freezing -silent&lt;br /&gt;&lt;/pre&gt;&lt;table style="width: 430px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Project&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Build A&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Build B&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Build C&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;precompiled libs&lt;/td&gt;&lt;td&gt;4m 23s&lt;/td&gt;&lt;td&gt;4m 16s&lt;/td&gt;&lt;td&gt;&lt;span style="font-style: italic;"&gt;nil&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 1&lt;/td&gt;&lt;td&gt;4m 06s&lt;/td&gt;&lt;td&gt;4m 23s&lt;/td&gt;&lt;td&gt;4m 49s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 2&lt;/td&gt;&lt;td&gt;3m 59s&lt;/td&gt;&lt;td&gt;4m 50s&lt;/td&gt;&lt;td&gt;3m 52s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 3&lt;/td&gt;&lt;td&gt;1m 57s&lt;/td&gt;&lt;td&gt;2m 00s&lt;/td&gt;&lt;td&gt;1m 57s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 4&lt;/td&gt;&lt;td&gt;2m 25s&lt;/td&gt;&lt;td&gt;2m 32s&lt;/td&gt;&lt;td&gt;2m 56s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 5&lt;/td&gt;&lt;td&gt;3m 03s&lt;/td&gt;&lt;td&gt;1m 36s&lt;/td&gt;&lt;td&gt;2m 03s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 6&lt;/td&gt;&lt;td&gt;2m 38s&lt;/td&gt;&lt;td&gt;2m 29s&lt;/td&gt;&lt;td&gt;2m 52s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 7&lt;/td&gt;&lt;td&gt;2m 53s&lt;/td&gt;&lt;td&gt;2m 37s&lt;/td&gt;&lt;td&gt;2m 58s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 8&lt;/td&gt;&lt;td&gt;2m 37s&lt;/td&gt;&lt;td&gt;2m 12s&lt;/td&gt;&lt;td&gt;2m 41s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 9&lt;/td&gt;&lt;td&gt;2m 32s&lt;/td&gt;&lt;td&gt;2m 14s&lt;/td&gt;&lt;td&gt;2m 48s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 10&lt;/td&gt;&lt;td&gt;2m 43s&lt;/td&gt;&lt;td&gt;2m 19s&lt;/td&gt;&lt;td&gt;2m 50s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;app 11&lt;/td&gt;&lt;td&gt;2m 46s&lt;/td&gt;&lt;td&gt;2m 19s&lt;/td&gt;&lt;td&gt;2m 47s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;TOTAL for apps&lt;/td&gt;&lt;td&gt;30m 39s&lt;/td&gt;&lt;td&gt;29m 31s&lt;/td&gt;&lt;td&gt;32m 33s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;So precompiling my classic EiffelStudio projects on Windows saved me 3 minutes (about 10%). &lt;span style="font-weight: bold;"&gt;Build B&lt;/span&gt; (the precompiled base+time+gobo+wel) performed best. I  would have to re-run these tests to be sure that there wasn't some other factor coming into play, but I was careful to leave the computer alone whilst it ran each build.&lt;br /&gt;&lt;br /&gt;Not using precompiled libraries adds a lot to the time spent doing C compilation and linking. There must be a big saving in the earlier Eiffel compilation stages to compensate for this, especially considering that the C compilation is being done twice (once to finalize, and again to finish freezing).&lt;br /&gt;&lt;br /&gt;Also note that, if you  take into account that building the precompiled libraries took more  than 4 minutes in both cases, not precompiling is actually 1 or 2  minutes faster! The fallacy in this argument is that precompiling is  done only once, of course.&lt;br /&gt;&lt;br /&gt;Based on these timings, I would be  happy not to use precompiled libraries at all if there is a compelling  reason not to.&lt;br /&gt;&lt;br /&gt;Is executable size a compelling reason? I don't care about exe size these days -- we can afford to waste a few megabytes, and 10 Mb exes seem to load instantly -- but it's interesting to note that the exes from &lt;span style="font-weight: bold;"&gt;Build C&lt;/span&gt; (without precompiled libraries) add up to 58,744,832 bytes; whereas &lt;span style="font-weight: bold;"&gt;Build B&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; adds up to 66,150,400 bytes. For now, we're sticking with &lt;span style="font-weight: bold;"&gt;Build B&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115236180806331679?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115236180806331679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115236180806331679' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115236180806331679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115236180806331679'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/eiffelstudio-precompiled-libraries.html' title='EiffelStudio Precompiled Libraries'/><author><name>Peter Gummer</name><uri>http://www.blogger.com/profile/01091695547014757336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20616594.post-115219256642905258</id><published>2006-07-06T13:09:00.000Z</published><updated>2006-07-06T13:29:26.533Z</updated><title type='text'>Indexing clauses and syntax errors</title><content type='html'>EiffelStudio supports an extension that allows multiple indexing clauses within an Eiffel class. You can have one at the top of the class, plus one at the bottom of the class, and you can also write an indexing clause for any feature of the class.&lt;br /&gt;&lt;br /&gt;This can lead to a syntax error, which has become a "Frequently Asked Question" over on the &lt;a href="http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-devel"&gt;es-devel mailing list&lt;/a&gt;. Consider the following code:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;class A&lt;br /&gt;...&lt;br /&gt;feature -- Test&lt;br /&gt;   test: ANY&lt;br /&gt;      -- Test&lt;br /&gt;indexing&lt;br /&gt;   ...&lt;br /&gt;end -- class A&lt;/pre&gt;&lt;/blockquote&gt;How does the compiler know whether this indexing clause is the "end-of-class" indexing clause, or the one associated with the attribute 'test'?&lt;br /&gt;&lt;br /&gt;The compiler can't tell, and it throws a syntax error. You can fix this with a judiciously-placed semicolon, for example:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;class A&lt;br /&gt;...&lt;br /&gt;feature -- Test&lt;br /&gt;   test: ANY;&lt;br /&gt;      -- Test&lt;br /&gt;indexing&lt;br /&gt;   ...&lt;br /&gt;end -- class A&lt;/pre&gt;&lt;/blockquote&gt;Now, the indexing clause is taken to be the "end-of-class" indexing clause.&lt;br /&gt;&lt;br /&gt;ECMA Eiffel does not have this ambiguity, because it does not support the "indexing" clause. Instead, it supports the "Notes" construct, which uses the "note" keyword. This construct can appear at the top or bottom of a class, but not with a feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20616594-115219256642905258?l=teameiffel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teameiffel.blogspot.com/feeds/115219256642905258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20616594&amp;postID=115219256642905258' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115219256642905258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20616594/posts/default/115219256642905258'/><link rel='alternate' type='text/html' href='http://teameiffel.blogspot.com/2006/07/indexing-clauses-and-syntax-errors.html' title='Indexing clauses and syntax errors'/><author><name>Roger Browne</name><uri>http://www.blogger.com/profile/17862544574010465032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/2268/149/400/roger200403-240x240.jpg'/></author><thr:total>1</thr:total></entry></feed>
