<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">

<channel>
	<title>In a programmer's mind</title>
	
	<link>http://www.remyroy.com</link>
	<description>software development, technology, science and philosophy by Rémy Roy</description>
	<pubDate>Mon, 26 Oct 2009 03:55:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/InAProgrammersMind" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="inaprogrammersmind" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The doomed relationship of MVC and server web development</title>
		<link>http://www.remyroy.com/2009/10/25/the-doomed-relationship-of-mvc-and-server-web-development/</link>
		<comments>http://www.remyroy.com/2009/10/25/the-doomed-relationship-of-mvc-and-server-web-development/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 01:54:03 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=556</guid>
		<description><![CDATA[
Many web frameworks are structured around the MVC pattern for server web development. The relationship between the use of MVC and server web development is fatally doomed. Here is why.
MVC in itself is a wonderful pattern. In case you do not know about it, here is a quick snippet from your preferred source.
Successful use of [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_560" class="wp-caption alignright" style="width: 250px"><img class="size-full wp-image-560" title="Broken heart" src="http://www.remyroy.com/wp-content/uploads/2009/05/broken-heart.jpg" alt="This relation is about to end by WolfS♡ul" width="240" height="181" /><p class="wp-caption-text">This relation is about to end by WolfS♡ul</p></div>
<p>Many web frameworks are structured around the MVC pattern for server web development. The relationship between the use of MVC and server web development is fatally doomed. Here is why.</p>
<p>MVC in itself is a wonderful pattern. In case you do not know about it, here is a quick snippet from <a href="http://en.wikipedia.org/wiki/Model-view-controller">your preferred source</a>.</p>
<blockquote><p>Successful use of the pattern isolates business logic from user interface considerations, resulting in an application where it is easier to modify either the visual appearance of the application or the underlying business rules without affecting the other. In MVC, the model represents the information (the data) of the application; the view corresponds to elements of the user interface such as text, checkbox items, and so forth; and the controller manages the communication of data and the business rules used to manipulate the data to and from the model.</p></blockquote>
<p>It is a pattern that has brought success to many software projects. It is popular and used in many places.</p>
<p>In the traditional sense of web development, it would look close to this:</p>
<p><img class="alignnone size-full wp-image-565" title="web-mvc" src="http://www.remyroy.com/wp-content/uploads/2009/05/web-mvc.png" alt="" width="229" height="363" /></p>
<p>In this case, the browser is treated as a view, the application server contains the controllers and the database or any other storage mean is treated as the model. The problem with this pattern is that it is getting further and further way from the real usage. What has changed is the browser. It is less of a simple viewer today than it used to be.</p>
<p>In case you have not noticed, the browser is the new operating system. It can store data, manipulate and process data in multiple ways and it can shows more <a href="http://www.remyroy.com/2008/02/26/the-future-of-applications-might-be-made-of-air-light-or-fire/">rich data</a> than before. The browser is not exclusively used to show simple linked and static pages anymore. It is running full blown applications. With the explosion of Javascript, you can expect this trend to keep growing.</p>
<p>This is what we are going towards for web development:</p>
<p><img class="alignnone size-full wp-image-602" title="New Web Development" src="http://www.remyroy.com/wp-content/uploads/2009/10/new-web.png" alt="" width="633" height="483" /></p>
<p>This does not eliminate the MVC pattern. It could still be used for the application running in the browser, but I think it will kill the most of the MVC server web development as we know it today.</p>
<p>In order to develop the application generator or provider, we will need better tools than what we have now. Maintaining a bunch of CSS, HTML, Javascript and server side code files is not realistic anymore if you want to scale, develop rapidly and have a pleasant developing experience.</p>
<p>This is where tools like <a href="http://code.google.com/webtoolkit/">Google Web Toolkits</a> and <a href="http://pyjs.org/">Pyjamas</a>. We need more of those tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/10/25/the-doomed-relationship-of-mvc-and-server-web-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My rant about Rational Team Concert</title>
		<link>http://www.remyroy.com/2009/10/19/my-rant-about-rational-team-concert/</link>
		<comments>http://www.remyroy.com/2009/10/19/my-rant-about-rational-team-concert/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 16:27:31 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=572</guid>
		<description><![CDATA[
I have started using Rational Team Concert (RTC), version 1 and 2, at work for my latest project. RTC is an IBM product based on the Jazz Foundation platform which integrates work item tracking, builds, source control, and agile planning. It tries to manage most of what a software development team will need to do [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_576" class="wp-caption alignright" style="width: 250px"><img class="size-full wp-image-576" title="IBM Disliked" src="http://www.remyroy.com/wp-content/uploads/2009/10/ibm-dislike.jpg" alt="Not everyone likes what IBM is doing by Looking Glass" width="240" height="180" /><p class="wp-caption-text">Not everyone likes what IBM is doing by Looking Glass</p></div>
<p>I have started using Rational Team Concert (RTC), version 1 and 2, at work for my latest project. RTC is an IBM product based on the <a href="http://jazz.net/">Jazz Foundation platform</a> which integrates work item tracking, builds, source control, and agile planning. It tries to manage most of what a software development team will need to do with the same tool.</p>
<p>In that sense, it is similar to Team Server Foundation by Microsoft. You might remember my <a href="http://www.remyroy.com/2008/11/25/my-rant-about-team-server-foundation/">rant</a> about it.</p>
<p>RTC is geared towards big enterprises. The initial cost for the standard edition is probably enough to justify not to use it for most small and medium teams or companies.</p>
<p>Like many IBM products, RTC tries to do everything from defect management, automated builds, planning to source code management. I must admit that overall, it does manage this feat to a good level.</p>
<p>Without any other delays, here is what I dislike about RTC.</p>
<h2>It sends whole files on the wire instead of deltas</h2>
<p>Imagine you have a 100 Megs file that needs to be modified and sent back in your central repository multiple times in a day. Let&#8217;s also pretend that you are simply changing 10 characters in that file each time. With RTC, whenever you send those changes are sent back in your central repository, the whole file will need to be transmitted on the network instead of the 10 characters.</p>
<p>This is simply unacceptable. It is a waste of network resources and a waste of my time because I need to wait for this transfer to complete. It seems like some operation depends on other ones and you cannot perform them in parallel. Whenever I tried to do too many long operations at the same time with RTC, it shows  a model progress windows that completely disabled my ability to use my IDE.</p>
<p>A simple diff algorithm on the client side or on both side would use a few of my heavily underused CPU cycles and it would be way more efficient. This is one of the base concept of most version control system out there. Subversion has been doing this for years now.</p>
<h2>It is centrally based</h2>
<p>It seems like most people have not discovered the joys of <a href="http://www.remyroy.com/2008/05/31/distributed-revision-control/">distributed version control</a> yet. During the course of my normal usage of RTC, I have had network failures and disconnects with the RTC server. As soon as I was disconnected, I was left in the cold dark state of anger because I could not do much about managing my source code. For that reason alone, it should be distributed.</p>
<h2>It is treating me as an idiot who do not know what he is doing</h2>
<p>Whenever I try to do something that might have some repercussions, it shows me a popup asking me if I am sure I want to do that. Here is a typical scenario:</p>
<ol>
<li>I check-in some files while keeping some files unresolved (not checked in).</li>
<li>I associate a work item with the new changeset because it is a precondition to delivering a changeset on the project.</li>
<li>I try to deliver the changeset.</li>
<li>I get a popup asking me if I am sure I want to deliver those files without including the other files that are unresolved.</li>
<li>I confirm this action by clicking on yes.</li>
<li>There are errors in my project that triggers a precondition failure that makes me unable to complete the delivery.</li>
<li>I override that precondition so I can complete my delivery.</li>
<li>I click on the &#8220;Retry&#8221; button so my delivery can be retried with the precondition overridden.</li>
<li>I get another popup asking me if I am sure I want to deliver those files without including the other files that are unresolved.</li>
<li>I confirm this action by clicking on yes.</li>
</ol>
<p>Those popups are everywhere within RTC. Many of them are modal ones too. I am not an idiot. I know what I am doing. Stop bugging me and provide facilities to revert my mistakes.</p>
<h2>You cannot easily name a revision in the past</h2>
<p>There are two named revision concepts in RTC: snapshot and baseline. In short, a baseline is for a component (a kind of project division) and a snapshot is a group of baselines. The problem is that you cannot create them for revision in the past. You can only create them for your current workspace. If you forgot to create a snapshot for your latest deployment, it is just too bad for you. If you really want to create it, you will need to update each file to the state where it was when you did your deployment and create a snapshot with the files in your current workspace. The ugly side of this is that you cannot update your workspace to look like a revision in the past easily either.</p>
<h2>Read-only file updates make your project out of sync</h2>
<p>For our project, we had some files that were read-only but needed to be updated once in a while. Every time we had to update those files and they were accepted on the developer&#8217;s PC, it would put the projects in the related baseline out of sync. It is a state where you cannot do any operations with RTC without having multiple popups telling you that you need to resync your projects. The read-only file updates is only one way to get your projects out of sync. We manage to reach that state in different scenarios.</p>
<p>In other to correct that problem, we had make the files writable and perform the resync operation. This was a real pain.</p>
<p>Considering the whole thing, RTC is not such a bad product. It just has many quicks that are unpleasant and difficult to bear with. If you have the money and want an enterprise product, go for it. If you do not, there are multiple free solutions out there that can do most of what RTC is doing and that can do it better.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/10/19/my-rant-about-rational-team-concert/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Balancing life</title>
		<link>http://www.remyroy.com/2009/04/22/balancing-life/</link>
		<comments>http://www.remyroy.com/2009/04/22/balancing-life/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 02:50:52 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Philosophy]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=553</guid>
		<description><![CDATA[I am torned apart these days. I just seems not to have enough time. I am in need of a life balance sheet. You know those kind of spreadsheet you setup in hope they will help you out.
My main problem is that I want to do everything. I want to live it and enjoy it. [...]]]></description>
			<content:encoded><![CDATA[<p>I am torned apart these days. I just seems not to have enough time. I am in need of a life balance sheet. You know those kind of spreadsheet you setup in hope they will help you out.</p>
<p>My main problem is that I want to do everything. I want to live it and enjoy it. Here is a short list of thing I would like to do:</p>
<ul>
<li>Invest more time in training for programming and development skills.</li>
<li>Invest more time to make my work job enjoyable for everyone by planning some more activities with my colleagues.</li>
<li>Invest some time having fun.</li>
<li>Invest some time taking care of my general health, doing sports and some body building.</li>
<li>Invest more time helping out open source projects. So far, I am still evaluating which ones.</li>
<li>Invest more time in my personal software projects.</li>
<li>Invest more time in my family members&#8217; web projects.</li>
<li>Invest more time blogging.</li>
<li>Invest more time keeping up with the news about software development.</li>
<li>Invest more time hanging out with my friends.</li>
<li>Invest more time taking care of my girlfriend.</li>
<li>Invest some more time with work related out of work projects.</li>
<li>Invest some time influencing politician about privacy, copyright and new digital realities.</li>
<li>Keep up with the daily stuff.</li>
</ul>
<p>Right now, I know I am probably spending too much time on gaming. On average, I might spend about 14 hours a week on it. That item should be scrached from the list, but one of my philosophy is that I should have fun everyday. I will not have time to have fun once I am dead.</p>
<p>As for the rest, I just seem not to get enough of each. Am I trying to do to many things at once ? It seems like everyone is doing it. I should be able too right ?</p>
<p>Do you have any tips or cure for me ? I am open to everything.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/04/22/balancing-life/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The joy of Python</title>
		<link>http://www.remyroy.com/2009/03/31/the-joy-of-python/</link>
		<comments>http://www.remyroy.com/2009/03/31/the-joy-of-python/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 02:55:32 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=528</guid>
		<description><![CDATA[
I have been in Chicago for PyCon 2009 this weekend and I must say that it was a tremendous conference. These guys know what they are doing and they are doing it well.
First, the hotel was alright. There is not much to say about it except for the fact that I had to walk 10 [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_531" class="wp-caption alignright" style="width: 250px"><img class="size-full wp-image-532" title="Me and Guido" src="http://www.remyroy.com/wp-content/uploads/2009/03/me-guido2.jpg" alt="Me and Guido van Rossum at PyCon 2009 in Chicago" width="240" height="195" /><p class="wp-caption-text">Me and Guido van Rossum at PyCon 2009 in Chicago</p></div>
<p>I have been in <em>Chicago</em> for <strong>PyCon 2009</strong> this weekend and I must say that it was a tremendous conference. These guys know what they are doing and they are doing it well.</p>
<p>First, the hotel was alright. There is not much to say about it except for the fact that I had to walk 10 minutes to get to the main hotel where the conference was. From what I got, they had to reserve two hotels because they wanted something bigger and they had a contract with a previous hotel.</p>
<p>The food was pretty good. We had a continental breakfast every morning. We also had a great lunch every day that was served fast and professionally.</p>
<p>Most of the talks were interesting. Some of them had either a monotonous speaker or were less captivating than I though they would be. Since all speakers were giving their own free time for this, the quality was high. We were asked to vote after each presentation by dropping a bingo chip in either a green bucker for good, a yellow bucker for so-so and a red bucker for bad. It was an original way of measuring appreciation but my feeling is that way too many people abused it. The logistic of organizing all this was mostly perfect. There was nearly no downtime for people to setup and start their presentation at the right time.</p>
<p>Everyone was given the opportunity to speak during the lightning talks. They were scheduled 12 hours before talking place and all that was required to speak was a laptop to show something and write your name on a sheet. Given my future implication in some python projects, I might do one next time I go.</p>
<p>Another nice thing about PyCon was the Open Spaces. It is a nice concept where people write some topic on small paper cards and place them on a board to setup the time and the place of the meeting. People than go have a look at the boards and plan to attend whatever they like. They had something like 12 smaller rooms that could be used for this. All this was going all around the clock. On Friday night, I played board games with other Python users up to 2 in the morning. It was all fun.</p>
<p>I have had the chance to meet with so many inspiring people. I met with <em>Guido van Rossum</em> for a quick picture. I was so impressed how friendly, open and easy going he is. He attended the conference just like the rest of us without special treatment (from my point of view). Everyone was down to earth and simple, including him. I also had the chance to meet with Python users from Québec.</p>
<p>The community around Python is fantastic. They are a bunch of friendly, intelligent and open minded guys (the PyGirls were drowning in the sea of males) sitting on a diamond mine. There is much to discover by digging below the surface on a social and technological level.</p>
<p>When I left, they were starting their sprints, a developing session, to advance various open source projects while being face to face with people that are often sitting in front of their computer around the globe. Have I had more money and time, I would have stayed to help some of these projects.</p>
<p>I am now back to reality. Time to get those Python skills ready for the next PyCon. See you there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/03/31/the-joy-of-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting ready for PyCon 2009</title>
		<link>http://www.remyroy.com/2009/03/22/getting-ready-for-pycon-2009/</link>
		<comments>http://www.remyroy.com/2009/03/22/getting-ready-for-pycon-2009/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 23:50:42 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=525</guid>
		<description><![CDATA[I have bought my flight ticket, my hotel room is booked and my conference fees are paid. I am ready for PyCon 2009.
I am really excited about it. It will be my first real development conference and an international one.
I will have the chance to meet or at least see Guido van Rossum, leaders and [...]]]></description>
			<content:encoded><![CDATA[<p>I have bought my flight ticket, my hotel room is booked and my conference fees are paid. I am ready for <a href="http://us.pycon.org/">PyCon 2009</a>.</p>
<p>I am really excited about it. It will be my first real development conference and an international one.</p>
<p>I will have the chance to meet or at least see Guido van Rossum, leaders and contributers to many open source projects I use and I admire: SQL Alchemy, Django, TurboGears and others. I will also have the chance to watch conferences by the developers of EVE Online, a MMORPG game developed with Python.</p>
<p>It is going to be a wonderfull 3 days.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/03/22/getting-ready-for-pycon-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Performance and worries</title>
		<link>http://www.remyroy.com/2009/03/15/performance-and-worries/</link>
		<comments>http://www.remyroy.com/2009/03/15/performance-and-worries/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 00:52:56 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=511</guid>
		<description><![CDATA[
Most developers I know are worried about their software performance. They are worried to the point of nonsense. With every decision they will think about, they will immediately balance out the arguments regarding performance whether it is an architecture decision, a technological choice or a nested loop.
This does not make sense on many levels. First [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_512" class="wp-caption alignright" style="width: 250px"><img class="size-full wp-image-512" title="Runner" src="http://www.remyroy.com/wp-content/uploads/2009/03/runner.jpg" alt="No matter where it is going, it has to run fast by Hamed Saber" width="240" height="240" /><p class="wp-caption-text">No matter where it is going, it has to run fast by Hamed Saber</p></div>
<p>Most developers I know are worried about their software performance. They are worried to the point of nonsense. With every decision they will think about, they will immediately balance out the arguments regarding performance whether it is an architecture decision, a technological choice or a nested loop.</p>
<p>This <em>does not make sense</em> on many levels. First of all, performance is more often overrated. A fully functional and correct slow software is always better than a fast buggy or incomplete software. Clients are often asking for highly performing software but in most cases, they are satisfied with a fully working version even if it does not run as fast as they first though.</p>
<p>Developing with a performance mindset often create solutions which contains more bugs, are harder to maintain and are harder to understand and read. Here is a example of this. Compare these two C code snippets:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> sum <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    sum <span style="color: #339933;">+=</span> i<span style="color: #339933;">;</span>
<span style="color: #000066;">printf</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;sum: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> sum<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> sum <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>N <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span>N<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #000066;">printf</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;sum: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> sum<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>They both execute the same task. The second one is optimized for performance. Which one would you prefer for ease of maintenance, ease of understandability and ease of reading ? The first one of course.</p>
<p>Another reason why you should not think about optimization too much is because you cannot know which part of your application is or will be the performance bottleneck. You might put a lot of efforts with a specific section of code that is only called once in a while and fast enough.</p>
<p>I am not saying you should not do performance optimization, but that should be the last thing you should thing of. In my mind, I only see two reasons for doing it:</p>
<ol>
<li>Customers are complaining about speed</li>
<li>You want to gain a competitive advantage (just like the current crop of upcoming browsers)</li>
</ol>
<p>If you know any other good reason for doing it, let me know.</p>
<p>When you have to optimize your code, the first thing you have to do is use a code profiler to find where is the problem. There are many tools available for this and I am pretty sure there is one for your language. Here is a simple profile output I ran a few days ago for <a href="http://www.remyroy.com/mercurial/">Mercurial</a>.</p>
<pre>
         1239498 function calls (1237075 primitive calls) in 18.604 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   18.604   18.604 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:106(Error)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:118(NoSectionError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:125(DuplicateSectionError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:132(NoOptionError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:141(InterpolationError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:149(InterpolationMissingOptionError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:162(InterpolationSyntaxError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:166(InterpolationDepthError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:177(ParsingError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:189(MissingSectionHeaderError)
        1    0.000    0.000    0.001    0.001 ConfigParser.py:203(RawConfigParser)
        5    0.000    0.000    0.000    0.000 ConfigParser.py:204(__init__)
        3    0.000    0.000    0.000    0.000 ConfigParser.py:211(defaults)
        3    0.000    0.000    0.000    0.000 ConfigParser.py:214(sections)
       11    0.000    0.000    0.000    0.000 ConfigParser.py:219(add_section)
       20    0.000    0.000    0.000    0.000 ConfigParser.py:229(has_section)
[...]
       10    0.000    0.000    0.000    0.000 {setattr}
        2    0.000    0.000    0.000    0.000 {signal.signal}
        1    0.000    0.000    0.000    0.000 {sys._getframe}
        1    0.000    0.000    0.000    0.000 {sys.exit}
        2    0.000    0.000    0.000    0.000 {sys.getwindowsversion}
        2    0.000    0.000    0.000    0.000 {thread.allocate_lock}
        1    0.000    0.000    0.000    0.000 {win32api.GetCurrentProcess}
        1    0.000    0.000    0.000    0.000 {win32api.GetFullPathName}
        1    0.000    0.000    0.000    0.000 {win32api.RegOpenKey}
        1    0.000    0.000    0.000    0.000 {win32api.RegQueryValue}
        5    0.020    0.004    0.020    0.004 {win32file.CreateFile}
       25    0.474    0.019    0.474    0.019 {win32file.ReadFile}
        1    0.000    0.000    0.000    0.000 {win32file.SetFilePointer}
        1    0.000    0.000    0.000    0.000 {win32process.GetModuleFileNameEx}
        2    0.000    0.000    0.014    0.007 {zip}
</pre>
<p>Using different runs, you can find out which method is called the most, which one it using the most CPU time and which one is the most expensive with profilers. Once you know that, you can start optimizing the sections which are the most problematic.</p>
<p>Once you are done with your optimizations, you have to run your profiler again with the new code and compare the results with the unoptimized version. That way, you can see if you are making progress or not.</p>
<p>I have come to think that while managing your code, you should use a separate branch for the optimized version and the unoptimized one. Since the unoptimized one is probably going to be easier to read and understand, it will also be easier to maintain that is a benefit you should keep.</p>
<p>Stop worrying about performance and enjoy clean code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/03/15/performance-and-worries/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Totally distributed</title>
		<link>http://www.remyroy.com/2009/02/23/totally-distributed/</link>
		<comments>http://www.remyroy.com/2009/02/23/totally-distributed/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 00:57:13 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=498</guid>
		<description><![CDATA[Some new software development models have appear recently. One of them is the distributed model. It can be used to structure a project in various ways, but the founding concept is that everyone owns a full working copy of the project and is not directly tied to a central authority.
In one of my previous post, [...]]]></description>
			<content:encoded><![CDATA[<p>Some new software development models have appear recently. One of them is the distributed model. It can be used to structure a project in various ways, but the founding concept is that everyone owns a full working copy of the project and is not directly tied to a central authority.</p>
<p>In one of my previous post, I wrote about the <a href="http://www.remyroy.com/2008/05/31/distributed-revision-control/">distributed way of managing source code</a> and what differences it make compared with the common solutions that are used today. Before going any further, here are the benefits I see when using a distributed revision control mechanism:</p>
<ul>
<li>Offline support (commits, branches, merges)</li>
<li>You are your own working copy and you can share changes with others in the way you want</li>
<li>You are your own working copy and you can break it apart, test it, try experimental things. You are free to play with it.</li>
<li>Flexible structure for changes flow (someone has to pull changes from you - aka the Linux model, everyone push/pull to a central repository - aka the central model, someone has to pull changes from you to check that they meet a certain quality and push them somewhere else, etc)</li>
</ul>
<p>This is great if you are only managing source code, but there are many different things you have to manage for a software project to be successfull. How does it translate in the distributed model ? Some projects like the ones under the Mozilla umbrella are using a distributed revision control software for their code and some central models for other part of the their projects. This is fine, but there are some alternatives.</p>
<p>I discovered some interesting distributed aware tools to complement your distributed revision control software for documentation and bug, issue or task tracking.</p>
<ul>
<li>Distributed wiki: <span><span class="title"><a href="http://ikiwiki.info/">ikiwiki</a>, <a href="http://moinmo.in/PawelPacana/MercurialBackend">MoinMoin MercurialBackend branch</a></span></span></li>
<li><span><span class="title">Distributed bug, issue or task tracking: <a href="http://bugseverywhere.org/be/show/HomePage">Bugs Everywhere</a></span></span></li>
</ul>
<p>It is still early to tell if we are going to see a push towards even more distributed tools like these. We can surely benefit from using these tools in a proper way. I will keep an eye onto it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/02/23/totally-distributed/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Letting go</title>
		<link>http://www.remyroy.com/2009/02/14/letting-go/</link>
		<comments>http://www.remyroy.com/2009/02/14/letting-go/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 18:57:43 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Philosophy]]></category>

		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=475</guid>
		<description><![CDATA[
How hard should you hold onto your ideas? Do you really need full control of everything happening around you? What about trusting people and finding the answers with them?
It is time to let go. Tomorrow is too late. Now is the time.
Back when I started building my first program, I never thought I would enter [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_476" class="wp-caption alignright" style="width: 250px"><img class="size-full wp-image-476" title="Holding hand" src="http://www.remyroy.com/wp-content/uploads/2009/02/holding-hand.jpg" alt="Holding tight by jbelluch" width="240" height="160" /><p class="wp-caption-text">Holding tight by jbelluch</p></div>
<p>How hard should you hold onto your ideas? Do you really need full control of everything happening around you? What about trusting people and finding the answers with them?</p>
<p>It is time to <strong>let go</strong>. Tomorrow is too late. Now is the time.</p>
<p>Back when I started <a href="http://www.remyroy.com/2008/12/02/how-it-all-started/">building my first program</a>, I never thought I would enter a religion war zone by making my initial steps in the software development world. There should be a warning sign for this on every tutorials and introduction textbooks about programming.</p>
<p><em>Warning ! You are making your first steps in dangerous zone. Prepare yourself or you will get sucked in as well.</em></p>
<p>Everyone seems to know what is best for everyone else. Client will tell you how you should use the session to get a better performing application. Your colleague will tell you how you should you the database to get the best performance possible.  Your boss will tell you which colour you should use to make your application usable.</p>
<div id="attachment_490" class="wp-caption alignright" style="width: 250px"><img class="size-full wp-image-490" title="Gymnast" src="http://www.remyroy.com/wp-content/uploads/2009/02/gymnast.jpg" alt="Developing software the hard way by Cliff Hanger" width="240" height="180" /><p class="wp-caption-text">Developing software the hard way by Cliff Hanger</p></div>
<p>Let&#8217;s start with clients. Most clients I worked with wanted total control over the scope, the schedule and the cost of the project. <em>They know how to do software development</em>. One of the problems, is that they were given that control. More precisely, they were given the illusion of it. Giving that much control to your client is like developing upside down while being tight up. It is not going to work.</p>
<p>I think the first step toward redemption is to educate and explain to your clients what it is to develop software. It is surely not like manufacturing hammers.</p>
<p>One point I would like to emphasis is the requirements. I have seen way too often requirements made of all must-haves. I think it should have a good proportions of must-haves and nice to haves so that the scope become variable and can be adjusted to meet more important schedules or costs.</p>
<p>People in the software industry are known to have strong opinions. They will argue for hours over whether that technology is superior or better than another. They often suffer from the silver bullet syndrome, but the usual answer is it depends. Every solution has a cost, some advantages and some weaknesses. We should learn them and give educated answers about those technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/02/14/letting-go/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Code of conduct</title>
		<link>http://www.remyroy.com/2009/02/05/code-of-conduct/</link>
		<comments>http://www.remyroy.com/2009/02/05/code-of-conduct/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 04:37:14 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Philosophy]]></category>

		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">https://delizseemack.webfactional.com/?p=465</guid>
		<description><![CDATA[
Being a software developper gives you a whole lot of possibilities. You are often given confidential documents. You have access to confidential data that most people would not have access too.
I was once maintaining an online shop where every credit card was stored with a simple symmetric cipher with the key in plain text in [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_468" class="wp-caption alignright" style="width: 216px"><img class="size-full wp-image-468" title="Ancient philosophers" src="http://www.remyroy.com/wp-content/uploads/2009/02/ancient-philosophers.jpg" alt="Ancient philosophers by Lawrence OP" width="206" height="240" /><p class="wp-caption-text">Ancient philosophers by Lawrence OP</p></div>
<p>Being a software developper gives you a whole lot of possibilities. You are often given confidential documents. You have access to confidential data that most people would not have access too.</p>
<p>I was once maintaining an online shop where every credit card was stored with a simple symmetric cipher with the key in plain text in the code. I could have use all those credit card records if I was unethical but I did not. You should probably not trust at least 50% of every online shops with your private data these days.</p>
<p>I recently created a personal training plan to get better at software development. I searched for some references on the web and I found this document. It is called the <a href="http://www.acm.org/about/se-code">Software Engineering Code of Ethics and Professional Practice</a>. It is a highly interesting text which I endorse. I suggest you read it too and endorse it in your own way.</p>
<p>Since I am not part of the official software engineering community, I never had to follow any code of conduct. This code is well written. It express so many good ideas that I can only make it my own by approving it. If you are in the software development field and you do not have any ethical guidelines, have a look and pass it down to your colleagues.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/02/05/code-of-conduct/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Building up social skills</title>
		<link>http://www.remyroy.com/2009/01/26/building-up-social-skills/</link>
		<comments>http://www.remyroy.com/2009/01/26/building-up-social-skills/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 02:03:47 +0000</pubDate>
		<dc:creator>Rémy Roy</dc:creator>
		
		<category><![CDATA[Philosophy]]></category>

		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.remyroy.com/?p=439</guid>
		<description><![CDATA[
Some weeks ago, I realized something important. Software development is first and foremost a task about communication. It is not the kind of communication happening on network links. It is about human communication.
A programmer will typically have to speak or communicate with his fellow programmers, the analyst, the architect, the projet manager, the customer, the [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_443" class="wp-caption alignright" style="width: 222px"><img class="size-full wp-image-443" title="Communication difficulties" src="http://www.remyroy.com/wp-content/uploads/2009/01/communication-problems.jpg" alt="Communication problems by Tania Paz" width="212" height="240" /><p class="wp-caption-text">Communication difficulties by Tania Paz</p></div>
<p>Some weeks ago, I realized something important. Software development is first and foremost a task about communication. It is not the kind of communication happening on network links. It is about <strong>human communication</strong>.</p>
<p>A programmer will typically have to speak or communicate with his fellow programmers, the analyst, the architect, the projet manager, the customer, the tester, the documentation writer, the graphist, his boss, his coworkers&#8217; bosses, the customer&#8217;s boss, the project owner and many others. There are many potential pitfalls.</p>
<p>Analyzing it from my point of view, I think many programmers have social skill problems.  When I say &#8220;many&#8221;, I do include myself in that group. I think certain kind of personalities makes you like computer science or at least, it makes it more enjoyable. The environment in which you grow up is also a factor which may drive you to this discipline.</p>
<p id="firstHeading" class="firstHeading">On the <a href="http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator">Myers-Briggs personality scale</a>, I am an INTP. Which can be resume with the following:</p>
<ul>
<li>I for introversion which oppose extroversion</li>
<li>N for intuition which oppose sensing</li>
<li>T for thinking which oppose feeling</li>
<li>P for perception which oppose judgement</li>
</ul>
<p>In short, I was not easily interacting with people. It has lead me to a slow progression toward social skills. Those skills which make you good at interacting with people and communicating with them. Those same skills which make you understand how people are feeling, what they are going through and adjust yourself to this reality. Those same skills which are essential in software development.</p>
<p>There is only one way out: <em>trying to get better</em>.</p>
<p>This is what I have been trying to do since than. I think so far it is working. Even my girlfriend has noticed.</p>
<p>My first goal was simple. &#8220;I will try to engage a discussion in a kindly manner with whoever I meet.&#8221; It seems simple, but for someone who has tried to stay in his bubble for as long as possible, it can be hard. So far, I think I have met that goal even though I still have some defiling moments when I just do not want to speak with anyone.</p>
<p>Recently, I bought <a href="http://www.amazon.com/gp/product/0671027034?ie=UTF8&amp;tag=inaprogsmind-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0671027034">How to Win Friends &amp; Influence People</a>. This book was recommended in a software developement book. I thought it would make sense to buy it and have a look. I did not buy it to make more friends or manipulate people. I bought it for the social lessons it contains. I have read a few pages so far and I will probably post an update when I finish it.</p>
<p>Another possibility I am currently thinking about is taking some communication classes. Those kind of open courses where you can go in whenever you want.</p>
<p>Social and communication skills are often disregarded by software developpers. I think it is time we change our view and see just how usefull they are.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.remyroy.com/2009/01/26/building-up-social-skills/feed/</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.761 seconds --><!-- Cached page generated by WP-Super-Cache on 2010-02-11 13:24:24 -->
