tag:blogger.com,1999:blog-41195838749599577082024-03-18T10:48:42.285+01:00Un Chti caféA bit of Agile, a bit of Java, a bit of Cassandra, un peu de français... par Jérémy SEVELLECUnknownnoreply@blogger.comBlogger78125tag:blogger.com,1999:blog-4119583874959957708.post-85921491235186483702019-10-08T16:43:00.000+02:002019-10-08T16:43:19.725+02:00Cassandra : What to do when you run out of disk space?<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Hi folks</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In the first place, running out of disk space with a <a href="http://cassandra.apache.org/">Cassandra</a> cluster is not something you really want to experiment, trust me...</div>
<pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">Caused by: java.io.IOException: No space left on device</code></pre>
<div style="text-align: justify;">
I guess that if you're reading this post, you don't mind about this advice because it's too late though.</div>
<h2 style="text-align: left;">
Why <a href="http://cassandra.apache.org/">Cassandra</a> need (so much) free space?</h2>
<div style="text-align: justify;">
Under the hood, <a href="http://cassandra.apache.org/">Cassandra</a> works with internal processes which needs temporary disk space (up to the size it's already using...) such as : </div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">Running <a href="http://cassandra.apache.org/doc/latest/operating/compaction.html">Compactions</a>: As SSTables are immutable, <a href="http://cassandra.apache.org/doc/latest/operating/compaction.html">Compactions</a> are the processes which reorganize <a href="http://cassandra.apache.org/doc/latest/architecture/storage_engine.html">SSTables</a> by recreating new <a href="http://cassandra.apache.org/doc/latest/architecture/storage_engine.html">SSTables</a> and to do so, use space on disk.</li>
<li style="text-align: justify;">Keeping Snapshots: a snapshot corresponds to a copy of SSTables at a certain point of time. <a href="http://cassandra.apache.org/">Cassandra</a> uses hard link to create the snapshots. Basically, taking a snapshot is not something that will increase the disk but over the time, keeping snapshots will increase the disk (because the snapshot files are not deleted).</li>
</ul>
<br /><h2 style="text-align: left;">
What can you do?</h2>
</div>
<div style="text-align: justify;">
First question is : Is it only one node or your entire cluster which is running out of disk space?</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
If it's only one node, you can follow the proposals below but sometimes it's easier to trash the node and to replace it with a fresh new node... Thanks to Cassandra and the way it distributes the data across a cluster, you should not end up with one node with (a lot) more data than the others.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
If it's your entire cluster which is running out of disk space... Well... It's where the fun begins... I can't promise that you will not loose data...</div>
<div style="text-align: justify;">
Most of the actions that you can run on a node to reclaim spaces will start to increase a bit the disk usage...</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: left;">
Quick wins</h3>
<div>
<ul style="text-align: left;">
<li><b>Stop writing data into the cluster</b></li>
</ul>
</div>
<div style="text-align: justify;">
It sounds a bit weird but yes, first of all let's stop the bleeding...</div>
<div>
<ul style="text-align: left;">
<li><b>Clear Snapshots</b> </li>
</ul>
run on each node:<br /><pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">nodetool cfstats</code></pre>
<pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">nodetool listsnapshots</code></pre>
<div>
Theses commands will show you if you have any snapshots. If so they are good candidates to reclaim spaces and then to delete them: </div>
<div>
<pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">nodetool clearsnapshot</code></pre>
</div>
<ul style="text-align: left;">
<li><b>Increase the disk size of the nodes</b> </li>
</ul>
<div style="text-align: justify;">
If you can temporary increase the disk size of your nodes, it's worth to do it to get back on a less critical state first. A state, where you can think of adding nodes and so on. If you're running your cluster on the cloud, most of the cloud provider provide ways to extend the disk. In most of cases you'll have to stop and start the VMs hosting your nodes.</div>
</div>
<div>
<ul style="text-align: left;">
<li><b>Remove data (if you can...)</b></li>
</ul>
<div style="text-align: justify;">
It can be a bit extreme as well but depending on your context and your use case it's perhaps possible...</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can drop or truncate tables. This solution is quite efficient because no tombstones are written. <a href="http://cassandra.apache.org/">Cassandra</a> just create a snapshot of the table when you run the command. The disk space is released when you clear the snapshot.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: left;">
Not so quick win</h3>
<div>
<ul style="text-align: left;">
<li><b>Add nodes</b></li>
</ul>
</div>
<div style="text-align: justify;">
This is the usual procedure... If your cluster needs more space, add more nodes...</div>
<div style="text-align: justify;">
Adding nodes means that the ownership data is changing between nodes. <a href="http://cassandra.apache.org/">Cassandra</a> does not automatically release the data which has been moved to other nodes. Do not forget to run a cleanup on each nodes:</div>
<div>
<pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">nodetool cleanup</code></pre>
</div>
<div style="text-align: justify;">
If you're still very limited in terms of available disk space, be careful because running a cleanup temporary increase the disk space. You can limit this increase by running the cleanup table per table :</div>
<div>
<pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: justify;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">nodetool cleanup yourkeyspace yourtable</code></pre>
</div>
<div>
<ul>
<li><b>Remove data (if you can...)</b></li>
</ul>
<div style="text-align: justify;">
The other way to delete data by inserting tombstones in your cluster. To avoid to wait the gc_grace_seconds parameter before the tombstones will be evicted (by default it's 10 days), you can change the value by using the ALTER cql command. Before doing that check, check that old nodes are Up :</div>
</div>
<div>
<pre data-meta=" [Service Thread] 2017-04-14 02:43:36,566 GCInspector.java:284 - ConcurrentMarkSweep GC in 438ms. CMS Old Gen: 608870096 -> 332637976; Par Eden Space: 4288 -> 166629640;" lang="INFO" style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">ALTER TABLE keyspace.yourtable WITH gc_grace_seconds = 3600</code></pre>
</div>
<h2 style="text-align: left;">
Best advice</h2>
<div style="text-align: justify;">
If you survived to the issue, I'm pretty sure that you don't want to face it one more time. I would warmly recommend to monitor the disk usage of the nodes in your cluster. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
If you're using the <a href="http://cassandra.apache.org/doc/latest/operating/compaction.html#size-tiered-compaction-strategy">SizeTieredCompactionStrategy</a> (which is the worst regarding the needed free space) a good practice is to keep your disk usage below 50 to 60% and to add nodes before reaching the 70% threshold.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
There's a currently an opened ticket to tackle this type of problem: </div>
<div style="text-align: justify;">
<a href="https://issues.apache.org/jira/browse/CASSANDRA-14499">https://issues.apache.org/jira/browse/CASSANDRA-14499</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Enjoy!</div>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-4119583874959957708.post-22120060760897698192019-10-04T12:48:00.002+02:002019-10-22T09:38:31.797+02:00Cassandra Lan Party How-to<div dir="ltr" style="text-align: left;" trbidi="on">
Hi Cassandra folks,<br />
<br />
<div style="text-align: justify;">
I would like to share with you my experience regarding the organization of a Cassandra Lan party.</div>
<br />
<;-)><br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="en">
Are we still the worldwide Cassandra Lan party record holder with 36 nodes? 🤔<a href="https://t.co/VH9PIc2o9j">https://t.co/VH9PIc2o9j</a> <a href="https://twitter.com/nromanetti?ref_src=twsrc%5Etfw">@nromanetti</a> <a href="https://twitter.com/framiere?ref_src=twsrc%5Etfw">@framiere</a> <a href="https://twitter.com/hashtag/itwassocool?src=hash&ref_src=twsrc%5Etfw">#itwassocool</a> <a href="https://twitter.com/hashtag/Cassandra?src=hash&ref_src=twsrc%5Etfw">#Cassandra</a></div>
— Jérémy Sevellec (@jsevellec) <a href="https://twitter.com/jsevellec/status/1175022175700602885?ref_src=twsrc%5Etfw">September 20, 2019</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<div style="text-align: justify;">
It looks like I'm still the record holder of the biggest Cassandra Lan party organized with a 36 nodes cluster. I would be so happy if someone can beat this record!</div>
<div style="text-align: justify;">
</;-)></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I've already organized a bunch of Cassandra Lan party during conferences or meetups. If you want to have it done the right way and to avoid to loose time or just to fail, it's a bit of work and preparation...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Here's my <a href="https://en.wikipedia.org/wiki/How-to">How-to</a> regarding the preparation and the run of a Cassandra Lan party. Feel free to use it or to just take a part of it! I know that this How-to works because i did it several times. It does not mean that you can't do it in another ways though.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Special thanks to friends who were already part of Cassandra Lan party organizations with me: </div>
<div style="text-align: justify;">
</div>
<ul>
<li><a href="https://twitter.com/nromanetti">Nicolas Romanetti</a></li>
<li><a href="https://twitter.com/framiere">Florent Ramière</a></li>
<li><a href="https://twitter.com/pcmanus">Sylvain Lebresne</a></li>
<li><a href="https://twitter.com/thomasrecloux">Thomas Recloux</a></li>
<li><a href="https://twitter.com/gdhordain">Gautier Dhordain</a></li>
<li><a href="https://twitter.com/MiraLak">Amira Lakhal</a></li>
</ul>
<h2 style="text-align: left;">
The goal</h2>
<div style="text-align: left;">
<div style="text-align: justify;">
The basic goal of a Cassandra Lan Party is: </div>
</div>
<div style="text-align: left;">
</div>
<ul style="text-align: left;">
<li style="text-align: justify;">to create a network with the attendees' laptop</li>
<li style="text-align: justify;">to create a <a href="http://cassandra.apache.org/">Cassandra</a> cluster on top of it. One node per attendee</li>
<li style="text-align: justify;">to let attendees manipulate data of the cluster all together</li>
<li style="text-align: justify;">to play with the cluster (like "oh s..., we lost one data center" and so on)</li>
</ul>
<div>
<div style="text-align: justify;">
The ideal situation is also to be able to: </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">setup a multi data center <a href="http://cassandra.apache.org/">Cassandra</a> cluster. 3DCs with a replication factor of 3 per DC</li>
<li style="text-align: justify;">be isolated in terms of network</li>
</ul>
</div>
<h2 style="text-align: left;">
1. Preparation </h2>
<div style="text-align: justify;">
You need a Team:</div>
<ul style="text-align: left;">
<li style="text-align: justify;">1 driver who displays slides</li>
<li style="text-align: justify;">1 team member per DC who:</li>
<ul>
<li style="text-align: justify;">knows the procedure</li>
<li style="text-align: justify;">will be responsible of doing the network setup of the data center</li>
<li style="text-align: justify;">will be a seed node with his own machine</li>
<li style="text-align: justify;">will help the other attendees who are part of the data center</li>
</ul>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
So basically, a team of 4 peoples if you want to simulate a 3 data centers clusters is an ideal setup.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You need network equipments :</div>
<ul style="text-align: left;">
<li style="text-align: justify;">1 small switch (at least 4 ports)</li>
<li style="text-align: justify;">3 big switches (the bigger they are the more attendees you can get)</li>
<li style="text-align: justify;">3 RJ45 network cables at least 3 ou 5 meters long to connect switches togethers</li>
<li style="text-align: justify;">as many as RJ45 network cables as you can for the attendees (a mix of 1m, 2m and 3m is perfect) </li>
</ul>
<div style="text-align: center;">
<img height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg5Xqp_2_wGib7p5Br5vo_urVm4h0cHGg_fKJbTAOga-RxystLLpqtAZf__KQNfkG7MdPl_Lz9TsNnf81LPsNwMLGrEd6ju0bGWF163Z55VXw18H_cBTPXclzykBde9NfLZP2qfm5xq6Y/s400/IMG_0369.JPG" width="400" /></div>
<div>
<br /></div>
You need additional equipments:<br />
<ul style="text-align: left;">
<li>a luggage to carry everything in</li>
</ul>
<div style="text-align: center;">
<img height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1jxBrzhiYbFJsFERyQvf8xBXRO_mwgTuYNTVir563UU7g8ePDZlcePwR8tx_t3F1TGcE3fzR_PX1xNjyFSb3-oVazqyrr9_3rJ0cybDq_7dxKKDPbtiuON-UAXX2s6ofVlTpcPwo8tM/s400/IMG_0464.JPG" width="400" /></div>
<ul style="text-align: left;">
<li>flashy t-shirts, so attendees can identify the Cassandra Lan Party team easily</li>
</ul>
<div style="text-align: center;">
<img height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCMh-6KnABJdYm9fSukTyR3T9Q08c4A_MRdLFXK2Ok8D5I3yF1l9qQIxBuJB9XXryQEjFGZkVmi2380clZZtvZq4ZrUrOISwXb1PuemLqVfPyq3YSFi1KsYstcJ9r6RD1mYwf0dLuB5ug/s400/IMG_0377.JPG" width="300" /></div>
<div style="text-align: left;">
<ul style="text-align: left;">
<li style="text-align: justify;">USB keys</li>
<li style="text-align: justify;">few power strips</li>
<li style="text-align: justify;">a scotch roller</li>
<li style="text-align: justify;">sticky notes</li>
<li style="text-align: justify;">few felt pens</li>
</ul>
</div>
<div>
<div style="text-align: justify;">
I know that it's the most tricky part is to find the network equipments part. In my case, what I did was to ask some companies around me if they would lend me the network equipments by giving them a bit of visibility during the Lan Party and it worked fine... </div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
Also, regarding USB Keys, the goal is to load them with: </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">JDK8 for all OS platforms</li>
<li style="text-align: justify;">Python for windows</li>
<li style="text-align: justify;">The <a href="http://cassandra.apache.org/">Cassandra</a> binary</li>
</ul>
</div>
<div>
<div style="text-align: justify;">
If you don't have any USB Keys, you also have the option to distribute the archives thanks to the <a href="https://github.com/jsevellec/cassandra-lan-party-configurator">Cassandra Lan Party Configurator</a> that the driver will run from his laptop once the network setup id done during the Cassandra Lan party (more details below).</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
In addition to that, You need: </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">Some Slides to guide the attendees</li>
<li style="text-align: justify;">the <a href="https://github.com/jsevellec/cassandra-lan-party-configurator">Cassandra Lan party configurator</a> (again, more details below)... </li>
</ul>
</div>
<div>
<div style="text-align: justify;">
And that's it!</div>
</div>
<div>
<br /></div>
<div style="text-align: center;">
<img height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1jxBrzhiYbFJsFERyQvf8xBXRO_mwgTuYNTVir563UU7g8ePDZlcePwR8tx_t3F1TGcE3fzR_PX1xNjyFSb3-oVazqyrr9_3rJ0cybDq_7dxKKDPbtiuON-UAXX2s6ofVlTpcPwo8tM/s400/IMG_0464.JPG" width="400" /></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
I would advice, if you can, to test the network equipment before the Cassandra Lan party D Day. You can also organize a repetition just with the team or with few close friends. It enables to feel more relax for the D day.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
If you can contact the attendees before the event, you can ask them :</div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">to come with a laptop</li>
<li style="text-align: justify;">install a JDK 8</li>
<li style="text-align: justify;">yo come with a RJ45 adaptor for the laptop (like for the recent Mac for instance...)</li>
</ul>
</div>
<h2 style="text-align: left;">
2. Room preparation</h2>
<div>
<div style="text-align: justify;">
To better picture the DCs physically, group tables to create 3 areas which will define your 3 DCs. One big switch per DC.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
You can also spread sticky notes and pens on the tables.</div>
</div>
<div>
<br /></div>
<div>
Here is an example of a room setup i did for a repetition: </div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJI6ugCgCFkoIZI6dqy7E6YgD0VEFnTd6vaFYIqUSAPPxqn9N7B87tzF6tRqhcriydJM6bGqd8zHj2LRRhRzHNuImU1Yj2rx3uC-YOEneR7TcKGfLkoTKZTqDI_ayIIpmHa43l1fpoxxU/s1600/IMG_4825+%25281%2529.jpg" imageanchor="1"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJI6ugCgCFkoIZI6dqy7E6YgD0VEFnTd6vaFYIqUSAPPxqn9N7B87tzF6tRqhcriydJM6bGqd8zHj2LRRhRzHNuImU1Yj2rx3uC-YOEneR7TcKGfLkoTKZTqDI_ayIIpmHa43l1fpoxxU/s400/IMG_4825+%25281%2529.jpg" width="400" /></a></div>
<div>
<div style="text-align: justify;">
Each table is a DC + the table at the back with the driver laptop which also display slides and the smaller switch.</div>
</div>
<h2 style="text-align: left;">
3. Welcome attendees</h2>
<div>
<div style="text-align: justify;">
Just few things about that : </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">try to guide them to spread them across all the DCs. the Ideal situation is to have the same number of attendees per DC (or close to). You need to have at least 2 attendees per DC + the team member of the DC (the setup is using a <a href="http://cassandra.apache.org/doc/latest/architecture/dynamo.html#replication-strategy">RF</a> of 3 per DC).</li>
<li style="text-align: justify;">display a slide to kindly ask people to not touch anything. Regarding my experience, Attendees are sometimes quite excited to participate and want to go too fast. The idea is to go slow at the beginning to not fail the Cassandra Lan Party. </li>
<li style="text-align: justify;">distribute USB Keys</li>
<li style="text-align: justify;">start the Cassandra lan Party with slides</li>
</ul>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQQEeyAZprMk3qu0j72_zdHKiG1-vloVu0fY3tLpgFuwuXONW5DBIlVM4FNc3UNXgWM7d4uEhXMFrTFeNuYIcKCizHZn-ZknL8qHN-L9WDWeOGDnqK3bNPNVdolbUyvNWQPix1CABiHHk/s1600/Capture+d%2527e%25CC%2581cran+2019-10-04+10.32.33.png" imageanchor="1"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQQEeyAZprMk3qu0j72_zdHKiG1-vloVu0fY3tLpgFuwuXONW5DBIlVM4FNc3UNXgWM7d4uEhXMFrTFeNuYIcKCizHZn-ZknL8qHN-L9WDWeOGDnqK3bNPNVdolbUyvNWQPix1CABiHHk/s320/Capture+d%2527e%25CC%2581cran+2019-10-04+10.32.33.png" width="320" /></a></div>
</div>
<h2 style="text-align: left;">
4. Network Setup</h2>
<div>
<div style="text-align: justify;">
The first thing is to ask attendees to switch off WIFI.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
The goal is to create this network setup :</div>
</div>
<div>
</div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1aQSkWsgdjaABzXxVilGMwvlsxZqWHEsPy6sfxMRfeC5DAWpNzBjSK0kygpeGiROQ9eGfYeNTv2o6JF4J7zy3W5yRyURtTkJQPnXyckj-s_Tlgd_O4y3aEnH3PPgmMTesGvy1glUGxxU/s1600/Capture+d%2527e%25CC%2581cran+2019-10-04+10.30.51.png" imageanchor="1"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1aQSkWsgdjaABzXxVilGMwvlsxZqWHEsPy6sfxMRfeC5DAWpNzBjSK0kygpeGiROQ9eGfYeNTv2o6JF4J7zy3W5yRyURtTkJQPnXyckj-s_Tlgd_O4y3aEnH3PPgmMTesGvy1glUGxxU/s640/Capture+d%2527e%25CC%2581cran+2019-10-04+10.30.51.png" width="640" /></a></div>
<br />
<div>
<div style="text-align: justify;">
The small switch (WORLD) is connecting the 3 DCs (LILLE, SAN FRANCISCO and SINGAPORE) all together. The driver laptop is connected to the small switch and all the other attendees and team members are connected to a DC switch.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
The Ip allocation is done manually to be able to control it.</div>
</div>
<div style="text-align: justify;">
As we will use the <a href="http://cassandra.apache.org/doc/latest/operating/snitch.html">RackInferringSnitch</a> of <a href="http://cassandra.apache.org/">Cassandra</a> to distribute the node across the DCs. IPs of Attendees have to look like: </div>
<div style="text-align: center;">
<div style="text-align: center;">
10.X.1.Y</div>
</div>
<div>
<div style="text-align: justify;">
where:</div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">X corresponds to the number of the DC (in our case "1" for Lille, "2", for SF, ...)</li>
<li style="text-align: justify;">Y is an incremental number given by the DC team member. "1" will be used for each DC team member</li>
<li style="text-align: justify;">10.1.1.0 will be for the driver laptop</li>
</ul>
<div>
<div style="text-align: justify;">
For example for the Lille DC: </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">10.1.1.1 : DC team member</li>
<li style="text-align: justify;">10.1.1.2 : 1st DC attendee</li>
<li style="text-align: justify;">10.1.1.3 : 2nd DC attendee</li>
<li style="text-align: justify;">...</li>
</ul>
<div>
<div style="text-align: justify;">
To avoid any issue and a big network mess, I would advice to use sticky notes to write each IP with the name of the attendee on the closest wall to the DC and also to control the plugging into the switch.</div>
</div>
</div>
<div>
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRqUSuWInbD7qPur2_FImIX0gFqcTErsSDWFGZ4MHkMJ7wvrWLKYGEFLXJSkUlJnbc2P_fImOvIWue3YwGUhWb04ILuh7oplCDA4eTaQvI0bVB0piiSNbc66bujZIhUkz3p0PcAH0jowc/s1600/Capture+d%2527e%25CC%2581cran+2019-10-04+10.48.25.png" imageanchor="1"><img border="0" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRqUSuWInbD7qPur2_FImIX0gFqcTErsSDWFGZ4MHkMJ7wvrWLKYGEFLXJSkUlJnbc2P_fImOvIWue3YwGUhWb04ILuh7oplCDA4eTaQvI0bVB0piiSNbc66bujZIhUkz3p0PcAH0jowc/s400/Capture+d%2527e%25CC%2581cran+2019-10-04+10.48.25.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
Once connected you can ask attendees to do the network configuration : </div>
</div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">IP : the one from the sticky note</li>
<li style="text-align: justify;">network mask : 255.0.0.0</li>
<li style="text-align: justify;">no proxy</li>
<li style="text-align: justify;">no gateway</li>
</ul>
<div>
<div style="text-align: justify;">
And then to ask them to ping: </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">10.1.1.0</li>
<li style="text-align: justify;">10.1.1.1</li>
<li style="text-align: justify;">10.2.1.1</li>
<li style="text-align: justify;">10.3.1.1</li>
</ul>
</div>
</div>
<div>
<h2>
5. A bit of Cassandra theory</h2>
</div>
<div>
<div style="text-align: justify;">
Usually, once the network setup is done or if there's one or two laptops causing issues, I would recommend to do a bit of Cassandra theory with few slides. How deep you need to go depends a bit on the experience of the attendees. Up to you to decide how far you want to go. The good thing is that it let a bit of time to try to solve network issues in the background.</div>
</div>
<h2 style="text-align: left;">
6. Cassandra Setup </h2>
<div>
<div style="text-align: justify;">
Again, the first gentle reminder that you have ask to attendees is to not start <a href="http://cassandra.apache.org/">Cassandra</a> before the green light of the DC team member.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
How to do the distributed setup : There's an app for that. </div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
The <a href="https://github.com/jsevellec/cassandra-lan-party-configurator">Cassandra Lan Party Configurator</a> is a web application that will help attendees to do the setup of <a href="http://cassandra.apache.org/">Cassandra</a> on their machine. The goal is to let attendees to do the setup themselves but guided thanks to the application. The application is OSS and Apache licensed.</div>
</div>
<div>
<div style="text-align: justify;">
Main features are : </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">attendees configuration helper</li>
<li style="text-align: justify;">archives provider</li>
<li style="text-align: justify;">cluster status</li>
</ul>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijGSvIGRfbiZiLEZjE7OJQlL9JKgbfZnH3aT8CYxmtjawtZWzda5EQchQK6ogXKL04t2s8QgirwB1PbzwEsiFYDW-ESRMTz7L9yZhq2Z95pwh_3aAmF-Mdfb_wX0T94FnifxWzd2OilzY/s1600/welcome.png" imageanchor="1"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijGSvIGRfbiZiLEZjE7OJQlL9JKgbfZnH3aT8CYxmtjawtZWzda5EQchQK6ogXKL04t2s8QgirwB1PbzwEsiFYDW-ESRMTz7L9yZhq2Z95pwh_3aAmF-Mdfb_wX0T94FnifxWzd2OilzY/s320/welcome.png" width="320" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjysjTsDhlJjybIrtJtC2Z7S_dv5Z2n19VluJLG0zCPjjXDc1sLxrfPrNXdu1gb6Q1VeIogxEWe65b1fQrlFBi6fNCgQnB1w0sX6E0sWxYqGmKfG_11MllKbyyNDhDF98J95Fn5Iq1Si2E/s1600/cassandra-01.png" imageanchor="1"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjysjTsDhlJjybIrtJtC2Z7S_dv5Z2n19VluJLG0zCPjjXDc1sLxrfPrNXdu1gb6Q1VeIogxEWe65b1fQrlFBi6fNCgQnB1w0sX6E0sWxYqGmKfG_11MllKbyyNDhDF98J95Fn5Iq1Si2E/s320/cassandra-01.png" width="320" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLESZanQty0jMPp0JQ5XFRnALCphJyKPGdISBqQz15dIPEQCrxjEvtiq-yJtFW8WR-s3x0kfkIEV4WNXZTNdassRahv4G_8lRwqdkywpsNxaji6pmGD883NwO8-MJv_DlwqMmBgkx9HIY/s1600/cassandra-02.png" imageanchor="1"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLESZanQty0jMPp0JQ5XFRnALCphJyKPGdISBqQz15dIPEQCrxjEvtiq-yJtFW8WR-s3x0kfkIEV4WNXZTNdassRahv4G_8lRwqdkywpsNxaji6pmGD883NwO8-MJv_DlwqMmBgkx9HIY/s320/cassandra-02.png" width="320" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYDNQKbB3tIH7bmEtne0rVddZ9-j0wpuZwHzaICzmkpN8Zdkn6LUjE1dLAjQiuNdtD0xzjqK01prnH1nkQTEQtFvRzRtAzAKyMtw7S6f8BXgmwWnxIcB7RTa5Anh26w-bkXco9y80a_iM/s1600/archive.png" imageanchor="1"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYDNQKbB3tIH7bmEtne0rVddZ9-j0wpuZwHzaICzmkpN8Zdkn6LUjE1dLAjQiuNdtD0xzjqK01prnH1nkQTEQtFvRzRtAzAKyMtw7S6f8BXgmwWnxIcB7RTa5Anh26w-bkXco9y80a_iM/s320/archive.png" width="320" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNovkV2-uI1PPs8EoBoaBn4hJGpx1Xd5GVRifOsAByXmQ2jxCZ6ozZTTa0pCGHloCc82-l29ruE-cI4sxH7Gk04RFqODmZZOnntKdR_ju6WHpztGhTJSJ3mX_IYhxTwKn6kGxRLI2THKY/s1600/cluster.png" imageanchor="1"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNovkV2-uI1PPs8EoBoaBn4hJGpx1Xd5GVRifOsAByXmQ2jxCZ6ozZTTa0pCGHloCc82-l29ruE-cI4sxH7Gk04RFqODmZZOnntKdR_ju6WHpztGhTJSJ3mX_IYhxTwKn6kGxRLI2THKY/s320/cluster.png" width="320" /></a></div>
</div>
<div style="text-align: center;">
</div>
<div>
<br /></div>
<div>
I would recommend to run the application from the driver laptop.</div>
<h2 style="text-align: left;">
7. Cassandra cluster start</h2>
<div>
<div style="text-align: justify;">
Once all attendees are done with the Cassandra setup, you can start nodes.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
As we set the auto_bootstrap properties to false, it enables to accelerate the creation of the cluster. The drawback is that if an attendee is joining after the creation of the keyspace, he will have to remove the <a href="http://cassandra.apache.org/doc/latest/operating/topo_changes.html?highlight=auto_bootstrap">auto_bootstrap</a> properties to join the cluster and to receive data.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
First, start the seeds nodes which should correspond to each of the DC team member. Then, once the seeds nodes are there, you can let each of the DC team member adding nodes one after each other asking attendee to start his node.</div>
</div>
<h2 style="text-align: justify;">
8. Play with the Cassandra cluster</h2>
<div>
<div style="text-align: justify;">
Once everyone is there, create a <a href="http://cassandra.apache.org/doc/latest/cql/ddl.html?highlight=keyspace">keyspace</a> and one table so all attendees will be able to play with.</div>
</div>
<div>
<div style="text-align: justify;">
The important thing is to create the <a href="http://cassandra.apache.org/doc/latest/cql/ddl.html?highlight=keyspace">keyspace</a> with the good <a href="http://cassandra.apache.org/doc/latest/architecture/dynamo.html#replication-strategy">strategy</a> and using a <a href="http://cassandra.apache.org/doc/latest/architecture/dynamo.html#replication-strategy">RF</a> of 3 per DC.</div>
</div>
<div>
<br /></div>
<div>
<pre style="background-color: #2b2b2b; color: #a9b7c6; font-family: 'Menlo'; font-size: 9,0pt;"><span style="color: #cc7832;">CREATE </span>KEYSPACE "lanparty" <span style="color: #cc7832;">WITH REPLICATION </span>= {<span style="color: #6a8759;">'class' </span>: <span style="color: #6a8759;">'NetworkTopologyStrategy'</span><span style="color: #cc7832;">, </span><span style="color: #6a8759;">'1' </span>: <span style="color: #6897bb;">3</span><span style="color: #cc7832;">, </span><span style="color: #6a8759;">'2' </span>: <span style="color: #6897bb;">3</span><span style="color: #cc7832;">, </span><span style="color: #6a8759;">'3' </span>: <span style="color: #6897bb;">3</span>}<span style="color: #cc7832;">;</span><span style="color: #cc7832;">
</span>use lanparty<span style="color: #cc7832;">;</span><span style="color: #cc7832;">
</span><span style="color: #cc7832;">CREATE TABLE </span>attendee (
<span style="color: #9876aa;">email </span><span style="color: #cc7832;">text primary key,</span><span style="color: #cc7832;"> </span><span style="color: #9876aa;">first_name </span><span style="color: #cc7832;">text,</span><span style="color: #cc7832;"> </span><span style="color: #9876aa;">last_name </span><span style="color: #cc7832;">text</span>)<span style="color: #cc7832;">;</span></pre>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
Then you can ask every attendees to play with <a href="http://cassandra.apache.org/doc/latest/tools/cqlsh.html">CQLSH</a> to insert and read data...</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
and The cool thing is that you can simulate DC connections issue by just unplugging the network cable of one DC Switch from the small switch.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I let your imagination do the rest...</div>
<h2 style="text-align: left;">
Conclusion</h2>
</div>
<div style="text-align: justify;">
I hope this How-to can help and I'm looking forward for feedback of new Cassandra Lan party!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
As you have seen the network setup with switches and network cables is the biggest part of the Cassandra Lan Party. It's also a funny part because attendees really like this part of the setup.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I think that it could be possible to replace the 3 big switches and the network cables by 3 WIFI points.<br />
<br />
Don't hesitate to contact me if you have any questions!<br />
<br />
Jérémy</div>
<div>
<br /></div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4119583874959957708.post-3183977878369280522019-09-30T15:21:00.000+02:002019-09-30T15:49:20.312+02:00Cassandra : Compaction, compaction and compaction<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Hi Folks,</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
The word "compaction" is heavily used in the <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> world. You can see it everywhere while reading documentation, blog post, mailing list and so on.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Sometimes the use of compaction in combination of another word can be a bit misleading. Let's try to take a step back and to sump up a bit all the different concepts where the word compaction is used:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<img alt="Machine makes cars compact, Fig. 1" src="https://www.hydraulicspneumatics.com/sites/hydraulicspneumatics.com/files/uploads/2014/05/Al-Jon-Impact_V.jpg" /></div>
<h2 style="text-align: justify;">
[Compaction]</h2>
<div>
<div style="text-align: justify;">
Let's say the default one when you talk about <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> compaction. <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> has a write path which is very efficient. The concept is like "let's put as fast as possible the data into a file and in memory". In a second step, the data will be flushed on the disk as is. Ok but then, to enable <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> to also have an efficient read path, especially when you have to read a file from the disk, you need to tidy up and rearrange all the files. This process is called the compaction. A bit more technically : SSTTable are immutable and compaction is the action of generating new SSTable by merging and purging the old ones (duplicate, deleted data with expired ttl and tombstone).<br />
<br /></div>
</div>
<h2 style="text-align: justify;">
Minor [Compaction]</h2>
<div style="text-align: left;">
<div style="text-align: justify;">
We are still talking about the default compaction. The minor compaction is not really something which is minor.... The minor compaction is the compaction handled automatically by <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> as a background process and according to the chosen compaction strategy (see below).</div>
</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<br /></div>
</div>
<h2 style="text-align: justify;">
Major [Compaction]</h2>
<div style="text-align: left;">
<div style="text-align: justify;">
We are still talking about the default compaction mechanism in <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a>. Contrary to the minor compaction, the major compaction is triggered by a manual action on a node (using nodetool compact). The major compaction can behave differently depending on the compaction strategy (see below). The other main difference between major and minor compaction and that explain the naming difference is that a major compaction has a bigger impact in terms of I/O.</div>
</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<br /></div>
</div>
<h2 style="text-align: justify;">
[Compaction] Strategy</h2>
<div style="text-align: left;">
<div style="text-align: justify;">
As already said, Compaction will merge into SSTables into new ones. Depending on you use case, <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> propose different strategies to compact the data new SSTables. There is a default strategy applied if you do not specify it but you can choose the one you want per table. There are 3 main compaction strategies.</div>
</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<br /></div>
</div>
<h2 style="text-align: justify;">
Size Tiered [Compaction] Strategy</h2>
<div>
<div style="text-align: justify;">
This is the default compaction strategy. It fits for the write heavy and general workload. More documentation here:<br />
<a href="http://cassandra.apache.org/doc/latest/operating/compaction.html#size-tiered-compaction-strategy">http://cassandra.apache.org/doc/latest/operating/compaction.html#size-tiered-compaction-strategy</a></div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<h2 style="text-align: justify;">
Leveled [Compaction] Strategy</h2>
<div style="text-align: left;">
<div style="text-align: justify;">
This compaction strategy fits perfectly for read heavy workloads. This strategy involves a bit more I/O than the Size Tiered Compaction. It can be a good idea to combine that with SSDs. More documentation here:<br />
<a href="http://cassandra.apache.org/doc/latest/operating/compaction.html#leveled-compaction-strategy">http://cassandra.apache.org/doc/latest/operating/compaction.html#leveled-compaction-strategy</a><br />
<br /></div>
</div>
<h2 style="text-align: justify;">
Time Window [Compaction] Strategy</h2>
<div>
<div style="text-align: justify;">
This compaction strategy fits perfectly for time series. Basically the data is compacted regarding the timeMore documentation here:<br />
<a href="http://cassandra.apache.org/doc/latest/operating/compaction.html#timewindowcompactionstrategy-operational-concerns">http://cassandra.apache.org/doc/latest/operating/compaction.html#timewindowcompactionstrategy-operational-concerns</a></div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
A good blog blog post which deep dive into it:<br />
<a href="https://thelastpickle.com/blog/2016/12/08/TWCS-part1.html">https://thelastpickle.com/blog/2016/12/08/TWCS-part1.html</a></div>
</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<br /></div>
</div>
<h2 style="text-align: justify;">
Validation [Compaction]</h2>
<div style="text-align: left;">
<div style="text-align: justify;">
This one is a fake friend from my point of view. It's considered as a compaction but is not really about compaction. The validation compaction is the process of building <a href="https://en.wikipedia.org/wiki/Merkle_tree" target="_blank">Merkle tree</a> on nodes during a repair. It's anyway called validation compaction because this action is anyway controlled by the </div>
</div>
<div style="text-align: justify;">
<a href="http://cassandra.apache.org/doc/latest/configuration/cassandra_config_file.html#compaction-throughput-mb-per-sec" target="_blank">compaction_throughput_mb_per_sec</a> parameter. </div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<h2 style="text-align: justify;">
Anti[Compaction]</h2>
<div>
<div style="text-align: justify;">
The anti compaction occurs during incremental repair. The goal is to split into two SSTables the repaired data from the unrepaired data. The 2 sets of data can no longer be compacted together and it's why it's called anticompaction.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Conclusion</h2>
</div>
<div style="text-align: justify;">
Hopefully you get now a better vision of what means compaction regarding the context it's used into the <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> world.</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<br /></div>
</div>
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
</style>
</div>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-4119583874959957708.post-87332928110365975072019-09-23T17:30:00.000+02:002019-09-30T15:21:31.693+02:00Remote working in IT - 7 years later<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Hi Everyone,</span></div>
</div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">This post is a follow up of 2 previous articles related to the home working : </span></div>
</div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span></div>
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">
</span>
</span></div>
<div style="height: 0px; text-align: left;">
</div>
<ul style="text-align: left;">
<li style="text-align: justify;"><span style="color: black; font-family: "arial" , "helvetica" , sans-serif;"><a href="https://www.unchticafe.fr/2012/10/yes-i-code-in-underwear-home.html" target="_blank">Yes, I code in underwear @home</a></span></li>
</ul>
<ul style="text-align: left;">
<li style="text-align: justify;"><span style="color: black; font-family: "arial" , "helvetica" , sans-serif;"><a href="https://www.unchticafe.fr/2014/04/home-working-in-it-2-years-later.html" target="_blank">Home working in IT - 2 years later</a></span></li>
</ul>
<h2 style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Why again a post about that?</span></h2>
<div>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Because it's still a hot topic folks and I still have a lot of questions about it. The questions are now a bit different because most of the people who know me also know that I'm working from home for a long time. </span></div>
</div>
</div>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
</div>
</div>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">In addition to that, you may have notice that there's a small change in the post titles between the previous post and this one. There was evolutions on my way of working remotely.</span></div>
</div>
</div>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
</div>
</div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">So let's try to give some answers and try to explain the changes since <a href="https://www.unchticafe.fr/2014/04/home-working-in-it-2-years-later.html" target="_blank">the previous post</a>.</span></div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<h2 style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Home working vs Remote working?</span></h2>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<div style="text-align: left;">
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">I totally agree with what <a href="https://twitter.com/hsablonniere" target="_blank">Hubert</a> said: </span><br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="en">
😤 Reminder: remote working !== working alone from home<br />
😍 I’ve been working in a coworking space for 3 years<br />
👍 10 min walk from home, people with different jobs, lots of sharing and friendship<br />
🤩 Noone talks about this, but I love this way of working</div>
— Hubert SABLONNIÈRE 😎 (@hsablonniere) <a href="https://twitter.com/hsablonniere/status/1147826224573689856?ref_src=twsrc%5Etfw">July 7, 2019</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For me, the "remote working" is the concept of working remotely from the company you're working for and where a part of your coworkers are not working in the same office. I would describe the "Home working" as one of the possible type of remote working where you work remotely from your home. </span></div>
</div>
</div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Along this 7 years of remote working, I had the chance to experiment a bunch of different possibilities.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
</div>
</div>
<h3 style="text-align: left;">
<span style="font-family: "times" , "times new roman" , serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">1. Pure home working</span></span></h3>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="text-align: justify;">I already described this in one of <a href="https://www.unchticafe.fr/2012/10/yes-i-code-in-underwear-home.html" target="_blank">previous posts</a> about the topics. Initially, I started to work remotely from my home and recreated an office in my house. (</span><a href="https://www.unchticafe.fr/2012/10/yes-i-code-in-underwear-home.html" style="text-align: justify;" target="_blank">here</a><span style="text-align: justify;">)</span></span></div>
<div>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCiJnr7cGTcRiINFhygwN84TF8_mHw4okCZI8raNEtrAYvOWZ3Frq7eBV_WmexXggAntnCgmE6ybmnvEsO9o6g6lv9Dd_dH9jm08Rq0RzbsOSAY2UWFUAOYTc9vfJjZc4bbViV7AwTPG0/s1600/IMG_3536.jpg" imageanchor="1"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCiJnr7cGTcRiINFhygwN84TF8_mHw4okCZI8raNEtrAYvOWZ3Frq7eBV_WmexXggAntnCgmE6ybmnvEsO9o6g6lv9Dd_dH9jm08Rq0RzbsOSAY2UWFUAOYTc9vfJjZc4bbViV7AwTPG0/s400/IMG_3536.jpg" width="400" /></a></span></div>
</div>
</div>
</div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span>
</span><br />
<h3 style="text-align: left;">
<span style="font-family: "times" , "times new roman" , serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">2. Colleague home working</span></span></h3>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">A good friend of mine, also freelancer, <a href="https://twitter.com/thomasrecloux" target="_blank">Thomas</a> to not name him, was also working for the same customer in the same context. Our houses are close from each other. It's something like a less than 5 minutes car commute to go to his house. What happened is that, over the time and more and more, we were working together at his house or at my house. It was most of the time not decided upfront but more like : you start to work from your home, you have your first coffee and then a message was popping up on my screen: </span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">"Hello mate, your house or mine today?"</span></div>
</div>
</div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
</div>
</div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">The difference with an isolated home working is that, to be able to work in the same room, we were working in the living room. The good thing with that is that we were still very flexible and independant which means that to work together, we needed to : </span><br />
<ul style="text-align: left;">
<li style="text-align: justify;"><span style="font-family: "arial" , "helvetica" , sans-serif;">be willing to work together. Just a "no, not possible today" was enough without the need of any justification.</span></li>
<li style="text-align: justify;"><span style="font-family: "arial" , "helvetica" , sans-serif;">have one of the houses free for work which means without one of the family around the house.</span></li>
</ul>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
</div>
<div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">We ended up with few cool setup : </span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEGpdfLcGyQXqUfPVMWKq0-XIBQyEdA1tNSKi4CMMYCwVnHngbFmkUhfRRikCNOP0FAvw511-JHLZGOTw-Ga-TdCapy0qZjTjsD7Mij7_If2dcpeen5bAVTOXY_IbDEdo29ugfp08nooU/s1600/IMG_2193.jpg" imageanchor="1"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEGpdfLcGyQXqUfPVMWKq0-XIBQyEdA1tNSKi4CMMYCwVnHngbFmkUhfRRikCNOP0FAvw511-JHLZGOTw-Ga-TdCapy0qZjTjsD7Mij7_If2dcpeen5bAVTOXY_IbDEdo29ugfp08nooU/s320/IMG_2193.jpg" width="320" /></a></span></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOtx3XSzIwGJAOo_UE3gBhHeFuAhEM1AIYO9-ScdRngx0JaaT0Sq0vKGDPPcbqtFRPgC438VKRq_T9kOcgfNHmlVbV9xd-EN8RBUTvccwIH6d6x8-y6_57Ef0nfF9IuNCiAWk1MZInnkk/s1600/IMG_2614.jpg" imageanchor="1"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOtx3XSzIwGJAOo_UE3gBhHeFuAhEM1AIYO9-ScdRngx0JaaT0Sq0vKGDPPcbqtFRPgC438VKRq_T9kOcgfNHmlVbV9xd-EN8RBUTvccwIH6d6x8-y6_57Ef0nfF9IuNCiAWk1MZInnkk/s320/IMG_2614.jpg" width="320" /></a></span></div>
</div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">The drawback of this way of working is related to the lack of isolation between the work and the family. Work hours are unfortunately longer than school hours and we ended up each afternoon with the kids from one or the other family in the living room and that's totally ok when it's from time to time. </span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">In contrast, when it begins to be the default situation and that you do that for more than one year, I started to feel an embarrassment when the family of my colleague was back home (not due to them!). Usually it ended up by relocating back home to finish the day of work.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
</div>
</div>
</div>
<h3 style="text-align: left;">
<span style="font-family: "times" , "times new roman" , serif;"><span style="font-family: "arial" , "helvetica" , sans-serif; white-space: nowrap;">3. Coworking space working</span></span></h3>
<div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">To solve some of the drawbacks of the "intensive" colleague home working, I started to search for alternatives. I started to search for a coworking space where i could go one day or two per week in addition to my usual home working. And you know what? I found out that a new coworking space called <a href="https://www.lamaisonducoworking.fr/vda">La maison du coworking</a> (literally "the house of coworking") just opened few months ago and 10 minutes away from home. They were offering from shared desks on an open space to isolated offices per month. I contacted them but they were no yet offering a one day shared desk. They told me : no problem, let's create it!</span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">That's how my colleague and I ended up moving away from the colleague home working to the coworking space working!</span></div>
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif; margin-left: 1em; margin-right: 1em; text-align: center;"><a href="https://urbidesk.com/uploads/office_pictures/img_1441808027.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="Résultat de recherche d'images pour "la maison du coworking"" border="0" src="https://urbidesk.com/uploads/office_pictures/img_1441808027.jpg" /></a></span></div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "times" , "times new roman" , serif;"></span><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">The really cool thing is that the open space was really quiet and everyone was working different thing and for different companies. So you do not fall back into the potential issues of open spaces like being disturbed every minutes by people coming to see you. The other benefit is that you can access common facilities of the coworking space : fiber internet connection, shared printers, kitchen, afterwork, meeting room...</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For example, here is a meetup we organized in of the meeting room of <span style="text-align: justify;">"</span><a href="https://www.lamaisonducoworking.fr/vda" style="text-align: justify;">La maison du coworking</a><span style="text-align: justify;">" </span>for a <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> Lan party :</span><br />
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwtbKZF3CXVhyphenhyphen0_s41UWcj6HB8g1_Tt4dP5WmyS3P3o-5YXRYtxA-JMDV1ul5R0iF-9uIQQMZ3WT6jPmQSv0FCvbfJcQkAsagoCFcOPnzB4jRvIUs5iScPj2Do3WIugyh9TGrtZ3TgXy4/s1600/IMG_4825.jpg" imageanchor="1"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwtbKZF3CXVhyphenhyphen0_s41UWcj6HB8g1_Tt4dP5WmyS3P3o-5YXRYtxA-JMDV1ul5R0iF-9uIQQMZ3WT6jPmQSv0FCvbfJcQkAsagoCFcOPnzB4jRvIUs5iScPj2Do3WIugyh9TGrtZ3TgXy4/s400/IMG_4825.jpg" width="400" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "times" , "times new roman" , serif;">
</span>
</span><br />
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">It would have been hard to do it in my living room ;-)</span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span>
<br />
<h3 style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">4. Office remote working</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">While working at the coworking place on the open space, I had the opportunities to get a private 4 desks office in the building next to the open space building for a very reasonable price that my customer was willing to pay... There was no reason to say no...</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br />This office was proposed "as a service" by the coworking space which include all the facilities of the open space plus the cleaning once a week</span><br />
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY8cDOoTiBlVtKtkPKYf4dSp0UI9UejOTBFfzp3j9UV1xT65_N2vKW_6Hy8i2UhNKH4tQ9GNlwBqpb66p1viRLOFISVAl0jZripnhb1vSf0W6mlXhmhLt_dsA2y1bMmgA891VRq1Q6W5s/s1600/IMG_1008.jpg" imageanchor="1"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY8cDOoTiBlVtKtkPKYf4dSp0UI9UejOTBFfzp3j9UV1xT65_N2vKW_6Hy8i2UhNKH4tQ9GNlwBqpb66p1viRLOFISVAl0jZripnhb1vSf0W6mlXhmhLt_dsA2y1bMmgA891VRq1Q6W5s/s320/IMG_1008.jpg" width="320" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXuXZn03Qx0lHjewBJJQrmmWkAblN6I9115S5M6Z4pAwUaWxKpLCUWFXz2Cznh9XmBVGCBnpAViHglUUzUllk_7wW9uE194Tq4u49S91KRepw5w2AuGLO4KzXqb9Vnl8l2Y_DzLrI2eoM/s1600/IMG_1009.jpg" imageanchor="1"><span style="font-family: "arial" , "helvetica" , sans-serif;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXuXZn03Qx0lHjewBJJQrmmWkAblN6I9115S5M6Z4pAwUaWxKpLCUWFXz2Cznh9XmBVGCBnpAViHglUUzUllk_7wW9uE194Tq4u49S91KRepw5w2AuGLO4KzXqb9Vnl8l2Y_DzLrI2eoM/s320/IMG_1009.jpg" width="320" /></span></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="text-align: justify;"></span><br /></span>
<br />
<div>
<span style="text-align: justify;"><span style="font-family: "arial" , "helvetica" , sans-serif; text-align: justify;"><br /></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: justify;">
The really cool thing was to get access to : </span><br />
<ul style="text-align: left;">
<li style="text-align: justify;"><span style="font-family: "arial" , "helvetica" , sans-serif;">a private place but with all the coworking facilities</span></li>
<li style="text-align: justify;"><span style="font-family: "arial" , "helvetica" , sans-serif;">close to my home with a less than 10 minutes commute by car, motorcycle, bike, ...</span></li>
</ul>
<div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Compared to the open space, We had access to the same level of facilities but with a private whiteboard. We could also use the office as a meeting room when we needed to host the local sprint planning of the team. </span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">You can also prepare <a href="https://cfp.devoxx.fr/2016/talk/YVP-4476/Cassandra%252FSpark_Lan_Party.html" target="_blank">the talk</a> you'll give at <a href="https://www.devoxx.fr/" target="_blank">Devoxx france</a> and put all the mess you want in the office because it's yours!</span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUi91Tgt8X7j1toRIiOqYkjCP9RqSRdJ2LzRmHJD1l4wfcnA8BiDzP_IHxrrvZZWk5D2ksyYyvp2Cy_kqhojwbamxGJdkKr2IHwe8zG3vN884g9LqHjFCyHxH1tFkpuzmM-KJrL3cfPZs/s1600/IMG_4796.jpg" imageanchor="1"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUi91Tgt8X7j1toRIiOqYkjCP9RqSRdJ2LzRmHJD1l4wfcnA8BiDzP_IHxrrvZZWk5D2ksyYyvp2Cy_kqhojwbamxGJdkKr2IHwe8zG3vN884g9LqHjFCyHxH1tFkpuzmM-KJrL3cfPZs/s320/IMG_4796.jpg" width="320" /></a></span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<h3 style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">5. Which one to choose?</span></h3>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">As a good consultant answer, i could say : "The one that fits better for you"</span></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span>
<span style="font-family: "times" , "times new roman" , serif;">For me the key thing is that i can still have a choice, everyday i can adapt to the setup that better fits my mood of the day.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<h2 style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">
Conclusion : The commute switch</span></h2>
</div>
<div>
<div style="text-align: justify;">
<span style="text-align: left;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="text-align: left;">As a conclusion, I would say that having an office really close to my house is really a bonus </span></span></span><span style="text-align: left;">because it enforces a short commute which enables the "brain switch" : When I go to the office in the morning, the 10 minutes commute allows me to prepare my brain for the work switch. Same goes for when I'm going back home in the evening, my brain processes the day and unplugs from the wor</span>k data. This is really important and you don't get this when you work from home, the switch is instantaneous.</div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span>
</span><br />
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">I can still remember my wife saying : "hey, you're still at work?" even if i was on the living room with the kids because my body did the work/family switch but not my brain. </span>If you work from home, I would advise you to take a bit of time to simulate this commute time before you switch into family mode. You can do this by reading the news, surfing on internet to find your next bike (because everyone is always looking for the next bike ;-))...<br /><br /></div>
<div style="text-align: justify;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Enjoy! Your feedback is warmly welcomed in the comment section!</span></div>
</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<div style="text-align: justify;">
<br /></div>
</div>
</div>
</div>
</div>
</div>
Unknownnoreply@blogger.com35tag:blogger.com,1999:blog-4119583874959957708.post-39138893645745384832016-04-18T14:59:00.001+02:002016-04-18T14:59:26.520+02:00Une Cassandra/Spark Lan party à Devoxx France<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.devoxx.fr/"><img border="0" height="38" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyW324FmmxnT7-bPkOfM9VjIxap5xfNXS0tQsonziYQ9hA6MPbQkc55gygEoqpP2Oct9EjqXhkr8wvnFkNIgj8BeHHzcnacJLnsWKZhm3tFZWmLFYEU7fVbOiaafgFWF8OaTY5XXI_4JQ/s320/logo-texte-devoxx-france-800.png" width="320" /></a></div>
<br />
<br />
<br />
Il y aura cette année (2016) à <a href="http://www.devoxx.fr/">Devoxx France</a> un hands-on particulier :<br />
<br />
<div style="text-align: center;">
Une <a href="http://cassandra.apache.org/">Cassandra</a> / <a href="http://spark.apache.org/">Spark</a> <a href="https://fr.wikipedia.org/wiki/LAN-party">Lan Party</a></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qZsOnTRGTdV1uvjcsqBzErNofgabmvXXgeNC3aCWc24J5s8KoD1KGo4uBKliMrZxp1p1WA0cd8d5AoTIlRl_tx-r4xqWsitBcgkYKw4_KQQtwOznVAs2apt_E5SdVuZZRLtSYhAAU2g/s1600/1280px-Cassandra_logo.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qZsOnTRGTdV1uvjcsqBzErNofgabmvXXgeNC3aCWc24J5s8KoD1KGo4uBKliMrZxp1p1WA0cd8d5AoTIlRl_tx-r4xqWsitBcgkYKw4_KQQtwOznVAs2apt_E5SdVuZZRLtSYhAAU2g/s200/1280px-Cassandra_logo.svg.png" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6vWNymvnh7JsvrPLb43N7yTlRuNQVqXoaAOs19OksbAgYW_w3dBsoMuwM_PHwTgXQct_PFOCMP3nMtkhrrfZtqvdc70hFy1GckcaupqR8O6jQhrTbbjetaA4Bi21MkIYkm3TDg0G3zt4/s1600/spark-logo-trademark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6vWNymvnh7JsvrPLb43N7yTlRuNQVqXoaAOs19OksbAgYW_w3dBsoMuwM_PHwTgXQct_PFOCMP3nMtkhrrfZtqvdc70hFy1GckcaupqR8O6jQhrTbbjetaA4Bi21MkIYkm3TDg0G3zt4/s200/spark-logo-trademark.png" width="200" /></a></div>
<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: justify;">
Cet évènement aura lieu le vendredi 22 Avril (le dernier jour de Devoxx France) </div>
<div style="text-align: justify;">
de <b>11:00 à 13:40</b> en salle <b>Neuilly 231-232M Lab</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="http://cfp.devoxx.fr/2016/talk/YVP-4476/Cassandra%2FSpark%20Lan%20Party">http://cfp.devoxx.fr/2016/talk/YVP-4476/Cassandra%2FSpark%20Lan%20Party</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Avec <a href="https://twitter.com/thomasrecloux">Thomas</a>, nous avons été sélectionné pour organiser cet évènement et <a href="https://twitter.com/MiraLak">Amira</a> et <a href="https://twitter.com/gdhordain">Gautier</a> se joignent à l'équipe pour nous filer un coup de main. Merci à eux!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
J'ai eu la chance de pouvoir participer à l'organisation de la Cassandra Lan party à Devoxx France en 2012, lors de la première édition. Nous avions réussi à créer un cluster Cassandra de 36 noeuds avec les machines des participants. Si vous voulez en savoir plus, le récit de cette précédente édition se trouve ici : <a href="http://www.unchticafe.fr/2012/04/histoire-dune-cassandra-lan-party.html">http://www.unchticafe.fr/2012/04/histoire-dune-cassandra-lan-party.html</a></div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
C'est quoi une Cassandra / Spark Lan party?</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6eBrUoS9TLf3oPafeZGCSdn8QdhfnkpKnIz3N4VRFturdK7h69AEwPLqqeGFe4loSMqI3lIlE0BI_Yy__ooqqNBwIJUR-RYIDq7kOp-gNZmujuzhHez4SgRFPNfCwAqrgW9IiKNlBbwU/s1600/lanparty4bg.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6eBrUoS9TLf3oPafeZGCSdn8QdhfnkpKnIz3N4VRFturdK7h69AEwPLqqeGFe4loSMqI3lIlE0BI_Yy__ooqqNBwIJUR-RYIDq7kOp-gNZmujuzhHez4SgRFPNfCwAqrgW9IiKNlBbwU/s320/lanparty4bg.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Cette fois-ci nous reprenons le concept initial de la Cassandra Lan party : </div>
<div style="text-align: justify;">
- Créer un réseau avec les machines des participants </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- Créer un cluster Cassandra</div>
<div style="text-align: justify;">
- Manipuler des données sur le cluster</div>
<div style="text-align: justify;">
- Jouer avec le cluster</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
et en y rajoutant :</div>
<div style="text-align: justify;">
- Créer un cluster Spark</div>
<div style="text-align: justify;">
- Executer des jobs Spark sur le cluster</div>
<div style="text-align: justify;">
- Exécuter des jobs Spark sur le cluster qui jouent avec le cluster Cassandra</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: left;">
Si vous venez à Devoxx France et souhaitez découvrir Cassandra et Spark par la pratique, cet évènement est fait pour vous. </div>
<div style="text-align: left;">
<br /></div>
<h2 style="text-align: left;">
Pourquoi y participer?</h2>
<div style="text-align: left;">
- Parce que vous ne connaissez pas Cassandra</div>
<div style="text-align: left;">
- Parce que vous ne connaissez pas Spark</div>
<div style="text-align: left;">
- Parce que vous ne connaissez pas Cassandra et Spark</div>
<br class="Apple-interchange-newline" />- Parce que vous connaissez Cassandra<br />
- Parce que vous connaissez Spark<br />
- Parce que vous connaissez Cassandra et Spark<br />
<br />
- Parce qu'une Lan party c'est fun.<br />
- Parce qu'il y a un record du monde de 36 noeuds à battre<br />
- Parce que vous voulez faire partie de l'histoire<br />
<br />
Ok je m'emballe.<br />
<h2 style="text-align: left;">
De quoi avez-vous besoin?</h2>
- votre ordinateur portable<br />
- un Jdk 1.8 d'installé si vous voulez gagner du temps<br />
- l'adaptateur ethernet de votre ordinateur (comme pour les Mac Book Pro récents par exemple...). Nous n'utiliserons pas de wifi mais un réseau filaire qui sera créé pour l'occasion.<br />
- un cable RJ45 si vous en avez un<br />
- votre bonne humeur<br />
<br />
Pour le reste, on s'occupe de tout! Les valises sont prêtes.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs7Nd5lqLgsuNXk_2bmfUNC3qUzqAdiUjhOxwX-XJiOy8xhSXoQ3TM8deEuPu-ntS3xWRsJJ50cjCzl8esX3XzwDrSmHDXBQeK3NcEzh30snap3Rd7Q7DwQ7st2BsZR7ajEMIXbqFCu_Q/s1600/IMG_4901.jpg" imageanchor="1"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs7Nd5lqLgsuNXk_2bmfUNC3qUzqAdiUjhOxwX-XJiOy8xhSXoQ3TM8deEuPu-ntS3xWRsJJ50cjCzl8esX3XzwDrSmHDXBQeK3NcEzh30snap3Rd7Q7DwQ7st2BsZR7ajEMIXbqFCu_Q/s320/IMG_4901.jpg" width="240" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
A Vendredi!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Amira/Gautier/Thomas/Jérémy</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-4119583874959957708.post-49513348166625398672016-04-14T12:03:00.001+02:002016-04-15T14:13:24.557+02:00Devoxx France Night Run<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://adalidgear.com/wp-content/uploads/2015/03/night-run-tips-dark-hydration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://adalidgear.com/wp-content/uploads/2015/03/night-run-tips-dark-hydration.png" height="190" width="400" /></a></div>
<br />
<br />
<br />
<div style="text-align: center;">
Il y aura donc bien un "Night Run" à Devoxx France : </div>
<div style="text-align: center;">
<a href="http://cfp.devoxx.fr/2016/talk/HZX-2594/Devoxx_France_Night_Run_">http://cfp.devoxx.fr/2016/talk/HZX-2594/Devoxx_France_Night_Run_</a></div>
<br />
English version below<br />
<h2 style="text-align: left;">
C'est quoi un "Devoxx France Night Run"?</h2>
<div>
C'est simplement de se regrouper pour aller faire un footing ensemble après une bonne grosse journée de conférence. On peut être geek et aimer la course à pied!<br />
<br /></div>
<h2 style="text-align: left;">
Quand?</h2>
<div>
Ca sera Jeudi soir. Départ à 20h en tenue de running.<br />
<br /></div>
<h2 style="text-align: left;">
Où?</h2>
<div style="text-align: justify;">
Le point de rendez-vous pour le départ du footing se fera à l'accueil de Devoxx France au Palais des congrés (à côté du vestiaire et de l'endroit où vous avez retiré votre badge).<br />
<br /></div>
<h2 style="text-align: left;">
Quelle distance?</h2>
<div style="text-align: justify;">
Une boucle d'approximativement 5km sera prévue à un rythme cool. L'idée, c'est de s'aérer la tête, pas de faire une compétition. Les plus motivés pourront continuer le footing après la première boucle.<br />
<br /></div>
<h2 style="text-align: left;">
Comment?</h2>
<div style="text-align: justify;">
Les dernières conférences de la journée se terminent à 19h25. Vous aurez donc le temps de vous changer avant le départ (dans les toilettes si vous le souhaitez ou à votre hôtel si vous avez le temps).</div>
<div style="text-align: justify;">
Les organisateurs m'ont confirmé que les vestiaires de Devoxx France sont ouverts jusqu'à 22h30. Vous pourrez y laisser vos affaires pendant le footing et les récupérer à la fin de celui-ci.<br />
<br /></div>
<h2 style="text-align: justify;">
Inscription?</h2>
<div>
un doodle a été créé : <a href="http://doodle.com/poll/dfhxtmprfzisrbff">http://doodle.com/poll/dfhxtmprfzisrbff</a> . L'inscription n'est pas obligatoire mais permettra d'avoir une idée du nombre de participants à attendre avant le départ.</div>
<div>
<br /></div>
<h2 style="text-align: left;">
Social?</h2>
<div style="text-align: justify;">
Un club <a href="https://www.strava.com/">Strava</a> a été créé pour l'occasion. N'hésitez pas à rejoindre le club et à partager la trace du footing : </div>
<div style="text-align: justify;">
<a href="https://www.strava.com/clubs/devoxxfrancenightrun2016">https://www.strava.com/clubs/devoxxfrancenightrun2016</a></div>
<div style="text-align: justify;">
<br /></div>
<div>
<br /></div>
<h2 style="text-align: left;">
English version</h2>
<div>
<h2>
What is a"Devoxx France Night Run"?</h2>
<div>
It's simply a run together after a big conference day. Being geek does not stop to make a bit of sport.<br />
<br /></div>
<h2>
When?</h2>
<div>
It will be on Thursday evening. Start at 8:00PM in running attire.<br />
<br /></div>
<h2>
Where?</h2>
<div>
The meeting spot will be at the Devoxx France reception at the Palais des congrés (close to the cloakroom).<br />
<br /></div>
<h2>
Which distance?</h2>
<div style="text-align: justify;">
A loop of 5km at a cool pace. The idea is to get a bit of fresh air and not to run for a competition. The most motivated are free to continue after the first loop.<br />
<br /></div>
<h2>
How?</h2>
<div style="text-align: justify;">
The last conferences of the day end at 7:25PM. You will have time to change your clothes before the start (in the rest room if you want or at your hotel is you have enough time).</div>
<div style="text-align: justify;">
The conference organisers confirmed that the cloakroom is opened till 10:30PM. You can leave your things there during the run.<br />
<br /></div>
<h2 style="text-align: justify;">
Registration?</h2>
<div>
Here is the doodle link : <a href="http://doodle.com/poll/dfhxtmprfzisrbff">http://doodle.com/poll/dfhxtmprfzisrbff</a> . The registration is not mandatory but it will give an idea of the number of attendees. </div>
</div>
<div>
<br /></div>
<div>
<h2>
Social?</h2>
<div style="text-align: justify;">
A <a href="https://www.strava.com/">Strava</a> club has been created for the event. Feel free to join the club and to share your run afterwards : </div>
<div style="text-align: justify;">
<a href="https://www.strava.com/clubs/devoxxfrancenightrun2016">https://www.strava.com/clubs/devoxxfrancenightrun2016</a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A bientôt!</div>
<div style="text-align: justify;">
<br /></div>
<div>
<br /></div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4119583874959957708.post-52946138430341965942014-09-22T11:09:00.000+02:002014-09-22T11:09:41.830+02:00A remote retrospective Story<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
<h2>
a bit of context...</h2>
I'm working as a remote ScrumMaster since approximatively 2 years with the same team. This team is a full remote team even if most of the times we are doing our sprint planning together IRL. I went with my product owner to setup a new team in Vietnam six months ago. This new team is a bit different because, compared to "mine", all team members of the new team are working together on the same office.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It was quiet challenging because it was planned to make both teams working on the same project and same code base.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Now, 6 months and a product release together later, we decided to make a retrospective with the two teams. The goal was to find out what was working and what was not regarding the collaboration with the two teams.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
So I was responsible to setup this retrospective.<br />
<br /></div>
<div style="text-align: justify;">
<h2>
the setup</h2>
I wanted to port my usual local retrospective format based on sticky note with a whiteboard using good/bad/questions/suggestions areas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
My needs : </div>
<div style="text-align: justify;">
- a good communication tool.</div>
<div style="text-align: justify;">
- a good virtual white board.</div>
<div>
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
We were used to use <a href="http://www.google.com/+/learnmore/hangouts">Google Hangout</a> so we sticked with it as our communication channel. The only problem is the 10 slots limitation that i will have to deal with.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
After some googling, i found that google drawing could be my virtual white board. I got some inspiration from here : <a href="http://www.iliokb.com/2013/02/facilitating-retrospectives-with-remote.html">http://www.iliokb.com/2013/02/facilitating-retrospectives-with-remote.html</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
So we did end up with this kind of setup and a drawing is better than a long speech :</div>
<div style="text-align: justify;">
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLxZXl4-Fw_Iqrg-N02lDFCQmSBoDnCorYhAFjD1CEMZ6MLRo-VbcnvexGn5ya65K9lyW4B7Pdzxy29JClQeN4_p6-zbWaS05GKUB_B0wPhSwHU8az8Azn6yoblP7d57i52wbHojP-efM/s1600/Dessin+sans+titre+(1).png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"><img alt="" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLxZXl4-Fw_Iqrg-N02lDFCQmSBoDnCorYhAFjD1CEMZ6MLRo-VbcnvexGn5ya65K9lyW4B7Pdzxy29JClQeN4_p6-zbWaS05GKUB_B0wPhSwHU8az8Azn6yoblP7d57i52wbHojP-efM/s1600/Dessin+sans+titre+(1).png" height="480" title="restrospective setup" width="640" /></a><br />
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Due to the quality of the internet connection of the green team and to the google hangout limitation, we decided to use the green team scrumMaster as a proxy of the other teams member and to use only one google hangout slot for the green team.</div>
<div style="text-align: justify;">
<br />
<br />
<h2>
The plan</h2>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Here is what I did :</div>
<div style="text-align: justify;">
- the week before : </div>
<div style="text-align: justify;">
</div>
<ul>
<li>fix the date, not so easy to find a slot which everybody.</li>
</ul>
<br />
<div style="text-align: justify;">
- few days before : </div>
<div style="text-align: justify;">
</div>
<ul>
<li>had setup of the google drawing white board, made some try.</li>
<li>talked to the product owner to explain how it will work.</li>
<li>talked to the other scrumMaster to explain how it will work.</li>
</ul>
<br />
<div style="text-align: justify;">
- the day before :</div>
<div style="text-align: justify;">
</div>
<ul>
<li>sent an email to all participants to remind the goal and scope of the retrospective and to ask them to start to think about that.</li>
<li>talked again with the other ScrumMaster. As he acted as team's proxy, we discussed together to try to prepare that as better as we can.</li>
</ul>
<div>
- the D day :</div>
<div>
<ul>
<li>verified that everybody was able to join the shared google drawing.</li>
<li>just dot it!</li>
</ul>
<div>
<br />
Here is the result :</div>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLxZXl4-Fw_Iqrg-N02lDFCQmSBoDnCorYhAFjD1CEMZ6MLRo-VbcnvexGn5ya65K9lyW4B7Pdzxy29JClQeN4_p6-zbWaS05GKUB_B0wPhSwHU8az8Azn6yoblP7d57i52wbHojP-efM/s1600/Dessin+sans+titre+(1).png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIv2PFoSvP2jEeHv11HLbSo1svoQyYz3hjIOzT7TWR8cH4ZXGF-zYJiCh5O8a2J6YDISojwwCLD0TtfS9TAhANGUhCjoInwCC6VIZ0jfS0wU3M2napGq8M-KVq3zOUVyAcediJaPQLmto/s1600/Remote+Retro+(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIv2PFoSvP2jEeHv11HLbSo1svoQyYz3hjIOzT7TWR8cH4ZXGF-zYJiCh5O8a2J6YDISojwwCLD0TtfS9TAhANGUhCjoInwCC6VIZ0jfS0wU3M2napGq8M-KVq3zOUVyAcediJaPQLmto/s1600/Remote+Retro+(1).png" height="380" width="640" /></a></div>
<br /></div>
<br />
<div style="text-align: justify;">
It was fun to hear when everybody was filling the white board "hey, who has stoled my sticky?" ;-)<br />
<br />
<h2>
the retro of the retro</h2>
</div>
<div style="text-align: justify;">
Bad :</div>
<div style="text-align: justify;">
<br />
<ul>
<li>Hangout Limitation (max 10 slots)</li>
<li>The scrumMaster of the green team was the proxy of the whole teams. It was ok because he was already used to do that for others meeting we already had. Anyway It would have been better to have the whole green team at the same "level"</li>
</ul>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
good :</div>
<div style="text-align: justify;">
<br />
<ul>
<li>It worked well! Using Google drawing as a virtual shared white board was really successful : simple and efficient.</li>
<li>It's now decided to do that one time per release.</li>
</ul>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Notes : </div>
<div style="text-align: justify;">
<br />
<ul>
<li>the virtual retrospective was no longer than the local retrospective i was used to do locally.</li>
<li>There was more preparation from me compared to a local retrospective.</li>
<li>I had to allocate more time than initially planned to allow everybody to fill the google drawing.</li>
</ul>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-10141481705896280752014-04-02T15:25:00.000+02:002015-03-18T13:59:37.819+01:00Home working in IT - 2 years later<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzDAMa9G2JUeTmO3r1Rimy9oBFwjLIYUz8W913Vqere9KecjAAh9jMbnLKLQcy4oIg2-pyEUv0YWf81lIsTdKLrU4P9moCncIGL0nkgGAqgEXQIbtDjVLHYKZ70fLPNNNZmDu02pLAyIE/s1600/working_from_home_540+(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzDAMa9G2JUeTmO3r1Rimy9oBFwjLIYUz8W913Vqere9KecjAAh9jMbnLKLQcy4oIg2-pyEUv0YWf81lIsTdKLrU4P9moCncIGL0nkgGAqgEXQIbtDjVLHYKZ70fLPNNNZmDu02pLAyIE/s1600/working_from_home_540+(1).png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It has been a long time since i have written my last post. I'm now back to write a new one because i still have a lot of questions around my way of life and the home working. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It looks like home working raise a lot of questions and really start to be trendy. perhaps one the new ways of working...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
There is already an article where i gave my first impression about the home working after few months here : <a href="http://www.unchticafe.fr/2012/10/yes-i-code-in-underwear-home.html">http://www.unchticafe.fr/2012/10/yes-i-code-in-underwear-home.html</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I'll try to take a step back and to give some insight about me and the home working with nearly two years experience.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
So i'm sure there are already a lot of questions thanks to the previous post : </div>
<ul>
<li style="text-align: justify;">Do i still work in underwear or am i now at the next level and now working nude and do i stop to shave me to look like a bear?</li>
<li style="text-align: justify;">What am I doing now?</li>
<li style="text-align: justify;">Do I travel a lot?</li>
<li style="text-align: justify;">Am I out of my local world and am i only living connected?</li>
<li style="text-align: justify;">Do I improve my english within the past two years?</li>
<li style="text-align: justify;">Am I still happy to work like that?</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Code in underwear?</h2>
<div style="text-align: justify;">
To answer it quickly : no and no, i always work dressed. Even if ok, it's possible that i checked mails or did few things before taking a shower and being dressed. Why is it stable? Simply because I have to drive kids at school before starting to work. As it's not sure to go to school in underwear is acceptable, i don't want to take any risk. More seriously, in my head, it's a good way to split things. before being dressed ans washed, I don't have start my "working day" but after it's the case.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
An interesting story about writing my previous post "Yes, I code in underwear @home" is that i was not hoping to find myself associated at the first place on google search results when you're searching for "code underwear home" : <a href="https://www.google.com/#q=code+underwear+home">https://www.google.com/#q=code+underwear+home</a> . I don't know if it's a good or bad thing. Let's say it's "interesting" ;-).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
About the shaving, even if i participated to the <a href="http://fr.movember.com/en/">Movember</a> last year which was already a challenge to not divorce, I'm still trying to not look like a bear. </div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
What am i doing now?</h2>
<div style="text-align: justify;">
I'm still working for the same customer within the same team. Topics and team members changed a bit. I would say everything is still the same and everything has changed. Let me try to explain that. The big context is still the same : I'm working from home for the same customer with great guys and still doing crazy stuff. Appart from that, everything changed, not exactly the same guys and doing projects after projects which are all totally different.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I've got now two hats. On the one hand, I'm the "official" remote ScrumMaster of the team. I would never have think what a remote ScrumMaster could have been and what it could have done before working in this context. This topic can be a full post. It's not the goal of this one. On the other hand i'm a still team member of the team.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Do I travel a lot?</h2>
<div style="text-align: justify;">
As i'm working for a remote company, a good question could be "does it imply a lot of travel?"</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I'm working within a distributed team but with one particularity (which make the whole thing possible in our context in my opinion) : we are doing local sprint planning each 3 weeks which mean meeting each other IRL. Most of the time, it's about one day in Lille or in London which does not make a lot of difference thanks to the Channel. So these days, i'm out for the whole day. I'm leaving home a bit early and return in the evening not so late. It has not a big impact with my family. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In addition to that, four times per year we are doing the sprint planning where my customer is, in Switzerland. In this case, it's about a short and "extreme" week in there where we are doing sprint planning, <a href="http://schlosslisessions.com/">conference</a>, <a href="http://en.wikipedia.org/wiki/Hackathon">hackaton</a>, <a href="http://www.strava.com/activities/67540647">runs in the mountain</a>, meetings where it's easier to be in the same room, drinking beer (where it's easier to be in the same room too even if we tried some "friday beer hangout").</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In my opinion, it's really a good balance between the possibility to be very available and flexible when i'm working from home for my family and the fact that i let my wife managing the family when i'm not there (It's really my vision, you can disagree or have others).</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Am I still connected to my local (IT) world?</h2>
<div style="text-align: justify;">
I think it easy to be disconnected from your "local (IT) world" when working at home without any interest in it because of you're not part of it... So you can start to loose friends and colleagues near you which is not good!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
So, to fight against that, i'm still part of the <a href="http://chtijug.org/">Ch'ti JUG</a>, the local Java User group where we organize meetup about Java and its very large ecosystem which is still cool. We recently organized a <a href="http://www.devoxx4kids.org/">Devoxx4Kids</a> session which is about sharing our passion for programming with kids. It was awesome to see the happiness on the kid's faces when programming a <a href="http://www.aldebaran.com/en/humanoid-robot/nao-robot">Nao</a> or <a href="http://www.lego.com/en-us/mindstorms/">a mindstorm</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In addition to that, I'm giving scrum course at the university by helping student in their project as a Scrum coach (I hate this title!).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It's my way to keep in touch with my local world.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Do I improve my english within the past two years?</h2>
<div style="text-align: left;">
<span style="text-align: justify;">I'm really the worst person to judge it. I would say yes even if it's sure i don't have a "good english". I've got a pragmatic english to make things working every day. That's it. Appart from that, i'm still interesting in learning new words thanks to my native speaker colleague, especially </span>insults or expression of everyday life!</div>
<div style="text-align: left;">
<br /></div>
<h2 style="text-align: left;">
<span style="text-align: justify;">Am I still happy to work like that?</span></h2>
<div style="text-align: justify;">
To make it short : What! Already two years! </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Thanks to this way of working, i'm now a running and trail running addict. It's so easy to be able to run at lunch from my home/office. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It's still so cool to be so efficient at work and to be so available for your kids.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Even if there is still a difference between the personal life and the working life, I've got now more international friends rather than international colleagues.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On the family side, it's still interesting to see that rules like when the door is closed, i'm working and it's possible that i will not respond if you knock on the door are still in place and still working fine. It's interesting to see that the kids have fully understand this way of working. They are able to talk about my office and my bedroom like two different things whereas it's the same room in my house ;-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I think nobody can say if he will be able to work from home until he's doing it. It works for me and it's cool.</div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-30377112015551225362013-06-25T16:55:00.001+02:002013-06-25T17:26:46.860+02:00cassandra-unit 1.2.0.1 is out : CQL3 script support and spring integration<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
I'm pleased to announce the release of <a href="https://github.com/jsevellec/cassandra-unit/">cassandra-unit</a> 1.2.0.1</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Just as a reminder, cassandra-unit is a library to help you to start and load different type of dataset into an embedded <a href="http://cassandra.apache.org/">Cassandra </a>instance. Basically, the goal is to simplify the implementation of your unit tests in java.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
There are 2 main new features in this release :</div>
<ul style="text-align: left;">
<li style="text-align: justify;">the support of <a href="http://www.datastax.com/docs/1.1/references/cql/index">CQL3</a> script as a standard cassandra-unit dataset.</li>
<li style="text-align: justify;">the spring extension of cassandra-unit.</li>
</ul>
<h2 style="text-align: left;">
CQL3 support : embracing the new datamodel face of Cassandra</h2>
<div>
<div style="text-align: justify;">
As you may know (or not ;-)) , the 1.2 version of Cassandra was released with major changes and a new remote protocol : <a href="http://www.datastax.com/dev/blog/binary-protocol">binary CQL protocol</a>. The main idea is with with new protocol is to get rid of some limitation with the Thrift protocol.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
So with this new protocol come : </div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">a new version of the CQL language : <a href="http://www.datastax.com/docs/1.1/references/cql/index">CQL3</a></li>
<li style="text-align: justify;">a new java client driver : <a href="https://github.com/datastax/java-driver">java-driver</a> which appears to be the preferred way to query a <a href="http://cassandra.apache.org/">cassandra</a> instance. This driver is supported by the <a href="http://www.datastax.com/">Datastax</a> team (the company behind Cassandra)</li>
<li style="text-align: justify;">a new datamodel which is more "relational" oriented rather than a key/columns model (even if the storage is always based on this model). There is a lot of blog talking about that better than me :</li>
<ul>
<li style="text-align: justify;"><a href="http://www.datastax.com/dev/blog/cql3-for-cassandra-experts">http://www.datastax.com/dev/blog/cql3-for-cassandra-experts</a></li>
<li style="text-align: justify;"><a href="http://www.datastax.com/dev/blog/thrift-to-cql3">http://www.datastax.com/dev/blog/thrift-to-cql3</a></li>
</ul>
</ul>
<div>
<div style="text-align: justify;">
So, as a first step this new release of cassandra-unit provide the ability to use CQL3 script as dataset to load data into your cassandra instance (embedded or not).</div>
</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
It implied internally some big modifications using the java-driver instead of Hector for the CQL3 part.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
here is an example of use : </div>
</div>
<div>
<div style="text-align: justify;">
simple.cql : </div>
</div>
<script src="https://gist.github.com/jsevellec/5858827.js"></script>
<br />
<div>
</div>
<div>
<div style="text-align: justify;">
CQLScriptLoadTest.cql : </div>
</div>
<script src="https://gist.github.com/jsevellec/5858799.js"></script>
<br />
<div>
<br />
thanks <a href="https://github.com/marcinszymaniuk">marcinszymaniuk</a> for your contribution!</div>
<h2 style="text-align: left;">
Spring extension </h2>
<div>
<div style="text-align: justify;">
The other interesting feature provided in this release is the spring integration. I mean the ability to to use cassandra-unit with the Spring TestContest framework based on annotation.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
As documented <a href="https://github.com/jsevellec/cassandra-unit/wiki/How-to-use-it-in-your-code">here</a>, there was 3 ways to integrate cassandra-unit in your tests :</div>
<ul style="text-align: left;">
<li style="text-align: justify;">the native approach</li>
<li style="text-align: justify;">using the AbstractCassandraUnitTestCase or AbstractCassandraUnitCQLTestCase</li>
<li style="text-align: justify;">using JUnit4 @Rule</li>
</ul>
<div>
<div style="text-align: justify;">
The cassandra-unit-spring integration provide a new way to integrate cassandra-unit in your unit tests.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
The documentation about the spring integration is <a href="https://github.com/jsevellec/cassandra-unit/wiki/Spring-for-Cassandra-unit">here</a></div>
</div>
<div>
<br /></div>
<div>
Here is a small example : </div>
<div>
<br /></div>
<div>
simple.cql : </div>
<script src="https://gist.github.com/jsevellec/5858827.js"></script>
<br />
<div>
SpringCQLScriptLoadTest.java : </div>
<script src="https://gist.github.com/jsevellec/5858988.js"></script>
<br />
<div>
<br /></div>
<div>
Thanks <a href="https://twitter.com/obazoud">Olivier</a> for your contribution!</div>
<div>
<br /></div>
cassandra-unit is available through <a href="http://repo1.maven.org/maven2/org/cassandraunit/cassandra-unit/">maven public repo</a> and source code is available on <a href="https://github.com/jsevellec/cassandra-unit">github</a> and the project is licensed under LGPL V3.0<br />
<br /></div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-72532935257690470652013-05-14T15:09:00.000+02:002013-05-14T15:09:07.397+02:00The Next Step<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Avez-vous déjà assisté à une réunion où plein de belles décisions sont prises. La réunion a débordée un peu... les participants sont pressés et fatigués... La réunion se termine... Chacun repart de son côté et retourne a ses occupations puis.... puis... puis... plouf:</div>
<br />
<div style="text-align: center;">
Rien ne se passe. </div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
J'ai déjà assisté à quelques de ces reunions... Si toi aussi tu te sens concerné tu peux lire la suite de l'article sinon... heu... tu peux aussi lire le suite de l'article :-)</div>
<br />
Une seule solution pour te sauver :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitUOutOK5KbLWqMIlHrQpkdFQ7RnZ2bzsDt__4_-S9tEoIS-dK5GDyRKKsI_8qpjnoGzye_YJ1qllejbiXFFNb87z98vi7z5sUMxdS3fEN7ejDsiRgZ_IfjvsnQ2-GxbBOIb6aNd8r9ww/s1600/next+step.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitUOutOK5KbLWqMIlHrQpkdFQ7RnZ2bzsDt__4_-S9tEoIS-dK5GDyRKKsI_8qpjnoGzye_YJ1qllejbiXFFNb87z98vi7z5sUMxdS3fEN7ejDsiRgZ_IfjvsnQ2-GxbBOIb6aNd8r9ww/s320/next+step.jpg" width="320" /></a></div>
<br />
<br />
<div style="text-align: justify;">
L'idée derrière le next step est de ne pas attendre après avoir décidé quelque chose pour commencer sa mise oeuvre. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il faut battre le fer tant qu'il est encore chaud!</div>
<div style="text-align: justify;">
Il faut amorcer la pompe!</div>
<div style="text-align: justify;">
Il faut mettre la machine en route!</div>
<div style="text-align: justify;">
Il faut passer la première!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
C'est marrant de voir que plein d'expressions sont "Next Step"!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A minima, il s'agit juste de définir la prochaine étape après une décision : quoi/qui/quand. Il n'est pas nécéssaire que cette prochaine étape soit conséquente. Plus elle est petite moins elle prendra de temps. Une fois de plus l'idée est d'amorcer le travail.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La difficulté du next step est qu'à la fin d'une réunion intense, les participants oublie/n'ont pas forcément envie de penser au next step.</div>
<br />
<h2 style="text-align: left;">
Ok et après je fais quoi?</h2>
Si tu as compris, c'est très simple, il faut définir le next step du next step!<br />
<br />
<h2 style="text-align: left;">
Tips :</h2>
<br />
<ul style="text-align: left;">
<li style="text-align: justify;">Toujours prévoir un peu de temps à la fin d'une réunion pour définir le next step.</li>
<li style="text-align: justify;">Parfois il s'agit s'implement de poser la question (parfois suivi d'un blanc) : "Ok, super, on commence par quoi?".</li>
<li style="text-align: justify;">Si le next step peut se faire dans la foulée ou simplement être commencé, c'est encore mieux.</li>
<li style="text-align: justify;">Parfois, résumer et reformuler le contenu de ce qui vient d'être d'être décidé et des actions liées suffit au next step.</li>
</ul>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ce qui est sympa avec le next step, c'est qu'il est simple à mettre en oeuvre. En revanche, il ne faut pas l'oublier!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Après avoir lu cet article, tu es officiellement "Next Step Certified". Ce qui te donne le droit d'utiliser et de former au Next Step! Quel chanceux tu fais!</div>
<div style="text-align: justify;">
<br /></div>
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4119583874959957708.post-82462885321984684552012-10-22T11:25:00.003+02:002012-10-24T15:54:33.011+02:00Yes, I code in underwear @home<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="text-align: justify;">As requested by my foreign colleagues/friends, Here is a translation of </span><a href="http://www.unchticafe.fr/2012/09/oui-je-code-en-slip-home.html" style="text-align: justify;" target="_blank">this article</a><span style="text-align: justify;"> in English with a bonus at the end.</span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I'm currently on a long mission to a foreign customer that I do at home. This is usually called the "home working".</div>
<div style="text-align: justify;">
<br /></div>
<div>
<div style="text-align: justify;">
To reassure the sensitive souls, I do not really code in underwear, it's a picture. I could code in underwear :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I had not necessarily planned to write an article about this way of working but whenever I talk about the subject with friends or acquaintances, they feel curious and full of questions. I think that if it so interested, it means that i have to share my experience.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Here are the questions that come up most often:</div>
<ul>
<li style="text-align: justify;">It's not hard work alone all the time at home?</li>
<li style="text-align: justify;">Me, I'll probably distracted. You can stay focused and be effective?</li>
<li style="text-align: justify;">How do you do with the family?</li>
</ul>
<div style="text-align: justify;">
I will try to answer these questions by offering my thin feedback on the subject.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I said I'm working at home today because it is that the mission wants. It was not a desire on my part, it is an just an opportunity.</div>
<br />
<h2>
The beginning</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRj2jazgR9P9IBQyNP2vrrg1UuvEbs2XcBsQ9_zn4Z1hGUfCp12jCsIq8d9ElYNa_ZZuPVDCCTW9dxtfG2XLUNADfbyj0wg1bwu0hDFASoDveBAFMXnxYWXNL6IKCAkux1ma2Mhpd4BM/s1600/matrix.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRj2jazgR9P9IBQyNP2vrrg1UuvEbs2XcBsQ9_zn4Z1hGUfCp12jCsIq8d9ElYNa_ZZuPVDCCTW9dxtfG2XLUNADfbyj0wg1bwu0hDFASoDveBAFMXnxYWXNL6IKCAkux1ma2Mhpd4BM/s320/matrix.png" width="320" /></a></div>
<div>
<br /></div>
<div style="text-align: justify;">
It all began with an email, which read quickly can give something like :</div>
<div style="text-align: justify;">
mission, overseas customer, all in English, home working, scrum, team with experimented people, moving every 3 weeks.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I quickly wanted to know more because I was just available and then after some discussion : GO. There is a part of unknown to be accepted, it is like that, that's life. You have to trust.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It's Tuesday I was told that begins on Thursday through skype Thursday morning.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
General warning: how I'm going to organize the house: -)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I do not need a lot of thing to work, a piece of chair, a piece table, a laptop, internet and a bit of calm. It is just on this point that I must organize myself a little because at home I'm not alone, there are wife and children. I did not want to disturb or to feel that i disturb and vice versa.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I need a "quiet corner". It is not possible for me to have a room dedicated to serve me office. So I created a corner in my bedroom in front of the window. Hop, the bedroom will be the day my office.</div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE6HQXqAwu7u8w0-d5eJhTbkK8YgVOK-05oVurkDsNrsFJv2oWYdpHIPrVox_pd1WKdm9uTDNLCZYLfAJDfA_bOQXbOCBVQy8PjdbmgjmkpqeQBqMadquPdXKTAJx_zinFJWMZHD7A-aU/s1600/photo+2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE6HQXqAwu7u8w0-d5eJhTbkK8YgVOK-05oVurkDsNrsFJv2oWYdpHIPrVox_pd1WKdm9uTDNLCZYLfAJDfA_bOQXbOCBVQy8PjdbmgjmkpqeQBqMadquPdXKTAJx_zinFJWMZHD7A-aU/s200/photo+2.JPG" width="200" /></a></div>
<br />
<div style="text-align: justify;">
Wednesday will be devoted to me set up an office in my bedroom. And then I get an email with all the access client (vpn, mail, forge, ....). Default: it works, I have access to everything, I have the right to do everything ...No, no, this is not a dream, it is sometimes ;-).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Thursday morning, it's started : "Hello, good morning guys!"<br />
<br /></div>
</div>
<h2>
Daily : "We are quite flexible"</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDcdJJWoac1aZCtuBXAtuBO85E1dXEibwifwiWFKJbv_b7AdA_kMbd6BtDVWImRUz54BKF0szfYDV4irptyoAN5jj7yLPcJ05UfMkaRM2POQBaWtM3ZvEUfcNMlgbGSgFQKNOFERYiGE/s1600/clavier+souple.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDcdJJWoac1aZCtuBXAtuBO85E1dXEibwifwiWFKJbv_b7AdA_kMbd6BtDVWImRUz54BKF0szfYDV4irptyoAN5jj7yLPcJ05UfMkaRM2POQBaWtM3ZvEUfcNMlgbGSgFQKNOFERYiGE/s200/clavier+souple.jpg" width="200" /></a></div>
<div>
<span style="text-align: justify;">I find that I'm part of a fairly large team including members of different nationalities which are working at home like me. Even the ScrumMaster is a freelance working like all others!</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Shortly after starting, I talk with another team member. As I discovered how things work, I foolishly talked about the scheduling, "online", time everything. I find myself stupid asking questions starting with "what if" and all the answers were: "we are quite flexible" ... The idea is really to "do the job" and having to take time off to go or if it does not really matter. Everything is based on trust.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
That it brings me daily: real flexibility. It is nice to occasionally pick up my first daughter at school, be able to go to an appointment in people / shops / institutions whose only opening hours are 9:00-12:00/14:00-18:00. (finally, it is the things that I enjoy rarely but it's nice to know that you can do).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It is also nice to be able to do some sport start at home and take it easy a real shower in my bathroom. I do not need to take <a href="http://www.urbandictionary.com/define.php?term=Portuguese%20shower">portuguese shower</a> (I never practiced but it exists ;-))</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Even more rarely, there is the nice side to occasionally to have Rolland Garros or the London Olympics in a corner of the room.</div>
<div>
<h2 style="text-align: justify;">
I work alone at home like a bear?</h2>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://bdm.typepad.com/photos/uncategorized/2008/10/31/instinct_tueur.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://bdm.typepad.com/photos/uncategorized/2008/10/31/instinct_tueur.jpg" width="228" /></a></div>
<div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
So yes in the morning and in the afternoon I am physically alone in my office. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In contrast: </div>
<div style="text-align: justify;">
<ul>
<li>I am virtually overconnected with the team I work with. Skype is the tool I use to communicate in real time either through chat, audio or video.</li>
<li>10:00AM is the hour of our daily scrum meeting. Screen sharing + conf call where I talk to the team.</li>
<li>There is a global chat in which each team puts his mood, says what he does in or out of work, this brief provides a sense of community and closeness.</li>
<li>We meet every every 3 weeks to complete the sprint (review ans restrospectrive) and restart a sprint (sprint planning, planning poker, ...). These are one or two working days pretty intense because it concentrates all the Scrum rituals but it also gives the opportunity to see, discuss, exchange, joking and to take a real coffee break with real colleagues; -).</li>
</ul>
</div>
<div style="text-align: justify;">
This is, to justify the side "I'm not alone when I work at home" but it's true that I do not see real people "IRL" ;-). So why to avoid finishing as a bear coding in my bedroom :</div>
<div style="text-align: justify;">
<ul>
<li>I often see friends and colleagues to eat lunch with them.</li>
<li>I am part of <a href="http://chtijug.org/">Ch'ti JUG</a> , which allows me to cross the world and interact with other fans in the region.</li>
<li>I go to conferences like <a href="http://www.devoxx.com/display/DV12/Home">Devoxx</a> or <a href="http://translate.googleusercontent.com/translate_c?act=url&depth=1&hl=fr&ie=UTF8&prev=_t&rurl=translate.google.fr&sl=fr&tl=en&twu=1&u=http://devoxx.fr/display/FR12/Accueil&usg=ALkJrhgHsnHltkPhtVqiSOyWgZ_s_bgVvQ">Devoxx France</a> to share with passion but also a little further.</li>
<li>I try to exile from home on Wednesday for not be shy interfere with wife and children are at home this day. I take this day to work with people who are willing to welcome me (Thanks also to <a href="https://twitter.com/ThibaudVibes">Thibaud</a> and <a href="https://twitter.com/serniclay">Antoine</a> of <a href="http://www.onyme.com/">Onyme</a> for welcoming me into their office, it was really nice, guys!) or in <a href="https://twitter.com/thomasrecloux">a friend</a> who joined me in the same home working adventure.</li>
</ul>
</div>
<div style="text-align: justify;">
I had to search long enough to find negative side but it was for my feedback to be more objective :</div>
<div style="text-align: justify;">
<ul>
<li>The coffee break is not really a coffee break. It is sometimes lacking and sometimes I look at the time, it's noon and I have not felt the need to take a coffee break. It depends.</li>
<li>My coffee machine has clearly not taken the load. I had to change :-)</li>
<li>I sometimes feel out of step with my friends and former colleagues who mostly work computer services company or with local software editor. Being freelance also participates this offset :-). It's not really a negative but I feel sometimes that I pass for an alien. The problems that we encounter everyday are no longer the same.</li>
</ul>
<h2>
Am i more or less productive?</h2>
</div>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://les-ressources-du-changement.fr/wp-content/uploads/2011/03/productivite-e1300742536300.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://les-ressources-du-changement.fr/wp-content/uploads/2011/03/productivite-e1300742536300.jpg" width="320" /></a></div>
<div>
<br /></div>
<div style="text-align: justify;">
I'm actually quite surprised when I talk about this type of work sometimes when the reaction is "uh, I'd be too tempted to be distracted and do something else." I do not know how to answer that question ... I say that in general, it's the opposite. It's probably because my job is a passion ... Rather it is my wife who set limits to stop me :-) </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I'm clearly more productive at home. I have my tools and calm. The important thing when working at home is that you can choose yourself the conditions that allow it to be productive. We add to that the fact of not having travel time to get to his workplace. We will say minium 1 hour per day back/forth. It is a real gain. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
"Anyway, I'm more productive."</div>
<div style="text-align: justify;">
<br /></div>
<div>
<h2>
Separating private life / professional life</h2>
<div style="text-align: justify;">
Not knowing this way of working, I preferred default impose a few rules in the house to separate the things and put barriers: </div>
<div style="text-align: justify;">
<ul>
<li>When I work at home, it's as if I was not at home. I'm not Tony Micelli able to take care of the house.</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgii-EWS3Q4DjrL6ospdK_WpMLgce732kHy1TSFTNhS2ClX7SiMQ28mlssCloen103Ac9yJ3Xuc4ReoohGVtrR6U2WyRwE7TkQmQT1ea6i1vV0CgdPWxYsZt1amvtolrjxzTSvd26d1mU/s1600/tony.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgii-EWS3Q4DjrL6ospdK_WpMLgce732kHy1TSFTNhS2ClX7SiMQ28mlssCloen103Ac9yJ3Xuc4ReoohGVtrR6U2WyRwE7TkQmQT1ea6i1vV0CgdPWxYsZt1amvtolrjxzTSvd26d1mU/s200/tony.jpg" width="133" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
<ul>
<li>The door to the bedroom / office represents the separation private / professional. When it is closed, do not go without knocking at the door and wait until I say it's OK. It's not that I want to play Boss inaccessible but this is the only way to predict if I'm online, perhaps with the video and I can not answer.</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnkeQYpGMgRP03mCPJgDL44CEmBcOTM-0ounXaX_3JvrRlJdb2wB7tR80QDU8hmx52W9wWXJVAUrkCYNdmwjG5YBjy4Z3tk6DQyN32PW8R6XhknMZhZGesoNATN154mJ7csRj2AfqSZw/s1600/photo+(1).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnkeQYpGMgRP03mCPJgDL44CEmBcOTM-0ounXaX_3JvrRlJdb2wB7tR80QDU8hmx52W9wWXJVAUrkCYNdmwjG5YBjy4Z3tk6DQyN32PW8R6XhknMZhZGesoNATN154mJ7csRj2AfqSZw/s320/photo+(1).JPG" width="240" /></a></div>
<br />
<div style="text-align: justify;">
So I applied these default rules within the family. It is rather funny to see how the children have experienced change and have integrated. "Dad, you're working in your office in your bedroom today?". It's also pretty funny to 04:30-05:00PM hear knock-knock and have his children come say hello after school. I began to relax the rules, but it comes from me. Finally let's be clear, I'll never compete with Tony Micelli! </div>
</div>
<div style="text-align: justify;">
<br /></div>
<div>
<h2>
A short conclusion would be fine here</h2>
</div>
<div style="text-align: justify;">
When people ask me if it's okay, I replied that:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
That's terrific!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I think that says it all. I am clearly aware that this way of working may not suit everyone and every business. In my case, it's cool.</div>
<div style="text-align: justify;">
<br /></div>
<h2>
One more thing... </h2>
<div style="text-align: justify;">
Writing this article triggered a massive release of office pictures of team member. Here is a nice sample of what can be done to work at home (thanks to them to allow me to share that!). I think but i'm not sure that there are one or two fake. It's up to you to find them ;-) :</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmHIRQF-Oyhh1oNvtEvwMw4cF3RRX3cuqLsx0HG7vNImx5rhF5-ocKzvPuBTChyphenhyphenlW8vCIBgNy-5muSTp_eoTCsUt3CEfTD3Jznb__8OogQ-LckIUF4FIuKyvHmKPb0UH9vxme4cWIigK0/s1600/photo1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmHIRQF-Oyhh1oNvtEvwMw4cF3RRX3cuqLsx0HG7vNImx5rhF5-ocKzvPuBTChyphenhyphenlW8vCIBgNy-5muSTp_eoTCsUt3CEfTD3Jznb__8OogQ-LckIUF4FIuKyvHmKPb0UH9vxme4cWIigK0/s320/photo1.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUADBKa0ZZtVWw6lIYjhDAtrB7IMjjqmMcxKS8T5Qm3y8Qua6h6_cKTQz3WBB8nAr9sivd4nf7_6vbAr6-JUbvBiK_H34y5hzy-dyyC_-GkQZW75TD3ALdu9Dkcgwxz8SaB693va6N1vY/s1600/photo10+(1).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUADBKa0ZZtVWw6lIYjhDAtrB7IMjjqmMcxKS8T5Qm3y8Qua6h6_cKTQz3WBB8nAr9sivd4nf7_6vbAr6-JUbvBiK_H34y5hzy-dyyC_-GkQZW75TD3ALdu9Dkcgwxz8SaB693va6N1vY/s320/photo10+(1).JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zWE4Z_VCEUO1txAXFWox8XpKDGuZSPJqd-hIXeR5aR0B8wLBDdmO9JTbSk3NVsrGssB55dhPJmRFoyYJi8cXDjL5jccR2PpDw2yQ88zStL2UjCDYi4ow8hHvyD3q8_-diALn3y8Ww9g/s1600/photo11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zWE4Z_VCEUO1txAXFWox8XpKDGuZSPJqd-hIXeR5aR0B8wLBDdmO9JTbSk3NVsrGssB55dhPJmRFoyYJi8cXDjL5jccR2PpDw2yQ88zStL2UjCDYi4ow8hHvyD3q8_-diALn3y8Ww9g/s320/photo11.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC4g_RqFSgtoGRjqHZYEjiPCTZG9InYbcQ7MdmcebxfMVbJvfdVJCD3YZKLRDR07cD81rjNmNN6KBuT_UVWg-cvaxNQ4EZ0M_UPPnkO_vudw-Avd5quKoWa2pT1BYYOCkk3ivkSUZi_1E/s1600/photo13.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC4g_RqFSgtoGRjqHZYEjiPCTZG9InYbcQ7MdmcebxfMVbJvfdVJCD3YZKLRDR07cD81rjNmNN6KBuT_UVWg-cvaxNQ4EZ0M_UPPnkO_vudw-Avd5quKoWa2pT1BYYOCkk3ivkSUZi_1E/s320/photo13.JPG" width="260" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCiUew2lyy9_IOKKa-ZP7rnesZjiDw8dBDgc_KuplMb5-x06TB9-w7b3W8A_wVABgZyCVJ5VIxMBNTPU_cLU38KzJGI2GXZx2I97hhObApBs-2zzr0oaJW09MT0EkXtn7qrEvhdSkHyuc/s1600/photo15.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCiUew2lyy9_IOKKa-ZP7rnesZjiDw8dBDgc_KuplMb5-x06TB9-w7b3W8A_wVABgZyCVJ5VIxMBNTPU_cLU38KzJGI2GXZx2I97hhObApBs-2zzr0oaJW09MT0EkXtn7qrEvhdSkHyuc/s320/photo15.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrm5H1FjMbWxzCtImGuUs2Jaqlp20hNad6MmT4I0QHh2nvKWy4BDSMED3RlK6uvtCaPKWVjUXh71S1Zy0DTqekXSGLizmUlmlAts69JPHHDcYfv4VhEfOHT0drRenabi-Pn_rXUD4HTlM/s1600/photo16.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrm5H1FjMbWxzCtImGuUs2Jaqlp20hNad6MmT4I0QHh2nvKWy4BDSMED3RlK6uvtCaPKWVjUXh71S1Zy0DTqekXSGLizmUlmlAts69JPHHDcYfv4VhEfOHT0drRenabi-Pn_rXUD4HTlM/s320/photo16.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCd_n0tpuyF_vuLxsi_gQRjDuJZg_tLO0L9RePCZ9wfMWY4QweWgOnjPjNyJIOgIQ4zID3dXKz33G9JUpKz2D_af5tEq3r0APCFZ7ktKxy9uCM-9sVQJtX2MUTK0SGkg5ZSdDh7gPxiwo/s1600/photo17.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCd_n0tpuyF_vuLxsi_gQRjDuJZg_tLO0L9RePCZ9wfMWY4QweWgOnjPjNyJIOgIQ4zID3dXKz33G9JUpKz2D_af5tEq3r0APCFZ7ktKxy9uCM-9sVQJtX2MUTK0SGkg5ZSdDh7gPxiwo/s320/photo17.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh81rrCyjE3t_eH8CefmIuYJARzzpYHdzfzKa-3VWJJRzV50sE_XALeQ5-mDyj28RVUzUz8gnu3hoCdoDEkg0Z81gARssim2Mn_eAGbi5gIDEjWI4r1exCfQxpiXAfnTPA49an7VU03CSk/s1600/photo18.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh81rrCyjE3t_eH8CefmIuYJARzzpYHdzfzKa-3VWJJRzV50sE_XALeQ5-mDyj28RVUzUz8gnu3hoCdoDEkg0Z81gARssim2Mn_eAGbi5gIDEjWI4r1exCfQxpiXAfnTPA49an7VU03CSk/s320/photo18.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhwVolgmz5Oew0O-tUtWXH_tdu2yUWjFeOxDjgTR7e6U2Vb4g7y4tr9dmsDV-tc1duVS_euh9JGLloPf6eglpML_xWPqrs45B_G2RVI1XjhRuAeykT0ffozji4Xh_jwp1w5Xc35guBSpU/s1600/photo2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhwVolgmz5Oew0O-tUtWXH_tdu2yUWjFeOxDjgTR7e6U2Vb4g7y4tr9dmsDV-tc1duVS_euh9JGLloPf6eglpML_xWPqrs45B_G2RVI1XjhRuAeykT0ffozji4Xh_jwp1w5Xc35guBSpU/s320/photo2.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnRzSyzYfSuL4ynnPCt5wfqECxT3_OzR8_7KveFkiRAuLN4b3mVG_RNLskIrB3-9MinDVXuVlw3e93V2m8aLklutGkGfki2FeyLpqQ1HVl0Nhp2u4bqyEXJEk8FT0A84-0TLqVD_wW168/s1600/photo4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnRzSyzYfSuL4ynnPCt5wfqECxT3_OzR8_7KveFkiRAuLN4b3mVG_RNLskIrB3-9MinDVXuVlw3e93V2m8aLklutGkGfki2FeyLpqQ1HVl0Nhp2u4bqyEXJEk8FT0A84-0TLqVD_wW168/s320/photo4.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvo_Iw43jzEU3AQi0NFKCaOGfQLVKkedrrjomrLE-t289EqytTBljtpPBTc1EtKTNjuNduiys9NTxDYm5vdlio53qUvrHQe4OiKk-E4G-cX9KaEn-MxY7U2EHuefbCKiESm3aLOXg3Icc/s1600/photo5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvo_Iw43jzEU3AQi0NFKCaOGfQLVKkedrrjomrLE-t289EqytTBljtpPBTc1EtKTNjuNduiys9NTxDYm5vdlio53qUvrHQe4OiKk-E4G-cX9KaEn-MxY7U2EHuefbCKiESm3aLOXg3Icc/s320/photo5.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVq4q8ihJyj_LO1C6g2hGRYFZkLYsvMJOjkRe5bmPOA__NgfvVjkVo5rUlIq1Zj3tQKmIwCocOdlnuLJzDjPkaXshkxxIib1efAzYjXwIZJPDDmIt4MPZeLYQUPq_Eaxtxj9-xA7Mvps/s1600/photo6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVq4q8ihJyj_LO1C6g2hGRYFZkLYsvMJOjkRe5bmPOA__NgfvVjkVo5rUlIq1Zj3tQKmIwCocOdlnuLJzDjPkaXshkxxIib1efAzYjXwIZJPDDmIt4MPZeLYQUPq_Eaxtxj9-xA7Mvps/s320/photo6.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEittEsJ7-dUFYoVlbDf70ScIFPqxRcfBIn6HKfYFFBWDeBMbq60aG1Nn75p_N7CqQrHh8P_QMqEA9_8MMnOnPzcrGiOFs00MiHE80JYle5msWsnyw9crKyL9W82fx8J2sv_S4O0JY8fEzc/s1600/photo7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEittEsJ7-dUFYoVlbDf70ScIFPqxRcfBIn6HKfYFFBWDeBMbq60aG1Nn75p_N7CqQrHh8P_QMqEA9_8MMnOnPzcrGiOFs00MiHE80JYle5msWsnyw9crKyL9W82fx8J2sv_S4O0JY8fEzc/s320/photo7.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikNB2Jsl30IQYnoujrWqR3S9BR_SFA3CqIjZhUc-JSXqfrjabkCeWsSewR_T3coHn1vNfT0RMmh9S6r32ymqmFhStobhVzBaFWsWdfqJ6hVlip3c9Ps4rkey8oSX9L7-wU4g5bjHXOF9A/s1600/photo8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikNB2Jsl30IQYnoujrWqR3S9BR_SFA3CqIjZhUc-JSXqfrjabkCeWsSewR_T3coHn1vNfT0RMmh9S6r32ymqmFhStobhVzBaFWsWdfqJ6hVlip3c9Ps4rkey8oSX9L7-wU4g5bjHXOF9A/s320/photo8.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK4LovgV2ABTqhOkjLcdUR3WbYPA0QNutnfUbtOVpPLY95AWif6GiApGeDz1m5XxoBhq0A9G9SlJYSOFXRnhLwnrlgQ63EmvmMkYl27CUm8OE5ywm1G8yszv6IZ1bWTLlvQ297DbuVpjw/s1600/photo9+(1).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK4LovgV2ABTqhOkjLcdUR3WbYPA0QNutnfUbtOVpPLY95AWif6GiApGeDz1m5XxoBhq0A9G9SlJYSOFXRnhLwnrlgQ63EmvmMkYl27CUm8OE5ywm1G8yszv6IZ1bWTLlvQ297DbuVpjw/s320/photo9+(1).JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-qK8tGjnEyC7KItPv2uigjM4pqYP-b_EyXMe_vxbzW7puG1UME4CUQ7kC_MezMG255NSPqpzqXN_XgQTkn8Z0xnIfsXw6ze716Vzr-hw8PVxXvUSK0nPS8hllRp3XC3XgAjtLclpIwz4/s1600/photo9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-qK8tGjnEyC7KItPv2uigjM4pqYP-b_EyXMe_vxbzW7puG1UME4CUQ7kC_MezMG255NSPqpzqXN_XgQTkn8Z0xnIfsXw6ze716Vzr-hw8PVxXvUSK0nPS8hllRp3XC3XgAjtLclpIwz4/s320/photo9.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoeWACKlai3Of6XoZGKGSYsvBCO_aPS8vHGItzyQ4Gib1JYt70bzQFWiF0IS8REOx4D8XTgpIhhiyuUwe5al7XLl9ADIewPXaKf7_Rl_b-zJOIxx0GzvOg679h5yfn_GfVaUbrPx7xdQc/s1600/photo3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoeWACKlai3Of6XoZGKGSYsvBCO_aPS8vHGItzyQ4Gib1JYt70bzQFWiF0IS8REOx4D8XTgpIhhiyuUwe5al7XLl9ADIewPXaKf7_Rl_b-zJOIxx0GzvOg679h5yfn_GfVaUbrPx7xdQc/s320/photo3.JPG" width="320" /></a></div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5lsj8V7RUv-sA8KoyzjqsesoZEXoct8XzSX4Kd2Wzvx85ISf1AYr16nZ0OGcX6wC-_Pc58kelRLVLkYvescJ-UR3DnDJ-M0czhh0ad4Ep9TI39dCjtylN98UcRsjRXiWpb8K8SQDOkAs/s1600/photo19.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5lsj8V7RUv-sA8KoyzjqsesoZEXoct8XzSX4Kd2Wzvx85ISf1AYr16nZ0OGcX6wC-_Pc58kelRLVLkYvescJ-UR3DnDJ-M0czhh0ad4Ep9TI39dCjtylN98UcRsjRXiWpb8K8SQDOkAs/s320/photo19.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioOtcjGl9EFps4p7Er-OPQpKSK5D_OIX1KTTsBmgChA1Kr-pItN3jmDshKxyH2kDvehxkJXIAdYzndJ4NnQPrmdDVbkcHiVTEAU0z921BWGkhBYNkNEbn9O6P91cRKRHF_T4m5IpVSyWU/s1600/photo20.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioOtcjGl9EFps4p7Er-OPQpKSK5D_OIX1KTTsBmgChA1Kr-pItN3jmDshKxyH2kDvehxkJXIAdYzndJ4NnQPrmdDVbkcHiVTEAU0z921BWGkhBYNkNEbn9O6P91cRKRHF_T4m5IpVSyWU/s320/photo20.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjix8Yde8GwtMq3KGw8fbpaJB8EB4CdzY-o8lflpRuWwGhtarQxO4hjh3vq5tOwnPuh5SYDaerLT3mv0wj7ny9uKQ9Y9pTDRuZWhw241UkZAvAEyCIL7_cbAijnDnY21ykEvSgBoCtb8PM/s1600/photo21.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjix8Yde8GwtMq3KGw8fbpaJB8EB4CdzY-o8lflpRuWwGhtarQxO4hjh3vq5tOwnPuh5SYDaerLT3mv0wj7ny9uKQ9Y9pTDRuZWhw241UkZAvAEyCIL7_cbAijnDnY21ykEvSgBoCtb8PM/s320/photo21.JPG" width="320" /></a></div>
<br /></div>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
</div>
</div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-75113568378589641182012-10-16T14:59:00.000+02:002013-06-25T17:35:49.196+02:00Scrum distribué : yes we can!<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
On parle beaucoup de Scrum, beaucoup en bien et beaucoup en mal. Scrum, ça fait parler les gens :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Du côté de ceux qui croient en Scrum, On (oui je me mets dedans évidemment) est tous a peu près d'accord sur le fait que Scrum, ça marche bien bien dans des contextes locaux où tout le monde est dans la même pièce. Les outils liés à Scrum sont d'ailleurs orienté pour fonctionner localement avec le fameux tableau blanc, des murs de post-its partout.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A chaque fois qu'on parle de Scrum distribué, tout le monde s'arrête de respirer. Ceux qui ne croient pas en Scrum se mettent à rire et même ceux qui croit en Scrum ont dû mal à croire que ça puisse marcher.</div>
<div style="text-align: justify;">
"Quoi ton PO n'est pas dans la même pièce que l'équipe!"</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAsID-SpLvvItnnedclXhLaq8uVXtBMGAFBGUhWbDVELeqZt_XPm_T9PC0ZPP4MOXvWTsyzRrQkmnLANGskjeP3HysCUMCIRa_b6q3DECLUAg4NX2zC9uQzNI3hivZp8rCM5vMRKC4GvQ/s1600/distributed_artificial_intelligence.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAsID-SpLvvItnnedclXhLaq8uVXtBMGAFBGUhWbDVELeqZt_XPm_T9PC0ZPP4MOXvWTsyzRrQkmnLANGskjeP3HysCUMCIRa_b6q3DECLUAg4NX2zC9uQzNI3hivZp8rCM5vMRKC4GvQ/s200/distributed_artificial_intelligence.jpg" width="200" /></a></div>
<br />
On pourrait d'ailleurs distinguer deux types de distributions :<br />
<ul style="text-align: left;">
<li>distribution partielle : l'équipe est locale mais est distante du product owner</li>
</ul>
<span style="text-align: center;"></span><br />
<div style="text-align: center;">
<span style="text-align: center;">(scrummaster, team member, team member, ...) | (product owner)</span></div>
<span style="text-align: center;">
</span>
<br />
<div style="text-align: center;">
<br /></div>
Ce modèle fait penser à un modèle "offshore agile" (les extrémistes de Scrum sont déjà en train de s'étouffer car j'ai osé associer ces deux mots :-))<br />
<br />
<ul style="text-align: left;">
<li>distribution totale : tout le monde est distribué</li>
</ul>
<div style="text-align: center;">
(scrummaster) | (team member) | (team member) | (...) | (product owner)</div>
<br />
Comment ça, ça ne peut pas marcher?<br />
<br />
Il se trouve que je travaille actuellement dans une équipe qui fait du Scrum totalement distribué et ça fonctionne plutôt pas mal...<br />
<br />
Comme je suis sympa, je vais même vous dire quels sont les facteurs qui font que ça marche dans notre cas :<br />
<br />
<h2 style="text-align: left;">
facteur n°1 : Des profils costauds</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbmH6WEqdco4mFB4TiOSB6dUSQxhrikqF97Nb-r4H1U_K9ly03AhgcFfRhcNNCcaGY-FEorpHyhIW-IzSwSY6deDi107fFix0PJ8qWNke4Ncc0hljpH6YyNA86pM2QP8G4U-_WBCzpdqg/s1600/monsieur-costaud.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbmH6WEqdco4mFB4TiOSB6dUSQxhrikqF97Nb-r4H1U_K9ly03AhgcFfRhcNNCcaGY-FEorpHyhIW-IzSwSY6deDi107fFix0PJ8qWNke4Ncc0hljpH6YyNA86pM2QP8G4U-_WBCzpdqg/s200/monsieur-costaud.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
L'ensemble de l'équipe est constitué de "profils costauds". C'est à dire des gens intélligents, passionnés, avec de l'expérience, autonomes, impliqués, communiquant et sachant prendre les bonnes décisions avec le minimum d'informations.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ok, je pourrais presque arrêter l'article là. On pourrait peut être même faire du "waterfall" et peut être que ça marcherait :-). </div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En tous cas, c'est un des facteurs de réussite de Scrum distribué : choisir et être exigent sur les profils qui feront partis de l'équipe. L'idée dans ce cas est de plutôt partir à la chasse, chercher des gens connus plutôt que de publier des offres de missions sur Monster.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On dit souvent que le problème se trouve souvent entre la chaise et le clavier :-). Le développement logiciel est avant tout une histoire de personnes.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout découle donc de là. Si on a les bonnes personnes, on avance dans le bon sens... Ca parait évident mais il faut simplement parfois le dire (même si ça peut choquer un peu).</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: left;">
facteur n°2 : par défaut, on fait confiance</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDrGWeoYnqs0Jqedxmi-OT8_165eK5M9uSTPS-rAPKZ_NvK2c_2YxcSXqZUyy5VRYZCA6Pm-xEH7UxTHMsVKeJHt82NTRyq2PXqdlaARrVkh2btT4DBDje_uZ4U_OrBQ8SOkvpc7ecHqE/s1600/confiance-en-autrui.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDrGWeoYnqs0Jqedxmi-OT8_165eK5M9uSTPS-rAPKZ_NvK2c_2YxcSXqZUyy5VRYZCA6Pm-xEH7UxTHMsVKeJHt82NTRyq2PXqdlaARrVkh2btT4DBDje_uZ4U_OrBQ8SOkvpc7ecHqE/s200/confiance-en-autrui.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div style="text-align: left;">
<span style="text-align: justify;">Une attitude qui n'est pas toujours facile à avoir dans les entreprises en france. Je ne sais pas à quoi c'est dû et je ne vais d'ailleurs pas essayer d'y répondre. En revanche, je constate que souvent "par défaut tu n'as le droit de rien faire, pour ne pas faire de bêtise". Il apparait toujours dangereux de responsabiliser les gens alors que je trouve que c'est une des clé de la réussite. C'est vrai que c'est toujours dangereux quand les gens se responsabilisent, se mettent à réfléchir, prennent des initiatives ;-)</span></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Pour en revenir à notre Scrum distribué. Le premier jour où j'ai commencé cette mission, j'ai eu tout mes accès (même certains auxquels je n'avais pas besoin), par défaut je pouvais tout faire, par défaut "j'avais les droits", par défaut on m'a fait confiance. Quand on est tout seul dans son bureau à distance, sentir cette confiance est un facteur de réussite pour faire du Scrum totalement distribué. Evidemment, c'est plus facile grâce au facteur n°1.</div>
<div>
<br /></div>
<h2 style="text-align: left;">
facteur n°3 : Des outils fiables</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPhkXWyxCBI1AXLxpAxQj6-8y71xO2leWAOLibA0OfNG8MbxutmRgoWLN8Btm5GhS9HCLq5fu3L7npW0HYATjKTqQxDU-nwWujvdYBNp52LFz-Vi-Aie4yoGjZJvz5zp4Be0T-GULwQw/s1600/fiable.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPhkXWyxCBI1AXLxpAxQj6-8y71xO2leWAOLibA0OfNG8MbxutmRgoWLN8Btm5GhS9HCLq5fu3L7npW0HYATjKTqQxDU-nwWujvdYBNp52LFz-Vi-Aie4yoGjZJvz5zp4Be0T-GULwQw/s200/fiable.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
Comme tous le monde est distribué, il faut de bons outils pour communiquer. Ils sont ultra présents pour donner l'impression de proximité.<br />
<br />
Nous utilisons alors :<br />
<br />
<ul style="text-align: left;">
<li>Skype pour faire du chat : plusieurs espaces de discussion sont à disposition (tout le monde, juste mon équipe,...), </li>
<li>Skype aussi pour les communication audio et video.</li>
<li>Netviewer pour faire du partage d'écran.</li>
<li>les mails pour laisser des traces.</li>
</ul>
<div>
En terme de forge logiciel, nous utilisons :</div>
<div>
<ul style="text-align: left;">
<li>une solution VPN plutôt stable (quand le VPN tombe, il est remonté dans la 1/2 heure).</li>
<li>une version de redmine modifiée à la sauce Scrum.</li>
<li>Subversion comme gestion de sources.</li>
<li>Hudson comme serveur d'intégration continue.</li>
</ul>
<div>
Bref, du très classique mais qui fonctionne avec une gestion des utilisateurs plutôt simples.</div>
</div>
<div>
<br /></div>
Le manifeste Agile dit : "Individuals and interactions over processes and tools". Dans le cas d'un scrum distribué, il faut justement des outils pour mettres en avant les individus et les interactions ;-).<br />
<div>
<br /></div>
</div>
<h2 style="text-align: left;">
facteur n°4: Un product owner super héros</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6bcmRJkINxkylSV0YntZxnEhzyCHCORnFmzRp5wdLa8fnAxlcVaEy3tHU0GkTnOQW7U6_npUpT4De_ZAfyBWstA04TBk7SNGk_cJLhIT00FQv_hw9cr0EF-AXPXOPr4NnGraW0d63Ow8/s1600/po.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="103" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6bcmRJkINxkylSV0YntZxnEhzyCHCORnFmzRp5wdLa8fnAxlcVaEy3tHU0GkTnOQW7U6_npUpT4De_ZAfyBWstA04TBk7SNGk_cJLhIT00FQv_hw9cr0EF-AXPXOPr4NnGraW0d63Ow8/s200/po.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
D'habitude, je n'aime pas les super héros en informatique car en général ça se traduit par si le super héros n'est pas là, on ne peut rien faire. Comme c'est de toute façon le cas lorsqu'on fait du Scrum avec un product owner, ça ne me dérange pas ;-). </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Un des facteurs clé de succés est d'avoir un Product Owner qui sache clairement ce qu'il veut. Je ne dis pas qu'il ne peut pas se tromper car Scrum est fait pour ça. En revanche, c'est clairement lui qui doit donner les directions à chaque Sprint et être le guide de l'équipe sur ce qui est à produire.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il faut qu'il ait totalement confiance en son équipe encore plus quand celle-ci est distribuée. Evidemment, c'est plus facile grâce au facteur n°1.</div>
<br /></div>
<h2 style="text-align: left;">
facteur n°5 : Des réunions incontournables tous ensemble</h2>
<div>
<div style="text-align: justify;">
Un des facteurs clé de succès qui fait que notre Scrum totalement distribué fonctionne est qu'il y a malgré tout des éléments incontournables qui se font localement tous ensemble.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nous avons des sprints de 3 semaines et nous nous rencontrons pendant 1 à 2 jours pour effectuer de manière intense :</div>
<div style="text-align: justify;">
- la fin d'un sprint : démo et retrospective</div>
<div style="text-align: justify;">
- le début d'un nouveau sprint : sprint planning, planning poker, ...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
C'est assez dense et pour ne rien oublier, en général on "plan the plan" (on planifie le plan) :</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF4Wm89SlYx9qWFBDY0BI4Mtwy4BBkWIyT5RP1AN1mFuCRBXl273AehUb5bE7X6xXhPnGSUsBu2h1ZMYfLrxz_M2CpYOQAi2IAaW1MDwxQ09ww8Ichk4TkGAp3pScd70j720fl2ficMyI/s1600/photo+1+(2).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF4Wm89SlYx9qWFBDY0BI4Mtwy4BBkWIyT5RP1AN1mFuCRBXl273AehUb5bE7X6xXhPnGSUsBu2h1ZMYfLrxz_M2CpYOQAi2IAaW1MDwxQ09ww8Ichk4TkGAp3pScd70j720fl2ficMyI/s320/photo+1+(2).JPG" width="240" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Certes cela fait perdre du temps et donc de l'argent car tout le monde voyage pour se retrouver dans un même lieu. En revanche cela en fait ensuite gagner. Faire ce type d'échange de façon distribués prendrait plus de temps que le temps perdu à se regrouper et serait moins efficace.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Une fois de plus le développement logiciel est avant tout une histoire de personnes. Si les personnes se connaissent "IRL" tout devient plus facile.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTBxF8rTzudbLx3PY3XqLPuz_ifU8xlcWYOloSzQETMVE8AaWN4DSFNLnYor1bYSPB2G5abeMSFvVXrdal_AnmIuFdql7bHvMyYZhkc4zreBThIERnLa5TVYKj2RqdPRwH1VKalxFtABg/s1600/photo+2+(2).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTBxF8rTzudbLx3PY3XqLPuz_ifU8xlcWYOloSzQETMVE8AaWN4DSFNLnYor1bYSPB2G5abeMSFvVXrdal_AnmIuFdql7bHvMyYZhkc4zreBThIERnLa5TVYKj2RqdPRwH1VKalxFtABg/s320/photo+2+(2).JPG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ces rencontres tous ensemble sont aussi l'occasion de construire et d'entretenir un esprit d'équipe, de parler d'autres choses que les projets et de pourquoi pas aller manger un bon fish&chips ;-)</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyCeVbmiK9fvBePhu-GVdx7ywxYt9YQZSEZ3FmF77n-tk7QJhkfbrEj8jLH4l7R1haGhViWz87okTUFt-OeQguPjZxB_pXJyYhFrRH5FaZXuita6ODni2J2QT-zN2vVJai19eKh6EbYqg/s1600/photo+(2).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyCeVbmiK9fvBePhu-GVdx7ywxYt9YQZSEZ3FmF77n-tk7QJhkfbrEj8jLH4l7R1haGhViWz87okTUFt-OeQguPjZxB_pXJyYhFrRH5FaZXuita6ODni2J2QT-zN2vVJai19eKh6EbYqg/s320/photo+(2).JPG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<h2 style="text-align: left;">
Ce qui marche moins bien</h2>
<div style="text-align: left;">
Il y a évidemment des choses qui fonctionnent moins bien.</div>
<div style="text-align: left;">
<br /></div>
</div>
<h4 style="text-align: left;">
Daily Scrum trop long :</h4>
<div style="text-align: justify;">
Nous effectuons tous les matins un daily scrum distribué via skype + partage d'écran netviewer du ScrumMaster pour que tout le monde ait le "focus" sur les mêmes choses. Une des problèmes assez récurrents est qu'il est vraiment difficile de le timeboxer. Le DailyScrum a tendance a durer longtemps.</div>
<div>
<br /></div>
<div>
<h4 style="text-align: left;">
Papier vs Logiciel de ticket</h4>
Nous travaillons de manière distribué avec un système de ticket "numérique" alors que nous nous rencontrons et travaillons sur des post-its localement durant les sprints planning.<br />
La préparation du sprint planning prend alors un peu de temps de préparation pour passer de la version, numérique à la version papier. De la même manière la mise à jour du système de ticketing est juste long et ennuyant...<br />
<br />
<h4 style="text-align: left;">
Sprint planning parfois un peu court</h4>
Nous avons parfois du mal à tout boucler lors de nos sprint planning, nous devons dans ce cas le terminer de façon distribuée.<br />
<br />
<h2 style="text-align: left;">
Pour conclure</h2>
<div style="text-align: justify;">
Je vous propose une fois de plus mon humble retour d'expérience sur le sujet. Un simple retour d'expérience d'un Scrum distribué qui fonctionne.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Attention : Ca ne veut surtout pas dire :</div>
<div style="text-align: justify;">
<br /></div>
<ul style="text-align: left;">
<li style="text-align: justify;">que si vous faites exactement la même chose, ça marchera</li>
<li style="text-align: justify;">que si vous faites différemment ça ne marchera pas</li>
</ul>
</div>
</div>
Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-4119583874959957708.post-18804668288184317072012-09-27T09:52:00.002+02:002012-09-27T10:21:54.538+02:00Oui, je code en slip @home!<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Je suis actuellement sur une mission longue pour un client étranger que j'effectue à domicile. C'est ce qu'on appelle en général du "home working".<br />
<br />
Pour rassurer les ames sensibles, je ne code pas réellement en slip hein, c'est une image. Je pourrais coder en slip :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je n'avais pas forcément prévu d'écrire un article sur ce mode de travail mais comme à chaque fois que j'évoque le sujet avec des amis ou des connaissances, je les sens curieux, intrigués et plein de questions. Je me dis que si ça intéresse tant, ça vaut surement le coup de le partager.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Voici les questions qui reviennent le plus souvent : </div>
<div style="text-align: justify;">
- C'est pas dur de travailler tout seul tout le temps chez toi?</div>
<div style="text-align: justify;">
- Moi je serais trop tenter d'être distrait. Tu arrives à rester concentré et être efficace?<br />
- Tu fais comment avec la famille?</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je vais tenter de répondre à ces questions en vous proposant mon mince retour d'expérience sur le sujet.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je précise qu'aujourd'hui je travaille à domicile car c'est la mission qui le veut. Ce n'était pas une volonté de ma part, c'est l'occasion qui a fait le larron.<br />
<br /></div>
<h2 style="text-align: left;">
<span style="text-align: left;">Le commencement</span></h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRj2jazgR9P9IBQyNP2vrrg1UuvEbs2XcBsQ9_zn4Z1hGUfCp12jCsIq8d9ElYNa_ZZuPVDCCTW9dxtfG2XLUNADfbyj0wg1bwu0hDFASoDveBAFMXnxYWXNL6IKCAkux1ma2Mhpd4BM/s1600/matrix.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRj2jazgR9P9IBQyNP2vrrg1UuvEbs2XcBsQ9_zn4Z1hGUfCp12jCsIq8d9ElYNa_ZZuPVDCCTW9dxtfG2XLUNADfbyj0wg1bwu0hDFASoDveBAFMXnxYWXNL6IKCAkux1ma2Mhpd4BM/s320/matrix.png" width="320" /></a></div>
<div>
<span style="text-align: left;"><br /></span></div>
<div style="text-align: justify;">
Tout a commencé par un mail, qui, lu en diagonale peut donner quelque chose dans le genre : </div>
<div style="text-align: justify;">
mission, client étranger, tout en anglais, travail à domicile, scrum, équipes constitués de profils costaud, déplacement toute les 3 semaines.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
J'ai rapidement voulu en savoir plus car j'étais justement disponible, après quelques discussions, GO. Il y a une part d'inconnue qu'il faut accepter, c'est comme ça, c'est la vie. Il faut faire confiance.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On est mardi on me dit que commence le Jeudi, rendez-vous sur Skype Jeudi matin.</div>
<div style="text-align: justify;">
<br />
<div style="text-align: center;">
Alerte générale : comment je vais m'organiser à la maison : -)</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il ne me faut pas grand chose pour travailler, un bout de chaise, un bout de table, un portable, un bout d'internet et un bout de calme. C'est juste sur ce dernier point où il faut que je m'organise un peu car à domicile je ne suis pas seul, il y a aussi madame et les enfants. Je n'ai pas envie de les déranger ou d'avoir l'impression de déranger et réciproquement.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il me faut "un coin au calme". Il n'est pas possible pour moi d'avoir une pièce dédiée qui me servirait de bureau. Je me suis donc aménagé un coin dans ma chambre en face de la fenêtre. Hop, la chambre la journée sera donc mon bureau.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE6HQXqAwu7u8w0-d5eJhTbkK8YgVOK-05oVurkDsNrsFJv2oWYdpHIPrVox_pd1WKdm9uTDNLCZYLfAJDfA_bOQXbOCBVQy8PjdbmgjmkpqeQBqMadquPdXKTAJx_zinFJWMZHD7A-aU/s1600/photo+2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE6HQXqAwu7u8w0-d5eJhTbkK8YgVOK-05oVurkDsNrsFJv2oWYdpHIPrVox_pd1WKdm9uTDNLCZYLfAJDfA_bOQXbOCBVQy8PjdbmgjmkpqeQBqMadquPdXKTAJx_zinFJWMZHD7A-aU/s200/photo+2.JPG" width="200" /></a></div>
<br />
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le mercredi sera donc consacré à m'installer un bureau dans ma chambre. Et là, je reçois un mail avec tout les accès du client (vpn, mail, forge, ....). Par défaut : ça marche, j'ai accès à tout, j'ai le droit de tout faire... : non, non, ce n'est pas un rêve, ça existe parfois ;-).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Jeudi matin, c'est parti : "Hello, good morning guys!"</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: left;">
Au quotidien : "We are quite flexible"</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDcdJJWoac1aZCtuBXAtuBO85E1dXEibwifwiWFKJbv_b7AdA_kMbd6BtDVWImRUz54BKF0szfYDV4irptyoAN5jj7yLPcJ05UfMkaRM2POQBaWtM3ZvEUfcNMlgbGSgFQKNOFERYiGE/s1600/clavier+souple.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDcdJJWoac1aZCtuBXAtuBO85E1dXEibwifwiWFKJbv_b7AdA_kMbd6BtDVWImRUz54BKF0szfYDV4irptyoAN5jj7yLPcJ05UfMkaRM2POQBaWtM3ZvEUfcNMlgbGSgFQKNOFERYiGE/s200/clavier+souple.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
<span id="goog_83133582"></span><span id="goog_83133583"></span><br /></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
Je découvre que je fais partie d'une assez grande équipe dont les membres de différentes nationalités travaillent tous à domicile comme moi. Même le Scrummaster est un freelance travaillant chez lui!</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
Quelque temps après avoir commencé, je discute avec un autre membre de l'équipe. Comme je découvre ce mode de fonctionnement, j'aborde bêtement la question des horaires, du temps de présence "online" et tout et tout. Je me retrouve à poser des questions bête commençant par "et si" et toutes les réponses étaient : "we are quite flexible"... L'idée est vraiment de "faire le job" et le fait de devoir s'absenter pour aller faire si ou ça n'a pas vraiment d'importance. Tout est basé sur la confiance.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="text-align: left;">Ce que ça m'apporte au quotidien : une réelle flexibilité. C'est sympa de pouvoir de temps en temps aller chercher ses enfants à l'école, réussir à aller à un rendez-vous chez des personnes/magasins/institutions dont les seuls horaires d'ouvertures sont 9h-12h/14h-18h. (et encore c'est des choses dont je profite peu, je n'ai pas encore trop l'habitude).</span></div>
<div style="text-align: justify;">
<span style="text-align: left;"><br /></span></div>
<div style="text-align: justify;">
<span style="text-align: left;">C'est aussi sympa de pouvoir aller faire un peu de sport au départ de chez soi et de prendre facilement une vrai douche dans sa douche. Je n'ai pas besoin de prendre de <a href="http://www.urbandictionary.com/define.php?term=Portuguese%20shower" target="_blank">douche portugaise</a> (je n'ai jamais pratiqué mais si si ça existe)</span><br />
<span style="text-align: left;"><br /></span></div>
<div style="text-align: justify;">
<span style="text-align: left;">Plus anecdoctiquement, </span><span style="text-align: left;">il y a le coté sympa de mettre de temps en temps Rolland Garros ou les JO de Londres dans un coin de la pièce.</span></div>
<div style="text-align: justify;">
<span style="text-align: left;"><br /></span></div>
<h2 style="text-align: left;">
Je travaille tout seul chez moi comme un ours?</h2>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://bdm.typepad.com/photos/uncategorized/2008/10/31/instinct_tueur.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://bdm.typepad.com/photos/uncategorized/2008/10/31/instinct_tueur.jpg" width="228" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div style="text-align: justify;">
Alors oui le matin et l'après-midi je suis physiquement seul sur mon bureau.<br />
<br />
En revanche :<br />
<ul>
<li>Je suis virtuellement overconnecté avec l'équipe avec qui je travaille. Skype est l'outil que j'utilise pour communiquer en temps réel que ce soit par chat, conversation audio ou video.</li>
<li>10h c'est l'heure de notre réunion daily scrum. Partage d'écran + conf call où je parle l'équipe.</li>
<li>Il y a un chat global d'équipe dans lequel chacun y met son humeur, dit ce qu'il fait dans ou en dehors du boulot, bref cela permet d'avoir une notion de communauté et de proximité.</li>
<li>On se retrouve tous toutes les 3 semaines pour clore le sprint (demo, retro) et relancer un sprint (sprint planning, planning poker, ...). Ce sont un ou deux jours de travail assez intense car on concentre tous les rituels Scrum mais cela donne aussi l'occasion de se voir, de discuter, d'échanger, de se chambrer, de prendre une vraie pause café avec de vrais collègues ;-).</li>
</ul>
<div>
Ca c'est pour justifier le côté "je ne suis pas seul quand je bosse chez moi" mais c'est vrai que je ne vois pas de vrais gens "IRL" ;-). Alors pour ça, pour éviter de terminer comme un ours à coder chez moi :</div>
<div>
<ul>
<li>Je vais souvent voir des amis et collègues pour manger le midi avec eux. </li>
<li>Je fais partie du <a href="http://chtijug.org/" target="_blank">Ch'ti JUG</a>, ce qui me permet de croiser du monde et d'échanger avec d'autres passionnés de la région. </li>
<li>Je vais a des conférences comme <a href="http://www.devoxx.com/display/DV12/Home" target="_blank">Devoxx</a> ou <a href="http://devoxx.fr/display/FR12/Accueil" target="_blank">Devoxx France</a> pour échanger aussi avec des passionnées mais d'un peu plus loin.</li>
<li>J'essaye de m'exiler de chez moi le mercredi pour d'une part ne pas gêner et être gêner par femme et enfants qui sont présents toutes la journée. Je profite de ce jour pour aller travailler chez des gens qui veulent bien m'accueillir (Merci d'ailleurs à <a href="https://twitter.com/ThibaudVibes" target="_blank">Thibaud</a> et <a href="https://twitter.com/serniclay" target="_blank">Antoine</a> d'<a href="http://www.onyme.com/" target="_blank">Onyme</a> de m'avoir accueilli dans leur bureau, c'était vraiment sympa les mecs!) ou encore chez <a href="https://twitter.com/thomasrecloux" target="_blank">un ami</a> qui m'a rejoint dans cette même aventure. </li>
</ul>
<div>
J'ai dû chercher assez longtemps pour trouver des côté négatifs mais il en fallait pour que mon retour d'expérience soit plus objectif : </div>
</div>
<div>
<ul>
<li>La pause café n'est pas vraiment une pause café. Ca manque parfois et parfois je regarde l'heure, il est midi et je n'ai pas ressenti le besoin de prendre une pause café. Ca dépend.</li>
<li>Ma cafetière n'a clairement pas tenu le choc. J'ai dû en changer :-)</li>
<li>Je me sens parfois en décalage par rapport à mes amis et anciens collègues qui pour la plupart travaillent en SSIIs ou chez des éditeurs de logiciels locaux. Le fait d'être freelance participe aussi au décalage :-). Ca n'est pas vraiment un point négatif mais je sens parfois que je passes pour un extra terrestre. Les problématiques que nous rencontrons au quotidien ne sont plus les mêmes.</li>
</ul>
</div>
<h2>
Est-ce que je suis plus ou moins productif?</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://les-ressources-du-changement.fr/wp-content/uploads/2011/03/productivite-e1300742536300.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://les-ressources-du-changement.fr/wp-content/uploads/2011/03/productivite-e1300742536300.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Je suis finalement assez surpris quand je parle de ce mode de travail lorsque parfois la réaction est "hum, je serais trop tenté d'être distrait et de faire autre chose". Au final je ne sais trop quoi répondre à cette question... Ce que je réponds en général, c'est ce que je suis plutôt à l'inverse de ça. C'est surement que mon métier est une passion... C'est plutôt madame qui m'a fixé des limites pour que je m'arrête :-)<br />
<br />
Je suis clairement plus productif chez moi. J'ai mes outils et du calme. L'important quand on travaille à domicile, c'est de pouvoir choisir soi-même les conditions qui permettent d'être productif. On rajoute à ça le fait de ne pas avoir de temps de déplacement pour se rendre sur son lieu de travail. On va dire au minium 1h par jour aller/retour. C'est un réel gain.<br />
<br />
"Bref, je suis plus productif".</div>
<div>
<br /></div>
<div>
<h2>
La séparation vie privé / vie professionnelle</h2>
Ne connaissant ce mode de travail, j'ai préféré par défaut imposer quelques petites règles au sein de la maison pour bien séparer les choses et mettre des barrières :<br />
<br />
<ul>
<li>Quand je travaille à la maison, c'est comme si je n'étais pas à la maison. Je ne suis pas Tony Micelli à pouvoir m'occuper de la maison.</li>
</ul>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgii-EWS3Q4DjrL6ospdK_WpMLgce732kHy1TSFTNhS2ClX7SiMQ28mlssCloen103Ac9yJ3Xuc4ReoohGVtrR6U2WyRwE7TkQmQT1ea6i1vV0CgdPWxYsZt1amvtolrjxzTSvd26d1mU/s1600/tony.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgii-EWS3Q4DjrL6ospdK_WpMLgce732kHy1TSFTNhS2ClX7SiMQ28mlssCloen103Ac9yJ3Xuc4ReoohGVtrR6U2WyRwE7TkQmQT1ea6i1vV0CgdPWxYsZt1amvtolrjxzTSvd26d1mU/s200/tony.jpg" width="133" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<ul>
<li>La porte de la chambre/bureau représente la séparation privée/pro. Quand elle est fermée, il ne faut pas rentrer sans toquer à la porte et attendre que je dise que c'est OK. Ca n'est pas que je veux jouer au Boss inaccessible mais c'est le seul moyen de prévoir le cas ou je suis en ligne, peut être avec avec de la video et je ne peux pas répondre.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnkeQYpGMgRP03mCPJgDL44CEmBcOTM-0ounXaX_3JvrRlJdb2wB7tR80QDU8hmx52W9wWXJVAUrkCYNdmwjG5YBjy4Z3tk6DQyN32PW8R6XhknMZhZGesoNATN154mJ7csRj2AfqSZw/s1600/photo+(1).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnkeQYpGMgRP03mCPJgDL44CEmBcOTM-0ounXaX_3JvrRlJdb2wB7tR80QDU8hmx52W9wWXJVAUrkCYNdmwjG5YBjy4Z3tk6DQyN32PW8R6XhknMZhZGesoNATN154mJ7csRj2AfqSZw/s320/photo+(1).JPG" style="cursor: move;" width="240" /></a></div>
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br /></div>
<div>
J'ai donc appliqué par défaut ces règles au sein de la famille. C'est d'ailleurs assez rigolo de voir comment les enfants ont vécu le changement et l'ont intégré. "Papa, tu vas travailler dans ton bureau dans ta chambre aujourd'hui?". C'est aussi assez rigolo vers 16h30-17h d'entendre toc-toc et d'avoir ses enfants qui viennent faire un petit coucou après l'école. Il se trouve qu'avec le temps, je commence à assouplir les règles mais ça vient de moi. Enfin soyons clair, je n'arriverai jamais à rivaliser avec Tony Micelli!<br />
<br />
<h2>
Une petite conclusion ça serait bien là</h2>
</div>
<div>
Quand on me demande si ça va, je répond que : </div>
<div>
<br /></div>
<div style="text-align: center;">
JE M'ECLATE</div>
<div>
<br /></div>
<div>
Je crois que tout est dit.</div>
<div>
<br /></div>
<div>
Je suis clairement conscient que ce mode de travail ne peut pas convenir à tout le monde et à tout les métiers. En ce qui me concerne, ça se goupille bien et c'est cool.</div>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
<br /></div>
</div>
Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-4119583874959957708.post-78168599478507357992012-07-30T17:22:00.001+02:002012-07-30T17:22:39.584+02:00Mon Backlog pour passer freelance<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Salut tous,</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je suis passé freelance depuis maintenant quelques mois. Avec le peu de recul que j'ai aujourd'hui, voici ce que je me dis tous les jours : "Pourquoi je ne l'ai pas fait plus tôt".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Plus sérieusement, aujourd'hui :</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Je m'éclate.</li>
<li>Je bosse pour un client qui m'estime et me valorise en tant que "développeur".</li>
<li>Je bosse de chez moi.</li>
<li>Je bosse avec des gens du monde entier.</li>
<li>Je choisis mes outils pour travailler.</li>
<li>J'ai le temps et l'envie de m'occuper (un peu) du projet open source dont je suis l'auteur (<a href="https://github.com/jsevellec/cassandra-unit/" target="_blank">cassandra-unit</a>).</li>
<li>Je fais ma comptabilité (et c'est marrant {oui je suis peut être un peu tordu }) avec l'assistance d'un cabinet d'expert comptable qui me "coach".</li>
</ul>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je vous propose de vous partager ce qui reste de cette transition, notamment le backlog qui m'a suivi tout au long de ma "freelancisation" :</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Avant de commencer, voici les caractéristiques de ma "freelancisation" :</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Je n'ai pas démissionné mais effectué <a href="http://vosdroits.service-public.fr/F19030.xhtml" target="_blank">une rupture conventionnelle</a>. Vous trouverez donc pas mal de choses dans ele backlog que j'ai dû effectuer par rapport à ça (demarche <a href="http://www.pole-emploi.fr/accueil/" target="_blank">Pole Emploi</a>, demarche <a href="http://vosdroits.service-public.fr/F11677.xhtml" target="_blank">ACCRE</a>, ...)</li>
<li>Quand j'ai décidé de me lancer freelance, je n'avais pas de client.</li>
<li>J'ai créé une EURL (c'est une sorte d'SARL).</li>
<li>J'ai choisi de gérer moi même toute la procédure (rédaction des statuts de la société, création de la société, compta, ...) et d'être conseillé sur le sujet plutôt que de déléguer (<a href="http://blog.tartachuc.org/2012/05/07/independant-assiste-ou-conseille/" target="_blank">hein Thomas ;-)</a>). Ca n'est d'ailleurs pas évident de trouver un comptable qui encourage et accepte de travailler dans ce mode là car globalement ça veut dire qu'il prend un risque car il reste le comptable mais si je "foire" toute ma compta, ça sera pour sa pomme. Ce mode de travail avec un comptable s'appelle : "le mode révision". Le choix de son comptable est surtout une question de feeling, si le feeling n'y est pas, ça n'est pas bon signe.</li>
</ul>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Certains geeks organise leur mariage, gère leur église ou encore gère leur vie de famille avec les méthodes agiles, moi j'ai décidé de gérer mon passage freelance avec Scrum ;-).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Voici les éléments ordonnés de mon "Backlog de passage indépendant" à partir du jour où dans ma tête je me suis dit : "Go, je me lance" jusqu'à maintenant</div>
<div style="text-align: justify;">
<br /></div>
<ul style="text-align: left;">
<li style="text-align: justify;">Prise de contact avec des "boites à freelance" : <i>Sans engagement, ça permet de voir son niveau d'employabilité sur le marché.</i></li>
<li style="text-align: justify;">Recherche sur la procédure de rupture conventionnelle :<i> pour être sûr de bien comprendre comment cette procédure fonctionne.</i></li>
<li style="text-align: justify;">Se renseigner sur l'ACCRE : <i>pour comprendre comment l'aide fonctionne.</i></li>
<li style="text-align: justify;">Procédure de négociation de la rupture conventionnelle : <i>c'est long et très procéduré (des entretiens avec des intervalles très précis, des papiers, des dossiers, des accusés de reception,...). C'est la société que j'ai quitté qui s'est occupé de tout.</i></li>
<li style="text-align: justify;">Reflexion sur le statut de la société à prendre : <i>c'est très important, il faut choisir le statut qui convient le mieux à son cas. Il n'y a pas beaucoup de choix possibles, le choix est simple à faire.</i></li>
<li style="text-align: justify;">Choix statut société</li>
<li style="text-align: justify;">Rencontrer comptable X.</li>
<li style="text-align: justify;">Rencontrer comptable Y.</li>
<li style="text-align: justify;">Rencontre comptable Z. </li>
<li style="text-align: justify;">Choisir comptable : <i>Il faut voir plusieurs comptables pour permettre une comparaison. C'est très important car c'est avant tout une question de feeling dans mon cas.</i></li>
<li style="text-align: justify;">Trouver un nom pour l'entreprise : <i>Dans l'absolu, ça n'est pas très important mais... malgré tout, toutes mes factures mentionneront son nom et à chaque fois que j'achèterai quelque chose pour la société. Ca m'a pris pal mal de temps. J'ai dû mal à choisir un nom de variable ou de Class alors pour choisir un nom de société... la galère ;-). cf Clean Code :-)</i></li>
<li style="text-align: justify;">Acheter nom de domaine .fr et .com. : <i>Ca n'est pas très important tout de suite mais c'est bien de les avoir pour la suite. </i></li>
<li style="text-align: justify;">Faire (ou faire faire) un logo pour la société : <i>merci à <a href="https://twitter.com/graphitruc" target="_blank">@graphitruc</a> :-)</i></li>
<li style="text-align: justify;">Rédiger les statuts de la société : <i>Ca parait compliqué mais c'est assez simple. <a href="http://www.apce.com/cid46379/modele-statuts-types-eurl.html" target="_blank">Des modèles sont disponibles en ligne</a>.</i></li>
<li style="text-align: justify;">Voir le comptable pour valider les statuts.</li>
<li style="text-align: justify;">Rencontrer banque X.</li>
<li style="text-align: justify;">Rencontrer banque Y.</li>
<li style="text-align: justify;">Choisir banque et ouvrir le compte pro.</li>
<li style="text-align: justify;">Remplir dossier <a href="http://vosdroits.service-public.fr/pme/R13752.xhtml" target="_blank">M0</a> : <i>Déclaration de constitution d'une SARL. </i></li>
<li style="text-align: justify;">Remplir dossier <a href="http://vosdroits.service-public.fr/pme/R17349.xhtml" target="_blank">TNS</a> : <i>Intercalaire Régime des travailleurs non salariés.</i></li>
<li style="text-align: justify;">Remplir dossier <a href="https://www.formulaires.modernisation.gouv.fr/gf/cerfa_13584.do" target="_blank">ACCRE</a> : <i>Demande de l'aide à la création et à la reprise de société.</i></li>
<li style="text-align: justify;">Renvoyer dossiers au comptable pour relecture et validation.</li>
<li style="text-align: justify;">Prendre RDV chez Pole Emploi : <i>être patient.</i></li>
<li style="text-align: justify;">Déposer les status de la société aux Impôts pour validation.</li>
<li style="text-align: justify;">Récupérer les statuts validés de la société aux Impôts.</li>
<li style="text-align: justify;">Publier une annonce dans un journal officiel (<a href="http://www.apce.com/cid6044/modele-d-annonce-legale-sarl-eurl.html?pid=224" target="_blank">un modèle ici</a>)</li>
<li style="text-align: justify;">Déposer tous les dossiers au Tribunal de Commerce.</li>
<li style="text-align: justify;">Acheter Ciel Compta (pour Mac) : <i>un des seuls client lourds qui possède une version native pour Mac.</i></li>
<li style="text-align: justify;">Faire du "Pair-comptabilité" avec un ami pour initialiser ma comptabilité : <i>merci à <a href="https://twitter.com/thomasrecloux" target="_blank">@thomasrecloux</a>.</i></li>
<li style="text-align: justify;">Faire des devis pour une assurance Responsabilité Civile</li>
<li style="text-align: justify;">Choisir et prendre une assurance Responsabilité Civile : <i>L'idée est se couvrir la société si je fais une bêtise.</i></li>
<li style="text-align: justify;">Voir le comptable pour accompagnement et coaching.</li>
<li style="text-align: justify;">Faire demande de capitalisation auprès de Pole emploi: <i> <a href="http://www.pole-emploi.fr/candidat/les-aides-financieres-a-la-creation-d-entreprise-@/suarticle.jspz?id=27043" target="_blank">versement de l'aide</a>.</i></li>
<li style="text-align: justify;">Faire des devis pour prendre une mutuelle : <i>ne pas oublier de prendre une mutuelle qui soit "loi Madelin" </i>pour pouvoir en déduire tout ou partie.</li>
<li style="text-align: justify;">Choisir et prendre une mutuelle.</li>
<li style="text-align: justify;">Faire des devis pour prendre une assurance prévoyance.</li>
<li style="text-align: justify;">Choisir et prendre une assurance prévoyance : <i>L'idée est de prévoir les cas où je ne serai pas capable de travailler à cause de problèmes de santé par exemple. Pour que ça n'impacte pas la famille (ou le moins possible).</i></li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Entre le premier point du backlog et le dernier, il s'est passé 6 mois.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ce que je retiens de ce passage :</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Il faut prendre le temps de la réflexion avant de se lancer.</li>
<li>Cela prend du temps. Il ne faut pas être pressé et accepter de ne pas totalement tout maitriser.</li>
<li>Il y a vraiment beaucoup d'informations sur Internet pour se documenter sur le sujet.</li>
<li>C'est bien de pouvoir en discuter avec d'autres freelance (avec des amis, sur les forums, ...).</li>
<li>C'est bien d'avoir un peu d'argents de côté histoire de pouvoir tenir avant que la première facture de soit payée. </li>
<li>Il semblerait que la façon dont je travaille avec mon comptable ne soit pas la solution la plus courante mais elle me convient bien pour le moment et ne me prend pas beaucoup de temps (ça doit être de l'ordre de 2h par mois).</li>
</ul>
<br />
<div style="text-align: justify;">
Petite anecdote : J'ai voulu ouvrir une carte chez Castorama pour profiter des reductions car j'avais un gros achat à faire et mon dossier a été refusé... C'est ça le scoring, je suis maintenant quelqu'un de "risqué" ;-).</div>
<br />
<br />
<br />
<br /></div>
Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-4119583874959957708.post-43560399749248369072012-04-24T12:07:00.001+02:002012-04-28T14:12:31.808+02:00Histoire d'une Cassandra Lan Party à Devoxx France<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: large;"><u>Genèse</u></span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout commença par un coup de fil de <a href="https://twitter.com/nromanetti" target="_blank">Nicolas Romanetti.</a> un soir du début du mois de Mars. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
J'avais appris le mois précédent que mon Tool In Action sur <a href="https://github.com/jsevellec/cassandra-unit" target="_blank">cassandra-unit</a> n'avait pas été retenu. Rien d'étonnant quand on voit la qualité des sujets qui ont été retenus.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nicolas, lui, avait proposé 2 talks sur Cassandra : </div>
<div style="text-align: justify;">
- le premier au format University : "<a href="http://www.devoxx.com/pages/viewpage.action?pageId=6128070" target="_blank">Introduction à Cassandra</a>". L'idée est de balayer sur 3 heures tous les concepts de Cassandra en prenant bien le temps du question/réponses mais dans un format très théorique basé sur des slides.</div>
<div style="text-align: justify;">
- le second au format Labs : "Hands On Cassandra". Ce "Hands On" devait initialement permettre aux participants de manipuler un peu cassandra "dans son coin" sur son poste.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ces deux talks ont été sélectionnés (et se suivent sur la même journée, 2x3H). C'est ça les rockstars :-).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Histoire d'un coup de Fil :</div>
<div style="text-align: justify;">
N : Salut Jérémy, dis moi, je ne sais pas si tu as vu mais mes 2 talks ont été sélectionnés.</div>
<div style="text-align: justify;">
moi : oui énorme, c'est cool, les participants qui le souhaitent pourront faire une journée complète sur Cassandra!</div>
<div style="text-align: justify;">
N : J'ai besoin d'aide sur le Hands On, ça te dirait de me filer un coup de main?</div>
<div style="text-align: justify;">
moi : un coup de main comment?</div>
<div style="text-align: justify;">
N : Pour le Hands On, j'ai une idée, j'ai envie de changer légèrement le contenu, c'est ok avec les organisateurs mais il me faut une équipe. J'ai envie de faire une Lan Party.</div>
<div style="text-align: justify;">
Moi : Comme <a href="http://www.edwardcapriolo.com/roller/edwardcapriolo/entry/cassandranyc_nosql_lan_party_was" target="_blank">celle qui a eu lieu à NYC</a>?</div>
<div style="text-align: justify;">
N : Yes</div>
<div style="text-align: justify;">
Moi : BANCO! C'est parti pour une Cassandra Lan Party à Devoxx France.</div>
<div style="text-align: justify;">
Lui : Tu es où toi?</div>
<div style="text-align: justify;">
Moi : sur Lille et toi?</div>
<div style="text-align: justify;">
Lui : Ajaccio ;-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
C'est comme ça qu'on se retrouve dans le même bateau, <a href="https://twitter.com/nromanetti" target="_blank">Nicolas</a>, <a href="https://twitter.com/framiere" target="_blank">Florent</a>, <a href="https://twitter.com/pcmanus" target="_blank">Sylvain</a> et <a href="https://twitter.com/jsevellec" target="_blank">moi</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il y aura donc une Cassandra Lan Party à Devoxx France :</div>
<div style="text-align: justify;">
- <a href="http://www.jaxio.com/2012/03/21/cassandra-party-devoxx-france.html">http://www.jaxio.com/2012/03/21/cassandra-party-devoxx-france.html</a></div>
<div style="text-align: justify;">
- <a href="http://www.devoxx.com/display/FR12/Hands+on+Cassandra">http://www.devoxx.com/display/FR12/Hands+on+Cassandra</a></div>
<div style="text-align: justify;">
<br /></div>
<span style="font-size: large;"><u>Préparation</u></span><br />
<br />
<div style="text-align: justify;">
On en maintenant mi-mars. Devoxx, c'est quand même dans un mois. Alerte générale!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On échange pas mal entre nous par mail et sur un petit google doc partagé. Le point noir, c'est le réseau, la seule façon pour que ça se passe sans problème, c'est de ne pas compter sur celui de Devoxx et donc c'est de venir avec à Devoxx. "Qui a des switchs? Heu... Personne... ". Tout le reste n'est que de la préparation et du détail (ou presque ;-)). Pas de switchs, pas de Cassandra Lan party! On lance alors <a href="http://www.unchticafe.fr/2012/03/cassandra-lan-party-we-need-you.html" target="_blank">un appel à la population.</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nous n'avons pas eu tant de retour que ça mais des retours gagnants! :</div>
<div style="text-align: justify;">
- <a href="http://www.euratechnologies.com/" target="_blank">Euratechnologies</a> répond OK et nous prête 3 switchs professionnel 24 ports en gigabit neuf ainsi qu'une quarantaine de câble RJ45 de différentes longueur!</div>
<div style="text-align: justify;">
- <a href="https://twitter.com/thomasrecloux" target="_blank">Thomas Recloux</a>, un ami un peu geek ;-), me prête aussi son switch personnel (enfin pro ;-)) de 24 ports en gigabit neuf.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Côté matériel, c'est tout bon.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En parallèle nous contactons <a href="https://twitter.com/tjake" target="_blank">Jake</a> et <a href="https://twitter.com/edwardcapriolo" target="_blank">Edward</a>, les organisateurs de la Cassandra Lan Party de NYC, pour avoir leur feedback. Pour faire simple : c'était fun mais la génération et l'attribution du token n'a pas fonctionné comme ils le voulaient</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Hey mais nous sommes début Avril! Alerte générale!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
L'idée émerge alors dans nos esprits de faire une application web pour aider les participants à récupérer leur token et configurer leur noeud cassandra. L'application web de la cassandra-lan-party, vient de naitre, 2 nuits pour coder ça en équipe, un peu de spring-mvc, de twitter bootstrap et hop. Nous mettrons prochainement les sources à disposition.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
De mon côté, je récupère le matériel et je fais des tests (je ne vous raconte pas comment madame était contente de voir ça dans le salon :-)) : </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg5Xqp_2_wGib7p5Br5vo_urVm4h0cHGg_fKJbTAOga-RxystLLpqtAZf__KQNfkG7MdPl_Lz9TsNnf81LPsNwMLGrEd6ju0bGWF163Z55VXw18H_cBTPXclzykBde9NfLZP2qfm5xq6Y/s1600/IMG_0369.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg5Xqp_2_wGib7p5Br5vo_urVm4h0cHGg_fKJbTAOga-RxystLLpqtAZf__KQNfkG7MdPl_Lz9TsNnf81LPsNwMLGrEd6ju0bGWF163Z55VXw18H_cBTPXclzykBde9NfLZP2qfm5xq6Y/s320/IMG_0369.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdfZreFw9KOT8KE-uz9Yr_zdXjmy8PWo-UX-zXan_BcitVfz2j64zdvJmEI8EOslelCOoUhrMbgAqrlu43KPRHRxkwonYGjENMDY5knvbsD9Gkw563t15GzHf_vTy3gucIElSPUEkMQPo/s1600/IMG_0370.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdfZreFw9KOT8KE-uz9Yr_zdXjmy8PWo-UX-zXan_BcitVfz2j64zdvJmEI8EOslelCOoUhrMbgAqrlu43KPRHRxkwonYGjENMDY5knvbsD9Gkw563t15GzHf_vTy3gucIElSPUEkMQPo/s320/IMG_0370.JPG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On peaufine aussi les slides.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tiens si on se faisait un tee-shirt, ça aiderait les participants à nous identifier plus facilement s'ils ont des problèmes :</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCMh-6KnABJdYm9fSukTyR3T9Q08c4A_MRdLFXK2Ok8D5I3yF1l9qQIxBuJB9XXryQEjFGZkVmi2380clZZtvZq4ZrUrOISwXb1PuemLqVfPyq3YSFi1KsYstcJ9r6RD1mYwf0dLuB5ug/s1600/IMG_0377.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCMh-6KnABJdYm9fSukTyR3T9Q08c4A_MRdLFXK2Ok8D5I3yF1l9qQIxBuJB9XXryQEjFGZkVmi2380clZZtvZq4ZrUrOISwXb1PuemLqVfPyq3YSFi1KsYstcJ9r6RD1mYwf0dLuB5ug/s320/IMG_0377.JPG" width="240" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<span style="font-size: large;"><u>Répétition</u></span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il n'y a pas de secret, il faut répéter! Ca nous permettra accessoirement de nous rencontrer IRL ;-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nicolas organise la semaine précédent Devoxx France, une répétition chez <a href="http://www.zenika.com/" target="_blank">Zenika</a>. </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.zenika.com/" target="_blank"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6UwMfeHipiFviS9rTjXiybacCIVuzA672FO4Sam7vkYIWreN03mRF74WCWvRjdLFE6UDgMsRG3LbxYSto4rXqYPa1_QvpWqrxkD64YdlKfiFgrYeJ0qllNwTUxzAiABlC8o_ztElE28Y/s1600/logo-zenika.jpg" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
C'est parti pour Paris, mais tiens, c'est vrai, il faut transporter tout le matériel réseau... : </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1jxBrzhiYbFJsFERyQvf8xBXRO_mwgTuYNTVir563UU7g8ePDZlcePwR8tx_t3F1TGcE3fzR_PX1xNjyFSb3-oVazqyrr9_3rJ0cybDq_7dxKKDPbtiuON-UAXX2s6ofVlTpcPwo8tM/s1600/IMG_0464.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1jxBrzhiYbFJsFERyQvf8xBXRO_mwgTuYNTVir563UU7g8ePDZlcePwR8tx_t3F1TGcE3fzR_PX1xNjyFSb3-oVazqyrr9_3rJ0cybDq_7dxKKDPbtiuON-UAXX2s6ofVlTpcPwo8tM/s320/IMG_0464.JPG" width="320" /></a></div>
<br />
Est-ce que la valise va fermer?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH2hRhiCEaRz89CpA8uP8U3evTifQ3q6PSuN3jLNO_-AO3DZrr-dq6Rszqe_cYOzhU-dSpMP6_cuR8VOaMPFvwwcBEmyAvBihlJvpf04evgAtX11lpFKWJe9VPh9FHbudZAN7GxPTCCA8/s1600/IMG_0415.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH2hRhiCEaRz89CpA8uP8U3evTifQ3q6PSuN3jLNO_-AO3DZrr-dq6Rszqe_cYOzhU-dSpMP6_cuR8VOaMPFvwwcBEmyAvBihlJvpf04evgAtX11lpFKWJe9VPh9FHbudZAN7GxPTCCA8/s320/IMG_0415.JPG" width="240" /></a></div>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Voici <a href="http://www.jaxio.com/2012/04/10/repetition-cassandra-lan-party.html" target="_blank">le récit</a> de la répétition ainsi que <a href="https://plus.google.com/u/0/photos/117025039764216142127/albums/5734870051549661809" target="_blank">les photos</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NmsqRW_t7UE/T5ZaDMQLv1I/AAAAAAAACe0/-r8wDyxnqd8/s1600/IMG_0384.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-NmsqRW_t7UE/T5ZaDMQLv1I/AAAAAAAACe0/-r8wDyxnqd8/s320/IMG_0384.JPG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nous avons mis en place 18 noeuds Cassandra sur différent OS sur 3 Datacenters.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Pour la petite anecdote, Tout le monde arrive progressivement pour la répétition, Je dis bonjour à plein de participants. On commence à s'installer et je dis à un moment à Nicolas, "On attend Florent pour commencer?" et là j'entend une voix qui répond derrière moi "ben je suis là". Moment de solitude ;-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nous avons pas mal de feedbacks intéressants et avons la confirmation qu'une application web pour aider les participants à récupérer leur token et configurer leur noeud cassandra est une très bonne idée, on nous donne même des idées de feature en plus. Merci <a href="http://fr.linkedin.com/in/bleporini" target="_blank">Brice</a>. C'est l'heure de recoder un peu dans l'application web et modifier les slides :-).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<u><span style="font-size: large;">The D Day</span></u></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le matin, Nicolas a fait un super talk sur Cassandra. Simple, clair, précis et efficace. De très bon échange avec le public. Voici <a href="http://www.slideshare.net/jaxio/introduction-cassandra-12617269" target="_blank">les slides</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mais c'est maintenant déjà l'heure du Hands On!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dans un premier temps, nous avons eu la chance d'avoir la salle du Hands On en avance. C'était d'ailleurs assez drôle de voir les serveurs préparer la salle avec des petits napperons, des verres et des bouteilles d'eau avec les tables et les chaises bien alignées avant que nous en prenions possession :-). Une fois la salle à disposition, hop, on enlève tout, on bouge tout pour constituer 3 zones avec les tables pour représenter physiquement 3 datacenters avec les chaises dans tous les sens, bref une Lan (merci <a href="https://twitter.com/thomasrecloux" target="_blank">Thomas</a> pour le coup de main lors de la mise en place!)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La Cassandra Lan party s'est déroulée en 3 étapes :</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- installation/configuration du réseau</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHPI6VlW1pVSha_XUDA6wQ7OOAM-CJJ8AbfLEAzFaOPoq01F8-wTA7kcFcEL6UkAiVLPUWul1v1kePC2wngTXZmiq781jPEfpTNP4okSzB03HYN8BS7z9rI421KZZ2yrOmToSt7aic34o/s1600/IMG_1524-web.JPG.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHPI6VlW1pVSha_XUDA6wQ7OOAM-CJJ8AbfLEAzFaOPoq01F8-wTA7kcFcEL6UkAiVLPUWul1v1kePC2wngTXZmiq781jPEfpTNP4okSzB03HYN8BS7z9rI421KZZ2yrOmToSt7aic34o/s320/IMG_1524-web.JPG.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout les participants se branchent par datacenter sur un switch. On note les IPs sur des Post-its. Un slide explique la conf réseau à effectuer ainsi que des tests pour vérifier que tout est ok.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- installation/configuration de Cassandra</div>
<div style="text-align: justify;">
Des clés USB sont distribuées. Il est possible d'installer Cassandra soit par les clés USB soit en la téléchargeant depuis notre application web. Les slides expliquent le paramétrage à effectuer... </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
L'application Web fournit le token et précise les éléments de configuration à modifier dans Cassandra :</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghy2wnsFfoRyga6rHxGXisgEiXhOsU9l-KiUdMREWIE0jSjiwPlMFsqgpq4wG9xTH9NnYRk-kzSRtKb3nEsasG8I13KlhikkSuhxgV1tizLBzsWdj6n_w_ahY5VArPltJL6mahgCSTtdk/s1600/Capture+d%E2%80%99e%CC%81cran+2012-04-14+a%CC%80+01.02.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghy2wnsFfoRyga6rHxGXisgEiXhOsU9l-KiUdMREWIE0jSjiwPlMFsqgpq4wG9xTH9NnYRk-kzSRtKb3nEsasG8I13KlhikkSuhxgV1tizLBzsWdj6n_w_ahY5VArPltJL6mahgCSTtdk/s400/Capture+d%E2%80%99e%CC%81cran+2012-04-14+a%CC%80+01.02.54.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- démarrage et exécution de différents scénarios sur le cluster</div>
<div style="text-align: justify;">
Voici les caractéristiques du cluster cassandra :</div>
<div style="text-align: justify;">
</div>
<ul>
<li>3 datacenters.</li>
<li>Utilisation du RackInferringSnich</li>
<li>3 seeds (un par DC)</li>
<li>Replication Factor de 9 (3 par DC).</li>
</ul>
<br />
<div style="text-align: justify;">
Nous avons démarrer dans un premier temps les 3 seeds (Sylvain, Florent et moi) puis dans un second temps nous avons démarrer progressivement tous les autres noeuds.</div>
<div style="text-align: justify;">
Et là, problème, les noeuds cassandra sur les machines windows ne veulent pas rejoindre le cluster, merci windows et à son firewall ;-). Une fois le firewall coupé, tout le monde arrive à rejoindre le cluster.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Notre cluster est constitué de 36 noeuds. D'un point de vue de l'équipe, on sait déjà qu'on a remporté notre pari. Le reste n'est que formalité ;-).</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCVVIZ2tvKhq5vP-9chuxF3HgCb9tKOxIGQ5cxIgD0CRawA0o1a8hLPKILG_EF7HWMltnS5bqBcrq9dkjuhlNzl1g57T2guC3jbDimzvBUR2UiqR1Jrsn07AAPy25SeBE61d-ANZI-IL8/s1600/IMG_0429.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCVVIZ2tvKhq5vP-9chuxF3HgCb9tKOxIGQ5cxIgD0CRawA0o1a8hLPKILG_EF7HWMltnS5bqBcrq9dkjuhlNzl1g57T2guC3jbDimzvBUR2UiqR1Jrsn07AAPy25SeBE61d-ANZI-IL8/s320/IMG_0429.JPG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<u>Nous avons mis en place un cluster Cassandra de 36 noeuds réparti sur 3 datacenters sur tout type d'OS.</u></div>
<div style="text-align: justify;">
<u><br /></u></div>
<div style="text-align: justify;">
La Cassandra Lan party de NYC est battue :-)</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXF-MOHUUjunji14s7Mk4zgQ3CU-3ClTpv11kc55frXczQP_dN6DePcXfPjk_2Y-xp3GXcGyB9s_VTDXAdX8CUzzYlPnUPS9Y_-0ySxUrmjhfA139nXWvHCqRkuOk4QXNxHXM9hTejaGM/s1600/IMG_1589-web.JPG.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXF-MOHUUjunji14s7Mk4zgQ3CU-3ClTpv11kc55frXczQP_dN6DePcXfPjk_2Y-xp3GXcGyB9s_VTDXAdX8CUzzYlPnUPS9Y_-0ySxUrmjhfA139nXWvHCqRkuOk4QXNxHXM9hTejaGM/s320/IMG_1589-web.JPG.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
C'est maintenant l'heure de jouer avec le cluster.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Par l'intermédiaire de <a href="http://wiki.apache.org/cassandra/NodeTool" target="_blank">nodetool</a>, les participants interrogent l'état du cluster et par l'intermédiaire de <a href="http://wiki.apache.org/cassandra/CassandraCli" target="_blank">cassandra-cli</a>, ils écrivent et lisent dans le keyspace créé pour l'occasion. Nous faisons d'abord tombé et revenir un DC puis nous faisons tomber et revenir 2 DCs. Les participants constate en live comment le cluster réagit... Bref, facile, c'est Cassandra, c'est fait pour ça :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- un peu de théorie pour terminer</div>
<div style="text-align: justify;">
Après une petite pause, les questions commencent à arriver en nombre et c'est le moment de repartir sur quelques slides pour pouvoir y répondre : le datamodel, le ring, le partitioner avec le token, le replication factor, le consistency level, tout y passe. Nicolas était bien au point après l'university du matin!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://plus.google.com/u/0/photos/117025039764216142127/albums/5734706557600527489" target="_blank">Toutes les photos de la Cassandra Lan Party sont ici</a></div>
<div style="text-align: justify;">
<br />
<a href="http://www.slideshare.net/jsevellec/cassandra-lan-party-devoxx-france" target="_blank">Les slides utilisés sont ici</a><br />
<br /></div>
<div style="text-align: justify;">
<u><span style="font-size: large;">Le mot de la fin</span></u></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Les objectifs étaient que les participants :</div>
<div style="text-align: justify;">
- mettent les mains dans le cambouis!</div>
<div style="text-align: justify;">
- constatent que Cassandra, ça n'est pas compliqué!</div>
<div style="text-align: justify;">
- s'amusent!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je ne suis pas très objectif justement mais je pense que nous ne sommes pas loin de les avoir tous atteints!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Pour ma part :</div>
<div style="text-align: justify;">
- ça a été super fun.</div>
<div style="text-align: justify;">
- l'ambiance était décontractée et conviviale.</div>
<div style="text-align: justify;">
- une valise de 40kg à trimballer, c'est lourd!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Merci à tous les participants de s'être prêté au jeu!</div>
<div style="text-align: justify;">
<br /></div>
<br />
<br /></div>Unknownnoreply@blogger.com5tag:blogger.com,1999:blog-4119583874959957708.post-67314522492502618922012-03-26T10:14:00.002+02:002012-03-26T10:14:43.173+02:00Bref. Je passe freelance<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Hello tous!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Voici un post un peu différent de ceux que j'ai l'habitude d'écrire. Il est beaucoup moins technique, beaucoup moins agile et beaucoup plus "moi".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ce post juste pour vous dire que je me lance bientôt en tant que Freelance IT sur la region Lilloise. Je vais proposer mes services autour de ces domaines #nosql #cassandra #java #spring-* #Play! #web #openSource #mobilité #agilité #Scrum #XP #coaching #architecture #...</div>
<div style="text-align: justify;">
<br />
Ce projet fait suite à 2 très belles expériences dans 2 entreprises très différentes, la première dans une SSII chez <a href="http://www.norsys.fr/" target="_blank">Norsys</a> et l'autre chez un petit éditeur logiciel <a href="http://www.sarbacane.com/" target="_blank">Sarbacane Software</a>. Un petite dédicace d'ailleurs à l'équipe de développement que je quitte : Jeremy, Yannick, Antoine, Nico, Marc et Yohan! N'oubliez pas les mecs : K.I.S.S. :-)<br />
<br />
Mon backlog de "passage indépendant" est encore bien rempli. Je ferai peut être un post sur la mise en place de cette nouvelle aventure, peut être sous forme de retour d'expérience si le contenu vaut le coup :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bref. Je passe Freelance.</div>
</div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-4119583874959957708.post-50635627732254748072012-03-23T10:55:00.001+01:002012-03-23T11:32:31.213+01:00Cassandra Lan Party : We need you!<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhum5zAd-x2zqt3D8E6xCBUScjeosUfey-NyBpH1fOvAMzhAXDo1lwj8S3Gl8PLqqNSKoy3Sy42A3jyD525SIQsuZwTqdD6ZiOONxnqlagesKuqwxg8WGl16ry3EBzylBpHGta4nPHhOgk/s1600/apache_cassandra_logo.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhum5zAd-x2zqt3D8E6xCBUScjeosUfey-NyBpH1fOvAMzhAXDo1lwj8S3Gl8PLqqNSKoy3Sy42A3jyD525SIQsuZwTqdD6ZiOONxnqlagesKuqwxg8WGl16ry3EBzylBpHGta4nPHhOgk/s1600/apache_cassandra_logo.jpeg" /></a></div>
<br />
La nouvelle est tombée hier : il y aura une Cassandra Lan Party à Paris à Devoxx! Elle aura lieu pendant le <a href="http://devoxx.fr/display/FR12/Hands+on+Cassandra">Hands On Cassandra</a> (la description du Hands On est en cours de mise à jour).<br />
<br />
<a href="https://twitter.com/nromanetti" target="_blank">Nicolas</a>, <a href="https://twitter.com/framiere" target="_blank">Florent</a>, <a href="https://twitter.com/pcmanus" target="_blank">Sylvain</a> et <a href="https://twitter.com/jsevellec" target="_blank">moi</a> vous aiderons et vous accompagnerons lors de cette session.<br />
<br />
Comment??? Vous étiez passé à côté de cette News??? Pourtant la terre a dû s'arrêter de tourner au moins pendant 2 secondes :-).<br />
<br />
<span style="font-size: large;"><u>Une Cassandra Lan Party, c'est quoi?</u></span><br />
<br />
<div style="text-align: justify;">
Vous souvenez-vous des <a href="http://fr.wikipedia.org/wiki/Lan-party">Lan Party</a> <a href="http://fr.wikipedia.org/wiki/Counter-Strike">Counter Strike</a> ou <a href="http://fr.wikipedia.org/wiki/Quake">Quake</a> que vous faisiez dans votre garage ou dans un immense hangar quand vous étiez plus jeunes (ou que vous faites encore ;-))? </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgx6W6cFMIROVMyehCXo5h3xgvVulxMaEsueFaKyGPQQIdt6uTNuQRxAPg7YdBOJuWrPnnG0AvOGBDqNOOBR7h5nGKtTgp7I3aioQXLdTDrRXGZT72IVL6r3RCX3sfAdCZtLBd74kAsc0/s1600/lanparty4bg.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgx6W6cFMIROVMyehCXo5h3xgvVulxMaEsueFaKyGPQQIdt6uTNuQRxAPg7YdBOJuWrPnnG0AvOGBDqNOOBR7h5nGKtTgp7I3aioQXLdTDrRXGZT72IVL6r3RCX3sfAdCZtLBd74kAsc0/s320/lanparty4bg.jpg" width="320" /></a></div>
<div style="text-align: center;">
(ok, nous serons beaucoup moins nombreux) </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
L'idée de reprendre tous les ingrédients de ce type d'évènement plutôt fun, convivial et participatif et de l'appliquer à <a href="http://cassandra.apache.org/">Cassandra</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tous les détails de l'évènement se trouve sur <a href="http://www.jaxio.com/2012/03/21/cassandra-party-devoxx-france.html" target="_blank">le blog de Jaxio</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;"><u>We need you!</u></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nous allons recréer un réseau ethernet pour l'évènement. </div>
<div style="text-align: justify;">
<span style="font-size: large;"><u><br /></u></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir3OIzylzrstpe5G63wPl7eX2qNNhIeyHaC-K7RKpuQgCKdFAYPdBIpQxNr0RxTdMErCZ3dDGprqvo0ePtp4E59b9lLIlEgrbf-qP8de_PxJc3GUp8QBr9zzBtVdcQxHGUdLduN0QW7w0/s1600/vrzlz6jj.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir3OIzylzrstpe5G63wPl7eX2qNNhIeyHaC-K7RKpuQgCKdFAYPdBIpQxNr0RxTdMErCZ3dDGprqvo0ePtp4E59b9lLIlEgrbf-qP8de_PxJc3GUp8QBr9zzBtVdcQxHGUdLduN0QW7w0/s200/vrzlz6jj.jpg" width="148" /></a></div>
<div style="text-align: justify;">
<span style="font-size: large;"><u><br /></u></span></div>
<div style="text-align: justify;">
Nous lançons donc un appel général pour que cet évènement puisse se réaliser : </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><u>Nous sommes à la recherche de matériels réseaux à prêter pendant une quinzaine de jours :</u></b></div>
<div style="text-align: justify;">
<b>- 3 gros switchs ethernet (20 ports mini par switch) en gigabit.</b></div>
<div style="text-align: justify;">
<b>- des cables RJ45 de différentes tailles (3 mètres mini).</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Nous faisons donc appel à vous, si vous avez ce type d'équipements et que vous souhaitez nous le mettre à disposition, nous en prendrons grand soin! Nous ne manquerons pas non plus de vous remercier pendant le Hands on!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si vous n'avez pas ce type d’équipements, n'hésitez pas à en parler autour de vous!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vous pouvez me contacter par mail à jsevellec at gmail dot com ou sur twitter <a href="https://twitter.com/jsevellec" target="_blank">@jsevellec</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A bientôt à Devoxx!</div>
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4119583874959957708.post-81761713471819837902012-03-14T17:45:00.000+01:002012-03-14T21:15:42.924+01:00Integration Continue avec Play! et Jenkins<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
On parle souvent de Play! pour dire que c'est un super framework pour faire du web simple, efficace, génial, fun, wouahou, ...<br />
<br />
(Pour infos, si vous n'étiez pas au courant, la version 2 de Play! vient de sortir. Plus d'infos <a href="http://www.playframework.org/" target="_blank">ici</a>)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On peut aussi dire que c'est un framework web qui permet de faire du TDD, de faire des tests unitaires, des tests d'intégrations et des tests selenium. Bref, faire du test avec Play!, ça n'est pas un problème. Je peux d'ailleurs vous le confirmer car j'ai pu tester la mise en oeuvre d'une démarche TDD sur une application play! avec succès.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJar30XJT7Ke60oQAuQtZWe1QpnyyJNeyXyVFJjv9-lMGiyWQvoEl3310ZDtQO9onGWoi2IEw77cOczHUdd_Xflox1JdwlMw2potWvXTuODU4mpxTTr1a9y-cDQ3saMZm1H_oPka0Qiy8/s1600/PLAY.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="66" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJar30XJT7Ke60oQAuQtZWe1QpnyyJNeyXyVFJjv9-lMGiyWQvoEl3310ZDtQO9onGWoi2IEw77cOczHUdd_Xflox1JdwlMw2potWvXTuODU4mpxTTr1a9y-cDQ3saMZm1H_oPka0Qiy8/s200/PLAY.png" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNXvk15xGcUsBiPLwhzH7UnxNCMzDRQ-mHepYF7sluBb-Go5nAL52Toaga-LS3xe88u40IXHjDNaTMnbIYdK1tAFKP2nNGnzNTRo5Ce6MC3sV62Fv6ExlAwJtCrTetSCXB4V4eXCeenxw/s1600/jenkins_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="63" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNXvk15xGcUsBiPLwhzH7UnxNCMzDRQ-mHepYF7sluBb-Go5nAL52Toaga-LS3xe88u40IXHjDNaTMnbIYdK1tAFKP2nNGnzNTRo5Ce6MC3sV62Fv6ExlAwJtCrTetSCXB4V4eXCeenxw/s200/jenkins_logo.png" width="200" /></a></div>
</div>
<div style="text-align: justify;">
<br />
<br />
Il est même possible, en faisant attention à quelques petites choses, de faire de l'intégration continue avec Jenkins et Play! (1.X) :<br />
<div>
<br /></div>
<div>
<u style="text-align: left;"><span style="font-size: large;">Assurer que vos tests fonctionnent en local</span></u></div>
<div>
Assurez-vous que vos tests sur votre poste de développement soit bien exécutés par Play! lorsque vous faites un :</div>
<pre style="background: #ffffff; color: black;">play auto-test
</pre>
<pre style="background: #ffffff; color: black;"></pre>
<pre style="background: #ffffff; color: black;"></pre>
</div>
<div style="text-align: justify;">
Si ce n'est pas le cas, ça ne sert à rien d'aller plus loin. Il faut déjà régler ce problème. Ça a été mon cas. Cela peut provenir de là : Vos tests unitaires doivent impérativement hériter de : <a href="http://www.playframework.org/documentation/api/1.2.4/play/test/UnitTest.html" target="_blank">UnitTest</a> ou <a href="http://www.playframework.org/documentation/api/1.2.4/play/test/BaseTest.html" target="_blank">BaseTest</a> (une classe abstraite de Play!) sinon vos classes de tests unitaires ne seront pas exécutées : </div>
<div style="text-align: justify;">
<a href="https://play.lighthouseapp.com/projects/57987/tickets/1074-feature-request-run-junit-tests-not-extending-basetest">https://play.lighthouseapp.com/projects/57987/tickets/1074-feature-request-run-junit-tests-not-extending-basetest</a></div>
<div style="text-align: justify;">
<br /></div>
<span style="font-size: large;"><u>Installer le Jenkins play-plugin</u></span><br />
<span style="text-align: justify;">Comment déployer une application Play! dans Jenkins? : "There's a plugin for that"</span><br />
<div style="text-align: justify;">
Il y a en effet un plugin pour ça : <a href="https://wiki.jenkins-ci.org/display/JENKINS/play-plugin">jenkins play-plugin</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vous pouvez suivre la procédure d'installation indiquer dans la documentation du plugin :</div>
<div style="text-align: justify;">
- Décompresser le zip de Play! sur le serveur qui héberge Jenkins dans un répertoire de votre choix.</div>
<div style="text-align: justify;">
- Installer le plugin Play! dans Jenkins par l'intermédiaire du menu d'administration de Jenkins.</div>
<div style="text-align: justify;">
<br /></div>
<span style="font-size: large;"><u>Créer un Job</u></span><br />
<br />
Il suffit ensuite de :<br />
<ul style="text-align: left;">
<li>créer un job freestyle.</li>
<li>définir l'url de votre DVCS. (Je n'ai aucun doute, que vous allez saisir une url <a href="http://git-scm.com/">Git</a> :-)).</li>
<li>définir ce qui déclenche les build (personnellement, je scrute l'outil de gestion une fois par heure : 5 * * * *).</li>
<li>Ajouter une étape au build : Play!</li>
<li>Renseigner les commandes play à exécuter. A la différence de la documentation du plugin et comme le serveur se trouve derrière un proxy d'entreprise voici la liste des commandes que j'ai saisies : </li>
<ul>
<li><span style="font-family: 'Courier New', Courier, monospace;">clean</span></li>
<li><span style="font-family: 'Courier New', Courier, monospace;">dependencies --sync -Dhttp.proxyHost={your-proxy-host} -Dhttp.proxyPort={your-proxy-port}</span></li>
<li><span style="font-family: 'Courier New', Courier, monospace;">auto-test</span></li>
</ul>
</ul>
(Je n'ai pas réussi à faire fonctionner l'option --deps qui aurait permis de grouper la commande 2 et 3 comme décrit dans la doc du plugin en faisant simplement : "<span style="font-family: 'Courier New', Courier, monospace;">auto-test --deps</span>").<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span><br />
<ul style="text-align: left;">
<li>cocher : "Play! auto-test reports" pour générer les rapports Play! intégré dans Jenkins.</li>
<li>notifier par email ceux qui doivent l'être.</li>
</ul>
<br />
et c'est tout : run... et hop ça marche.<br />
<br />
Vous pouvez voir les rapports d’exécution dans le détails de l’exécution du job dans le menu latéral "<a href="http://forge.sarbacane.com/jenkins/job/blacklist-monitor/12/playTestResult" style="background-color: white; color: #5c3566; font-family: Verdana, Helvetica, 'sans serif'; font-size: 11px; text-align: -webkit-auto; white-space: nowrap;">Play! Test Result</a>"<br />
<br />
Bref, je fais de l'intégration continue avec Jenkins et Play!.<br />
<br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4119583874959957708.post-84350688496733706412012-03-09T11:28:00.000+01:002012-03-09T13:50:52.745+01:00Maman, j'arrête les couches!<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW82Nfh1Bq6LEuF5mKLvR-0Wb5a_A_yhyphenhyphenxN1Edahy2PCzi4zMEmSDLAX1PRhS8SKB-XRd34MvKTv5SMg-cSxsVtIJ8hcYPdYYlM8ubud7BeDukRG3X7xw4pJov1uSvf5LW7Ojk04NP4Sw/s1600/couches-bebe-jetables.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW82Nfh1Bq6LEuF5mKLvR-0Wb5a_A_yhyphenhyphenxN1Edahy2PCzi4zMEmSDLAX1PRhS8SKB-XRd34MvKTv5SMg-cSxsVtIJ8hcYPdYYlM8ubud7BeDukRG3X7xw4pJov1uSvf5LW7Ojk04NP4Sw/s1600/couches-bebe-jetables.jpg" /></a></div>
<br />
<br />
<div style="text-align: justify;">
Oui maintenant je suis grand : j'arrête les couches (logicielles :-)).</div>
<div style="text-align: justify;">
<br />
Derrière ce titre un peu provocateur, il y a une vraie réflexion de fond. Les architectures en couche, est-ce vraiment utile? En tous cas, mes récentes expériences en terme de développement me font réfléchir. Voici où en est ma réflexion :</div>
<br />
<span style="font-size: large;"><u>Les couches c'est "historique"</u></span><br />
<br />
<div style="text-align: justify;">
L'architecture logicielle est un très vaste sujet qui évolue sans cesse. Les technologies évoluent, les informaticiens évoluent. Il y a même des effets de mode mais qui peut répondre à la question universelle : C'est quoi "La" bonne architecture? (si quelqu'un connait la réponse, je suis curieux qu'il me l'explique ;-))</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si on prend un peu de recul et que l'on regarde un peu dans le rétroviseur, on peut constater que les architectures logicielles n'arrêtent pas d'évoluer. Après les architectures client/serveur, il y a eu les architectures 3 tiers puis les architectures n-tiers puis les architectures infini-tiers. Après les architectures infini-tiers, comme cela devenait vraiment trop un plat de spaghetti, de nouveaux concepts sont apparus comme "l'urbanisation" et les architectures orientées services qui, en plus de découper une application horizontalement, propose un découpage vertical.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
L'urbanisation, ça veut tout dire et rien dire. On peut parler d'urbanisation à différents niveaux, cela peut aller de la façon de décrire la manière dont le code d'une application doit être découpé à comment structurer un système d'information, la planète, l'univers... </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si l'on reste à un niveau applicatif, l'idée derrière l'urbanisation c'est de définir des règles pour contraindre le développement dans le but d'organiser et de rendre réutilisable des services. L'objectif des architectures urbanisées est de pouvoir proposer un ensemble de service métiers réutilisable sans même savoir qui pourra les utiliser. Au final on se rend souvent compte qu'il est très dur de définir un service sans savoir qui va le réutiliser.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Oui j'ai dû développer sur ce type d'application. En tant que développeur, l'avantage (le seul que j'ai trouvé...) c'est de proposer un cadre très stricts de développement qui peut aider sur de très grosses équipes de développement. L'inconvénient, c'est d'oublier de réfléchir (ouch mais c'est dangereux ça! ;-)) à la façon de faire les choses et surtout c'est la lourdeur/lenteur de développement :</div>
<div style="text-align: justify;">
<br />
Développer un simple service de lecture d'un utilisateur dans un contexte de surarchitecture peut ressembler à ça : </div>
<div style="text-align: justify;">
- développer le code utile dans le Dao.<br />
- développer la méthode dans la couche du dessus en appelant la couche la méthode du DAO...<br />
- développer la méthode dans la couche du dessus en appelant la couche du dessous...<br />
- développer la méthode dans la couche du dessus en appelant la couche du dessous...<br />
- développer la méthode dans la couche du dessus en appelant la couche du dessous...<br />
- développer la méthode dans la couche du dessus en appelant la couche du dessous...<br />
- développer la méthode dans la couche du dessus en appelant la couche du dessous...<br />
- développer la méthode dans la couche du dessus en appelant la couche du dessous...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On est content quand on arrive enfin à l'IHM! Ce qu'on retient en tant que développeur, c'est que ce n'est pas très FUN et que la majorité du temps, toutes les couches intermédiaires sont inutiles...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En général ce type d'approche s'accompagne d'un bon gros dossier d'architecture qui, avant même d'avoir écrit la moindre ligne de code, propose le design global de la solution (à la fois en terme de choix technique mais surtout en terme de découpage logique...).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Oui j'avoue, j'ai aussi déjà fait ce type de dossier...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le danger de tout ça, c'est la "surarchitecture" : c'est à dire de prévoir des choses qui sont plus complexes que nécessaires, qui entraînent une lourdeur de développement et qui ne serviront à rien.</div>
<br />
<u><span style="font-size: large;">Et sans couche, comment ça peut marcher?</span></u><br />
<span style="text-align: justify;"><br /></span><br />
<span style="text-align: justify;">Ça commence mal, car je vais déjà commencer par vous dire que ce n'est pas vrai, il y en toujours des couches. En revanche je vous propose de n'en garder que 2 : l'IHM et le reste de l'application (mais c'est que ça ressemble au bon vieux client/serveur ça).</span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Là où je pense qu'on peut faire différemment c'est de, par défaut, ne pas définir de structure ou de règle pour le reste de l'application avant de commencer. Et là certains vont me dire : Mais vous êtes fou! Ho oui :</div>
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/k2SwTMOOYGs" width="560"></iframe>
</div>
<br />
Mais non, je ne suis pas fou!<br />
<br />
Pour ça, je vous propose 2 retours d'expériences de développements applicatifs différents qui vont dans ce sens :<br />
<br />
- TDD et KISS.<br />
<div style="text-align: justify;">
Le premier retour concerne le développement d'une application basée sur Cassandra (from scratch) que j'ai développé en full <a href="http://fr.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD</a> (Test Drivent Development) avec un état d'esprit <a href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank">KISS</a> (Keep It Simple and Stupid). C'est une application sur laquelle je n'avais fait que le minimum de choix techniques (mais il en faut un peu quand même) et aucun choix logique (à part un découpage IHM / reste de l'application). Le TDD s'est chargé du reste et a fait émerger le design. C'est très étonnant à vivre. J'avais par exemple refusé initialement de mettre en place le pattern DAO et il est apparu à force de refactoring...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- Play!</div>
<div style="text-align: justify;">
Le deuxième retour concerne le développement d'une application que j'ai faite récemment avec <a href="http://www.playframework.org/" target="_blank">Play!</a>. Et là, je me suis pris une belle claque. Play! est un framework web Java fait pour faire du Web, centré sur le design par URL, sur la simplicité et sur l’efficacité. Tout est différent et tout est simple : attribut public, méthode d'accès la BDD dans les entités, un fichier de conf et tout est convention over configuration... J'ai développé l'application en un temps record avec très peu de bug et un code très lisible. Je suis même encore surpris sur le peu de code écrit pour "faire le job". Un dernier point important, c'est le plaisir que l'on prend à développer dans ce type de contexte : C'EST LE PIED. Si l'on se recentre un peu nos fameuses couches, Play! est aussi centré sur le principe du design simple avec grossomodo une couche IHM et le reste de l'application...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;"><u>Pour Conclure</u></span><br />
<br />
Je dirais simplement que : </div>
<div style="text-align: justify;">
- Ce n'est pas parce qu'on commence simple et sans couches, qu'on ne pourra pas en créer. Le refactoring est fait pour ça.</div>
<div style="text-align: justify;">
- Les architectures simples sans (trop) de couches ne sont pas réservées aux petites applications, bien au contraire.</div>
<div style="text-align: justify;">
- Ce n'est pas parce qu'on sait qu'on a à faire à une "grosse" application qu'il faut obligatoirement vouloir tout structurer avant de commencer.</div>
<div style="text-align: justify;">
- Il faut être bien outillé pour commencer simple : soit d'un point de vue méthodologique comme de TDD soit par du "framework qui permet de faire simple".</div>
<div style="text-align: justify;">
- qu'il ne faut pas non plus mettre les requêtes SQL dans les JSP :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vous aussi, vous êtes grands, vous pouvez arrêter les couches!</div>
</div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-67599835642253611932012-02-21T15:04:00.000+01:002012-02-24T11:11:39.044+01:00Le TDD n'est pas naturel mais très addictif!<div dir="ltr" style="text-align: left;" trbidi="on">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSIvAj_ha-b0fpl1mFsDI7tqAqByGuJNZRnfmd0_f8NyrpNGiRy14Cjo1EADvScpRXAQnh7RoOjOAfg176QGAFBinvKCVSoamXVyioCOfrsjuSfpTHd7U8PAWpVT2zEJ9OT9Qu5OtDfs0/s1600/danger.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSIvAj_ha-b0fpl1mFsDI7tqAqByGuJNZRnfmd0_f8NyrpNGiRy14Cjo1EADvScpRXAQnh7RoOjOAfg176QGAFBinvKCVSoamXVyioCOfrsjuSfpTHd7U8PAWpVT2zEJ9OT9Qu5OtDfs0/s200/danger.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Danger</td></tr>
</tbody></table>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyjTbQe0qpphBsorEkNGVbFPs2wef59UH2nd9skWbIUE5e4I6ZoHSKRzLzCTX1ZHJ7veuYgmKGlpqzePgYUttjnDu_kNucIMUHohuVNxG15mTfmo0GH-oOp9l-J8dQSFuXHcz1z_owp_w/s1600/chirurgie.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<u><b>Il faut faire très attention!</b></u> : un peu comme la chirurgie esthétique, le TDD n'est pas une démarche naturelle mais une fois qu'on y a goûté, cette démarche a un fort pouvoir addictif! (désolé, je n'ai pas trouvé mieux comme métaphore :-))</div>
<div>
<div style="text-align: justify;">
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyjTbQe0qpphBsorEkNGVbFPs2wef59UH2nd9skWbIUE5e4I6ZoHSKRzLzCTX1ZHJ7veuYgmKGlpqzePgYUttjnDu_kNucIMUHohuVNxG15mTfmo0GH-oOp9l-J8dQSFuXHcz1z_owp_w/s1600/chirurgie.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto; text-align: left;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyjTbQe0qpphBsorEkNGVbFPs2wef59UH2nd9skWbIUE5e4I6ZoHSKRzLzCTX1ZHJ7veuYgmKGlpqzePgYUttjnDu_kNucIMUHohuVNxG15mTfmo0GH-oOp9l-J8dQSFuXHcz1z_owp_w/s200/chirurgie.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">extrait Nip Tuck</td></tr>
</tbody></table>
<div class="separator" style="clear: both;">
<u style="font-size: x-large; text-align: justify;">Le TDD c'est :</u></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le TDD signifie Test Driven Developpement ou Développement Dirigé par les Tests. Comme son nom l'indique c'est une méthode de développement basé (et même dirigé par les tests). L'idée principale est, pour développer une fonctionnalité, de faut d'abord l'exprimer sous forme de tests et d'ensuite développer la fonctionnalité pour faire passer le Test.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On entend souvent parler de "red, green, refactor" pour décrire le TDD :</div>
<div style="text-align: justify;">
- D'abord écrire un test qui échoue (vous exécutez votre test dans votre IDE et "la barre est rouge")</div>
<div style="text-align: justify;">
- Ecrire le code pour que le test passe (vous exécutez votre test dans votre IDE et "la barre est verte")</div>
<div style="text-align: justify;">
- Refactorer le code pour le rendre clair, lisible, limpide pour fair simple : beau!</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvL0YtVuxjfS89NcLG7vCoOGK8mQzc67IIK-7-jQcp5fJWdkgwf9jDt4VH1D9oc23G8l6duINvB7lHOl2ENM9iJSciN9L9jJAeHxOLUSp4BuCxnQllWSD_y7LKt_hFCFzjcNwlLYO3Q0M/s1600/IMG_0142.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvL0YtVuxjfS89NcLG7vCoOGK8mQzc67IIK-7-jQcp5fJWdkgwf9jDt4VH1D9oc23G8l6duINvB7lHOl2ENM9iJSciN9L9jJAeHxOLUSp4BuCxnQllWSD_y7LKt_hFCFzjcNwlLYO3Q0M/s200/IMG_0142.JPG" width="185" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Me</td></tr>
</tbody></table>
<div style="text-align: justify;">
Pfff... Après y avoir goûté, on se retrouve à porter des tee-shirts ridicules de geek sur le TDD... :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Une des pratiques du TDD poussée à l’extrême est le "<a href="http://gojko.net/2009/02/27/thought-provoking-tdd-exercise-at-the-software-craftsmanship-conference/" target="_blank">TDD as you meant it</a>" qui consiste globalement à tout écrire dans la classe de test (même le code pour faire passer le test) et de ne déplacer les méthodes en refactorant qu'une fois que le test passe.</div>
<br />
<span style="font-size: large;"><u>Constat:</u></span><br />
<div style="text-align: justify;">
Le TDD n'est pas une démarche naturelle. C'est quelque chose qui fait partie de l'évolution du développeur. En revanche quand on y a goûté, c'est une démarche qui parait naturelle et qu'on a envie de reproduire.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfL-seno1vpNhMAnog5Ly6Q26hKDJUnw60y1TfJJn7XTAdI5mFSpdyX5JpmbvJhscm1UL6F2tMeoHlKktcvKRA7bPKqDv5dIdrxQ6qtJhLw58W6IG9T7F4QmKd2Rd5qx3I7giy4dTCslQ/s1600/levolution-de-lhomme.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfL-seno1vpNhMAnog5Ly6Q26hKDJUnw60y1TfJJn7XTAdI5mFSpdyX5JpmbvJhscm1UL6F2tMeoHlKktcvKRA7bPKqDv5dIdrxQ6qtJhLw58W6IG9T7F4QmKd2Rd5qx3I7giy4dTCslQ/s200/levolution-de-lhomme.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Evolution de l'homme</td></tr>
</tbody></table>
<div style="text-align: justify;">
Quand on commence sa vie de développeur, on ne commence pas à directement faire du TDD. Je pense que la démarche est de d'abord comprendre la technologie, le langage et ses concepts avant de faire des Test Unitaires puis du TDD. Vous souvenez vous de la première ligne de code Java que vous avez écrite?</div>
<br />
C'était plutôt ça :<br />
<pre style="background: #ffffff; color: black;"><span style="color: maroon; font-weight: bold;">public</span> <span style="color: maroon; font-weight: bold;">static</span> void main(String[] args) <span style="color: purple;">{</span>
<span style="color: #bb7977; font-weight: bold;">System</span><span style="color: #808030;">.</span>out<span style="color: #808030;">.</span>println<span style="color: #808030;">(</span><span style="color: #0000e6;">"hello world"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
</pre>
<br />
ou plutôt ça :<br />
<pre style="background: #ffffff; color: black;">@Test
<span style="color: maroon; font-weight: bold;">public</span> void shouldSayHelloWorld() <span style="color: maroon; font-weight: bold;">throws</span> Exception <span style="color: purple;">{</span>
HelloWorld hello <span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">new</span> HelloWorld<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
assertThat<span style="color: #808030;">(</span>hello<span style="color: #808030;">.</span>say<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>isEqualTo<span style="color: #808030;">(</span><span style="color: #0000e6;">"Hello World"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
</pre>
<br />
Moi, par exemple, j'ai commencé par la première façon pas par la deuxième. J'imagine que pour beaucoup d'autres nous (les développeurs) c'était aussi le cas. CQFD :<br />
<br />
<div style="text-align: center;">
Le TDD n'est pas une démarche facile et naturelle!</div>
<br />
<div style="text-align: justify;">
Le TDD est une démarche vers laquelle un développeur peut, suivant son évolution et son contexte, avoir envie d'adopter. Cette évolution n'est pas forcément liée à un facteur temps: l'adoption peut être rapide ou ne jamais arriver.<br />
<br />
La difficulté du TDD est que pour vraiment comprendre la démarche, je pense qu'il faut l'avoir pratiqué ou l'avoir vu pratiquer. Je pense qu'il est donc difficile de convaincre quelqu'un de faire du TDD simplement en échangeant sur le sujet. La meilleure solution dans ce cas, c'est de lui proposer d'essayer!</div>
<br />
<u><span style="font-size: large;">Envie d'y goûter?</span></u><br />
<div style="text-align: justify;">
Pour illustrer l'idée, je vais reprendre la désormais célèbre scène de Matrix : la pilule bleu ou la pilule rouge. L'idée c'est donc ça :</div>
</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRj2jazgR9P9IBQyNP2vrrg1UuvEbs2XcBsQ9_zn4Z1hGUfCp12jCsIq8d9ElYNa_ZZuPVDCCTW9dxtfG2XLUNADfbyj0wg1bwu0hDFASoDveBAFMXnxYWXNL6IKCAkux1ma2Mhpd4BM/s1600/matrix.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRj2jazgR9P9IBQyNP2vrrg1UuvEbs2XcBsQ9_zn4Z1hGUfCp12jCsIq8d9ElYNa_ZZuPVDCCTW9dxtfG2XLUNADfbyj0wg1bwu0hDFASoDveBAFMXnxYWXNL6IKCAkux1ma2Mhpd4BM/s320/matrix.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">extrait Matrix</td></tr>
</tbody></table>
<div>
<div style="text-align: justify;">
<ul>
<li>Si tu ne dors plus la nuit car tu n'as pas confiance dans le code de ton application</li>
<li>Si tu es fatigué après chaque modification de code de devoir passer en mode debug pour voir comment se comporte ton code</li>
<li>Si à chaque message de commit tu as envie d'écrire "banzaï, on verra bien si ça marche"</li>
<li>Si tu as peur de refactorer ton code par peur de tout casser</li>
<li>Si tu ne sais pas comment concevoir ton application car cela te parait trop compliqué et que tu aimerais commencer simplement...</li>
</ul>
C'est que tu es forcément attiré une autre réalité... et la pilule rouge du Tests Unitaires et du TDD te fait de l'oeil.<br />
<br />
A la différence de Matrix, une fois que vous avez pris la pilule rouge, il vous reste encore tout à faire... Comment concrètement vous y mettre :<br />
<ul>
<li>Allez à un <a href="http://www.unchticafe.fr/2010/03/coding-dojo-en-entreprise.html" target="_blank">coding Dojo</a></li>
<li>Allez à un <a href="http://coderetreat.com/" target="_blank">code retreat</a> (retour <a href="http://blog.proxiad.com/2012/01/24/code-retreat-lille-2-retour-dexperience/" target="_blank">ici</a> ou <a href="http://walletguillaume.blogspot.com/2012/01/coderetreatlille2.html" target="_blank">ici</a>)</li>
<li>Demander à <a href="http://www.google.fr/search?&q=Test+driven+development" target="_blank">google</a></li>
</ul>
<br /></div>
<u><span style="font-size: large;">Les outils gravitant autour des tests unitaires </span></u><u><span style="font-size: large;">du TDD</span></u><u><span style="font-size: large;"> (Java oriented):</span></u><br />
Il existe une ensemble d'outillage pour vous aider à faire du TDD :<br />
<ul style="text-align: left;">
<li style="text-align: justify;">une librairie de tests unitaires : <a href="http://www.junit.org/" target="_blank">JUnit</a>. Le framework de base pour faire des tests unitaires en Java.</li>
<li style="text-align: justify;">des facilitateurs technologique : *Unit. Ces librairies ont pour but de venir en complément pour simplifier les tests liés à certaines technologies (<a href="http://www.dbunit.org/" target="_blank">DBUnit</a> vous aidera sur des tests avec une BDD relationnelle, <a href="http://jwebunit.sourceforge.net/" target="_blank">JWebUnit</a> vous aidera sur des tests avec une application WEB , <a href="http://htmlunit.sourceforge.net/" target="_blank">HtmlUnit</a> vous aidera à tester du HTML, <a href="http://xmlunit.sourceforge.net/" target="_blank">XmlUnit</a> vous aidera à tester du Xml, <a href="https://github.com/jsevellec/cassandra-unit/" target="_blank">CassandraUnit</a> vous aidera sur des tests avec Cassandra...)</li>
<li style="text-align: justify;">des facilitateurs sur la lisibilité du test (notamment sur les assertions) : <a href="http://code.google.com/p/hamcrest/wiki/Tutorial" target="_blank">Hamcrest</a> ou <a href="http://code.google.com/p/fest/" target="_blank">Fest-Assert</a>.</li>
<li style="text-align: justify;">les librairies de <a href="http://en.wikipedia.org/wiki/Mock_object" target="_blank">Mock</a> : Les objets "mocké" sont globalement des objets utilisés dans les tests dont on maîtrise le comportement pour tester d'autres objets (<a href="http://www.jmock.org/" target="_blank">JMock</a> ou <a href="http://code.google.com/p/mockito/" target="_blank">Mockito</a> par exemple).</li>
<li style="text-align: justify;">des librairies s'intégrant dans votre IDE pour faire du test en continu comme <a href="http://infinitest.github.com/" target="_blank">InfiniTest</a>.</li>
</ul>
<br />
<u><span style="font-size: large;">Le TDD partout?</span></u><br />
<div style="text-align: justify;">
C'est toujours plus facile à dire qu'à faire. Hum, tout un débat possible en perspective... Je ne suis pas un intégriste sur la question, je dirais simplement qu'il y a parfois beaucoup moins de plus value à faire du TDD sur certains couches applicatives... Par exemple, faire du TDD pour tester que quand on clique sur un bouton et bien ça clique sur le bouton...</div>
<u><span style="font-size: large;"><br /></span></u><br />
<u><span style="font-size: large;">Le TDD sur du code existant</span></u><br />
Oui et oui. Cet article de Xebia <a href="http://blog.xebia.fr/2011/12/23/peut-on-faire-du-tdd-sur-du-code-existant/" target="_blank">ici</a> l'explique d'ailleurs très bien.<br />
<br />
<span style="font-size: large;"><u>Pour conclure</u></span><br />
<div style="text-align: justify;">
Je pense qu'il y a un réel fossé entre un développeur qui a déjà fait du TDD et un qui n'en a jamais fait. Chacun trouve d'ailleurs que l'autre est un extra terrestre :-). Je pense qu'une fois de plus, c'est une démarche très intéressante que j'ai adoptée mais je comprend aussi que dans certains contextes il est difficile de la mettre en oeuvre. De toute façon, le TDD, c'est un peu la cerise sur le gâteau, car il est très difficile d'expliquer les avantages du TDD lorsqu'il faut parfois commencer par expliquer l'avantage de faire des tests!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le plus simple en tous cas avec le TDD pour vous faire votre propre avis, c'est d'y goûter :-)</div>
</div>
</div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-55350329078301223052012-02-13T17:10:00.000+01:002012-02-13T18:05:03.829+01:00xml vs json vs yaml (Java oriented)<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Il existe aujourd'hui un ensemble de format permettant de stocker des données. Il y a du choix!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On connait historiquement le format XML mais d'autres formats sont de plus en plus utilisés tels que JSON ou YAML.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je vous propose ici de faire une petit comparaison de ces 3 formats notamment lorsqu'on doit faire de la sérialisation/déserialisation en Java.</div>
<br />
<span style="font-size: large;"><u>XML : "le classique"</u></span><br />
<br />
Le bon "vieux" format XML est un standard incontournable de stockage de données.<br />
<br />
<u>Ses forces :</u><br />
<ul style="text-align: left;">
<li>Il est clairement fortement répandu, voir incontournable.</li>
<li>Il possède des langages de description permettant de contractualiser le contenu : <a href="http://fr.wikipedia.org/wiki/DTD">DTD</a> (Document Type Definition) ou <a href="http://fr.wikipedia.org/wiki/XML_Schema">XML Schema</a>.</li>
<li>Il est très outillé.</li>
<li>Il est lisible.</li>
</ul>
<u>Ses faiblesses :</u><br />
<ul style="text-align: left;">
<li>Il est très (trop) verbeux.</li>
<li>"complexe" à mettre en oeuvre.</li>
</ul>
<div>
<u>Comment on fait en java? </u></div>
<div style="text-align: justify;">
Il existe plusieurs type d'APIs pour "discuter XML" en Java. Dans une première approche, Il existe <a href="http://www.jdom.org/" target="_blank">JDOM</a> qui propose 2 orientations. La première est orienté "DOM" qui est de créer une représentation des données (non typé, à base de classe JDOM) XML en JAVA en mémoire. la seconde est orienté "SAX" qui est une APIs évènementielle qui parcourt le document et sur lequel on vient se câbler pour récupérer des morceaux de document.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Du coté des APIs plus haut niveau, <a href="http://jibx.sourceforge.net/" target="_blank">JIBX</a> ou <a href="http://jaxb.java.net/" target="_blank">JAXB</a> (notamment dans sa version 2) offre un environnement de travail complet sérialiser/déserialiser. Elles permettent notamment de manipuler en java des objets typés.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si on prend l’exemple de JAXB, l'idée est :</div>
<div style="text-align: justify;">
<ul>
<li>de récupérer ou créer le XML Schema représentant le document que l'on souhaite sérialiser/déserialiser (c'est le "contrat")</li>
<li>de générer avec XJC (outil de génération de classes de JAXB) les classes (annotées) correspondants à la structure du document. Un plugin maven permet d'intégrer ça au process de build : <a href="http://mojo.codehaus.org/jaxb2-maven-plugin/" target="_blank">jaxb2-maven-plugin</a></li>
<li>à l’exécution, utiliser les APIs JAXB avec les classes générés pour écrire ou lire du XML.</li>
</ul>
<div>
Voilà ce que cela peut donner : </div>
<div>
Pour déserialiser : </div>
<pre style="background: #ffffff; color: black;">JAXBContext jc = JAXBContext.newInstance(User.class)<span style="color: #808030;">;</span>
Unmarshaller unmarshaller = jc.createUnmarshaller()<span style="color: #808030;">;</span>
SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI)<span style="color: #808030;">;</span>
Schema schema = sf.newSchema(this.getClass().getResource("/user.xsd"))<span style="color: #808030;">;</span>
unmarshaller.setSchema(schema)<span style="color: #808030;">;</span>
User user = (User) unmarshaller.unmarshal(new File("user.xml"))<span style="color: #808030;">;</span>
</pre>
<pre style="background: #ffffff; color: black;"><span style="color: #808030;">
</span></pre>
<div>
Pour sérialiser :<br />
<pre style="background: #ffffff; color: black;">Marshaller marshaller = jc.createMarshaller()<span style="color: #808030;">;</span>
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE)<span style="color: #808030;">;</span>
marshaller.marshal( user, new File("user-modified.xml") )<span style="color: #808030;">;</span>
</pre>
<br />
C'est un peu verbeux mais ça marche bien :-)</div>
</div>
<br />
<span style="font-size: large;"><u>JSON : "à la mode"</u></span><br />
<br />
<u>Ses forces :</u><br />
<ul style="text-align: left;">
<li>Il est très à la mode et très répandu.</li>
<li>Il est bien outillé.</li>
<li>Il est peu verbeux.</li>
</ul>
<div>
<u>Ses faiblesses :</u></div>
<div>
<ul style="text-align: left;">
<li>Il est peu lisible.</li>
<li>Il n'existe pas de format de définition de schéma (seulement un <a href="http://tools.ietf.org/html/draft-zyp-json-schema-03" target="_blank">draft</a>).</li>
</ul>
<div>
<div style="text-align: justify;">
Je trouve le JSON moins lisible pour un humain mais il est souvent utilisé comme format d'échange inter applicatif (entre un client et un serveur par exemple) où le but n'est pas qu'il soit lisible mais qu'il soit léger et concis. C'est un format qui est notamment beaucoup utilisé dans les architectures REST.</div>
</div>
</div>
<div>
<br /></div>
<div>
<u>Comment je fais en java?</u></div>
<div>
<div style="text-align: justify;">
Il existe pas mal de librairies permettant de faire la sérialisation/désérialisation en JAVA. Pour en citer quelques unes : <a href="http://json-lib.sourceforge.net/" target="_blank">json-lib</a>, <a href="http://code.google.com/p/google-gson/" target="_blank">google-gson</a>, <a href="http://flexjson.sourceforge.net/" target="_blank">FlexJSON</a> ou encore <a href="http://jackson.codehaus.org/" target="_blank">Jackson</a>. C'est cette dernière que j'utilise en général. </div>
</div>
<div>
<br /></div>
<div>
Dans le cas de Jackson par exemple, l'APIs pour sérialiser/désérialiser en Java est très simple, il n'y a aucun impact sur votre code. Vous pouvez utiliser vos classes existantes et les sérialiser.<br />
<br />
Pour désérialiser :</div>
<pre style="background: #ffffff; color: black;">ObjectMapper mapper = new ObjectMapper()<span style="color: #808030;">;</span> <span style="color: dimgrey;">// can reuse, share globally</span>
User user = mapper.readValue(new File("user.json"), User.class)<span style="color: #808030;">;</span>
</pre>
<br />
Pour sérialiser :<br />
<pre style="background: #ffffff; color: black;">mapper.writeValue(new File("user-modified.json"), user)<span style="color: #808030;">;</span>
</pre>
<br />
C'est tout...<br />
<br />
<span style="font-size: large;"><u>YAML : "l'anti balise"</u></span><br />
<br />
<u>Sa force :</u><br />
<ul>
<li>Il est très peu verbeux.</li>
<li>Il est très lisible.</li>
</ul>
<div>
<u>Ces faiblesses :</u></div>
<div>
<ul>
<li>Il est moins connu et moins répandu.</li>
</ul>
<div>
Le YAML regroupe 2 points très intéressants : il est très lisible et peu verbeux. Comme le précise le site de YAML, son objectif est d'être "<span style="text-align: -webkit-auto;">human friendly".</span></div>
<div>
<br /></div>
<div>
Comment je fais en java?<br />
Il y a quelques librairies en java permettant de faire le job : <a href="http://jyaml.sourceforge.net/" target="_blank">JYaml</a> et <a href="http://code.google.com/p/snakeyaml/" target="_blank">SnakeYAML</a>. C'est d'ailleurs cette dernière que j'utilise.<br />
<br />
Dans le cas de SnakeYAML, comme pour Jackson avec JSON, il n'y a aucun impact en terme de code et vous pouvez réutiliser vos classes existantes en l'état.<br />
<br /></div>
</div>
<div>
Pour désérialiser :</div>
<pre style="background: #ffffff; color: black;">Yaml yaml = new Yaml()<span style="color: #808030;">;</span>
User user = yaml.loadAs(new File("user.yaml"), User.class)<span style="color: #808030;">;</span>
</pre>
<div>
<br />
Pour sérialiser:</div>
<pre style="background: #ffffff; color: black;">Yaml yaml = new Yaml()<span style="color: #808030;">;</span>
yaml.dump(user,new FileWriter("user-modified.yaml"))<span style="color: #808030;">;</span>
</pre>
<br />
C'est tout aussi...<br />
<br />
<span style="font-size: large;">Comparons : </span><br />
<br />
Bon, et maintenant si on faisait un petit test en exprimant la même chose dans les 3 formats et en regardant le résultat. Je vais baser l'exemple en exprimant un dataSet de <a href="https://github.com/jsevellec/cassandra-unit/" target="_blank">CassandraUnit</a>. On peut exprimer un dataSet dans ces 3 formats.<br />
<br />
Voici donc une première version xml :<br />
<pre style="background: #ffffff; color: black;"><span style="color: #004a43;"><?</span><span style="color: maroon; font-weight: bold;">xml</span><span style="color: #004a43;"> </span><span style="color: #074726;">version</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"</span><span style="color: #7d0045;">1.0</span><span style="color: #0000e6;">"</span><span style="color: #004a43;"> </span><span style="color: #074726;">encoding</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"</span><span style="color: #0000e6;">UTF-8</span><span style="color: #0000e6;">"</span><span style="color: #004a43;"> </span><span style="color: #074726;">standalone</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"</span><span style="color: #0f4d75;">yes</span><span style="color: #0000e6;">"</span><span style="color: #004a43;">?></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">keyspace</span> <span style="color: #666616;">xmlns</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"</span><span style="color: #666616;">http</span><span style="color: purple;">:</span><span style="color: maroon; font-weight: bold;">//</span><span style="color: #5555dd;">xml.dataset.cassandraunit.org</span><span style="color: #0000e6;">"</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>otherKeyspaceName<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">strategy</span><span style="color: #a65700;">></span>org.apache.cassandra.locator.SimpleStrategy<span style="color: #a65700;"></</span><span style="color: #5f5035;">strategy</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">replicationFactor</span><span style="color: #a65700;">></span>1<span style="color: #a65700;"></</span><span style="color: #5f5035;">replicationFactor</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">columnFamilies</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">columnFamily</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>beautifulColumnFamilyName<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">type</span><span style="color: #a65700;">></span>STANDARD<span style="color: #a65700;"></</span><span style="color: #5f5035;">type</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">keyType</span><span style="color: #a65700;">></span>UTF8Type<span style="color: #a65700;"></</span><span style="color: #5f5035;">keyType</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">comparatorType</span><span style="color: #a65700;">></span>LongType<span style="color: #a65700;"></</span><span style="color: #5f5035;">comparatorType</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">row</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">key</span><span style="color: #a65700;">></span>key10<span style="color: #a65700;"></</span><span style="color: #5f5035;">key</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>11<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>utf8(value11)<span style="color: #a65700;"></</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>12<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>utf8(value12)<span style="color: #a65700;"></</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">row</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">row</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">key</span><span style="color: #a65700;">></span>key20<span style="color: #a65700;"></</span><span style="color: #5f5035;">key</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>21<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>uuid(13816710-1dd2-11b2-879a-782bcb80ff6a)<span style="color: #a65700;"></</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">row</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">columnFamily</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">columnFamily</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>columnFamilyWithCompositeType<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">type</span><span style="color: #a65700;">></span>STANDARD<span style="color: #a65700;"></</span><span style="color: #5f5035;">type</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">keyType</span><span style="color: #a65700;">></span>CompositeType(LongType,UTF8Type)<span style="color: #a65700;"></</span><span style="color: #5f5035;">keyType</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">comparatorType</span><span style="color: #a65700;">></span>CompositeType(UTF8Type,IntegerType,UTF8Type)<span style="color: #a65700;"></</span><span style="color: #5f5035;">comparatorType</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">defaultColumnValueType</span><span style="color: #a65700;">></span>UTF8Type<span style="color: #a65700;"></</span><span style="color: #5f5035;">defaultColumnValueType</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">row</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">key</span><span style="color: #a65700;">></span>10:azerty<span style="color: #a65700;"></</span><span style="color: #5f5035;">key</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>aa:10:aa<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>Chuck<span style="color: #a65700;"></</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>aa:10:ab<span style="color: #a65700;"></</span><span style="color: #5f5035;">name</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>Larry<span style="color: #a65700;"></</span><span style="color: #5f5035;">value</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">column</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">row</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">columnFamily</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">columnFamilies</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: #5f5035;">keyspace</span><span style="color: #a65700;">></span>
</pre>
<br />
<br />
Voici le même dataSet exprimé en JSON :<br />
<pre style="background: #ffffff; color: black;"><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">otherKeyspaceName</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">replicationFactor</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #008c00;">1</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">strategy</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">org.apache.cassandra.locator.SimpleStrategy</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">columnFamilies</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #808030;">[</span><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">beautifulColumnFamilyName</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">type</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">STANDARD</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">keyType</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">UTF8Type</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">comparatorType</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">LongType</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">rows</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #808030;">[</span><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">key</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">key10</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">columns</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #808030;">[</span><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">11</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">value</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">utf8(value11)</span><span style="color: maroon;">"</span>
<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">12</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">value</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">utf8(value12)</span><span style="color: maroon;">"</span>
<span style="color: purple;">}</span><span style="color: #808030;">]</span>
<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">key</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">key20</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">columns</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #808030;">[</span><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">21</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">value</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">utf8(value11)</span><span style="color: maroon;">"</span>
<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">12</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">value</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">uuid(13816710-1dd2-11b2-879a-782bcb80ff6a)</span><span style="color: maroon;">"</span>
<span style="color: purple;">}</span><span style="color: #808030;">]</span>
<span style="color: purple;">}</span><span style="color: #808030;">]</span>
<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">columnFamilyWithCompositeType</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">type</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">STANDARD</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">keyType</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">CompositeType(LongType,UTF8Type)</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">comparatorType</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">CompositeType(UTF8Type,IntegerType,UTF8Type)</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">defaultColumnValueType</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">UTF8Type</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">rows</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #808030;">[</span><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">key</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">10:azerty</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">columns</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: #808030;">[</span><span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">aa:10:aa</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">value</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">Chuck</span><span style="color: maroon;">"</span>
<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">name</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">aa:10:ab</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span>
<span style="color: maroon;">"</span><span style="color: #0000e6;">value</span><span style="color: maroon;">"</span> <span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">Larry</span><span style="color: maroon;">"</span>
<span style="color: purple;">}</span><span style="color: #808030;">]</span>
<span style="color: purple;">}</span><span style="color: #808030;">]</span>
<span style="color: purple;">}</span><span style="color: #808030;">]</span>
<span style="color: purple;">}</span>
</pre>
<br />
Enfin, toujours le même dataSet exprimé en YAML :<br />
<pre style="background: #ffffff; color: black;"><span style="color: #e34adc;">name:</span> otherKeyspaceName
<span style="color: #e34adc;">replicationFactor:</span> <span style="color: #008c00;">1</span>
<span style="color: #e34adc;">strategy:</span> org<span style="color: #808030;">.</span>apache<span style="color: #808030;">.</span>cassandra<span style="color: #808030;">.</span>locator<span style="color: #808030;">.</span>SimpleStrategy
<span style="color: #e34adc;">columnFamilies:</span>
<span style="color: #808030;">-</span> name<span style="color: purple;">:</span> beautifulColumnFamilyName
<span style="color: #e34adc;"> type:</span> STANDARD
<span style="color: #e34adc;"> keyType:</span> UTF8Type
<span style="color: #e34adc;"> comparatorType:</span> LongType
<span style="color: #e34adc;"> rows:</span>
<span style="color: #808030;">-</span> key<span style="color: purple;">:</span> key10
<span style="color: #e34adc;"> columns:</span>
<span style="color: #808030;">-</span> <span style="color: purple;">{</span>name<span style="color: purple;">:</span> <span style="color: #008c00;">11</span><span style="color: #808030;">,</span> value<span style="color: purple;">:</span> utf8<span style="color: #808030;">(</span>value11<span style="color: #808030;">)</span><span style="color: purple;">}</span>
<span style="color: #808030;">-</span> <span style="color: purple;">{</span>name<span style="color: purple;">:</span> <span style="color: #008c00;">12</span><span style="color: #808030;">,</span> value<span style="color: purple;">:</span> utf8<span style="color: #808030;">(</span>value12<span style="color: #808030;">)</span><span style="color: purple;">}</span>
<span style="color: #808030;">-</span> key<span style="color: purple;">:</span> key20
<span style="color: #e34adc;"> columns:</span>
<span style="color: #808030;">-</span> <span style="color: purple;">{</span>name<span style="color: purple;">:</span> <span style="color: #008c00;">21</span><span style="color: #808030;">,</span> value<span style="color: purple;">:</span> utf8<span style="color: #808030;">(</span>value11<span style="color: #808030;">)</span><span style="color: purple;">}</span>
<span style="color: #808030;">-</span> <span style="color: purple;">{</span>name<span style="color: purple;">:</span> <span style="color: #008c00;">12</span><span style="color: #808030;">,</span> value<span style="color: purple;">:</span> uuid(13816710-1dd2-11b2-879a-782bcb80ff6a<span style="color: #808030;">)</span><span style="color: purple;">}</span>
<span style="color: #808030;">-</span> name<span style="color: purple;">:</span> columnFamilyWithCompositeType
<span style="color: #e34adc;"> type:</span> STANDARD
<span style="color: #e34adc;"> keyType:</span> CompositeType<span style="color: #808030;">(</span>LongType<span style="color: #808030;">,</span>UTF8Type<span style="color: #808030;">)</span>
<span style="color: #e34adc;"> comparatorType:</span> CompositeType<span style="color: #808030;">(</span>UTF8Type<span style="color: #808030;">,</span>IntegerType<span style="color: #808030;">,</span>UTF8Type<span style="color: #808030;">)</span>
<span style="color: #e34adc;"> defaultColumnValueType:</span> UTF8Type
<span style="color: #e34adc;"> rows:</span>
<span style="color: #808030;">-</span> key<span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">10:azerty</span><span style="color: maroon;">"</span>
<span style="color: #e34adc;"> columns:</span>
<span style="color: #808030;">-</span> <span style="color: purple;">{</span>name<span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">aa:10:aa</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span> value<span style="color: purple;">:</span> Chuck<span style="color: purple;">}</span>
<span style="color: #808030;">-</span> <span style="color: purple;">{</span>name<span style="color: purple;">:</span> <span style="color: maroon;">"</span><span style="color: #0000e6;">aa:10:ab</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span> value<span style="color: purple;">:</span> Larry<span style="color: purple;">}</span>
</pre>
<br />
et là on se dit, tiens, c'est sympa le YAML :-).<br />
<br />
Pour exprimer la même chose, il aura fallu :<br />
<br />
<ul style="text-align: left;">
<li>1131 octets au format XML (non formaté)</li>
<li>793 octets au format JSON (non formaté)</li>
<li>779 octets au format YAML</li>
</ul>
<br />
<span style="font-size: large;"><u>Conclusion</u></span><br />
<div style="text-align: justify;">
L'objet de cet article n'est pas de dire qui est le meilleur. Le cas de stockage de DataSet est en effet particulier car un des critères est justement qu'il soit "human readable" mais ce qui est surprenant c'est qu'au final, c'est YAML qui est le plus lisible mais aussi le plus concis.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En général, chacun de ces formats est utilisés dans des contextes différents même s'il est vrai que le XML et le JSON, qui sont plus répandus, sont souvent opposés en terme de comparaison : </div>
<div style="text-align: justify;">
web services SOAP/XML vs web services REST/JSON. </div>
<div style="text-align: justify;">
Oui le XML est plus verbeux que le JSON mais il est plus "contractuel". </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
On retrouve en revanche plus le format YAML comme format de fichiers de configuration comme c'est le cas pour le fichier de configuration de <a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> par exemple. Je trouve en tous cas ce format de fichier comme une alternative intéressante qu'il ne faut pas oublier!</div>
<br /></div>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-4119583874959957708.post-43376358764854516762012-02-10T11:48:00.000+01:002012-02-12T18:26:01.925+01:00CassandraUnit : un outil Dev & Ops!<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://github.com/jsevellec/cassandra-unit">CassandraUnit</a> est un framework permettant de vous aider à développer des applications Java basé utilisant <a href="http://cassandra.apache.org/">Cassandra</a>.<br />
<br />
Depuis la <a href="https://github.com/jsevellec/cassandra-unit/wiki/changelog">version 1.0.1.4</a>, C'est maintenant un outil à la fois Dev & Ops, car il peut vous accompagner dans toutes les phases de votre projet :<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><u>Un outil @Dev:</u></span><br />
<span style="text-align: justify;">CassandraUnit est initialement né de la volonté de vouloir faire du <a href="http://fr.wikipedia.org/wiki/Test_Driven_Development">TDD</a> en testant aussi la persistance dans Cassandra. Le but était de répondre à 2 problématiques : </span><br />
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">Comment développer un service de lecture de données dans Cassandra en faisant du TDD sans avoir de cluster Cassandra?</li>
<li style="text-align: justify;">Comment faire en sorte que mes tests unitaires soient portables et isolés pour pouvoir faire de l'intégration continue?</li>
</ul>
<div>
<div style="text-align: justify;">
L'idée directrice était de proposer un environnement au niveau des tests unitaires qui permettent avant leur exécution :</div>
</div>
<div style="text-align: left;">
<ul style="text-align: left;">
<li style="text-align: justify;">de démarrer une instance embarquée de Cassandra.</li>
<li style="text-align: justify;">de remplir cette instance avec un keyspace et des données.</li>
</ul>
</div>
<div style="text-align: left;">
Comment ça marche ?<br />
<br />
Il faut dans un premier temps définir votre dataSet, C'est le jeu de données qui sera inséré dans Cassandra pour votre test unitaire.<br />
<br />
CassandraUnit vous permet selon votre préférence de définir un dataSet au format <a href="http://fr.wikipedia.org/wiki/Extensible_Markup_Language">XML</a>, <a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation">JSON</a> ou <a href="http://www.yaml.org/">Yaml</a> ( plus d'infos <a href="https://github.com/jsevellec/cassandra-unit/wiki/How-to-create-a-dataset">ici</a>)<br />
<br /></div>
<div style="text-align: left;">
Il faut ensuite l'intégrer au niveau de votre test ou de votre code. Il est possible de faire ça de plusieurs manières :</div>
<div style="text-align: left;">
<ul style="text-align: left;">
<li>soit de manière native en manipulant l'APIs (donc pas forcément dans un test) : </li>
</ul>
</div>
<pre style="background: #ffffff; color: black;">EmbeddedCassandraServerHelper.startEmbeddedCassandra()<span style="color: #808030;">;</span>
DataLoader dataLoader = new DataLoader("TestCluster", "localhost:9171")<span style="color: #808030;">;</span>
dataLoader.load(new ClassPathJsonDataSet("simpleDataSet.json"))<span style="color: #808030;">;</span></pre>
<div style="text-align: left;">
<div style="text-align: left;">
</div>
<ul style="text-align: left;">
<li>soit par héritage au niveau de votre classe de Test :</li>
</ul>
</div>
<pre style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; text-align: left;"><span style="color: maroon; font-weight: bold;">public</span> <span style="color: maroon; font-weight: bold;">class</span> yourTest <span style="color: maroon; font-weight: bold;">extends</span> AbstractCassandraUnit4TestCase <span style="color: purple;">{</span>
<span style="color: #808030;">@</span>Override
<span style="color: maroon; font-weight: bold;">public</span> DataSet getDataSet<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">return</span> <span style="color: maroon; font-weight: bold;">new</span> ClassPathJsonDataSet<span style="color: #808030;">(</span><span style="color: #0000e6;">"simpleDataSet.json"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: #808030;">@</span>Test
<span style="color: maroon; font-weight: bold;">public</span> <span style="color: #bb7977;">void</span> shouldHaveLoadASimpleDataSet<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: maroon; font-weight: bold;">throws</span> <span style="color: #bb7977; font-weight: bold;">Exception</span> <span style="color: purple;">{</span>
assertThat<span style="color: #808030;">(</span>getKeyspace<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> notNullValue<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">/* and query all what you want */</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
</pre>
<div>
<div style="text-align: justify;">
<ul>
<li>soit sans héritage! merci Junit @Rule</li>
</ul>
<pre style="background: #ffffff; color: black;"><span style="color: maroon; font-weight: bold;">public</span> <span style="color: maroon; font-weight: bold;">class</span> SecondaryIndexWithRuleTest <span style="color: purple;">{</span>
<span style="color: #808030;">@</span>Rule
<span style="color: maroon; font-weight: bold;">public</span> CassandraUnit cassandraUnit <span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">new</span> CassandraUnit<span style="color: #808030;">(</span><span style="color: maroon; font-weight: bold;">new</span> ClassPathJsonDataSet<span style="color: #808030;">(</span><span style="color: #0000e6;">"simpleDataSet.json"</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: #808030;">@</span>Test
<span style="color: maroon; font-weight: bold;">public</span> <span style="color: #bb7977;">void</span> shouldHaveLoadASimpleDataSet<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: maroon; font-weight: bold;">throws</span> <span style="color: #bb7977; font-weight: bold;">Exception</span> <span style="color: purple;">{</span>
assertThat<span style="color: #808030;">(</span>getKeyspace<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span> notNullValue<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">/* and query all what you want */</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
</pre>
<br /></div>
<span class="Apple-style-span" style="font-size: large;"><u>Un outil @Ops</u></span><br />
<span style="text-align: justify;">Depuis la version 1.0.1.4, CassandraUnit propose un outil en ligne de commande multi OS : le "cu-loader".</span><br />
<div style="text-align: justify;">
Cet outil en ligne de commande permet de réutiliser vos dataSets pour créer vos keyspaces et/ou charger vos données dans d'autres cluster Cassandra que votre instance de Cassandra embarquée en @Dev.</div>
<div style="text-align: justify;">
<br />
L'outil permet de réutiliser les dataSets sans les modifier mais avec la possibilité de surcharger certaines déclaration liées à la configuration du cluster Cassandra (comme le replication factor, la stratégie, ...).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
L'objectif de l'outil est d'éviter d'introduire des erreurs liées au changement d'environnement en créant un keyspace qui ne correspondrait au keyspace utilisé en développement.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
CassandraUnit est diponible sous forme de distribution téléchargeable depuis github <a href="https://github.com/jsevellec/cassandra-unit/downloads">ici</a> ainsi que sur le repo central maven. Il suffit donc de le décompresser et de rajouter</div>
<div style="text-align: justify;">
<br /></div>
Voici ce que ça donne à l'utilisation :<br />
<br />
<pre style="background: #ffffff; color: black;">> cu-loader
Missing required options: f, h, p
usage: CassandraUnitLoader is a tool to load CassandraUnit data Set into cassandra cluster
-f,--file <arg> dataset to load
-h,--host <arg> target host (required)
-o,--onlySchema only load schema (optional)
-p,--port <arg> target port (required)
-r,--replicationFactor <arg> override the replication factor set in the dataset (optional)
-s,--strategy <arg> override the strategy set in the dataset (optional)
</pre>
Un exemple simple :<br />
<pre style="background: #ffffff; color: black;">> cu-loader -f datasetDefaultValue.xml -h localhost -p 9160
</pre>
Un exemple complet :<br />
<pre style="background: #ffffff; color: black;">> cu-loader -f datasetDefaultValue.xml -h 10.10.10.01 -p 9160 -o -r 3 -s org.apache.cassandra.locator.NetworkTopologyStrategy
</pre>
Vous trouverez plus de détails dans le doc <a href="https://github.com/jsevellec/cassandra-unit/wiki/How-to-use-it-in-command-line">ici</a><br />
<br />
Voici des liens qui pourront vous être utile si vous voulez aller plus loin :<br />
- github : <a href="https://github.com/jsevellec/cassandra-unit/">https://github.com/jsevellec/cassandra-unit/</a><br />
- mailing list : <a href="https://groups.google.com/group/cassandra-unit-users?hl=fr">https://groups.google.com/group/cassandra-unit-users?hl=fr</a><br />
- twitter : <a href="https://twitter.com/cassandraunit">https://twitter.com/cassandraunit</a><br />
<br />
Bref. Un bel outil. :-)<br />
<br />
<br />
<br /></div>
</div>
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4119583874959957708.post-30789921495339606512012-01-27T17:34:00.003+01:002012-02-12T18:28:13.257+01:00Brancher Nexus sur Active Directory (LDAP)<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Après avoir perdu un peu de temps à configurer <a href="http://nexus.sonatype.org/">Nexus</a> sur <a href="http://fr.wikipedia.org/wiki/Active_Directory">Active Directory</a> par l'intermédiaire du protocole <a href="http://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol">LDAP</a>, Je vous propose de vous faire partager mon expérience sur le sujet et en français</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mon besoin était le suivant :</div>
<ul style="text-align: left;">
<li style="text-align: justify;">Mettre en place un Nexus.</li>
<li style="text-align: justify;">Mettre en place un système d'authentification pour l'administration du Nexus.</li>
<li style="text-align: justify;">Réutiliser le référentiel d'utilisateur de l'entreprise.</li>
<li style="text-align: justify;">Ne pas ouvrir l'administration de Nexus à tous les utilisateurs présents dans l'AD mais seulement à un groupe.</li>
</ul>
<div style="text-align: justify;">
Une documentation très bien faite est mise à disposition par Sonatype <a href="http://www.sonatype.com/books/nexus-book/reference/ldap-sect-configuring.html">Ici.</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le problème n'est pas dans la qualité de la documentation mais se brancher sur un AD par l'intermédiaire de LDAP n'est jamais simple : beaucoup d'options, de paramétrages, des contenu dans les référentiels LDAP très différents.</div>
<div>
<br /></div>
<div>
<span class="Apple-style-span" style="font-size: large;"><u>Etape 1 : Obtenir un accès</u></span></div>
<div style="text-align: justify;">
Avant de commencer, il faut obtenir un utilisateur/mot de passe qui soit capable de naviguer en lecture au sein de l'AD. En général, il faut créer ou faire créer un utilisateur générique par lequel vos applicatifs (comme Nexus) viendront interroger votre AD.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Une fois cet utilisateur en poche (ça peut prendre du temps à avoir ce genre de choses...) , je vous conseille de le tester avec un <a href="http://www.google.fr/search?ie=UTF-8&q=browser+ldap">browser LDAP</a>. Je me suis servi d'<a href="http://directory.apache.org/studio/">Apache Directory Studio</a>. Il est Open Source et c'est une application RCP. Bref, il fait plutôt bien le job.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il vous suffit donc de créer une connexion (host et port de l'AD, user, password) et hop vous pouvez naviguer à l'intérieur.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il faut aussi créer un groupe AD et y rattacher les utilisateurs à qui vous souhaitez donner l'accès à l'administration de Nexus. Votre AD possède peut être déjà un groupe qui correspond à la population qui vous intéresse. Vous pouvez dans ce cas le réutiliser. Pour la suite de l'article, nous appellerons ce groupe "<u><i>equipe-de-developpement</i></u>".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mais ça n'est pas fini...</div>
<div>
<br /></div>
<span class="Apple-style-span" style="font-size: large;"><u>Etape 2 : Obtenir une bonne vision de l'arborescence de l'AD</u></span><br />
<div>
<br /></div>
<div style="text-align: justify;">
Le plus important et de récupérer l'adresse LDAP racine dans laquelle tous les utilisateurs se trouvent. Nous l’appellerons pour la suite de l'article "<u><i>l'adresse racine utilisateur</i></u>".</div>
<div style="text-align: justify;">
par exemple : CN=Users,DC=votreDomaine,DC=com</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mais ça n'est pas fini...</div>
<div>
<br /></div>
<div>
<span class="Apple-style-span" style="font-size: large;"><u>Etape 3 : configurer la partie LDAP de Nexus</u></span></div>
<div style="text-align: justify;">
Connectez-vous en admin sur Nexus et déplacez-vous dans la partie Security > "LDAP Configuration" accessible depuis le menu latéral gauche. C'est parti pour la partie conf : </div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">Connection : (permet de définir les paramètres de connexion à l'AD)</li>
<ul>
<li style="text-align: justify;"><u>Protocol</u> : Ldap</li>
<li style="text-align: justify;"><u>Hostname</u> : adresse de l'AD (le même que vous avez utilisé avec botre browser LDAP).</li>
<li style="text-align: justify;"><u>Port</u> : port de l'AD (en général c'est 389).</li>
<li style="text-align: justify;"><u>Search Base</u> : c'est l'adresse par défaut à partir de laquelle le requêtage LDAP se fera une fois connecté. Remplissez le avec <u><i>l'adresse racine utilisateur</i></u>.</li>
</ul>
<li style="text-align: justify;">Authentication : (permet de définir la manière dont Nexus s'authentifie sur l'AD)</li>
<ul>
<li style="text-align: justify;"><u>Authentication method</u> : Choisir "Simple Authentication"</li>
<li style="text-align: justify;"><u>SASL Realm</u> : laisser vide.</li>
<li style="text-align: justify;"><u>Username</u> : le username de votre utilisateur générique ayant accès en lecture à AD.</li>
<li style="text-align: justify;"><u>Password</u> : le password de votre utilisateur générique ayant accès en lecture à AD.</li>
</ul>
</ul>
<div style="text-align: justify;">
Vous pouvez faire un "check authentication". Si tout est ok vous devez avoir un "LDAP connection and authentication test completed successfully." Ça veut dire que votre Nexus sait se connecter à votre AD.</div>
</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">User Element mapping : (permet de définir la manière dont Nexus va vérifier si un user existe)</li>
<ul>
<li style="text-align: justify;"><u>Base DN</u> : laisser vide (si vous avez bien renseigné dans la partie connection que l'adresse par défaut de requêtage est bien <i><u>l'adresse racine utilisateur</u></i>).</li>
<li style="text-align: justify;"><u>User Subtree</u> : à cocher.</li>
<li style="text-align: justify;"><u>Object Class</u> : Saisir "Person", c'est le type d'objet LDAP contenant les utilisateurs.</li>
<li style="text-align: justify;"><u>User ID Attribute</u> : Il faut indiquer le nom de l'attribut LDAP qui contient les logins utilisateurs AD. Saisir : "sAMAccountName"</li>
<li style="text-align: justify;"><u>Real Name Attribute</u> : Il faut indiquer le nom de l'attribut LDAP qui contient le nom complet des utilisateurs AD. Saisir : "displayName".</li>
<li style="text-align: justify;"><u>E-Mail Attribute</u> : Il faut indiquer le nom de l'attribut LDAP qui contient l'adresse mail des utilisateurs AD. Saisir : "mail".</li>
<li style="text-align: justify;"><u>Password Attribute</u> : Il faut indiquer le nom de l'attribut qui contient le mot de passe des utilisateurs AD. Laisser vide (c'est un attribut par défaut).</li>
</ul>
<li style="text-align: justify;">Group Element Mapping : (permet de définir la manière donc Nexus va récupérer la liste des groupes).</li>
<ul>
<li style="text-align: justify;"><u>Group Type</u> : Saisir "Dynamic Groups". Il y a 2 types de groupes LDAP : un groupe dynamique correspondant à un attribut dans un objet "user" LDAP. Un groupe statique, c'est le contraire, c'est la référence à une liste d'utilisateurs dans un objet LDAP "group". Avec AD, à priori, quand un groupe est créé il l'est en statique et dynamique. Autant donc choisir dynamique car il y a beaucoup moins de configuration ;-).</li>
<li style="text-align: justify;"><u>Member Of Attribute</u> : Il faut indiquer le nom de l'attribut LDAP dans lequel un groupe dynamique est défini. Saisir : "memberOf".</li>
</ul>
</ul>
<div style="text-align: justify;">
Vous pouvez faire un "Check User Mapping". Si tout est ok, Nexus vous affiche un début de liste d'utilisateurs qu'il a réussi à requêter. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
N'oubliez pas de faire "save" :-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mais ça n'est pas fini...</div>
</div>
<div>
<br /></div>
<div>
<u><span class="Apple-style-span" style="font-size: large;">Etape 5 : Mapper votre groupe AD avec un rôle NEXUS.</span></u></div>
<div>
<br /></div>
<div style="text-align: justify;">
Il faut maintenant configurer à Nexus pour que les utilisateurs de votre groupe AD <i style="text-decoration: underline;">equipe-de-developpement</i> correspondent à un rôle dans Nexus, par exemple "Administrateur Nexus".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Déplacez-vous dans la partie "Roles" accessible depuis le menu latéral gauche :</div>
<div>
<ul style="text-align: left;">
<li style="text-align: justify;">Sélectionner "Add" > "External Role Mapping"</li>
<li style="text-align: justify;">Realm : choisir "LDAP"</li>
<li style="text-align: justify;">Role : La liste des rôle LDAP de votre AD doit être présente. choisir votre groupe <u><i>equipe-de-developpement</i></u></li>
<li style="text-align: justify;">Ajouter ensuite le Rôle associé en cliquant sur "add"</li>
<li style="text-align: justify;">Cocher le "Nexus Administrator Role"</li>
<li style="text-align: justify;">Cliquer sur OK</li>
</ul>
<div style="text-align: justify;">
Mais ça n'est pas fini...</div>
</div>
<div>
<br /></div>
<div>
<u><span class="Apple-style-span" style="font-size: large;">Etape 6 : activer l'authentification LDAP pour Nexus</span></u></div>
<div style="text-align: justify;">
Il faut maintenant simplement activer l'authentification par LDAP. Je dis "simplement", mais j'ai cherché un bout de temps avant de comprendre pour tout ça ne marchait pas ;-).</div>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Déplacez-vous dans la partie "Administration" > "Server" accessible depuis le menu latéral gauche :</div>
<br />
<ul style="text-align: left;">
<li style="text-align: justify;">Dans la partie "Security Settings": déplacer "OSS LDAP Authentication Realm" de "Available Realms" vers "Selected Realms".</li>
</ul>
<div style="text-align: justify;">
That's all...</div>
<br />
<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-4119583874959957708.post-33283310030498948092012-01-13T10:25:00.000+01:002012-01-13T10:25:36.406+01:00Agilité par contamination<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSD-yZE9EXMOeOamKbZw01bYcapPJBdi8PYH7BFZ0-lcsEYXJzbyUT_1FRhr2UzD3LIX0VhwdENbUujz7gac1MEWqfgPkrMgcZMQOgxBNJ47IElXv2-iZrzJJeIfeQxOsb0DPvD3rZlpc/s1600/radiation1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSD-yZE9EXMOeOamKbZw01bYcapPJBdi8PYH7BFZ0-lcsEYXJzbyUT_1FRhr2UzD3LIX0VhwdENbUujz7gac1MEWqfgPkrMgcZMQOgxBNJ47IElXv2-iZrzJJeIfeQxOsb0DPvD3rZlpc/s200/radiation1.jpg" width="190" /></a></div>
<br />
Lorsqu'on souhaite mettre en oeuvre <a href="http://en.wikipedia.org/wiki/Scrum_(development)" target="_blank">Scrum</a> la première fois, il est souvent dit de mettre en place la totalité du framework et dans un second temps de l'adapter quand l'ensemble des acteurs possèdent le recul nécessaire (pour justement l'adapter favorablement). Cette mise en place totale a pour but de ne pas tomber dans les fameux "<a href="http://www.scrum.org/scrumbut" target="_blank">Scrum But</a>", souvent cause de l'échec de la mise en place de Scrum. Les "<a href="http://www.scrum.org/scrumbut" target="_blank">Scrum But</a>" pour simplifier représentent les entorses au framework (Exemple : c'est le ScrumMaster qui fait les estimations et affectent les tâches, oui ça c'est de la très grosse entorse ;-)).</div>
<div style="text-align: justify;">
<br /></div>
Je vous propose ici de vous raconter un de mes retours d'expérience sur le sujet qui est très différent de l'approche dont je viens de vous parler.<br />
<br />
<div style="text-align: justify;">
Il y a bientôt un an, j'ai intégré une équipe de développement chez un éditeur logiciel qui ne pratiquait pas "l'agilité". Ce nouvel environnement me paraissait idéal pour mettre en place Scrum couplé avec un peu d’<a href="http://en.wikipedia.org/wiki/Extreme_programming" target="_blank">Extrême Programming</a> pour plusieurs raisons :</div>
<div style="text-align: justify;">
</div>
<ul>
<li>une petite structure (moins de 25 personnes).</li>
<li>une équipe de développement de moins de 6 personnes.</li>
<li>une forte croissance.</li>
<li>la volonté de développer une nouvelle version d'un produit.</li>
</ul>
<br />
Il faut avouer que Scrum est très déroutant dans ces pratiques quand on ne les a jamais mises en oeuvre. Comme je ne m'appelle pas <a href="http://jeffsutherland.com/" target="_blank">Jeff Sutherland</a> (un des papas de Scrum) et que je ne suis pas un extrémiste (enfin j'estime ne pas l'être, ce qui est différent, je vous l'accorde), je n'ai pas forcé pour la mise en place de Scrum.<br />
<br />
<div style="text-align: justify;">
En revanche, je travaillais sur un sujet isolé et avec une liberté totale sur ma façon de travailler. J'ai donc fait du Scrum et de l'Xp seul (ok ce n'est pas vraiment du Scrum). Tiens ça me fait penser à <a href="http://www.youtube.com/watch?v=zuNmzTLwjcc" target="_blank">Jean Jacques</a>.</div>
<br />
<div style="text-align: justify;">
Hey hop, c'est parti, je récupère un tableau en carton, j'ai un mur juste derrière moi, impeccable, ça sera mon scrum board. Un petit tour par la compta : "Heu, vous auriez des post-its? Ha, vous n'avez que cette couleur, ok ça ira très bien pour commencer. Vous pouvez en commander d'autres? et de plusieurs couleurs?".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRITJSPeebtiHlMuQyVR1b6HWDR4lJkv2yvyt6Mvldmy-hKpRyDzNUxyZeWI2b8SUiIJSlB53RxqInjmYPQzW6s-rzk2OXHR6fP8_f-to8dWlmo_qYIyWb6YWhdSfec1UqqBRX1J8wACU/s1600/scrum-board-perso.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRITJSPeebtiHlMuQyVR1b6HWDR4lJkv2yvyt6Mvldmy-hKpRyDzNUxyZeWI2b8SUiIJSlB53RxqInjmYPQzW6s-rzk2OXHR6fP8_f-to8dWlmo_qYIyWb6YWhdSfec1UqqBRX1J8wACU/s320/scrum-board-perso.JPG" width="240" /></a></div>
<br />
Un ou deux jours passent...</div>
<br />
<i><u>Réaction 1 : "Ha c'est comme ça que tu travailles?"</u></i><br />
<i><u>Réaction 2 : "C'est jolie tous ces post-its derrière toi, c'est quoi, ça marche comment?"</u></i><br />
<i><br />
</i><br />
<div style="text-align: justify;">
Côté pratique d'ingénierie, pas d'intégration continue, pas de <a href="http://en.wikipedia.org/wiki/Distributed_revision_control" target="_blank">DVCS</a> (en tous cas pas celui que je voulais :-)), pas de suivi de qualité, pas de déploiement continu. Ok, qu'à cela ne tienne, "Just Do It". C'est parti pour mettre en place une forge logicielle complète sur une machine virtuelle dans un coin de serveur (<a href="http://httpd.apache.org/" target="_blank">apache</a>, <a href="http://jenkins-ci.org/" target="_blank">jenkins</a>, <a href="http://git-scm.com/" target="_blank">git</a>, <a href="http://www.sonarsource.org/" target="_blank">sonar</a>, <a href="http://maven.apache.org/" target="_blank">maven</a>, ...).</div>
<br />
<i><u>Réaction 3 : "C'est quoi l'intégration continue?"</u></i><br />
<br />
<div style="text-align: justify;">
J'avais maintenant tous les outils que je souhaitais pour développer. C'est parti. Les semaines passent, les post-its s'entassent...</div>
<br />
<i><u>Réaction 4 : "C'est pas mal ton tableau avec les post-its pour voir l'avancement du travail"</u></i><br />
<br />
<div style="text-align: justify;">
A force de question et de discussion autour de Scrum avec l'équipe de développement, je me propose de leur faire une présentation de Scrum. C'est parti pour une présentation de 2h très conviviale. L'objectif est de faire découvrir les principes du framework. Rien de plus.</div>
<br />
<i><u>Réaction 5 : "C'est vraiment très différents, ça n'est pas du tout aujourd'hui notre façon de travailler, ça fait un peu peur"</u></i><br />
<br />
Les semaines passent... et qu'est-ce que je vois sur le bureau du collègue à côté de moi, <a href="http://www.aubryconseil.com/pages/Livre-Scrum" target="_blank">le livre "Scrum"</a> de <a href="http://www.aubryconseil.com/" target="_blank">Claude Aubry</a>. Je lui dis que c'est un super bouquin qu'il a bien fait de l'acheter.<br />
<br />
<i><u>Réaction 6 : "C'est ma compagne qui me l'a acheté car je lui avais parlé de la présentation que tu avais faite"</u></i><br />
<br />
Alors là je suis scotché!<br />
<br />
<div style="text-align: justify;">
Les semaines passent... et un gros sujet à traiter par toute l'équipe nous tombe dessus. On ne sait pas par quel bout le prendre. Je propose aux membres de l'équipe qui connait le mieux le sujet de faire un <a href="http://en.wikipedia.org/wiki/Mind_map" target="_blank">mind map</a> pour modéliser le travail à effectuer ainsi qu'une réunion tous ensemble où l'on ajuste le Mind Map pour tous obtenir une bonne vision de ce qu'on va devoir faire. J'extrais ensuite le contenu du Mind Map dans un fichier Excel.</div>
<br />
<div style="text-align: justify;">
<i><u>Réaction 7 : "C'est un peu comme un Backlog ce fichier Excel, non?"</u></i></div>
<br />
Je l'ai ensuite renommé en "Backlog".<br />
<br />
<i><u>Réaction 8 : "Par quoi on commence?"</u></i><br />
<br />
Je propose de refaire une réunion avec toute l'équipe pour qu'on priorise les sujets/tâches tous ensemble pour traiter les tâches les plus urgentes.<br />
<br />
<i><u>Réaction 9 : "On priorise tout, tout de suite?"</u></i><br />
<br />
Je propose alors de faire un point tous ensemble toutes les semaines et de prioriser/reprioriser les sujets.<br />
<br />
<u><i>Réaction 10 : "On migre les applis existantes sur git"?</i></u><br />
<br />
Yes!<br />
<br />
<u><i>Réaction 11 : "Comment on fait pour rajouter un Job dans Jenkins"?</i></u><br />
<br />
Yes! Je te montre!<br />
<br />
Les semaines passent... et je discute avec le directeur général. Il m'apprend qu'il s'est documenté sur Scrum et les méthodes Agiles qu'il trouve ça très intéressant et qu'il souhaite qu'on fasse des petites réunions tous les matins.<br />
<br />
Aujourd'hui, nous ne pouvons pas dire que nous "faisons du Scrum" mais tous ce qui est mis en place nous aident réellement au quotidien. L'utilisation d'un backlog et la réalisation du Daily Scrum du matin sont maintenant une évidence. J'espère que cette démarche (non préméditée) de contamination va se poursuivre.<br />
<div style="text-align: justify;">
<br />
Alors que je pensais que Scrum ne pouvait fonctionner sur le principe du tout ou rien, je me rends compte que l'agilité progressive est un succès dans notre cas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vous en pensez quoi?</div>
</div>Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-4119583874959957708.post-87175941763484201522011-12-13T10:52:00.000+01:002012-01-12T15:32:23.012+01:00Cassandra pour les développeurs Java<div dir="ltr" style="text-align: left;" trbidi="on">
Hier soir, au <a href="http://chtijug.org/lily-et-cassandra-avec-outerthought-et-sarbacane-software-le-12-decembre/">Ch'ti JUG</a> il y a eu une double session sur NoSQL.<br />
<br />
<a href="http://twitter.com/#!/stevenn">Steven Noels</a> a présenté en première partie <a href="http://www.lilyproject.org/">Lily</a>, une solution d'indexation basé sur HBase.<br />
En deuxième partie, j'ai effectué une présentation de "Cassandra pour les développeurs Java" où j'y ai abordé les principaux concepts de <a href="http://cassandra.apache.org/">Cassandra</a>, présenté <a href="http://hector-client.org/">Hector</a> et <a href="https://github.com/jsevellec/cassandra-unit">cassandra-unit</a>l e tout avec un peu de live coding.<br />
<br />
Voici les slides de cette présentation :<br />
<br />
<div id="__ss_10571941" style="width: 425px;">
<strong style="display: block; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 12px; text-align: center;"><a href="http://www.slideshare.net/jsevellec/cassandra-pour-les-dveloppeurs-java" target="_blank" title="Cassandra pour les développeurs java">Cassandra pour les développeurs java</a></strong> <br />
<div style="text-align: center;">
<iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/10571941" width="425"></iframe> </div>
<br />
<div style="padding: 5px 0 12px;">
<div style="text-align: center;">
View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/jsevellec" target="_blank">jsevellec</a> </div>
</div>
</div>
<div style="text-align: center;">
<br /></div>
Ça a été une bien belle soirée et un after bien sympa et convivial :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUA5aUzkPlXa2WigbUWFWgnc7Yag0rYz7aLRZG_3GiyaDnxeO3rwwpAY49Yh2eVZ8YbGtJyE44GMPRIjUTuU7ONyZSW1OvKaxPNeRpi3WYFZYfuuC7mbYVahJPVwwhrZs_cVmT8aEKMzw/s1600/photo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUA5aUzkPlXa2WigbUWFWgnc7Yag0rYz7aLRZG_3GiyaDnxeO3rwwpAY49Yh2eVZ8YbGtJyE44GMPRIjUTuU7ONyZSW1OvKaxPNeRpi3WYFZYfuuC7mbYVahJPVwwhrZs_cVmT8aEKMzw/s320/photo.JPG" width="240" /></a></div>
<br />
<br />
@bientôt à une autre session du Ch'ti Jug!<br />
<br />
<br /></div>Unknownnoreply@blogger.com0