<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2435616032962171089</id><updated>2011-11-27T18:41:27.574-05:00</updated><category term='Team'/><category term='convert.exe'/><category term='LINQ'/><category term='NTFS'/><category term='développement'/><category term='Visual Studio'/><category term='Team Foundation Server'/><category term='empty'/><category term='TFS'/><category term='development'/><category term='CONVERSION'/><category term='.chm'/><category term='iterative'/><category term='Anonymous'/><category term='format'/><category term='disk'/><category term='extend'/><category term='itératif'/><category term='chm file'/><category term='iteration'/><category term='types'/><category term='extension methods'/><category term='FAT'/><category term='sprint'/><category term='C#'/><category term='3.5'/><category term='méthodologie'/><category term='scrum'/><category term='agile'/><category term='CONVERT'/><category term='class'/><category term='3.0'/><category term='license'/><category term='quality'/><category term='itération'/><category term='Foundation'/><category term='windows help'/><category term='architecture'/><category term='2008'/><category term='trial'/><category term='.NET'/><title type='text'>Samir Bellouti's Blog</title><subtitle type='html'>I am a Senior .NET Architect. Computers is not only my job but also my passion. I started programming at 13 and made it my job and my hobby at the same time.
I also have an interest in development methodologies (Agile, RUP,...) and one of my favourite discussion topic is how to actually apply them (moving from theory to practice).</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-73360442794771935</id><published>2009-10-02T09:58:00.001-04:00</published><updated>2009-10-02T10:00:14.547-04:00</updated><title type='text'>Problems with the HTC Touch (touch screen)</title><content type='html'>This time, my post has nothing to do with .NET but rather with an issue that seems to be common, according to my search on the net and I thought that my findings may help people who experience the same issue.&lt;br /&gt;&lt;br /&gt;Yesterday morning, I started to have serious issues with my cell phone, a HTC Touch.&lt;br /&gt;Here is the list of issues (that came all together on the same day):&lt;br /&gt;&lt;br /&gt;When starting up, it was taking way too long compared to usually (the Windows Mobile 6.1 screen was taking ages before to display the home screen).&lt;br /&gt;The touch screen as it was no longer responding to my orders! For a cell phone that does not have a keyboard, that is rather a serious issue.&lt;br /&gt;My cell phone was no longer recognized by my computer and the 'cube' interface was no longer working.&lt;br /&gt;When I tried to access the contacts, the screen was empty and whenever I typed a name it kept displaying "Matching..." and it never comes back with suggestions.&lt;br /&gt;Here are the things I have done and it looks like it is working today... Hope for a long term.&lt;br /&gt;&lt;br /&gt;1 - Removed the screen protector: In fact, when I bought it, I put a plastic screen protector. It started to be dirty anyway. As a result, the touch screen was responding intermittently only. All other issues were still there (and I did not expect the cell phone to start up faster just by removing the protector :)).&lt;br /&gt;&lt;br /&gt;2 - I did a hard reset of the phone following the instructions on the site &lt;a href="http://www.flickr.com/photos/ryjones/2193904710/"&gt;http://www.flickr.com/photos/ryjones/2193904710/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, I lost all my contacts eventually and everything else in my cell phone (notes, documents, photos etc...). I did not really have the choice cause the cell phone could not synchronize anyway and was unusable.&lt;br /&gt;&lt;br /&gt;Once the hard reset done, it looks like the cell phone is back again and everything is working perfectly now. I just cross my fingers!&lt;br /&gt;&lt;br /&gt;Hope that helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-73360442794771935?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/73360442794771935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=73360442794771935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/73360442794771935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/73360442794771935'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2009/10/problems-with-htc-touch-touch-screen.html' title='Problems with the HTC Touch (touch screen)'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-8015586689906543585</id><published>2009-04-29T22:16:00.003-04:00</published><updated>2009-04-29T22:44:16.592-04:00</updated><title type='text'>Do we need an architect in SCRUM?</title><content type='html'>Few months ago, I went through the SCRUM certification process and during the training, I have asked the question 'Do we need an architect or technical lead in a SCRUM team?'. The answer was that from a pure SCRUM definition perspective, we should not.&lt;br /&gt;&lt;br /&gt;SCRUM puts a lot of emphasis on team collaboration and it suggests that all decisions must emerge from the team as a whole and not from one particular person. Most of design decisions can be taken with this approach however, not all.&lt;br /&gt;&lt;br /&gt;Software design is not a deterministic activity; i.e. same problem can be solved by many different approaches and here comes the problem: In Agile, we do not a design phase prior to start the devleopment activities. We design as we progress and sometimes we look back and do some refactoring (very brief definition of the design in an Agile process). That is, the way we are going to implement different use cases is not defined in details and chances are that a developer will implement a functionality using an approach that differs from the overall design of the application. For instance, I have encountered developers who use extensively Design Patterns. I have nothing against DPs but if only the features implemented by one developer are coded using heavily design patterns then we will end up with a code that is a bit messy in the sense that it does not solve problems in the same way consistently. &lt;br /&gt;&lt;br /&gt;For me, the philosophy behind a solution design is as important as the design itself. At the begining of a project, we choose an approach or philosophy (for instance, we decide not to use web services for certain reasons. We decide to use data classes - we decide to decouple some projects from the infrastructure....) and the whole team must stick with it. The issue is that when a developer, and especially those added in the middle of the project, does not agree and does not respect our coding rules, we end up with some philosophical discussions that are often endless. It is here where do need someone who have the power to stop the discussion in order to move forward. &lt;br /&gt;&lt;br /&gt;What I am trying to say here is that the technical leader or the architect does not have the power to take a decision against all the team members, but to make some developers follow the line and get them on track without wasting hours of useless meetings. The team still takes most of design decisions anyway.&lt;br /&gt;&lt;br /&gt;The architect can bring his point and try to convince the team to adopt it. If she is very diplomatic and collaborative, she will succeed. Trying to impose a decision will just kill the confidence of team members in the collaboration process which will probably even make your SCRUM implementation a failure.&lt;br /&gt;&lt;br /&gt;As a conclusion, I strongly believe that SCRUM is an excellent process however, I believe that a software architect is still required even in Agile processes. She will not produce any thick documentation but guide developers and ensure that the team is on the right track all along the project lifetime.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-8015586689906543585?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/8015586689906543585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=8015586689906543585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/8015586689906543585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/8015586689906543585'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2009/04/do-we-need-architect-in-scrum.html' title='Do we need an architect in SCRUM?'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-4823040305739857673</id><published>2008-08-03T08:40:00.004-04:00</published><updated>2008-08-03T08:42:38.209-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quality'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='iteration'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='sprint'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Agile Design Artifacts</title><content type='html'>&lt;span lang="EN-US"&gt;I recently got contracted by a company to be the technical lead for a web application development project. My first task was to come up with an architecture document for the application within 2 to 3 weeks. I rapidly realized that it was not realistic. I could eventually design the application, but I was convinced that it would not be efficient for the following reasons:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;I was promised to get the full requirements a week after I started. I did not get them and still now, after 3 months, there are still on going,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;The web application was intended to connect to a back end bought from a third party provider. We did not know much about the API (actually, the API were planned to change – and still changing today after 3 months)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;I always have been convinced that a too detailed architecture will be obsolete as soon as developers start to implement the functionality.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;For these reasons, I told the team manager that I prefer not to spend my time drawing class diagrams or any sort of artifact that will be thrown away or, at best, be expensively kept up to date during the development process. What I suggested though was to:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;Draw a high level design diagram; this diagram included all the providers and layers of the application.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;Write few class stubs to give a direction to developers. The classes did not contain any implementation. They rather contained many “TODOs” with comments for developers; we also agreed with developers that the comments were there as a suggestion. They were allowed to go in another direction as long as they respect the overall design idea.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;We focuse on only one type of artifact: the code itself. Well written code is the best artifact as it expresses the static view but also the dynamic view of the system (which is, from my point of view), the most important view to understand a system especially to support it.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;We scheduled and took the necessary time to do few meetings with all developers to explain the design guidelines; this is far better than writing thick documents as developers came up with very interesting questions and suggestions from their past experiences. Once we agreed on the design, we started the development of what we called “the infrastructure” or the framework that will support the application.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;During this phase, we decided to use SCRUM methodology; this was new to my client (they applied it partly in the past). I insisted on the fact that an iterative development process will help us to get things done and deliver high quality software. &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;We called this first phase the SPRINT 0; we did a lot of refactoring as the code was written and the application was growing in size. We decided that no interface (user interface) will be developed during this sprint; we wanted to focus only on the framework and the design.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;span lang="EN-US"&gt;Now, we are in the sprint 3. We delivered some functionality to the business and we had very positive comments so far. Even managers who first were skeptical regarding SCRUM methodology are now much more comfortable and confident that an iterative process can effectively help to deliver in time and with a high quality. &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-4823040305739857673?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/4823040305739857673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=4823040305739857673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/4823040305739857673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/4823040305739857673'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/08/agile-design-artifacts.html' title='Agile Design Artifacts'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-6054559080980498408</id><published>2008-05-12T16:47:00.003-04:00</published><updated>2008-05-12T16:57:35.062-04:00</updated><title type='text'>Visual Studio 2008 and .NET 3.5 SP1 Content</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;The&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;link&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;below&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;is&lt;/span&gt; an article &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;details&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;new&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;features&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;improvments&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Visual&lt;/span&gt; Studio 2008 and .NET 3.5 Service Pack 1.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Among&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;other&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;this service pack contains the following new features:&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;- ASP.NET Dynamic Data (ASP.NET Data Scaffolding)&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;- ASP.NET Web Routing Engine&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;- Support for SQL Server 2008 &lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;- ADO.NET Entity Framework and Linq to entities &lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error"&gt;Final release is planned for this summer and will be released as a free update according to this article.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="blsp-spelling-error"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-6054559080980498408?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/6054559080980498408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=6054559080980498408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/6054559080980498408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/6054559080980498408'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/05/visual-studio-2008-and-net-35-sp1.html' title='Visual Studio 2008 and .NET 3.5 SP1 Content'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-239804673208110290</id><published>2008-03-26T22:49:00.004-04:00</published><updated>2008-03-26T23:05:30.641-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='empty'/><category scheme='http://www.blogger.com/atom/ns#' term='.chm'/><category scheme='http://www.blogger.com/atom/ns#' term='windows help'/><category scheme='http://www.blogger.com/atom/ns#' term='chm file'/><title type='text'>Display .CHM Files content</title><content type='html'>&lt;a href="http://bp2.blogger.com/_sgiab-JgwbA/R-sOrm8D8TI/AAAAAAAAAEI/tcK7AwzVevA/s1600-h/unblock.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5182251938569515314" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_sgiab-JgwbA/R-sOrm8D8TI/AAAAAAAAAEI/tcK7AwzVevA/s320/unblock.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;If you download a Windows help file (.chm) and it does not display the content (all pages are empty), chances are that your file is simply blocked by Windows. &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;To solve this issue, simply right click on the file and click on the 'Unblock' button.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-239804673208110290?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/239804673208110290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=239804673208110290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/239804673208110290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/239804673208110290'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/03/display-chm-files-content.html' title='Display .CHM Files content'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_sgiab-JgwbA/R-sOrm8D8TI/AAAAAAAAAEI/tcK7AwzVevA/s72-c/unblock.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-7125511272986004526</id><published>2008-03-26T22:38:00.002-04:00</published><updated>2008-03-26T22:45:09.694-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='extend'/><category scheme='http://www.blogger.com/atom/ns#' term='extension methods'/><category scheme='http://www.blogger.com/atom/ns#' term='3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# 3.0 Extension Methods</title><content type='html'>One of the new features in .NET 3.5 and C# 3.0 is extension methods. Extension methods, as their names state, let you extend any existing type by adding new methods without having to inherit from it.&lt;br /&gt;&lt;br /&gt;For instance, one of the common issues we encounter when retrieving data from the database, is to check whether the value is DBNULL or not before we can use it. I used to write a DbReaderHelper class that actually implements ‘dbnull safe’ data retrieval methods. The syntax to declare an extension method is very simple. It is a static method which its first argument starts with the keyword “this” followed by the type we want to extend.&lt;br /&gt;&lt;br /&gt;For instance, if I want to add a new method called “nGetInt32” which returns an Int32.MinValue if the field is dbnull otherwise the field value (an Int32), I should write it as follows:&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt; nGetInt32(&lt;span style="color:blue;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DbDataReader&lt;/span&gt; reader, &lt;span style="color:blue;"&gt;int&lt;/span&gt; index)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (reader.IsDBNull(index))&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;.MinValue;&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;return&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; reader.GetInt32(index);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How to use it?&lt;br /&gt;&lt;br /&gt;The extension must be part of a static class (see the example at the end of this post). To use it, simply add the namespace the class belongs to as part of the “using” directives and that’s it. Even intellisense will take it into account;&lt;br /&gt;&lt;br /&gt;&lt;a title="extension-method.png" href="http://bellouti.wordpress.com/files/2008/02/extension-method.png"&gt;&lt;img alt="extension-method.png" src="http://bellouti.wordpress.com/files/2008/02/extension-method.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;Why using extension methods&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;If we want to extend the DataReader class to make it dbnull safe, we would have to inherit from one of its implementations and therefore would not be able to extend all inherited classes. The other advantage is the fact that you can extend any class (even those marked as “sealed”. On the other hand, extending a class has a limitation which is that the extension method can only use public methods and therefore there’s no access to the inner state of the object.&lt;br /&gt;&lt;br /&gt;Methods resolution&lt;br /&gt;&lt;br /&gt;- Instance methods have priority&lt;br /&gt;- If the same extension method is declared more than once, the compiler raises an error.&lt;br /&gt;- The compiler looks into the current namespace and all the namespaces included with the using directive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-7125511272986004526?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/7125511272986004526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=7125511272986004526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/7125511272986004526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/7125511272986004526'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/03/c-30-extension-methods.html' title='C# 3.0 Extension Methods'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-9153329726247577790</id><published>2008-03-26T22:34:00.002-04:00</published><updated>2008-03-26T22:38:11.376-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='Anonymous'/><category scheme='http://www.blogger.com/atom/ns#' term='3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>C# 3.0 Anonymous types</title><content type='html'>With C# 3.0 you can declare a variable without typing it explicitly and its type will be inferred based on the right expression. This is different from the non typing in VB like languages (ASP, VB) as the resulting value is really typed and can no longer be assigned to a different type. Also, right after entering the line that declares the variable, intellisense becomes available.&lt;br /&gt;&lt;br /&gt;&lt;img alt="Intellisense" src="http://bellouti.wordpress.com/files/2008/01/intellisense.png" /&gt;&lt;br /&gt;&lt;br /&gt;We can see that actually the variable x is of an anonymous type with the two properties Name and EmployeeNumber plus the inherited properties from the Object class. If we declare another anonymous type variable with the same structure:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;var&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; y = &lt;span style="color:blue;"&gt;new&lt;/span&gt; { Name = &lt;span style="color:#a31515;"&gt;"Smith"&lt;/span&gt;, EmployeeNumber = &lt;span style="color:#a31515;"&gt;"199283"&lt;/span&gt; };&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then the new variable, y, is compatible with x. In another words, since it has the same properties with the same types (string, string) then C# compiler detects that x and y are of the same type even though we never declared it explicitly. In this case the instruction: x = y is correct and will result in affecting the value of y in x. However if we declare a third variable z:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; z = &lt;span style="color:blue;"&gt;new&lt;/span&gt; { Name = &lt;span style="color:#a31515;"&gt;"Buddy"&lt;/span&gt;, Company = &lt;span style="color:#a31515;"&gt;"Microsoft"&lt;/span&gt; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and try to affect the value of z to x for instance, we will have a compilation error (and not a runtime error – typical for non-typed variables - ). Even though z has two members of string type, all like x and y, it is not compatible. The reason is that the second property has not the same name (company versus EmployeeNumber).&lt;br /&gt;&lt;br /&gt;Some restrictions to anonymous types:&lt;br /&gt;&lt;br /&gt;Anonymous types are only permitted for local variables. You cannot declare a class member with the var keyword. A method cannot return a var type neither can it has a var type parameter; all the following declarations won’t compile:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; function(&lt;span style="color:red;"&gt;var&lt;/span&gt; x, &lt;span style="color:blue;"&gt;int&lt;/span&gt; y)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; &lt;b&gt;var&lt;/b&gt; function(&lt;span style="color:blue;"&gt;int&lt;/span&gt; x, &lt;span style="color:blue;"&gt;int&lt;/span&gt; y)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;however returning a var variable value is permitted:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; function(&lt;span style="color:blue;"&gt;int&lt;/span&gt; x, &lt;span style="color:blue;"&gt;int&lt;/span&gt; y)&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;br /&gt;{&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; t = x + y;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:'Courier New';color:blue;"&gt;return&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt; t;&lt;/span&gt;&lt;span style="font-family:'Courier New';"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The reason is simple : at the point of the ‘return’ statement, the compiler knows that ‘t’ is an integer and can be returned since the method must return an integer.&lt;br /&gt;&lt;br /&gt;Why using anonymous types?&lt;br /&gt;&lt;br /&gt;First, let’s calm down the spirits who think that this is a step back to untyped variables. As mentioned in this post, it is really an implicit typing and if you look at it closely, the variables are typed but the type is constructed ‘on the fly’ if we want. We can use it without declaring it.&lt;br /&gt;&lt;br /&gt;This may open the door to poor programming if it is overused. However, the impact might be limited since the anonymous type has only the scope of the method where it is used. The main advantage of the anonymous types is in LINQ (beyond the scope of this post). I will post something on LINQ pretty quickly…&lt;br /&gt;&lt;br /&gt;Well the only advantage I can see is to be able to manipulate temporary results in a collection of an anonymous structure and then do something with it without having to declare a very lightweight structure or class just to carry the results in one single method. I can see the usage in a data access layer class that has to process the result returned by a DataReader. But until today, we lived without it and never felt really a need for it.&lt;br /&gt;&lt;br /&gt;As a conclusion, I believe that the real advantage is the LINQ query…. Which I will talk about in my next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-9153329726247577790?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/9153329726247577790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=9153329726247577790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/9153329726247577790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/9153329726247577790'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/03/c-30-anonymous-types.html' title='C# 3.0 Anonymous types'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-6455178524854233847</id><published>2008-01-02T22:15:00.000-05:00</published><updated>2008-01-02T23:09:54.296-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='extend'/><category scheme='http://www.blogger.com/atom/ns#' term='license'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='trial'/><title type='text'>Extend Team Foundation Server Trial period</title><content type='html'>I have tried TFS for few months using the trial version and got stuck when it told me that the trial period was over because TFS does not notify you beforehand that your trial version is about to end (as any other software usually does).&lt;br /&gt;&lt;br /&gt;I did a quick search on google and found a TFS trial extender that worked fine for me. It extends TFS for an extra month which should be enough to buy your licence. Here's the link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/bharry/archive/2006/10/04/Last-word-on-TFS-Expirations-_2800_I-hope_2900_.aspx" mce_href="http://blogs.msdn.com/bharry/archive/2006/10/04/Last-word-on-TFS-Expirations-_2800_I-hope_2900_.aspx"&gt;http://blogs.msdn.com/bharry/archive/2006/10/04/Last-word-on-TFS-Expirations-_2800_I-hope_2900_.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that according the guy who did this utility, you can extend it only once.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-6455178524854233847?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/6455178524854233847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=6455178524854233847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/6455178524854233847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/6455178524854233847'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/01/extend-legally-team-foundation-server.html' title='Extend Team Foundation Server Trial period'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-8885532551742547474</id><published>2008-01-02T22:04:00.000-05:00</published><updated>2008-01-02T22:17:45.326-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='développement'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='iterative'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='itération'/><category scheme='http://www.blogger.com/atom/ns#' term='itératif'/><category scheme='http://www.blogger.com/atom/ns#' term='méthodologie'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Le développement itératif</title><content type='html'>&lt;strong&gt;&lt;em&gt;&lt;span style="font-family:arial;"&gt;Définition&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Le développement itératif consiste à livrer des parties d’un système ou d’une application à des intervalles réguliers. Ces intervalles sont appelés Itérations. Une itération est donc une succession d’activités couvrant l’analyse des besoins, la conception des parties du système, leur implémentation ainsi que leurs tests qui, activités, aboutissent à la livraison d’une ou plusieurs fonctionnalités qui feront partie du produit final.&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family:arial;"&gt;Approche classique (par étapes ou Waterfall en anglais) comparée à l’approche par itérations&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Par exemple, imaginons que nous avons un projet de développement d’une application en ligne qui offre 20 fonctionnalités différentes (20 scénarios). Dans une approche par étapes :&lt;br /&gt;On effectue une analyse complète pour élaborer et détailler tout les scénarios,&lt;br /&gt;L’architecte livre une architecture détaillée de toutes les composantes de l’application,&lt;br /&gt;L’analyse fonctionnelle et le document d’architecture sont transmis aux développeurs qui implémentent la totalité des 20 scénarios&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On effectue les tests d’assurance qualité sur les 20 scénarios&lt;/li&gt;&lt;li&gt;On livre le produit au client pour des tests d’acceptation,&lt;/li&gt;&lt;li&gt;On fait les changements demandés par le client,&lt;/li&gt;&lt;li&gt;On livre le produit final&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;Notez l’avant dernier point : Pour passer au produit final, il est rare que le client ne demande pas des changements. Cela souvent provoque des retards dans la livraison ou/et des fins de semaines sacrifiées à travailler sur les dernières demandes du client. Dans une approche itérative, on garde les mêmes étapes que celle de l’approche précedente sauf que ces dernières se produisent en dedans d’une itération dont la durée est fixe et de ce fait, se répètent autant de fois qu’il y a d’itérations. Par exemple, on pourra décider que les scénarios 1, 10 et 15 vont être développés dans l’itération 1. Pour l’itération 2, nous aurons probablement des correctifs sur les scénarios 1, 10 et 15 plus quelques autres scénarios tirés de la liste complète etc… &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family:arial;"&gt;Avantages du développement itératif&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;L’approche de développement par itérations offre les avantages suivants : &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Elle s’adapte mieux aux changements. En fait cette approche considère le changement comme faisant partie du cycle de développement d’une application et non pas comme un événement intempestif,&lt;/li&gt;&lt;li&gt;Elle nous permet de détecter les risques très tôt dans la vie du projet,&lt;/li&gt;&lt;li&gt;Elle permet d’ajuster les choix en termes d’architecture ou de conception graphique par exemple, très tôt dans le processus et non pas après que ces derniers aient été complètement réalisés (et donc les heures déjà consommées), &lt;/li&gt;&lt;li&gt;Chaque itération est une expérience qui nous permet d’apprendre d’avantage sur les challenges que représente le projet. Par exemple, il est fréquent de revoir les estimations faites au début du projet après la fin des premières itérations,&lt;/li&gt;&lt;li&gt;On donne la chance au client de visualiser le résultat des itérations et donc l’occasion pour lui d’exprimer des ajustements au fur et à mesure que le projet avance et non pas à la fin uniquement lors des tests d’acceptation,&lt;/li&gt;&lt;li&gt;Le contrôle de la qualité se fait à la fin de chaque itération. &lt;/li&gt;&lt;li&gt;Les développeurs restent concentrés sur une partie des fonctionnalités qui font partie de l’itération courante. Tout changement ou correction qui s’ajoute à la liste des tâches, doit être planifié dans les itérations subséquentes. Comme la durée d’une itération est relativement courte, généralement, les clients et chefs de projets acceptent d’attendre ce délai&lt;/li&gt;&lt;li&gt;Le client est rassuré car il peut voir concrètement la progression du projet à travers la manipulation ou l’exécution de cas d’utilisations réels de sont produit&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family:arial;"&gt;Règles de gestion des itérations&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Afin de gérer au mieux les itérations, il est important d’observer quelques règles dont les plus importantes sont : &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fixer la durée des itérations au début du projet : Une itération doit avoir une durée entre 2 et 3 semaines. Il est fortement conseillé que la durée soit calculée en semaines pour que ca soit facile à mémoriser&lt;/li&gt;&lt;li&gt;Au début de chaque itération, tout les intervenants dans le projet, y compris le client, doivent se réunir pour discuter des l’expérience de l’itération précédente et déterminer le contenu de la prochaine itération &lt;/li&gt;&lt;li&gt;l’équipe de production doit présenter un produit à la fin de l’itération. On entend par produit, un ensemble de fonctions qui seraient utilisables telles quelles même si, dans la plupart des cas, on n’ira pas en production sans le reste des fonctions. La présentation se fait en utilisant l’application (il ne s’agit pas de présenter des Power Point par exemple)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Évidement, il existe des exceptions à ces règles, surtout en ce qui concerne la dernière, dans le cas par exemple du développement d’une application serveur qui ne présente pas d’interface utilisateur et qui serait difficile à présenter partiellement. Aussi, typiquement, la première itération « Set Up » et la dernière « Livraison » sont un peu différentes des autres itérations. Dans la première, le nombre de rencontres entre les différents intervenants est souvent élevé et les livrables sont de type « documentation ». Dans la dernière itération, on s’afférera à corriger les derniers bogues et focaliser sur les procédures de déploiements (création d’une application de déploiement par exemple). &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family:arial;"&gt;Conclusion&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Les avantages d’une approche par itérations sont évidents mais l’application d’une telle méthodologie nécessite plus de discipline qu’une approche classique ou les intervenants (équipe de production) ont une certaine durée pour livrer la totalité d’un produit, et en dedans de cette durée, il n’y a pas de moyen de mesurer de manière précise la progression du projet. À la question du gestionnaire de projet « Êtes-vous dans les temps? » les développeurs vont avoir deux réponses, dépendamment du temps restant. Soit un « Oui » si on est encore loin de la date de livraison. Soit un « Non » si on est à quelques jours seulement de la livraison. La marge de manœuvre est alors quasi nulle et il est trop tard pour agir ou négocier des délais supplémentaires avec le client. En se mettant des points de contrôles à la fin des itérations, le gestionnaire de projet peut évaluer lui-même la progression du projet et sa marge de manœuvre sera d’autant plus grande qu’il aura détecté les dépassements dans les premières étapes du projet. Aussi, cette approche permet de mieux intégrer les demandes de changements et les commentaires du client. Le fait de ne pas les recevoir tous d’un coup à la fin des tests d’acceptation permet au gestionnaire du projet de mieux planifier leur impacte sur la date de livraison du produit final. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-8885532551742547474?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/8885532551742547474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=8885532551742547474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/8885532551742547474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/8885532551742547474'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/01/le-dveloppement-itratif_02.html' title='Le développement itératif'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2435616032962171089.post-8590869217773492201</id><published>2008-01-02T14:18:00.000-05:00</published><updated>2008-01-02T22:14:15.299-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='disk'/><category scheme='http://www.blogger.com/atom/ns#' term='CONVERT'/><category scheme='http://www.blogger.com/atom/ns#' term='NTFS'/><category scheme='http://www.blogger.com/atom/ns#' term='CONVERSION'/><category scheme='http://www.blogger.com/atom/ns#' term='FAT'/><category scheme='http://www.blogger.com/atom/ns#' term='convert.exe'/><title type='text'>Convert from FAT or FAT32 to NTFS</title><content type='html'>&lt;span style="font-family:Verdana;font-size:10;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10;"&gt;&lt;/span&gt;&lt;span style="font-size:0;"&gt;&lt;/span&gt;&lt;br /&gt;Few months ago I bought an external hard disk for an emergency back up. Therefore, I did not notice that I formatted it with FAT32 until a week ago when I tried to install ORCAS Beta 2 on this same disk. Actually, I got stuck as the files of the virtual machine were too big to be hold on a FAT32 file system (over 4 Go) and I was wondering whether I could convert my disk to NTFS without having to format it and loose its content.&lt;br /&gt;I finally got a solution that eventually worked fine and did not require me to back up all my files, format the disk and copy them back.&lt;br /&gt;&lt;br /&gt;The solution lies in the CONVERT.EXE utility. To get a list of all parameters, type ”CONVERT /?” in a command shell window (Start –&gt; Run –&gt; type “CMD” then type “CONVERT /?”)&lt;br /&gt;&lt;br /&gt;For instance, to convert a hard disk, type “CONVERT F: /FS:NTFS” (i.e. convert the hard disk F from FAT(32) to NTFS file system).&lt;br /&gt;&lt;br /&gt;Note that you can add the parameter /NoSecurity so that the new created NTFS partitions will allow anyone to access the content of the disk (it is the same as giving access to All Users to your disk). This particulary usefull when converting an external HD that might be used on another system.&lt;br /&gt;&lt;br /&gt;I also suggest you to run a CHKDSK /F in order to check the disk and correct any error on it. This will save you time because CONVERT will run CHKDSK prior to convert the disk and if any error is found, the operation is aborted and you will have to run CHKDSK manually to correct the errors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2435616032962171089-8590869217773492201?l=sbellouti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sbellouti.blogspot.com/feeds/8590869217773492201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2435616032962171089&amp;postID=8590869217773492201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/8590869217773492201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2435616032962171089/posts/default/8590869217773492201'/><link rel='alternate' type='text/html' href='http://sbellouti.blogspot.com/2008/01/le-dveloppement-itratif.html' title='Convert from FAT or FAT32 to NTFS'/><author><name>Blogger</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
