<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>TulipeMoutarde.be</title>
    <link>http://articles.tulipemoutarde.be</link>
    <description>Programming &amp; Living</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#a95d3b72b" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tulipemoutardebe" /><feedburner:info uri="tulipemoutardebe" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
      <pubDate>Thu, 29 Dec 2011 17:22:00 -0800</pubDate>
      <title>Send email from Pharo with Postmark</title>
      <link>http://articles.tulipemoutarde.be/send-email-from-pharo-with-postmark</link>
      <guid>http://articles.tulipemoutarde.be/send-email-from-pharo-with-postmark</guid>
      <description>
        <![CDATA[<p>
	<p>I recently needed to send emails from a Pharo image. There is a SMTP client integrated in the standard libray but I wanted  to wrap the excellent <a href="http://postmarkapp.com/">Postmark</a> REST <a href="http://developer.postmarkapp.com/developer-build.html">API</a>.</p>

<p>You can load it from <a href="http://ss3.gemstone.com/">SqueakSource 3</a>:</p>

<div class="CodeRay">
  <div class="code"><pre>Gofer it
     url: 'http://ss3.gemstone.com/ss/postmark';
     package: 'ConfigurationOfPostMark';
     load.

(Smalltalk at: #ConfigurationOfPostMark) project stableVersion load.</pre></div>
</div>


<p>And you can use it like:</p>

<div class="CodeRay">
  <div class="code"><pre>| email interface |
email := PMEmail new
  from: 'francois@wapict.be';
  to: 'francois@yopmail.com';
  subject: 'Test Application';
  textBody: 'Yeah baby';
  yourself.

interface := PMInterface new.
interface apiKey: 'blopblop'.

interface send: email.</pre></div>
</div>


<p>The implementation is really basic and does not handle attachments at the moment. I use it on a staging application that will probably be in production in January. I will see how it behaves under small load and improve it if needed.</p>

<p>edit: you can now attach files to your emails !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/send-email-from-pharo-with-postmark">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/send-email-from-pharo-with-postmark#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 28 Dec 2011 12:54:00 -0800</pubDate>
      <title>Windows Phone 7</title>
      <link>http://articles.tulipemoutarde.be/windows-phone-7</link>
      <guid>http://articles.tulipemoutarde.be/windows-phone-7</guid>
      <description>
        <![CDATA[<p>
	<p>I&rsquo;ve written this article in June 2011 and never published it. Now that Nokia has shipped their phones and the Mango (aka Windows Phone 7.5) is everywhere, it&rsquo;s maybe time to click on the <em>publish</em> button ;)</p>

<p>When reading reviews of WP7.5, Microsoft has fixed almost all the issues I had with my LG Optimus 7 phone. Unfortunately, it broke during the (awesome) <a href="http://dourfestival.be/">Dour festival</a>. The phone became crazy and kept rebooting. (In case you are wondering, fifteen minutes of cycling reboots keeps your phone hot). The shop where I bought it did not plan to get any Windows Phone soon so they gave me a Galaxy S2 (almost) for free.</p>

<p>While Android 2.3 is packed with wonderful features, it&rsquo;s not as polished as the WP7 phone I owned but it usually works well. Android 4 is said to address this but I don&rsquo;t think it will be as fresh and usable than Windows Phone. Anyway, here&rsquo;s the short review I wrote back in June:</p>

<p>I was the first to be surprised when I came back home with a windows phone in my bag. Three months later, it&rsquo;s time to report.</p>

<p>A bit of context: I&rsquo;m a big fan of Apple products for seven years now (and I was a Linux user before). MacOS X is an impressive operating system: the geek inside me loves UNIX, the end user part of me likes the &lsquo;everything works out of the box&rsquo; side of the Mac experience.</p>

<p>Long story short, I love this Windows Phone 7.</p>

<ul>
<li>Tiles are awesome. Simple, no gradient, no round corners, ni shiny effect, just the fact. Data-ink ratio is very high, Tuft would be happy.</li>
<li>Menus are kept to their minimum. There are not tons of options everywhere. Microsoft provided a very opiniated way of using the phone and they made the right choice almost every time.</li>
<li>All in all, this Metro UI is particularly well thought. Navigation follows a consistent pattern through the OS. Third party applications tend to adopt it.</li>
<li>Animations are plain right. Very subtle, never too long, they are visually pleasant and serve their purpose very well. They bring a sensation of fluidity and smoothness.</li>
<li>No custom ringtones. That sounds ridiculous but it clearly shows the direction taken by the creators of the OS.</li>
<li>Actually one of the only possible customisation is to change the dominant color. My favourite is Magenta. The color will be used almost everywhere in your phone. Elegant.</li>
<li>The Mac software is simple and easy to use. It synchronises your phone with iTunes' data. Don&rsquo;t know if Apple appreciates but it works just fine</li>
<li><p>I have mixed feelings about the web browser though. Navigation is fast and fluid but javascript performance and CSS handling sucks at best. The navigation bar disappear when you are in landscape mode. That&rsquo;s quite weird. Microsoft says it is based on a mix of IE 7 and 8. Fortunately, they will ship IE9 with the next release of Windows Phone.
The stuff that could have been added without too much boilerplate:</p></li>
<li><p>They screwed up with the first update of the OS. It brought copy-pasting but deployment was a nightmare for Microsoft.</p></li>
<li><p>Notification LED. My android phone had a small LED hiddden in the speaker. Even when you&rsquo;re phone is in silent mode you can see in one eye glance if you'vre a text or missed a call. <em>very</em> useful</p></li>
<li><p>No threads in emails. Epic fail.</p></li>
<li><p>No tethering. Annoying in the train.</p></li>
<li><p>No multiple calendars when synced with Google Calendar.</p></li>
<li><p>I cannot find a good Remember The Milk app. WinMilk is way to slow to be usable (yeah, I know, it is open source it is up to me to improve it instead of complaining)</p></li>
</ul>


<p>This week, Microsoft unveiled a new version of WP7 called &lsquo;Mango&rsquo; or WP7.5. This update brings <em>a lot</em> of new features. Hopefully they won&rsquo;t screw the whole Metro experience (fingers crossed).</p>

<p>All in all, forget Windows Mobile 6.x, Microsoft changed everything. The subtle rename from Windows Mobile to Windows Phone is not innocent.</p>

<p>I can&rsquo;t believe I&rsquo;ve just said something good about Microsoft software.</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/windows-phone-7">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/windows-phone-7#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Mon, 19 Dec 2011 18:51:00 -0800</pubDate>
      <title>Legacy projects</title>
      <link>http://articles.tulipemoutarde.be/legacy-projects</link>
      <guid>http://articles.tulipemoutarde.be/legacy-projects</guid>
      <description>
        <![CDATA[<p>
	<p>As a company or freelance developer you have probably encounter the dilemma of taking over somebody else code. On one side you are happy to get new work, on the other side dealing with legacy code can be frightening.</p>

<p>Here are some questions you will need to ask when you continue and maintain a project:</p>

<ul>
<li>What kind of client will you get when accepting the project?</li>
<li>How was the relation between the previous developer and the client?</li>
<li>Where is the project hosted? Do you have control over it?</li>
<li>What are the dependencies of the project? Ruby 1.8.6, Rails 1.2? RMagick? Will you have to migrate it to newer versions at some point? Does the client understand that you <em>need</em> to upgrade libraries and frameworks?</li>
<li>More generally, is the client aware that software needs maintenance?</li>
<li>Will you be the one responsible for old bugs that are discovered <em>after</em> you took over the project? Usually the client sees a bunch a stuff not working once you start to work on the project.</li>
<li>Have you considered a code review before accepting the project? Who did it? Someone external? The previous developer (hint: blink in red in your radar)?</li>
<li>Will you need to implement big new features? How the previous developer used to bill the client for them?</li>
<li>Is the client aware that you will probably be a bit slower than the previous developer when you start working on the project?</li>
</ul>


<p>Many of these questions sounds stupid or simple good sense but a checklist is never too much when it comes to such a tricky decision.</p>

<p>Everybody likes to write <em>new</em> code. Maintaining code is usually less appealing.</p>

<p>I <em>love</em> to dig in somebody else code,to refactor it, to understand what the previous developer had in mind when doing it. I like to remove the small imprecisions here and there and to curse when I see useless javascript files or two hundreds lines of commented code.</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/legacy-projects">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/legacy-projects#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sun, 11 Dec 2011 12:26:00 -0800</pubDate>
      <title>Smalltalk &amp; native UI</title>
      <link>http://articles.tulipemoutarde.be/smalltalk-native-ui</link>
      <guid>http://articles.tulipemoutarde.be/smalltalk-native-ui</guid>
      <description>
        <![CDATA[<p>
	<p>From time to time, someone on the Pharo mailing list asks how to build a desktop application.</p>

<p>A long time ago, Smalltalk was a great way to make desktop apps. drag &amp; drop, rich visual interface, mouse pointer. Yeah, the mouse was quite a big thing.</p>

<p>Things have changed. People expect consistency from the software they use. Not only in the look but also in the feel. They want their applications to be tightly integrated with their operating systems. If you&rsquo;re considering a niche application where people only care about the functional part of the system, that could work. Otherwise I would not bet a penny on a smalltalk dialect.</p>

<p><img src="http://tulipemoutarde.be/documents/blog-files/squeak4.3.png" alt="Squeak 4.3 pre" />
<img src="http://tulipemoutarde.be/documents/blog-files/pharo1.4.png" alt="Pharo 1.4 pre" />
<img src="http://tulipemoutarde.be/documents/blog-files/visualworks.jpg" alt="Visualworks on MacOS" /></p>

<p>Long story short, don&rsquo;t use Smalltalk if you want to be the next WordPad or iTunes.</p>

<p>I&rsquo;m not saying that Smalltalk is bad at user interfaces, new UI paradigms are tested with Smalltalk. <a href="http://en.wikipedia.org/wiki/Croquet_Project">Croquet</a> and <a href="http://newspeaklanguage.org/">Newspeak</a>, <a href="http://gaucho.inf.usi.ch/">Gaucho</a> are examples of some innovations in user interfaces (one for collaborating in 3D world, the other for IDE and GUI framework).</p>

<p>footnote: I actually have to mention that I&rsquo;ve heard that <a href="http://www.object-arts.com/">Dolphin</a> and <a href="http://www.cincomsmalltalk.com/main/products/objectstudio/">ObjectStudio</a> runs natively fine on windows.</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/smalltalk-native-ui">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/smalltalk-native-ui#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 09 Dec 2011 10:55:00 -0800</pubDate>
      <title>Smalltalk for the Rubyist</title>
      <link>http://articles.tulipemoutarde.be/smalltalk-for-the-rubyist</link>
      <guid>http://articles.tulipemoutarde.be/smalltalk-for-the-rubyist</guid>
      <description>
        <![CDATA[<p>
	<p>After my previous post about the <a href="http://articles.tulipemoutarde.be/the-pharo-smalltalk-ecosystem">Pharo ecosystem</a>, some people asked me more about a comparison of Smalltalk and Ruby. And how a Rubyist could leverage his knowledge when learning Smalltalk.</p>

<p>The two languages are class based, dynamic and their supporters like their clean and easy syntax. Actually, Smalltalk is sometimes considered as one of the father of Ruby. They share quite a lot and most of the patterns used in one can be easily expressed in the other.</p>

<p>This post does not cover the basic syntax of Smalltalk. If you want to learn it (15 minutes max), <a href="http://en.wikipedia.org/wiki/Smalltalk#Syntax">wikipedia</a> should be enough.</p>

<h1>Implementations</h1>

<p>Ruby comes in different flavors: MRI, YARV, <a href="http://rubini.us/">Rubinius</a>, <a href="http://jruby.org/">JRuby</a>, <a href="http://maglev.github.com/">Maglev</a>, etc. So does Smalltalk. The principal difference is that they are no &ldquo;official&rdquo; distribution. Every dialect has its own ecosystem and tools. Some are open source, some are proprietary.</p>

<p>Choosing an implementation can be a quite challenging task. If you want to go the open source way:</p>

<ul>
<li><a href="http://squeak.org/">Squeak</a>, the most famous implementation. The project has quite a long history. The development seems to have slowed down a bit 3-4 years ago but Squeakers are working hard now.</li>
<li><a href="http://www.pharo-project.org/home">Pharo</a>, a fork of Squeak. The goal of the Pharoers is to produce a clean and industry-capable Smalltalk. It all started when some people were really pissed off by the inaction of the Squeak community. Backward compatibility was a pretext for doing nothing. Pharo moves fast and does not aim to stay backward compatible with Squeak. Many projects still runs on the two without a itch though.</li>
<li><a href="http://smalltalk.gnu.org/">GNU Smalltalk</a>, an alien implementation. You can use your favorite text editor with it. It is a clean implementation but it maybe misses a complete environment.</li>
<li><a href="http://amber-lang.net/">Amber</a>, a smalltalk that compiles to Javascript. Pretty young but already impressive. It can be used with Node.js or in the browser.</li>
</ul>


<p>I&rsquo;m not really interested in proprietary implementations but there are three big players in that field: <a href="http://www.cincomsmalltalk.com/main/">Cincom Smalltalk</a>, <a href="http://www.instantiations.com/products/vasmalltalk/index.html">VA Smalltalk</a>, <a href="http://gemstone.com/products/gemstone">Gemstone/S</a>.</p>

<p>Gemstone is not only a Smalltalk implementation but also an extremly scalable object-database. Actually <a href="http://maglev.github.com/">Maglev</a> is a Gemstone based products. If you&rsquo;re serious about Ruby, you should definitely give Maglev a look.</p>

<p>My favorite implementation is Pharo. I like the energy in the community and its direction. It is for me the best bet for the future. It very similar to squeak but this screenshot of the main menu is enough to convince me.</p>

<p><img src="http://tulipemoutarde.be/documents/blog-files/squeak4.2-pharo1.4-menu.png" alt="Pharo 4.2 and Pharo 1.4 world menu" /></p>

<p>You can follow <a href="http://stackoverflow.com/questions/8426981/squeak-or-pharo-for-the-beginning-smalltalker">this thread on stackoverflow</a> to get the opinions of others.</p>

<h1>The Environment</h1>

<p>Here comes the biggest problem when learning Smalltalk. That&rsquo;s where people usually get lost.
Smalltalk code does not lie on a plain text file. There are literally no &ldquo;code time&rdquo;, it&rsquo;s always runtime. It would be like coding in an IRB session. You manipulate objects all the time. Consequences ?</p>

<ul>
<li>You can inspect object in live. You are working with a webservice and want to inspect the answer? Just inspect the response.</li>
<li>Change values on the fly. You wanna know what happens if that variable is <code>-5</code> instead of <code>5</code>? Change its value to see what happens.</li>
<li>You can actually code in the debugger. The debugger (or a stacktrace) is not an analysis tool anymore. You can actually code in it. A method is missing? Oops. Create it on the fly and continue the execution from where it failed.</li>
<li>Fast tests, all the time. <a href="http://coreyhaines.com/">Corey Haines</a> teaches you how to get <a href="http://arrrrcamp.be/videos/2011/corey-haines---fast-rails-tests/">fast tests</a> in rails. You do not need this in Smalltalk as your web/test/whatever framework are <em>already loaded</em>. Of course, if your tests starts to rely on external depencies (disk/network/etc) without mocking, they&rsquo;ll get slow. No surprises.</li>
</ul>


<p>Actually some tools are starting to appear in Ruby. <a href="http://pry.github.com/">Pry</a> is pretty damn cool Ruby tool. Once you&rsquo;ll get used to Smalltalk environments you&rsquo;ll want more.</p>

<p>When you load a library in your image, it lies next to your code. You can then read it, inspect it, put breakpoint in it and do whatever you want with it.</p>

<p>An image contains your code and all the libraries you want. It acts as a container and is completely independent from other images.</p>

<h1>Metaprogramming, Object and Classes</h1>

<p>Okay, that one is tricky. What do you expect from meta-programming?</p>

<ul>
<li>Adding methods on runtime? You are already in runtime.</li>
<li>Handle <code>method_missing</code>? Welcome <code>doesNotUnderstand</code>.</li>
</ul>


<p>As <code>method_missing</code> in Ruby, <code>doesNotUnderstand</code> must be used carefully. The usual advice applies in Smalltalk.</p>

<p>Actually defining a class in Smalltalk is just sending a message (&ldquo;calling a method&rdquo; in Smalltalk jargon) to the class <code>Object</code>. Adding a method is also a matter of sending a message to define it. The only difference is that you use tools to do it. Remember, it&rsquo;s runtime and your environment is the <em>running</em> your code. That living environment comes with great responsibilities. If you try something along <code>Object := nil</code> I guess you&rsquo;re a footing yourself in the foot.</p>

<p>If you want to learn more about the Smalltalk object system, I warmly recommend the chapter 13 of the <a href="http://pharobyexample.org/">Pharo By Example</a> free book. If you don&rsquo;t know that much about Ruby&rsquo;s object system, I recommend the <a href="http://scotland-on-rails.s3.amazonaws.com/2A04_DaveThomas-SOR.mp4">Dave Thomas presentation</a> at Scotland on Rails 2009.</p>

<h1>Returns</h1>

<p>Methods need explicit returns (with <code>^</code>). If omitted, the method will return self.</p>

<p>You get implicit returns for blocks: the value of the last instruction is the the value returned by the block. If you return (with <code>^</code>) inside a block, it is a return value for the method.</p>

<h1>Syntax Convention</h1>

<p>Methods name and variables are spelled in CamelCase. Abbreviations are usually avoided. Smalltalk uses keyword based method name (as in Objective-C). Many Ruby libraries/framework mimic this by passing an hash as argument.</p>

<p>The tabs vs. spaces does not exist in the Smalltalk community. In every tool, press <code>Tab</code> to indent and you&rsquo;re done.</p>

<p>As usual, just keep the global syntax style of the project you&rsquo;re working on.</p>

<h1>Usual suspects</h1>

<p>Be careful when using cascades, a common is mistake is the following:</p>

<div class="CodeRay">
  <div class="code"><pre>programmingLanguages := OrderedCollection new
  add: 'Ruby';
  add: 'Java';
  add: 'Haskell'.</pre></div>
</div>


<p>In the end of the execution, programmingLanguages will be the String <code>Haskell</code>. That&rsquo;s because the method <code>add:</code> returns its argument, not <code>self</code>. To prevent this, send <code>yourself</code> at the end of the cascade:</p>

<div class="CodeRay">
  <div class="code"><pre>programmingLanguages := OrderedCollection new
  add: 'Ruby';
  add: 'Java';
  add: 'Haskell';
  yourself.</pre></div>
</div>


<p>Another trick of the the language is the evaluation order:</p>

<div class="CodeRay">
  <div class="code"><pre>3 + 4 * 5  #=&gt; 35 and not 23</pre></div>
</div>


<p>Evaluation is done from left to right. Mathematical order is not preserved. Indeed, <code>+</code> and <code>*</code> are simple methods. Smalltalk does not even know (and does not care) that it is executing mathematical instructions. You must use parenthesis to express precedence:</p>

<div class="CodeRay">
  <div class="code"><pre>3 + ( 4 * 5 ) #=&gt; 23</pre></div>
</div>


<h1>Version Control</h1>

<p><a href="">My previous post</a> will explain you how to version Smalltalk code. Do not expect <code>Git</code>, <code>Mercurial</code> or <code>Subversion</code> (although they can be used as backends for Monticello).</p>

<h1>Conclusion</h1>

<p>Once again, this post is inspired by someone else doing <a href="http://tore.darell.no/pages/javascript_eye_for_the_ruby_guy">the same for Javascript</a> (thanks Greg Spurrier for the link). The <a href="http://squeakbyexample.org/">Squeak by Example</a> or <a href="http://pharobyexample.org/">Pharo By Example</a> books are worth to read. Beware that the tools described in the book are sometimes outdated but the principles are still perfectly valid.</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/smalltalk-for-the-rubyist">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/smalltalk-for-the-rubyist#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Tue, 06 Dec 2011 03:00:00 -0800</pubDate>
      <title>The Pharo Smalltalk ecosystem</title>
      <link>http://articles.tulipemoutarde.be/the-pharo-smalltalk-ecosystem</link>
      <guid>http://articles.tulipemoutarde.be/the-pharo-smalltalk-ecosystem</guid>
      <description>
        <![CDATA[<p>
	<p>This post is intented to developers who&rsquo;ve heard that Smalltalk is hot and sexy. A fraction of them have tried to download a <a href="https://gforge.inria.fr/frs/download.php/29274/Pharo-1.3-13315-OneClick.zip">One-Click version of Pharo</a> and played a bit with the language by following a tutorial or two.</p>

<p>So now they have a taste of Smalltalk but they do not get the entire picture, how the environment work, how people actually build and deploy software with it. If you are one of them, you&rsquo;ll probably want to take some time to read this :)</p>

<h1>Images and VMs</h1>

<p>If you&rsquo;ve downloaded a One-Click image, you haven&rsquo;t experimented with the notion of image and VM in Smalltalk. Actually you have but not in an explicit way, you&rsquo;ve simply clicked on an icon and got your environment. You&rsquo;ve maybe &lsquo;Quit and Save&rsquo; and when reopening the application you had the same state than when you left. Easy.</p>

<p>In pratice, Pharo works with an image running on top of a virtual machine. If you come from another scripting language, it certainly offers a REPL (e.g., IRB for Ruby). Think of the image as a dump of that REPL at a given moment.</p>

<p>A Pharo image contains everything: your code, the tools and the libraries. You can load code into it, you can save it and restart it at any moment. This image is closed. That&rsquo;s why you cannot use your text editor to edit Pharo code (actually you could but you certainly would not want that).</p>

<p>The VM is usually something you should not care about. My advice is to use the one given by the Pharo website, it is tested by a Jenkins server and is the one people use the most.</p>

<p>In a nutshell: download a VM and an image from <a href="http://www.pharo-project.org/pharo-download]">the official website</a>. At this moment, the stable version is Pharo 1.3 and the image is CogVM-13307. I personnaly put the VM in the <code>/Applications</code> folder on my Mac. The image comes with a <code>.changes</code> and <code>.sources</code> files. Keep them in the same directory than your image.</p>

<p>Beware that the evolutions of the image and the VM are not tight. It is possible that a Pharo 1.3 image will run on a new VM version in two years.</p>

<p>To start an image, double-click on it. If your OS does not get it, you can drag the image icon on the VM icon. That should work.</p>

<h2>Version numbers</h2>

<p>When you download the image, you can see the exact version you are downloading: <code>Pharo-1.3-13315.zip</code>. It means that it is the 315th revision of Pharo 1.3. The 13xxx part is redundant with the Pharo-1.3.</p>

<p>The VM has currently the name <code>CogVM-Mac-13307.zip</code>. Which means it was frozen with the 307th revision of the Pharo image.</p>

<h1>Source version control</h1>

<p>Your code is in the image. You don&rsquo;t even have a full text view of your nice classes. How do you persist it? So far, you&rsquo;ve probably save your image and re-open it later. That&rsquo;s the best way to lose everything if your image crashes (and that happens). It&rsquo;s also not really handy if you&rsquo;re not alone on the project.</p>

<p>Monticello comes to the rescue. It is a version control system like Git, Subversion or Mercurial. The only difference is that it does not version files but classes and methods. That&rsquo;s pretty great for an object-oriented language, isn&rsquo;t it?</p>

<p>Historically, <a href="http://www.squeaksource.com">Squeaksource</a> is the <a href="http://github.com">GitHub</a> of Smalltalk. It is old, ugly and slow but it works. A more modern alternative is <a href="http://ss3.gemstone.com/">SqueakSource3</a>, which brings Squeaksource to the latest frameworks. There are less projects than in the original Squeaksource but you should use it for your new projects.</p>

<p><a href="http://www.smalltalkhub.com/">SmalltalkHub</a> is on its way. It is not stable enough to be used in production but we are all waiting for it :)</p>

<p><a href="http://www.jarober.com/">James Robertson</a> has made two (very short screencasts to help you get up and running. You won&rsquo;t need more than 4 minutes to watch them.</p>

<ul>
<li><a href="http://vimeo.com/20016315">Smalltalk For You, episode 48</a>, you&rsquo;ll see how to save a package in a Monticello repository. Gives you all the basic information you need to know to use Monticello. Three minutes. That&rsquo;s it.</li>
<li><a href="http://vimeo.com/20105609">Smalltalk For You, episode 49</a>, this screencast will show you how reload the code you saved in the previous screencast in a fresh image. A little more than one minute.</li>
</ul>


<h1>Load external libraries</h1>

<p>Loading code in your image is pretty easy. Open a Monticello Browser and add the repository from which you want to load code. Et voilà, done.</p>

<p>The problem is that sometimes, a package has dependencies. So you end up losing 4 hours only to track the dependencies of the package and to figure out a load order. Metacello was designed to help you.</p>

<p>A project can provide a &ldquo;Metacello Configuration&rdquo;. This configuration describes the dependencies and the load order of the project. Of course a configuration can load an other one. You can also tag versions of your project.</p>

<p>When you want to use a project, the first thing to do is to find its MetacelloConfiguration. As of today, the lookup to find a configuration is:</p>

<ol>
<li>Check if the project exists in <a href="http://www.squeaksource.com/MetacelloRepository.html">http://www.squeaksource.com/MetacelloRepository.html</a>. This repo is a goldmine.</li>
<li>If it is not there, check in the project repository if you find a <code>ConfigurationOfTheProject</code>.</li>
<li>Ask the Pharo-users mailing list.</li>
</ol>


<p>If your project is not trivial, you should write a ConfigurationOfYourProject. You can get inspiration from other configurations. I personnaly like the ConfigurationOfFuel.</p>

<p>Once again, James Robertson has already covered the subject in his Smalltalk For You screencast series. <a href="http://vimeo.com/23666930">Episode 82</a> shows you how to load GlorpDBX (an object-relational mapping package for Smalltalk) in a fresh image using Metacello Configuration in a little more than two minutes.</p>

<h1>Good practices</h1>

<p>Ok, so now you know the tools that are used by Pharo developers. Let&rsquo;s move on to the next critical point: Good habits.</p>

<h2>New image everyday</h2>

<p>As you save your image and reopen it 16 hours later in exactly the same state, you are probably tempted to keep it forever and do all your development in it. So convenient.</p>

<p>In theory only. With time, you experiment and create a bunch of stuff you won&rsquo;t need. You have loaded  many external packages and you don&rsquo;t know anymore which are your dependencies. Your image becomes bloated, it may eventually crash.</p>

<p>The best way to avoid rotten images is to get a new one everyday. Download a stock Pharo image (or keep one somewhere locally) and load your MetacelloConfiguration. This will have two benefits:</p>

<ul>
<li>Your image is always clean and not bloated.</li>
<li>You know that your code load and works. This way you are sure that your co-workers can load your code and deployment is smooth.</li>
</ul>


<h2>Keep your images organized</h2>

<p>I&rsquo;m sure you&rsquo;ve already think about it but try to keep your different images organized. it is not hard to end up with dozens of Pharo images scattered across your hard drive. Try to keep things simple. For example, I keep a directory with all my stock images (Pharo 1.2, 1.3, the preversion of 1.4, Squeak, One-Clicks, etc).</p>

<p>Choose a convention and stick to it.</p>

<h2>Syntax conventions &amp; micro decisions</h2>

<p>Follow the conventions used by many Smalltalkers. Naming conventions as well as indentation. A <em>very</em> good read is <a href="http://www.amazon.com/Smalltalk-Best-Practice-Patterns-Kent/dp/013476904X/ref=sr_1_1?ie=UTF8&amp;qid=1323126529&amp;sr=8-1">Smalltalk Best Practices Patterns</a> by Kent Beck. Follow this style your code will follow Smalltalk idioms. Actually, the patterns discussed are also valid for Ruby. So go and grab your copy.</p>

<h1>Conclusion</h1>

<p>I wanted to write this guide for a long time now. This <a href="http://mirnazim.org/writings/python-ecosystem-introduction/">article</a> for Python convinced me to post it.</p>

<p>I hope it will be useful for some folks who want to try Smalltalk (and its Pharo implementation). Feel free to email me or to comment if you have any question or suggestion. If you are a Ruby developer wanting to learn Smalltalk, please <a href="mailto:tulipemoutarde@gmail.com">drop me an email</a>, I need your help for future posts !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/the-pharo-smalltalk-ecosystem">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/the-pharo-smalltalk-ecosystem#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 16 Nov 2011 10:54:00 -0800</pubDate>
      <title>Available for work! </title>
      <link>http://articles.tulipemoutarde.be/available-for-work</link>
      <guid>http://articles.tulipemoutarde.be/available-for-work</guid>
      <description>
        <![CDATA[<p>
	<p>As I'm getting more and more addicted to Pharo Smalltalk, I would like to offer my services as a&nbsp; Smalltalk developer.</p>
<p>I'm a freelance contractor with a belgian VAT number but I also have a valid working permit for Canada (I'm currently living in Vancouver, BC).</p>
<p>If you are looking for a part-time developer with a Ruby/Rails/Javascript  background, do not hesitate to contact me (even for a chat), I'm all  ears!</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/available-for-work">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/available-for-work#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Mon, 10 Oct 2011 14:34:00 -0700</pubDate>
      <title>Pharo development</title>
      <link>http://articles.tulipemoutarde.be/pharo-development</link>
      <guid>http://articles.tulipemoutarde.be/pharo-development</guid>
      <description>
        <![CDATA[<p>
	<p>I sometimes wonder why <a href="http://www.pharo-project.org/">Pharo</a> has such difficulties to get a stable version. Even when a release comes out, it is not that rock solid.</p>

<p>When building an image, you get code from various locations. Integrating everything together seems hard. For example, a package will use a syntax highlighting mechanism, which will be different that the one used in another package. Different shape, different quality, different patterns, it is hard to get the same foundation for everything when you cover many areas: gui, drawing, threads, locks, filesystem, etc.</p>

<p>Smalltalk acts as a whole operating system, it is one of its strength but also one of its weakness. It sounds wrong when you are used to the Unix philosophy where one tools equals one function. Smalltalk breaks that and want to do everything by itself. It becomes nice when you want to do something that crosses different layers (<a href="https://github.com/tobi/delayed_job">delayed_job</a> would be almost useless in Smalltalk); you start your image and everything runs inside it. You stop it, everything stops. Easy. The drawback is obvious: Smalltalk environments tend to reinvent the wheel all the time.</p>

<p>When you consider this, you start to realize the tremendous amount of work done by the developers. They proceed by baby steps but they are going very far&hellip; And I can&rsquo;t wait to use <a href="http://rmod.lille.inria.fr/coral/index.html">Pharo for system scripting</a></p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-development">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-development#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 30 Sep 2011 12:15:00 -0700</pubDate>
      <title>Ruby frustration</title>
      <link>http://articles.tulipemoutarde.be/ruby-frustration</link>
      <guid>http://articles.tulipemoutarde.be/ruby-frustration</guid>
      <description>
        <![CDATA[<p>
	<p>The more I code in Smalltalk, the more I find the flow of developing in Ruby annoying. What I really miss is a good way to navigate code, the debugging facilities and the runtime aspect of a Smalltalk dialect.</p>

<h1>Code navigation</h1>

<p>The browser is the standard way to browse code in Smalltalk. While it can be seen as cumbersome and ugly (in the look and the feel) compared to a native UI or a text editor, experienced smalltalkers have a love-hate relationship with their browser.</p>

<p><img src="http://tulipemoutarde.be/documents/blog-files/pharo1.3-browser.png" alt="Pharo 1.3 browser" /></p>

<p>When using it, you do not need to have 45 tabs opened in your web browser. Almost all the documentation you need is right there in front of you. Browsing the senders and implementors of a method is so easy and convenient. When you come back to a text editor and Ruby code it&rsquo;s just a pain in the ass to perform changes in your code.</p>

<p>As a developer you will spend (by far) much more time debugging and reading code than writing it, why not have a dedicated tool to browse it ?</p>

<h1>Runtime</h1>

<p>One of the most frustrating point when developing in Rails is how slow it becomes when your Gemfile grows. Running the test suite is so slow, it feels like the old &lsquo;code-compile-run&rsquo; cycle is back again. It&rsquo;s not the tests that are slow per se but loading the environment. Each time you run a test, you wait for Rails to start while the actual time spent in the test(s) is negligible. Very frustrating when doing TDD.</p>

<p>There are some tools to overcome this problem but it&rsquo;s sometimes quite hard to get them working (more on this in a later post).</p>

<h1>Debugging</h1>

<p>Take the browsing tools and the always-runtime feature and you get easy debugging. The TDD flow get much better when you can create methods on the fly, navigate the stack and change the state of your object on the fly. In Rails, I&rsquo;m used to run the test, see it fails, switch to my text editor and re-run the test. Tools like <a href="http://pry.github.com/">Pry</a> makes things much more smooth but they are quite far from a live debugger.</p>

<h1>Closing</h1>

<p>This post is already far too long for and probably not very well illustrated but I hope you get the idea. I&rsquo;m not saying that Smalltalk is better; all the goodness mentioned before have their drawbacks, mainly when it comes to deployment. As your code is always running, it can be quite cumbersome to deploy it on a server in a fresh state. There are tools to help but they are not as nice as what you get in the Ruby world. A lot of smalltalkers seem to have their own recipes to deploy. It can be quite disturbing for someone coming from Ruby.</p>

<p>Anyway, I gonna try to illustrate my arguments in the next posts. Thanks for reading !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/ruby-frustration">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/ruby-frustration#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sun, 28 Aug 2011 13:27:00 -0700</pubDate>
      <title>Seaside session timeout</title>
      <link>http://articles.tulipemoutarde.be/seaside-session-timeout</link>
      <guid>http://articles.tulipemoutarde.be/seaside-session-timeout</guid>
      <description>
        <![CDATA[<p>
	<p>As usual, this post is most a reminder for myself but it can be useful for others. In previous version of Seaside (prior to 3.0), it was possible to change the default session timeout by using:</p>

<div class="CodeRay">
  <div class="code"><pre>application preferencesAt: #sessionExpirySecond put: 1200</pre></div>
</div>


<p>It has changed with Seaside 3.0 and looked a bit more complicated now:</p>

<div class="CodeRay">
  <div class="code"><pre>application cache expiryPolicy configuration
  at: #cacheTimeout 
  put: 1200</pre></div>
</div>


<p>If I&rsquo;m missing something, <a href="http://twitter.com/fstephany">tweet me</a> :)</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/seaside-session-timeout">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/seaside-session-timeout#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 24 Aug 2011 07:46:00 -0700</pubDate>
      <title>Metacello configurations readability</title>
      <link>http://articles.tulipemoutarde.be/metacello-configurations-readability</link>
      <guid>http://articles.tulipemoutarde.be/metacello-configurations-readability</guid>
      <description>
        <![CDATA[<p>
	<p>I&rsquo;m polishing a <em>very</em> small package to interact with <a href="http://www.ogone.be">ogone</a>, a payment platform, from a <a href="http://seaside.st/">Seaside</a> application. So it&rsquo;s time to write a Metacello configuration to share it easily.</p>

<p>I always have hard time to read Metacello configurations and wonder if a vertical alignment wouldn&rsquo;t help. Basically, I find this:</p>

<div class="CodeRay">
  <div class="code"><pre>baseline10: spec
  spec for: #common do: [
    spec blessing: #baseline.      
    spec
      repository: 'http://www.squeaksource.com/ogone';
      package: 'Ogone-Core';
      package: 'Ogone-Seaside-Example' with: [spec requires: 'Ogone-Core'];
      package: 'Ogone-Tests'           with: [spec requires: 'Ogone-Core'].

    spec
      group: 'default'         with: #('Core' 'Seaside-Example' 'Test');
      group: 'Core'            with: #('Ogone-Core');
      group: 'Seaside-Example' with: #('Ogone-Core' 'Ogone-Seaside-Example');
      group: 'Tests'           with: #('Ogone-Core' 'Ogone-Test')
  ].</pre></div>
</div>


<p>More readable than this:</p>

<div class="CodeRay">
  <div class="code"><pre>baseline10: spec
  spec for: #common do: [
    spec blessing: #baseline.      
    spec
      repository: 'http://www.squeaksource.com/ogone';
      package: 'Ogone-Core';
      package: 'Ogone-Seaside-Example' with: [spec requires: 'Ogone-Core'];
      package: 'Ogone-Tests' with: [spec requires: 'Ogone-Core'].

    spec
      group: 'default' with: #('Core' 'Seaside-Example' 'Test');
      group: 'Core' with: #('Ogone-Core');
      group: 'Seaside-Example' with: #('Ogone-Core' 'Ogone-Seaside-Example');
      group: 'Tests' with: #('Ogone-Core' 'Ogone-Test')
  ].</pre></div>
</div>


<p>Am I the only one ?</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/metacello-configurations-readability">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/metacello-configurations-readability#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sat, 13 Aug 2011 12:15:00 -0700</pubDate>
      <title>Too much Smalltalk</title>
      <link>http://articles.tulipemoutarde.be/too-much-smalltalk</link>
      <guid>http://articles.tulipemoutarde.be/too-much-smalltalk</guid>
      <description>
        <![CDATA[<p>
	<p>I&rsquo;m using way too much Smalltalk these days, I find myself typing:</p>

<div class="CodeRay">
  <div class="code"><pre>@articles do |each| 
  # do something with each
end</pre></div>
</div>


<p>instead of:</p>

<div class="CodeRay">
  <div class="code"><pre>@articles.each do |article|
  # do something with article
end</pre></div>
</div>


<p>when coding in Ruby. Stupid brain&hellip;</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/too-much-smalltalk">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/too-much-smalltalk#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Thu, 11 Aug 2011 11:34:05 -0700</pubDate>
      <title>Pharo Smalltalk experience report, part I </title>
      <link>http://articles.tulipemoutarde.be/pharo-smalltalk-experience-report-part-i</link>
      <guid>http://articles.tulipemoutarde.be/pharo-smalltalk-experience-report-part-i</guid>
      <description>
        <![CDATA[<p>
	<p>Hi there, I&rsquo;d like to share some of my latest experiments with <a href="http://www.pharo-project.org/home">Pharo</a>. This post is not very well structured and certainly needs some polishing but time is scarce.</p>

<p>I use Ruby and Rail for my daily work at <a href="http://agilitic.com">agilitic</a>. I&rsquo;ve always dabbled with Smalltalk (Squeak then Pharo) and wanted to build a real world project with it. <a href="http://wapict.be">Wapict.be</a> was the ideal candidate: not too big while not trivial.</p>

<p>The idea behind wapict is simple: become the reference of photography in <a href="http://en.wikipedia.org/wiki/Wallonie_Picarde">Wallonie-Picarde</a>, a region of Belgium. We sell stock pictures in digital or printed format, provide photographers for events and experiment with photography techniques&hellip;</p>

<p>It started with a simple presentation website and has now some nice features for photographers. A lot more is planned (e.g., buy online with credit card) but the project is advanced enough to do a first post about it.</p>

<h2>Stack</h2>

<p>Currently, wapict is running with:</p>

<ul>
<li>Pharo 1.3</li>
<li>Seaside 3.0.5</li>
<li>XMLSupport</li>
<li>Fuel 1.4</li>
<li>Zinc HTTP server</li>
</ul>


<p>All managed via <a href="http://code.google.com/p/metacello/">Metacello</a> Configurations.</p>

<p>The project runs with the <a href="http://www.mirandabanda.org/files/Cog/VM/">Cog VMs</a>. Development is done on MacOS while the staging and production servers are running Linux. A big problem with Pharo is that there are no official supported VMs. You are there on your own and choosing a suitable VM can be tedious. Hopefully this will change in the future.</p>

<h2>Persistence</h2>

<p>The traffic is quite low and a single Pharo image can handle the load while sipping a coffee. Persistence is primitive right now: I serialize everything with Fuel on disk. Nothing really fancy but it works well for what I need.</p>

<p>Pictures are stored on disk and are served with Nginx. The originals are kept private and are not accessible from the public.</p>

<h2>Deployment</h2>

<p>At work we use Git + Capistrano or Vlad to deploy our rails applications. My usual flow is as simple as:</p>

<div class="CodeRay">
  <div class="code"><pre>git pull
git commit -am &quot;fixed bug #456&quot;
git push
cap staging deploy</pre></div>
</div>


<p>and hopla my code is in staging. Once validated, <code>cap production deploy</code> deploys on the production box. Easy.</p>

<p>It seems that there are no equivalent on Pharo or at least there are no common workflow, everybody has his own recipe to roll out new code.</p>

<p>I have added a link in the admin section that loads the latest stable Metacello release available. So my deployment flow is:</p>

<ul>
<li>commit modified packages</li>
<li>update and commit metacello configuration</li>
<li>login to the application and click on the update link.</li>
</ul>


<p>Not too bad but I have to leave my Smalltalk environment to deploy. I&rsquo;ll probably create a small webservice to perform administrative operations on the deployed image.</p>

<h2>Tools</h2>

<p>I only use the tools shipped with Pharo 1.3. Nothing really fancy but they work well. The default for code highlighting and code completion suit me.</p>

<p>I rebuild my development image as often as possible. Two benefits: I&rsquo;m sure the whole project is easily loadable in a fresh image all the time and the mess I introduce in my image when developing is cleaned.</p>

<h2>Conclusion</h2>

<p>All in all, i&rsquo;m quite happy with Seaside and Pharo. It is really refreshing to work with those when doing Ruby and Rails all the day. I cannot stand Rails when it comes to flow anymore. It just doesn&rsquo;t feel right. I love to develop web applications with Javascript: I can code the behaviour much more easily than with plain HTTP requests and I feel this kind of joy when developing with Seaside.</p>

<p>What I really miss though is the possibility to login and open an IRB on a server. That&rsquo;s quite dangerous in production but it helps a lot when checking the state of an application. What would be <em>really</em> nice to have is a set of remote tools to browse and debug an image from the outside. Some uses RFB to do that but I find it clumsy and slow.</p>

<p>I&rsquo;ve recently discovered <a href="http://code.google.com/p/tode/">tODE</a>, a development environment that runs on top of Seaside, I haven&rsquo;t checked it yet but Dale Henrichs use it for 80% of his development.</p>

<p>All in all, my dream is pretty simple: Pharo 1.4 with <a href="http://forum.world.st/Ring-model-infrastructure-for-Pharo-td3081971.html">Ring</a>, <a href="http://rmod.lille.inria.fr/coral/index.html">Coral</a> and <a href="http://forum.world.st/Seaside-on-Pharo-Kernel-td3729573.html">remote tools</a> =)</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-smalltalk-experience-report-part-i">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-smalltalk-experience-report-part-i#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 13 Jul 2011 14:04:00 -0700</pubDate>
      <title>Dynamically add/remove the Seaside's toolbar on an application</title>
      <link>http://articles.tulipemoutarde.be/dynamically-addremove-the-seasides-toolbar-on</link>
      <guid>http://articles.tulipemoutarde.be/dynamically-addremove-the-seasides-toolbar-on</guid>
      <description>
        <![CDATA[<p>
	<p>I wanted to display or hide the tool bar on a Seaside application. It turned out to be pretty simple.</p>

<p>To remove it:</p>

<div class="CodeRay">
  <div class="code"><pre>app configuration 
   at: #rootDecorationClasses
   addAll: #() 
   removeAll: (Array with: WAToolDecoration)</pre></div>
</div>


<p>And to show it:</p>

<div class="CodeRay">
  <div class="code"><pre>app configuration 
    at: #rootDecorationClasses 
    addAll: (Array with: WAToolDecoration)</pre></div>
</div>


<p>Another useful snippet to retrieve an application from its name:</p>

<div class="CodeRay">
  <div class="code"><pre>WAAdmin defaultDispatcher handlerAt: 'wapict'</pre></div>
</div>


<p>Seasiders won&rsquo;t find this exciting but this post is more a reminder for myself than anything else. If I&rsquo;m doing something overcomplicated for nothing, shout my ignorance in the comments ;)</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/dynamically-addremove-the-seasides-toolbar-on">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/dynamically-addremove-the-seasides-toolbar-on#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="703" width="924" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-07-13/qmAamkCDqhCfwJjqxcAhDhvwngxwhBufGnzDczrJzFqGqcpIgmhojgbneshg/toolbar-seaside.png">
        <media:thumbnail height="380" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-07-13/qmAamkCDqhCfwJjqxcAhDhvwngxwhBufGnzDczrJzFqGqcpIgmhojgbneshg/toolbar-seaside.png.scaled500.png" />
      </media:content>
    </item>
    <item>
      <pubDate>Mon, 28 Mar 2011 13:08:00 -0700</pubDate>
      <title>Pharo mailing list weekly summary #6 - Migration !</title>
      <link>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-6-migration</link>
      <guid>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-6-migration</guid>
      <description>
        <![CDATA[<p>
	<p>Hey there,</p>
<p>As said earlier, the Pharo mailing list weekly summary is now hosted on <a href="http://www.pharo-project.org/news">the main Pharo website</a> (which is powered by <a href="http://www.cmsbox.com/en/cms">Cmsbox</a>). The editing porcess is quite different from what I'm used to. Neat for someone who is not computer savvy but disturbing for someone who writes everything with Markdown!</p>
<p>As usual, I've probably forgotten some important topics, so do not hesitate to comment ;)</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-6-migration">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-6-migration#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sat, 12 Mar 2011 06:48:00 -0800</pubDate>
      <title>Pharo mailing list weekly summary #5</title>
      <link>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-5</link>
      <guid>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-5</guid>
      <description>
        <![CDATA[<p>
	<p>Once again, the week was very busy in the Pharo mailing list. It seems that Pharo 1.2 release is imminent. I skipped a massive amount of threads in this summary. If I removed something important for you, just shout and I&rsquo;ll edit this post.</p>

<p>Next week, the <em>Pharo mailing list weekly summary</em> will move to the <a href="http://www.pharo-project.org/">official Pharo website</a>. Yeah !</p>

<h2>Events</h2>

<ul>
<li><a href="http://en.inria.fr/inria-research-centre/lille-nord-europe/calendar/smalltalk">Deep into Smalltalk</a> took place this week, about 45 people attended. It seems that Mariano <a href="http://forum.world.st/THANKS-a-lot-for-the-awesome-Deep-Smalltalk-School-td3349178.html">enjoyed</a> it very much! Presentation slides are available and courses were recorded. Videos are not there yet but I&rsquo;ll update this post as soon as they are.</li>
</ul>


<h2>Announcements</h2>

<ul>
<li><p><a href="http://www.tudorgirba.com/">Doru</a> announced the <strong>Glamorous Tool Project</strong>. The goald is to build a set of Smalltalk development tools based on <a href="http://www.moosetechnology.org/tools/glamour">Glamour</a>. Is this the future of Pharo development tools ? <a href="http://forum.world.st/the-glamorous-toolkit-project-td3349849.html">full thread</a>.</p></li>
<li><p>There is now an <a href="http://code.google.com/p/cog/">issue tracker for Cog</a>. <a href="http://forum.world.st/ANN-Cog-issue-tracker-td3347097.html">full thread</a></p></li>
<li><p>Esteban released a new Cocoa VM: 5.7.4.1. This is a non Cog VM. This release adds no feature but small steps are better than big jumps. <a href="http://forum.world.st/ANN-Cocoa-Squeak-VM-5-7-4-1-non-Cog-released-td3341972.html">full thread</a></p></li>
<li><p>Umezawa-san told us that SIXX now works on Pharo 1.2 and Squeak 4.2. <a href="http://forum.world.st/Fwd-SIXX-in-Pharo-1-2-td3337674.html">full thread</a></p></li>
<li><p>InterpretorSimulator is now working with the latest images. Pavel warned us that it is far from perfect that it should work with small headless images. <a href="http://forum.world.st/InterpreterSimulator-reloaded-td3342295.html">full thread</a></p></li>
<li><p>Benjamin built a new Morphic widget: &ldquo;SwitchableTreeWidget&rdquo;. It should works fine on Pharo 1.2 (expect problems with 1.3). Load it and tell him what you think. <a href="http://forum.world.st/New-widget-td3344098.html">full thread</a></p></li>
</ul>


<h2>Discussions</h2>

<ul>
<li><p>There are some discussions about using the SqueakSSL plugin with Pharo. That would help to use HTTPS. At the moment, <a href="http://stunnel.org/">stunnel</a> is a possible solution. <a href="http://forum.world.st/Fwd-Https-Url-in-Pharo-1-2-td3337616.html">full thread</a></p></li>
<li><p>There are plans to bring Pharo in the Apple Store. The discussion moved to Apple vs the rest of the world and the future of computing and licensing questions. <a href="http://forum.world.st/Pharo-on-Apple-App-Store-td3334878.html">full thread</a></p></li>
<li><p>Hilaire asked how to get bigger cursor in Pharo. Apparently Torsten has worked on this. full threads <a href="http://forum.world.st/Bigger-cursor-td3339402.html">here</a> and <a href="http://forum.world.st/Bigger-cursor-td3339843.html">there</a></p></li>
<li><p>Laurent is doing TDD for GUI development. There are no special tools for this and Laurent struggled a bit with <code>#visible</code> which always returns true. Ben showed the trick to detect if a window is closed. <a href="http://forum.world.st/Assert-SystemWindow-not-visible-td3330492.html">full thread</a></p></li>
<li><p>Stef tried to install OSProcess in his image and ran into trouble. Beware that you need a VM with the OSProcess plugin. <a href="http://forum.world.st/OSProcess-td3338691.html">full thread</a></p></li>
<li><p>Alexandre explained different solution on how to run Smalltalk in a web browser.<a href="http://forum.world.st/Kernel-td3335157i20.html">full thread</a></p></li>
<li><p>Hilaire ran into trouble when installing DejaVuBitmapFonts on Pharo core 1.3. Fernando shared the snippet he uses. <a href="http://forum.world.st/Error-installing-DejaVuBitmapFonts-td3316606.html">full thread</a></p></li>
<li><p>Problems with the integration process and the Hudson server for 1.2. <em>The Great and Perfect Release Cycle</em> is not an easy goal. <a href="http://forum.world.st/Pharo-1-2-and-test-failures-td3337119.html">full thread</a></p></li>
</ul>


<p>That&rsquo;s all folks, see you next week !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-5">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-5#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sat, 05 Mar 2011 13:03:00 -0800</pubDate>
      <title>Pharo mailing list weekly summary #4</title>
      <link>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-4</link>
      <guid>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-4</guid>
      <description>
        <![CDATA[<p>
	<p>Here is the weekly summary of the Pharo project mailing list. If I missed something or say something wrong, please shout at me in the comments.</p>

<p>My hightlights of the week: at least three different project are in the tracks for a squeaksource replacement. Pharo 1.2 is almost out but everybody feels the need for a better infrastructure/process. If you want to get involved on this side and if you have enough time, do not hesitate to send your ideas and contributions.</p>

<h2>Events</h2>

<ul>
<li><p>Pharo Sprint in Lille. Saturday 12th March. Tell if you plan to go ;) <a href="http://forum.world.st/About-the-sprint-saturday-12-td3333884.html">full thread</a></p></li>
<li><p>The sprint in Bern went very well. You can get an overview of what happened during the sprint on <a href="http://twitter.com/#!/search/pharosprint">Twitter</a>. To keep it short, Camillo worked on <em>KeyMappings</em> (see <a href="http://forum.world.st/ANN-More-on-Keymappings-td3325569.html">this thread</a> for more info), Lukas playing <em>WeakAnnouncements</em> and <em>OB</em>. Adrian, Jorge and Toon started a debugger based on Glamour. They worked hard to decouple the model from the GUI. Mircea built a new widget for searching multiple categories of items in the same time. All in all, Glamour becomes more and more important in Pharo. <a href="http://forum.world.st/ANN-pharo-focused-sprint-bern-feb-26-td3251860.html">full thread</a></p></li>
<li><p>Stephan and Diego participated in <a href="http://eindhoven.startupweekend.org/">Eindhoven startup weekend</a>. They got the innovation price. I could not find more information on the event website :/ <a href="http://forum.world.st/Startup-weekend-success-td3328004.html">full thread</a>.</p></li>
</ul>


<h2>Releases</h2>

<ul>
<li><p>New release of <a href="http://www.ofset.org/drgeo">Dr Geo II: 11.03</a>. <a href="http://forum.world.st/ANN-Dr-Geo-II-release-11-03-for-Linux-Mac-Windows-td3335915.html">full thread</a></p></li>
<li><p>Olivier released a <a href="http://www.squeaksource.com/LDAPlayer/">LDAP package</a> and a <a href="http://www.auverlot.fr/index.php?z=21">tutorial</a>. It is known to work on Pharo 1.2rc. full threads <a href="http://forum.world.st/LDAPlayer-td3333079.html">here</a> and <a>there</a>)</p></li>
<li><p>Pharo 1.2 should be released. The infrastructure should be improved. At the moment time is lost in Metacello configurations for external packages. Stef reminds us this fact and want to see 1.2 final soon. One solution pushed by Doru would be to set a hard deadline one month before the release. Packages that do not work are removed from the distributon. Laurent pointed that the Linux process could also be a goot candidate. <a href="http://forum.world.st/About-1-2-td3326052.html">full thread</a></p></li>
<li><p>Alexandre reminds us about the existence of <a href="http://www.silversmalltalk.com/">SilverSmalltalk</a>. <a href="http://forum.world.st/SilverSmalltalk-td3323486.html">full thread</a></p></li>
</ul>


<h2>Users</h2>

<ul>
<li><p>More information about Squeaksource 3 on a thread. Nobody have heard about it before. As we have seen last week, the future looks promising. <a href="http://forum.world.st/Pharo-Sources-Google-Hit-Ratio-td3318289.html">full thread</a></p></li>
<li><p>There are some discussions about the state of <a href="http://en.wikipedia.org/wiki/Croquet_Project">OpenCroquet</a> (now known as <a href="http://www.opencobalt.org/">OpenCobalt</a>). (<a href="http://forum.world.st/OpenCroquet-Website-td3319189.html">full thread</a>)</p></li>
<li><p>Good thread on TDD. <em>How many time should spend on tests?</em>. Laurent gave a nice reference to <a href="http://www.amazon.com/Test-Driven-Development-Practical-David-Astels/dp/0131016490">Dave Astels book</a>. If you dont know TDD or find it difficult to apply in practice, read the <a href="http://forum.world.st/Good-reference-on-time-on-unit-testing-td3326543.html">full thread</a></p></li>
<li><p>Good question from Edouard. He pointed a stupid method: <em>2 days</em> vs. <em>2 day</em>. The latter evaluates to the duration of 1 day. <a href="http://forum.world.st/2-days-vs-2-day-td3325706.html">full thread</a></p></li>
<li><p>Dennis asked if it is possible to use russian fonts with the CogVM. <a href="http://forum.world.st/Is-it-possible-to-setup-Russian-fonts-in-Pharo-Cog-VM-td3329185.html">full thread</a></p></li>
<li><p>nullPointer experiences a <strong>very</strong> slow package loading on Windows. Mariano reminds that <a href="http://www.pharo-project.org/documentation/faq">antivirus could be the root of the problem</a>. <a href="http://forum.world.st/Great-slowness-for-install-CLFramework-td3327888.html">full thread</a></p></li>
<li><p>Alexandre asked what <a href="">Coral</a> is about. Documentation is lacking but according the authors it should work. The <a href="http://www.auverlot.fr/pharo/coralinstall/">only tutorial</a> you will find about it is written in french and does not go very deep. <a href="http://forum.world.st/Coral-td3335190.html">full thread</a></p></li>
<li><p>Stef explained to Miguel how to get a diff between to versions on Monticello. It is the kind of thing you will obviously need one day. Bookmark this post ;) <a href="http://forum.world.st/Monticello-diff-between-2-version-td3336953.html">full thread</a></p></li>
<li><p>Laurent discovered that SSL is not supported on Pharo out of the box. Sven mentioned <a href="http://www.squeaksource.com/SqueakSSL.html">SqueakSSL</a> but it does not seem to work on Pharo (MacOS and Linux seem problematic as well). Esteban proposed to use <a href="http://www.stunnel.org/">stunnel</a> to create an SSL tunneling proxy. Not very elegant and straightforward but it works. <a href="http://forum.world.st/Url-HTTPSocket-with-https-td3331103.html">full thread</a></p></li>
<li><p>Olivier asked if there are any documents on how to create GUIs in Pharo. <a href="http://www.pharocasts.com/">Pharocasts</a> were mentioned and Bill explained briefly the born of Morphic and Polymorph. <a href="http://forum.world.st/GUI-td3333102.html">full thread</a></p></li>
<li><p>Stef struggled to load <a href="http://www.lukas-renggli.ch/smalltalk/magritte">Magritte</a> without <a href="http://seaside.st/">Seaside</a>. He gave the snippet:</p>

<div class="CodeRay">
  <div class="code"><pre>Gofer it
  renggli: 'magritte2';
  package: 'ConfigurationOfMagritte2';
  load.

(ConfigurationOfMagritte2 project version: '2.0.6') load: #('Core')</pre></div>
</div>
</li>
</ul>


<h2>Internal and discussions</h2>

<ul>
<li><p>Dale did a <em>solo sprint</em> to fix the failing tests in Metacello and released a new version. full threads <a href="http://forum.world.st/Metacello-Configuration-Pharo1-2-solo-sprint-Portland-Oregon-Saturday-and-Sunday-td3325475.html">here</a> and <a href="http://forum.world.st/Fwd-Metacello-Metacello-1-0-beta-28-3-1-released-td3325601.html">there</a>.</p></li>
<li><p>Stef introduced RPackage, a rewrite of PackageInfo. <a href="http://forum.world.st/introducing-RPackage-td3326084.html">full thread</a>. More discussion about it in this <a href="http://forum.world.st/About-RPackage-td3330650.html">other thread</a>.</p></li>
<li><p>Stef continues his war against uncommented classes. It is sometimes <strong>very</strong> difficult to use a class/package/framework when you do not know where to start. <a href="http://forum.world.st/comments-comments-comments-again-td3326862.html">full thread</a></p></li>
<li><p>Discussion about <a href="http://www.infoq.com/articles/azul_gc_in_detail">the Azul Pauseless garbage collector</a>. If you are into the VM things, you could be interested with how it compare with the VisualWorks garbge collector. <a href="http://forum.world.st/Azul-Pauseless-GC-td3326066.html">full thread</a></p></li>
<li><p>Marcus have some news from the Hudson front. They now have a Mac (so mac VMs will probably soon get the benefits of the continuous integration server). The Cog Unix VMs are also continuously built. And there is a new build for Project Sista. <a href="http://forum.world.st/Hudson-News-td3327917.html">full thread</a></p></li>
<li><p>Eliot wrote a <a href="http://www.mirandabanda.org/cogblog/2011/03/01/build-me-a-jit-as-fast-as-you-can/">blog post</a> about JIT. <a href="http://forum.world.st/another-blog-post-td3331940.html">full thread</a></p></li>
<li><p>Stef warned the community about <em>XXX</em>. He seems to approach people with (crazy) business plans. He sent proposals to VCs where he mentioned virtual key team members who are in fact not related with him. German did not have bad experience with <em>XXX</em>. Anyway, be careful if you&rsquo;re approached by a suspicious VC.</p></li>
<li><p>Pavel opened a <a href="http://code.google.com/p/pharo/issues/detail?id=3782">ticket</a> to get pangrams for various language. <a href="http://forum.world.st/pangrams-td3334971.html">full thread</a></p></li>
<li><p>Hilaire wants to get Locale works with a CogVM (to use it with the underpowered XO laptop). If you want to play with GDB and to dig into the VM the thread should interest you. <a href="http://forum.world.st/COG-VM-and-Locale-td3331775.html">full thread</a></p></li>
<li><p><a href="http://www.squeakdbx.org/">SqueakDBX</a> will get slots for <a href="http://esug.org/wiki/pier/Promotion/SummerTalk">SummerTalk</a>. Three mentors, three students. Very good news for this project. <a href="http://forum.world.st/ANN-ESUG-supports-once-again-SqueakDBX-td3334864.html">full thread</a></p></li>
<li><p>The state of Smalltalk on tablets and mobile in <a href="http://forum.world.st/Squeak-Pharo-Cuis-on-Android-td3333463.html">this thread</a>.</p></li>
<li><p>Benjamin announced that he (with Igor) managed to get a new Smalltalk kernel based on Pharo which is 2.2Mb and includes 230 classes. Impressive. This is very important to reach one the Pharo&rsquo;s goal: have a minimal kernel from which needed packages are loaded. <a href="http://forum.world.st/Kernel-td3335157.html">full thread</a></p></li>
</ul>


<p>As usual, a lots of bugs were fixed and technical details were discussed both in the mailing list and in the <a href="http://code.google.com/p/pharo/issues/list">bug tracking system</a>.</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-4">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-4#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Thu, 24 Feb 2011 12:02:24 -0800</pubDate>
      <title>Pharo mailing list weekly summary #3</title>
      <link>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-3</link>
      <guid>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-3</guid>
      <description>
        <![CDATA[<p>
	<p>End of week, time for the weekly Pharo digest. Following Ken Brown&rsquo;s suggestion, I&rsquo;ve renamed it <em>weekly summary</em> to avoid the confusion with the digest you automatically get from mailing list servers.</p>

<p>As I was on holidays, the summary will be short this week. If I missed something really important, let me know, I&rsquo;ll edit this post.</p>

<h2>Events</h2>

<ul>
<li><a href="http://forum.world.st/ANN-pharo-focused-sprint-bern-feb-26-td3251860.html">Pharo sprint organised</a> in Bern this Saturday (26th October). The taks of the day is to discuss and improve the Pharo IDE. Anyone can join (Smalltalk newcomers are welcome).</li>
</ul>


<h2>Announces</h2>

<ul>
<li><p><a href="http://www.moosetechnology.org/">Moose</a> is available in version 4.3. Moose is a platform for software and data analysis. (<a href="http://forum.world.st/ANN-Moose-4-3-td3316625.html">the announcement</a>)</p></li>
<li><p>Miguel updated the configuration of OSProcess. The confifuration takes the <a href="http://gemstonesoup.wordpress.com/2011/01/17/metacello-1-0-beta-28-unearthed/">symbolic versions</a> into account. OSProcess provides access to operating system functions (<a href="http://forum.world.st/ANN-ConfigurationOfOSProcess-with-symbolic-versions-td3313985.html">full thread</a>)</p></li>
<li><p>Benjamin wrote a Messenger application to run inside Pharo. Hopefully that could help the developers to communicate when working on Pharo. (<a href="http://forum.world.st/Community-in-the-IDE-td2543540.html">full thread</a>).</p></li>
<li><p>Laurent wrote a simple <a href="http://magaloma.blogspot.com/2011/02/xml-browser-with-pharo.html">XML browser</a>. Very handy ! (<a href="http://forum.world.st/XML-browser-td3320622.html">full thread</a>)</p></li>
<li><p>Alexandre announced <a href="http://metacellobrowser.dcc.uchile.cl/">MetacelloBrowser</a>. This tool seems to be the best friend of Metacello. (<a href="http://forum.world.st/MetacelloBrowser-td3321023.html">full thread</a>)</p></li>
</ul>


<h2>User</h2>

<ul>
<li><p>Adrien asked how to load OmniBrowser in PharoCore 1.3. Guillermo gave the magic command ;) (<a href="http://forum.world.st/OmniBrowser-in-PharoCore-1-3-td3317323.html">full thread</a>)</p></li>
<li><p>Hilaire asked how to change the default font size (he is working on the XO laptop). It is always the kind of tips you eventually need. (<a href="http://forum.world.st/StandardFonts-defautFont-td3317772.html">full thread</a>)</p></li>
<li><p>He also got some problems with the Cog VM and the locale plugin. (<a href="http://forum.world.st/COG-and-locale-td3318081.html">full thread</a>)</p></li>
<li><p>Stef asked how people reify XML and objects. Using XMLParser is always the same the same boring work. <a href="http://forum.world.st/Pattern-for-reifying-XML-doc-td3319260.html">full thread</a></p></li>
<li><p>Olivier asked how to change the Pharo logo in the IDE. This is also the kind of simple question that you will probably ask one day. (<a href="http://forum.world.st/Replacing-the-pharo-logo-td3322504.html">full thread</a>)</p></li>
</ul>


<h2>Pharo</h2>

<ul>
<li><p>Mariano is back after 25 days of holidays without internet. I guess I&rsquo;ll have much more work for my weekly summaries now ;)</p></li>
<li><p>Stef continues to comment FileSystem and asked the opinion of the community on some point. (<a href="http://forum.world.st/Need-your-point-of-view-on-FSPath-and-others-td3313975.html">full thread</a>)</p></li>
<li><p>The virtual sprint for Pharo 1.2 was a bit hard to organise because of timezones (<a href="http://www.doodle.com/byvynpkmm87hc3x8">doodle</a>). I have no idea if it was successful though.</p></li>
<li><p><a href="http://squeaksource.com">Squeaksource</a> is down more and more often these days. As usual, people talked about possible replacements. There will be at least one alternative (Esteban has something, The Iliad guys and Esug are working and I&rsquo;ve heard about a possible Squeaksource 3). Read the (<a href="http://forum.world.st/SqueakSource-down-again-td3317484.html">full thread</a>) if you&rsquo;re interested. <a href="http://forum.world.st/Pharo-Sources-Google-Hit-Ratio-td3318289.html">Another thread</a> can also be a good read in you are in the version control thing. With the success of <a href="http://github.com">Github</a>, it is crucial from a community perspective to have a nice place to host our beloved source code.</p></li>
<li><p>Another consulting company <a href="http://www.channelregister.co.uk/2011/02/20/cobol_is_the_new_language_to_know/">said</a>:</p></li>
</ul>


<blockquote class="posterous_short_quote"><p>Smalltalk or FoxPro should be junked or moved to a new system immediately as
a result of non-support and no further development of the environments.</p></blockquote>

<p>You can imagine the reactions in the mailing list ;) <a href="http://forum.world.st/Cobol-is-the-new-language-to-know-td3317188.html">full thread</a></p>

<ul>
<li>State of Magma in Pharo by Miguel. Magma is an object-oriented database. <a href="http://forum.world.st/Is-repository-down-for-Magma-td3321104.html">thread</a></li>
</ul>


<p>Thanks for reading !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-3">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-summary-3#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 18 Feb 2011 08:09:00 -0800</pubDate>
      <title>Pharo mailing list weekly digest #2</title>
      <link>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-digest</link>
      <guid>http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-digest</guid>
      <description>
        <![CDATA[<p>
	<p>End of the week, time for the Pharo weekly digest. This week was quite busy on the mailing list, if I overlooked something important, please comment this post.</p>

<p>At some point, this digest will probably be hosted on the main <a href="http://www.pharo-project.org/">Pharo website</a>. If you want to help, you are more welcome !</p>

<p>I&rsquo;ll be absent until Wednesday (Italy!), so I&rsquo;ll probably miss some threads for the next digest :/</p>

<h2>Pharo promotion</h2>

<ul>
<li><p>The Pharo board calls for Pharo support in the industry. It wants to create a legal infrastructure to collect funds to perform engineering tasks. The end goal is to streghten Pharo. The consortium is not limited to research groups and companies; individuals are welcome! If you are interested in Pharo, download the letter, sign it and send it back. It is <strong>crucial</strong> to get a stronger open source Smalltalk. Beware that there are two versions of the letter, be sure to get the latest one. <a href="http://forum.world.st/Call-for-Pharo-Support-important-td3306729.html">See the thread</a></p></li>
<li><p>Stef created a <a href="http://www.linkedin.com/e/hzbhb7-gkawp6l9-36/vgh/2558378/">LinkedIn group</a> for Pharo. It is quite successful (76 members so far).</p></li>
</ul>


<h2>Events</h2>

<ul>
<li>Laurent proposed to do some virtual sprint next week from monday to wednesday (evening &ndash; France timezone). Check <a href="http://www.doodle.com/byvynpkmm87hc3x8">the Doodle</a> if you want to join. (<a href="http://forum.world.st/Pharo-1-2-virtual-sprint-td3305846.html">full thread</a>)</li>
</ul>


<h2>Misc</h2>

<ul>
<li><p>Discussion about <a href="https://www.hpi.uni-potsdam.de/hirschfeld/trac/SqueakCommunityProjects/wiki/designer">the new GUI visual designer</a> developed in HPI. This GUI designer targets Squeak but could be porter to Pharo. If I understood correctly, the authors use <a href="https://www.hpi.uni-potsdam.de/hirschfeld/trac/SqueakCommunityProjects/wiki/signals">Signal</a> while Pharo has an explicit preference for <a href="http://book.pharo-project.org/book/announcements/">Announcements</a>. The discussion moved to the old debate about GUI construction (should we use something like XML to describe a user interface ?), on the topic of how to integrate a big framework into Pharo and how to serialize smalltalk code. If you have followed the thread and if I missed something, please comment ! (<a href="http://forum.world.st/A-new-GUI-visual-designer-td3067111.html">full thread</a>)</p></li>
<li><p>There was a doubt that the introduction of the Hudson build server was putting too much stress on Squeaksource (which is clearly unstable). Stéphane mentions a <em>new cool server</em>. I once heard about a SqueakSource-like project written in <a href="http://www.iliadproject.org/">iliad</a> and running on top of (GNU Smalltalk)[<a href="http://smalltalk.gnu.org/">http://smalltalk.gnu.org/</a>]. Is there a correlation ? (<a href="http://forum.world.st/Hudson-and-Squeaksource-statistics-td3301186.html">full thread</a>)</p></li>
<li><p>Janko announces a new version of Aida: Aida/web 6.2 Spring edition is out. Aida is a web framework written in Smalltalk. Janko uses it in production for years now. It is good to see that things are also moving outside the Seaside sphere. (<a href="http://forum.world.st/ANN-Aida-Web-6-2-Spring-edition-is-out-td3301723.html">full thread</a></p></li>
<li><p>A recurring question on the Seaside mailing-list is how to make a multilanguage (I18n) application in Seaside (or Smalltalk in general). Sebastian wrote a <a href="http://blog.flowingconcept.com/brandIt/multiligual-web-applications-design-ala-smalltalk">blog post</a> some time ago to explain his approach. There is a <a href="http://book.pharo-project.org/book/Localisation">dedicated chapter in the collaborative Pharo book</a> as well. If I remember well, some others do not follow the same approach. Please comment if you do.</p></li>
<li><p><a href="http://code.google.com/p/pharo/issues/detail?id=3699">A very important issue</a> was reported and closed.</p></li>
<li><p>Two new success story were added on the website: a workflow platform called <em>Issys Tracking</em> and <em>DrGeo</em>, a scriptable tool used to teach geometry and mathematics in high school. More info on the <a href="http://pharo-project.org/about/success-stories">Pharo Website</a>.</p></li>
<li><p>The Cog Unix VM is now built with Hudson. The <a href="http://rmod.lille.inria.fr/web/">RMoD Team</a> in Lille will soon get a Mac Mini to build the Mac VMs. (<a href="http://forum.world.st/Hudson-Cog-Unix-build-td3302938.html">full thread</a>)</p></li>
<li><p>A good reminder of how to call an external executable from an image. (<a href="http://forum.world.st/Call-a-external-executable-file-What-is-the-best-option-td3303894.html">full thread</a>)</p></li>
<li><p>Dale explained how to load the latest Seaside in Pharo 1.2. Very nice and clear post. (<a href="http://forum.world.st/Loading-Seaside-into-Pharo-1-2-core-td3305778.html">full thread</a>)</p></li>
<li><p><a href="http://code.google.com/p/pharo/issues/detail?id=3609">RPackage</a> is <a href="https://pharo-ic.lille.inria.fr/hudson/view/Pharo-TaskForces/job/Pharo%20RPackage%20All%20Tests/">now built</a> on the Hudson server. According to <a href="http://code.google.com/p/pharo/issues/detail?id=3609">ticket 3609</a>, RPackage wants to replace PackageInfo.</p></li>
<li><p>Awesome news from the <a href="http://blog.doit.st/">Cloudfork</a> project: OpenID and OAuth support in Smalltalk. More info on a <a href="http://blog.doit.st/2011/02/15/cloudforksso-openid-and-oauth-support-for-smalltalk/">dedicated blog post</a>. This project will help <strong>a lot</strong> when it comes to integrate external APIs.</p></li>
<li><p>The state of WeakAnnouncements was discussed in <a href="http://forum.world.st/Working-with-weak-announcements-td3305802.html">this thread</a>.</p></li>
<li><p><em><em>Huge</em>¨</em> thread <em>could we agree to remove caseOf: and   caseOf:otherwise:</em>. I reckon that I didn&rsquo;t follow the whole stuff but the conversation seems interesting for those enlightened enough to understand. The discussion covers the new compiler <em>Opal</em>. (<a href="http://forum.world.st/could-we-agree-to-remove-caseOf-and-caseOf-otherwise-td3302475.html">full thread</a>)</p></li>
<li><p>Olivier tries to use the <a href="http://www.squeaksource.com/LDAPlayer.html">LDAPlayer</a> in Pharo. He needs to send requests to an LDAP server for a Seaside application. (<a href="http://forum.world.st/Pharo-amp-LDAP-td3308841.html">full thread</a>)</p></li>
<li><p>German gave us a state of the <a href="http://www.squeaksource.com/XMLRPC.html">XMLRPC Project</a> which is funded by <a href="http://esug.org">ESUG</a>. He will focus on Pharo 1.1.1 and 1.2. It is broken in Squeak 4.2 at the momend.</p></li>
<li><p>Levente <a href="http://lists.squeakfoundation.org/pipermail/vm-dev/2011-February/006886.html">proposed a fix</a> for the UUID plugin problem. That will surely cures the headaches of some people.</p></li>
<li><p>Nicolas pointed some stuff in the String API and possible replacements to make it more smalltalkish. (<a href="http://forum.world.st/Smalltalk-string-API-td3308431.html">full thread</a>)</p></li>
<li><p>HwaJong Oh works on a <a href="http://en.wikipedia.org/wiki/Collada">COLLADA</a> file parser and wants to render it with <a href="http://www.squeaksource.com/AlienOpenGL.html">AlienOpenGL</a>. Fernando said that he has stopped to maintain the AlienOpenGL package but that it should be complete and stable enough to perform the task (<a href="http://forum.world.st/Render-a-COLLADA-mesh-with-OpenGL-td3308632.html">full thread</a>)</p></li>
<li><p>Guillermo updates us about the state of Pharo 1.2. Hopefully we&rsquo;ll see the official release quite soon ;) (<a href="http://forum.world.st/1-2-Dev-Status-td3312363.html">full thread</a>)</p></li>
<li><p>Fernando likes the PragmaMenuBuilder. You should look at it if you haven&rsquo;t yet. The discussion moved to the local and global searches for pragmas. (<a href="http://forum.world.st/Menu-creation-and-invocation-td3311552.html">full thread</a>)</p></li>
</ul>


<p>See you next week !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-digest">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/pharo-mailing-list-weekly-digest#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 11 Feb 2011 13:47:00 -0800</pubDate>
      <title>This week in the Pharo-Project mailing list</title>
      <link>http://articles.tulipemoutarde.be/this-week-in-the-pharo-project-mailing-list</link>
      <guid>http://articles.tulipemoutarde.be/this-week-in-the-pharo-project-mailing-list</guid>
      <description>
        <![CDATA[<p>
	<p>In the following weeks, I will try to provide a weekly digest of the activity going in the pharo-developer mailing list (and sometimes some bits from the Seaside mailing list).</p>

<p>This digest will be biased by my own priorities and usage of Pharo. There are chances that <em>the commit you are waiting for ages that fix this broken hidden property in Pharo</em> will not be part of my digest. Do not hesitate to comment if I forgot something important.</p>

<ul>
<li><p>Laurent launched a new game last week: <strong>Comment of the Day Contest</strong>. The principle is simple: every day a class without comment is randomly chosen. Mailing list participants propose a comment and at the end of the day, the best comment is integrated. It has generated some nice discussions so far.</p></li>
<li><p><a href="http://ci.pharo-project.org">The Hudson server</a> now builds a Seaside and runs all the tests in the Pharo 1.2 build. Continuous integration is definitely the big new thing in the Pharo community.</p></li>
<li><p>Esteban wrote a new article about the <a href="http://smallworks.com.ar/en/community/Reef/">Reef framework</a>. Simply put, Reef is a framework on top of Seaside that let you build dynamic components.</p></li>
<li><p>Joachim announced the release of <a href="http://jniport.wikispaces.com/">JNIPort 2.0</a>. This library allows you invoke Java code from Smalltalk. The big change of this version is the port to Squeak/Pharo (previous versions were only running with VisualWorks).</p></li>
<li><p>Tony <a href="http://www.tonyfleig.com/smallthoughts/blog/tffiler">published</a> a great tool to manage external files with Monticello. When writing web applications you often have javascript/CSS/png files hanging around. It can be a mess to deal with Monticello on one side and Git/SVN on the other. <a href="http://www.squeaksource.com/TFFiler">TFFiler</a> puts everything into Monticello. Very handy.</p></li>
<li><p>New COG VMs are available: <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r2359/">SimpleStackBasedCogit</a> and <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r2361">StackToRegisterMappingCogit</a>. The latter one is faster but SimpleStackBasedCogit still exists just in case people find bugs with the StackToRegisterMappingCogit that are not in SimpleStackBasedCogit. SimpleStackBasedCogit is &ldquo;mature&rdquo;. See the <a href="http://forum.world.st/new-Cog-VMs-available-td3263525.html">whole thread</a> for more technical details. Those VMs are no longer one-way street. With previous releases, once you had saved an image with a Cog VM you could not open it in a regular VM anymore. This is no longer the case.</p></li>
<li><p>Guillermo <a href="http://forum.world.st/copying-all-versions-to-squeaksource-td3263732.html">shared a nice trick</a> to push and load all versions to/from Squeaksource with <a href="http://www.lukas-renggli.ch/blog/gofer">Gofer</a>.</p></li>
<li><p>Oscar posted a link to a <a href="https://gforge.inria.fr/frs/download.php/28243/Settings.pdf">draft chapter about the Settings Framework</a>. It will be included in  <a href="http://pharobyexample.org/"><em>Pharo By Example 2</em></a>. Comments are welcome.</p></li>
<li><p>There was a discussion about syntax highlighting for Smalltalk code in HTML pages. Laurent uses <a href="http://softwaremaniacs.org/soft/highlight/en/">highlight.js</a> on the PharoCast website, Max Leske wrote a <a href="http://buildinggitfs.blogspot.com/2010/04/smalltalk-brush-for-syntax-highlighter.html">a brush for Syntaxhighlighter</a> and Nick pointed that <a href="http://pygments.org/">Pygments</a> supports Smalltalk syntax.</p></li>
<li><p>Stephane announced that the talk of the <a href="http://www.inria.fr/centre-de-recherche-inria/lille-nord-europe/agenda/smalltalk">Deep into Smalltalk school</a> will probably be recorded. <em>Deep into Smalltalk</em> is five days of lectures about advanced Smalltalk topics given by a great selection of speaker. Make sure you attend if you&rsquo;re interested by VMs, sockets, FFI or C-Smalltalk interactions.</p></li>
<li><p>Stephane decided to bring FileSystem into Pharo for real and posted a roadmap of what would be cool to have this package.</p></li>
<li><p>PharoConf in Annecy. Lots of tickets were processed. Congrats !</p></li>
<li><p>Marcus <a href="http://forum.world.st/Hudson-updates-td3300535.html">gave the state</a> of the Hudson build server for Pharo and related project.</p></li>
</ul>


<p>Of course, there were <strong>a lot</strong> of bug fixes and improvements.</p>

<p>See you next week !</p>
	
</p>

<p><a href="http://articles.tulipemoutarde.be/this-week-in-the-pharo-project-mailing-list">Permalink</a> 

	| <a href="http://articles.tulipemoutarde.be/this-week-in-the-pharo-project-mailing-list#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/831401/lunette-biere-headshot.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3sTwVehG7izn</posterous:profileUrl>
        <posterous:firstName>Francois </posterous:firstName>
        <posterous:lastName>Stephany</posterous:lastName>
        <posterous:nickName>fstephany</posterous:nickName>
        <posterous:displayName>Francois  Stephany</posterous:displayName>
      </posterous:author>
    </item>
  </channel>
</rss>

