<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Random namespace</title>
	<atom:link href="http://www.nathetnico.fr/dev/feed" rel="self" type="application/rss+xml" />
	<link>http://nathetnico.fr/dev</link>
	<description>just bits of code</description>
	<pubDate>Mon, 26 Apr 2010 19:26:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>deep copying objects in C#</title>
		<link>http://nathetnico.fr/dev/archives/132</link>
		<comments>http://nathetnico.fr/dev/archives/132#comments</comments>
		<pubDate>Mon, 26 Apr 2010 19:26:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[clone]]></category>

		<category><![CDATA[deep-copy]]></category>

		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=132</guid>
		<description><![CDATA[One of the fastest ways to deep copy an object is to serialize it to a binary stream and unserialize it to a new object, in that matter:



 &#160; &#160; &#160; &#160;/// &#60;summary&#62;


&#160; &#160; &#160; &#160; /// Creates a deep copy of a serializable object


&#160; &#160; &#160; &#160; /// &#60;/summary&#62;


&#160; &#160; &#160; &#160; /// &#60;typeparam [...]]]></description>
			<content:encoded><![CDATA[<p>One of the fastest ways to deep copy an object is to serialize it to a binary stream and unserialize it to a new object, in that matter:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Creates a deep copy of a serializable object</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;typeparam name=&quot;T&quot;&gt;Any type&lt;/typeparam&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;param name=&quot;serializableObject&quot;&gt;serializable object&lt;/param&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;returns&gt;cloned object&lt;/returns&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">static</span> T CloneOf&lt;T&gt;<span class="br0">&#40;</span>T serializableObject<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; object objCopy = <span class="kw2">null</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MemoryStream stream = new MemoryStream<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BinaryFormatter binFormatter = new BinaryFormatter<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; binFormatter.<span class="me1">Serialize</span><span class="br0">&#40;</span>stream, serializableObject<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stream.<span class="me1">Position</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; objCopy = <span class="br0">&#40;</span>T<span class="br0">&#41;</span> binFormatter.<span class="me1">Deserialize</span><span class="br0">&#40;</span>stream<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stream.<span class="me1">Close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>T<span class="br0">&#41;</span> objCopy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/132/feed</wfw:commentRss>
		</item>
		<item>
		<title>Playing with winforms textbox border color.</title>
		<link>http://nathetnico.fr/dev/archives/115</link>
		<comments>http://nathetnico.fr/dev/archives/115#comments</comments>
		<pubDate>Thu, 22 Apr 2010 18:12:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[border]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[color]]></category>

		<category><![CDATA[textbox]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=115</guid>
		<description><![CDATA[This is a small hack class that adds a set color for input area borders (textbox, richtextbox, combos, etc.) Here is the result:
It all holds up in a single file:



&#160;


&#160; &#160; /// &#60;summary&#62;


&#160; &#160; /// This class adds border to input elements similar to Chrome


&#160; &#160; /// &#60;/summary&#62;


&#160; &#160; public class FormBorderizer


&#160; &#160; &#123;


&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>This is a small hack class that adds a set color for input area borders (textbox, richtextbox, combos, etc.) Here is the result:</p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.nathetnico.fr/dev/files/borderizer.jpg"><img alt="Screenshot" src="http://www.nathetnico.fr/dev/files/borderizer.jpg" title="Screenshot" width="400" /></a><p class="wp-caption-text">Screenshot</p></div>
<p>It all holds up in a single file:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">/// This class adds border to input elements similar to Chrome</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; public class FormBorderizer</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/** PRIVATE MEMBERS **/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private Label m_lblBorder; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// label used for borders</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">static</span> Color BORDER_COLOR = Color.<span class="me1">Gold</span>; <span class="co1">// Border color</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">static</span> <span class="kw4">int</span> BORDER_WIDTH = <span class="nu0">2</span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// Border width</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">static</span> Color BACK_COLOR = Color.<span class="me1">AliceBlue</span>; &nbsp; &nbsp; &nbsp; <span class="co1">// Back color</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/** CONTRUCTORS **/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Constructor, adds borders to input areas</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;param name=&quot;Control.ControlCollection&quot;&gt;collection of controls to parse&lt;/param&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public FormBorderizer<span class="br0">&#40;</span>Control.<span class="me1">ControlCollection</span> controlCollection<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeBorder<span class="br0">&#40;</span>controlCollection<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AddBorder<span class="br0">&#40;</span>controlCollection<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/** METHODS **/</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Initializes the border control</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;param name=&quot;controlCollection&quot;&gt;collection&lt;/param&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">void</span> InitializeBorder<span class="br0">&#40;</span>Control.<span class="me1">ControlCollection</span> controlCollection<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder = new Label<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">BackColor</span> = Color.<span class="me1">Gold</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Visible</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlCollection.<span class="me1">Add</span><span class="br0">&#40;</span>m_lblBorder<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">SendToBack</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Adds a colored border to a collection of controls</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;param name=&quot;controlCollection&quot;&gt;target collection&lt;/param&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">void</span> AddBorder<span class="br0">&#40;</span>Control.<span class="me1">ControlCollection</span> controlCollection<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span>Control c in controlCollection<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// generate event handlers for input areas</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>IsInputControl<span class="br0">&#40;</span>c<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">Enter</span> += new EventHandler<span class="br0">&#40;</span>c_Enter<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">Leave</span> += new EventHandler<span class="br0">&#40;</span>c_Leave<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>c is Panel<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new FormBorderizer<span class="br0">&#40;</span>c.<span class="me1">Controls</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>c is TabControl<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TabControl tc = <span class="br0">&#40;</span>TabControl<span class="br0">&#41;</span>c;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span>TabPage tp in tc.<span class="me1">TabPages</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new FormBorderizer<span class="br0">&#40;</span>tp.<span class="me1">Controls</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Checks whether this control should hold a border or not</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;param name=&quot;c&quot;&gt;target control&lt;/param&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;returns&gt;true or false&lt;/returns&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private bool IsInputControl<span class="br0">&#40;</span>Control c<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>c is TextBox || c is ListBox || c is ComboBox || c is RichTextBox || c is MaskedTextBox<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/** EVENTS **/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Event occuring when the user leaves an input control</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">void</span> c_Leave<span class="br0">&#40;</span>object sender, EventArgs e<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Visible</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Control ctrl = <span class="br0">&#40;</span>Control<span class="br0">&#41;</span>sender;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ctrl.<span class="me1">BackColor</span> = Color.<span class="me1">White</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Event occuring when the user enters an input control</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">void</span> c_Enter<span class="br0">&#40;</span>object sender, EventArgs e<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Control ctrl = <span class="br0">&#40;</span>Control<span class="br0">&#41;</span>sender;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WrapControl<span class="br0">&#40;</span>ctrl<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Visible</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Anchor</span> = ctrl.<span class="me1">Anchor</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// Wraps the border around the control</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">/// &lt;param name=&quot;control&quot;&gt;&lt;/param&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">void</span> WrapControl<span class="br0">&#40;</span>Control control<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Top</span> = control.<span class="me1">Top</span> - BORDER_WIDTH;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Left</span> = control.<span class="me1">Left</span> - BORDER_WIDTH;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Width</span> = control.<span class="me1">Width</span> + <span class="nu0">2</span> * BORDER_WIDTH;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_lblBorder.<span class="me1">Height</span> = control.<span class="me1">Height</span> + <span class="nu0">2</span> * BORDER_WIDTH;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; control.<span class="me1">BackColor</span> = BACK_COLOR;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>To call it, simply create an instance of FormBorderizer (such an awful name!!) and initialize it with a form / panel control collection.<br />
Ex: </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp; &nbsp;public partial class Form1 : Form</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public Form1<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new FormBorderizer<span class="br0">&#40;</span>this.<span class="me1">Controls</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/115/feed</wfw:commentRss>
		</item>
		<item>
		<title>Winforms flicker-free forms.</title>
		<link>http://nathetnico.fr/dev/archives/108</link>
		<comments>http://nathetnico.fr/dev/archives/108#comments</comments>
		<pubDate>Thu, 01 Apr 2010 22:12:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[flicker]]></category>

		<category><![CDATA[winforms]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=108</guid>
		<description><![CDATA[Ever had those flickers in your 50+ component forms?
Trying to play with SuspendLayout / ResumeLayout didn&#8217;t help? That&#8217;s because it only suspends the automatic layout,  triggered by the Anchor and Dock properties.
Setting double-buffering to true didn&#8217;t help either? That&#8217;s because it only suppresses flicker on individual controls: a label, a button and so on&#8230;
Setting [...]]]></description>
			<content:encoded><![CDATA[<p>Ever had those flickers in your 50+ component forms?</p>
<p>Trying to play with <strong>SuspendLayout / ResumeLayout</strong> didn&#8217;t help? That&#8217;s because it only suspends the automatic layout,  triggered by the Anchor and Dock properties.</p>
<p>Setting <a href="http://msdn.microsoft.com/fr-fr/library/system.windows.forms.control.doublebuffered.aspx">double-buffering</a> to true didn&#8217;t help either? That&#8217;s because it only suppresses flicker on individual controls: a label, a button and so on&#8230;</p>
<p>Setting the <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.controlstyles.aspx">OptimizedDoubleBuffer</a> flag to true? Nope, no changes&#8230;</p>
<p>After struggling for many hours trying to eliminate a flicker that was occuring on my application form, I finally found a <a href="http://social.msdn.microsoft.com/forums/en-US/winforms/thread/aaed00ce-4bc9-424e-8c05-c30213171c2c/">solution</a> on msdn:</p>
<p>It&#8217;s called <strong>compositing double-buffering</strong> and it&#8217;s simply 7 lines of code put in somewhere in your form code:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">protected override CreateParams CreateParams <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; get <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CreateParams cp = base.<span class="me1">CreateParams</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; cp.<span class="me1">ExStyle</span> |= 0&#215;02000000;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> cp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><u>Explanation</u> from nobugz:</p>
<blockquote><p>I discovered a new Windows style in the SDK header files, available for Windows XP and (presumably) Vista: WS_EX_COMPOSITED.  With that style turned on for your form, Windows XP does double-buffering on the form and all its child controls </p></blockquote>
<p><a href="http://social.msdn.microsoft.com/Profile/en-US/?user=nobugz">nobugz</a> is the man&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/108/feed</wfw:commentRss>
		</item>
		<item>
		<title>Adding programs to path.</title>
		<link>http://nathetnico.fr/dev/archives/103</link>
		<comments>http://nathetnico.fr/dev/archives/103#comments</comments>
		<pubDate>Fri, 17 Jul 2009 13:11:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=103</guid>
		<description><![CDATA[By default, some programs will be installed while automatically being setup in order to be run from the command line.
For ex., [Win]+R &#8216;devenv&#8217; launches Visual Studio.
I happened to run into this article which precises how to add some more:
Registry: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths

Create a new sub-key with the name of the executable file that you wish to [...]]]></description>
			<content:encoded><![CDATA[<p>By default, some programs will be installed while automatically being setup in order to be run from the command line.<br />
For ex., [Win]+R &#8216;devenv&#8217; launches Visual Studio.</p>
<p>I happened to run into this <a href="http://commandwindows.com/runline.htm">article</a> which precises how to add some more:</p>
<p><strong>Registry</strong>: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths</p>
<ol>
<li>Create a new sub-key with the name of the executable file that you wish to add to the path (ex. eclipse.exe)</li>
<li>In this new key, add a string variable named &#8220;Path&#8221; containing the value of the the path to your new executable file (ex. &#8220;C:\Program files\eclipse\&#8221;)</li>
<li>The new key will already have an empty variable (Default). Edit it to have the string value of entire address of the new program executable (ex. &#8220;C:\Program files\eclipse\eclipse.exe&#8221;)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/103/feed</wfw:commentRss>
		</item>
		<item>
		<title>Java foreach.</title>
		<link>http://nathetnico.fr/dev/archives/97</link>
		<comments>http://nathetnico.fr/dev/archives/97#comments</comments>
		<pubDate>Thu, 16 Jul 2009 15:36:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[foreach]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=97</guid>
		<description><![CDATA[Java 5 got a bit closer to its twin C# by adding the possibility of directly accessing entities of a list or collection through its own &#8220;foreach&#8221; functionality :
C# :



foreach&#40;type var in arr&#41;&#123;


&#160; // implement body


&#125;



Java :



for &#40;type var : arr&#41; &#123;


&#160; &#160; // implement body


&#125;



]]></description>
			<content:encoded><![CDATA[<p>Java 5 got a bit closer to its twin C# by adding the possibility of directly accessing entities of a list or collection through its own &#8220;foreach&#8221; functionality :</p>
<p>C# :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">foreach<span class="br0">&#40;</span>type var in arr<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// implement body</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Java :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span>type var : arr<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// implement body</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/97/feed</wfw:commentRss>
		</item>
		<item>
		<title>List.Find() use of delegates</title>
		<link>http://nathetnico.fr/dev/archives/93</link>
		<comments>http://nathetnico.fr/dev/archives/93#comments</comments>
		<pubDate>Fri, 26 Jun 2009 20:02:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=93</guid>
		<description><![CDATA[Delegates make it easier to find stuff in generic lists.
Let&#8217;s consider the following simple class:



Public Class Person&#123;


&#160; private string m_name;


&#160; private int m_age;


&#160;


&#160; // .Net3.0 syntax only.


&#160; public string Name&#123;get;set&#125;


&#160; public int Age&#123;get;set&#125;


&#160;


&#160; public Person&#40;string name, int age&#41;&#123;


&#160; &#160; m_name = name;


&#160; &#160; m_age = age;


&#160; &#125;



Instanciating :



List&#60;Person&#62; lstPpl = new List&#60;Person&#62;&#40;&#41;;


lstPpl.Add&#40;new Person&#40;&#34;Christian&#34;, 1&#41;&#41;;


lstPpl.Add&#40;new Person&#40;&#34;Noah&#34;, [...]]]></description>
			<content:encoded><![CDATA[<p>Delegates make it easier to find stuff in generic lists.<br />
Let&#8217;s consider the following simple class:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Public Class Person<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; private <span class="kw4">string</span> m_name;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; private <span class="kw4">int</span> m_age;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// .Net3.0 syntax only.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; public <span class="kw4">string</span> Name<span class="br0">&#123;</span>get;set<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; public <span class="kw4">int</span> Age<span class="br0">&#123;</span>get;set<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; public Person<span class="br0">&#40;</span><span class="kw4">string</span> name, <span class="kw4">int</span> age<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; m_name = name;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; m_age = age;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Instanciating :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">List&lt;Person&gt; lstPpl = new List&lt;Person&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">lstPpl.<span class="me1">Add</span><span class="br0">&#40;</span>new Person<span class="br0">&#40;</span><span class="st0">&quot;Christian&quot;</span>, <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">lstPpl.<span class="me1">Add</span><span class="br0">&#40;</span>new Person<span class="br0">&#40;</span><span class="st0">&quot;Noah&quot;</span>, <span class="nu0">0.3</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>We can easily find Noah:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Person myson = lstPpl.<span class="me1">Find</span><span class="br0">&#40;</span>delegate<span class="br0">&#40;</span>Person p<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="st0">&quot;Noah&quot;</span> == p.<span class="me1">Name</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>; </div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/93/feed</wfw:commentRss>
		</item>
		<item>
		<title>Encrypted binary serialization</title>
		<link>http://nathetnico.fr/dev/archives/87</link>
		<comments>http://nathetnico.fr/dev/archives/87#comments</comments>
		<pubDate>Sun, 21 Jun 2009 22:18:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[.net]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=87</guid>
		<description><![CDATA[For re-use: a small class that does encryption and binary serialization:



using System;


using System.Collections.Generic;


using System.Text;


using System.IO;


using System.Runtime.Serialization.Formatters.Binary;


using System.Security.Cryptography;


using System.Windows.Forms;


&#160;


namespace MyNamespace


&#123;


&#160; &#160; class Tools


&#160; &#160; &#123;


&#160; &#160; &#160; &#160; // change me&#8230;


&#160; &#160; &#160; &#160; private static string m_encryptionKey = &#34;password&#34;;


&#160;


&#160; &#160; &#160; &#160; public static byte&#91;&#93; Encrypt&#40;byte&#91;&#93; plainData, string sKey&#41;


&#160; &#160; &#160; &#160; &#123;


&#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>For re-use: a small class that does encryption and binary serialization:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">using System;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">Collections</span>.<span class="me1">Generic</span>;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">Text</span>;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">IO</span>;</div>
</li>
<li class="li2">
<div class="de2">using System.<span class="me1">Runtime</span>.<span class="me1">Serialization</span>.<span class="me1">Formatters</span>.<span class="me1">Binary</span>;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">Security</span>.<span class="me1">Cryptography</span>;</div>
</li>
<li class="li1">
<div class="de1">using System.<span class="me1">Windows</span>.<span class="me1">Forms</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">namespace MyNamespace</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; class Tools</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// change me&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; private <span class="kw4">static</span> <span class="kw4">string</span> m_encryptionKey = <span class="st0">&quot;password&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">static</span> byte<span class="br0">&#91;</span><span class="br0">&#93;</span> Encrypt<span class="br0">&#40;</span>byte<span class="br0">&#91;</span><span class="br0">&#93;</span> plainData, <span class="kw4">string</span> sKey<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DESCryptoServiceProvider DES = new DESCryptoServiceProvider<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DES.<span class="me1">Key</span> = ASCIIEncoding.<span class="me1">ASCII</span>.<span class="me1">GetBytes</span><span class="br0">&#40;</span>sKey<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DES.<span class="me1">IV</span> = ASCIIEncoding.<span class="me1">ASCII</span>.<span class="me1">GetBytes</span><span class="br0">&#40;</span>sKey<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ICryptoTransform desencrypt = DES.<span class="me1">CreateEncryptor</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte<span class="br0">&#91;</span><span class="br0">&#93;</span> encryptedData = desencrypt.<span class="me1">TransformFinalBlock</span><span class="br0">&#40;</span>plainData, <span class="nu0">0</span>, plainData.<span class="me1">Length</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> encryptedData;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">static</span> byte<span class="br0">&#91;</span><span class="br0">&#93;</span> Decrypt<span class="br0">&#40;</span>byte<span class="br0">&#91;</span><span class="br0">&#93;</span> encryptedData, <span class="kw4">string</span> sKey<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DESCryptoServiceProvider DES = new DESCryptoServiceProvider<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DES.<span class="me1">Key</span> = ASCIIEncoding.<span class="me1">ASCII</span>.<span class="me1">GetBytes</span><span class="br0">&#40;</span>sKey<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DES.<span class="me1">IV</span> = ASCIIEncoding.<span class="me1">ASCII</span>.<span class="me1">GetBytes</span><span class="br0">&#40;</span>sKey<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ICryptoTransform desDecrypt = DES.<span class="me1">CreateDecryptor</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte<span class="br0">&#91;</span><span class="br0">&#93;</span> decryptedData = desDecrypt.<span class="me1">TransformFinalBlock</span><span class="br0">&#40;</span>encryptedData, <span class="nu0">0</span>, encryptedData.<span class="me1">Length</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> decryptedData;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">static</span> <span class="kw4">void</span> SaveObjectToFile<span class="br0">&#40;</span>object obj, <span class="kw4">string</span> path<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MemoryStream memStream = new MemoryStream<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BinaryFormatter binFormatter = new BinaryFormatter<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; binFormatter.<span class="me1">Serialize</span><span class="br0">&#40;</span>memStream, obj<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte<span class="br0">&#91;</span><span class="br0">&#93;</span> encryptedBytes = Encrypt<span class="br0">&#40;</span>memStream.<span class="me1">ToArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, m_encryptionKey<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memStream.<span class="me1">Close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Stream streamToFile = File.<span class="me1">Open</span><span class="br0">&#40;</span>path, FileMode.<span class="me1">Create</span>, FileAccess.<span class="me1">Write</span>, FileShare.<span class="me1">ReadWrite</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; streamToFile.<span class="me1">Write</span><span class="br0">&#40;</span>encryptedBytes, <span class="nu0">0</span>, encryptedBytes.<span class="me1">Length</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; streamToFile.<span class="me1">Flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; streamToFile.<span class="me1">Close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch <span class="br0">&#40;</span>Exception e<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox.<span class="me1">Show</span><span class="br0">&#40;</span>e.<span class="me1">Message</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; public <span class="kw4">static</span> object LoadObjectFromFile<span class="br0">&#40;</span><span class="kw4">string</span> path<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Stream fileStream = new FileStream<span class="br0">&#40;</span>path, FileMode.<span class="me1">Open</span>, FileAccess.<span class="me1">Read</span>, FileShare.<span class="me1">ReadWrite</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte<span class="br0">&#91;</span><span class="br0">&#93;</span> encryptedObj = new byte<span class="br0">&#91;</span>fileStream.<span class="me1">Length</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileStream.<span class="me1">Read</span><span class="br0">&#40;</span>encryptedObj, <span class="nu0">0</span>, <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>encryptedObj.<span class="me1">Length</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MemoryStream memStream = new MemoryStream<span class="br0">&#40;</span>Decrypt<span class="br0">&#40;</span>encryptedObj, m_encryptionKey<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BinaryFormatter binFormatter = new BinaryFormatter<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; object decryptedObj = binFormatter.<span class="me1">Deserialize</span><span class="br0">&#40;</span>memStream<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memStream.<span class="me1">Close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileStream.<span class="me1">Close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> decryptedObj;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch <span class="br0">&#40;</span>Exception e<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox.<span class="me1">Show</span><span class="br0">&#40;</span>e.<span class="me1">Message</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/87/feed</wfw:commentRss>
		</item>
		<item>
		<title>Masters without style.</title>
		<link>http://nathetnico.fr/dev/archives/76</link>
		<comments>http://nathetnico.fr/dev/archives/76#comments</comments>
		<pubDate>Tue, 30 Dec 2008 16:05:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[css subjective]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=76</guid>
		<description><![CDATA[Everytime I start digging into a new technology, I find myself quickly pointed towards some of the most talented computer science geek&#8217;s home page. And when I say talented, I mean &#8220;genius&#8221;&#8230; Those are the founding fathers of CS; those are the Ones who shift right four times the price tags of their supermarket nachos [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Everytime I start digging into a new technology, I find myself quickly pointed towards some of the most talented computer science geek&#8217;s home page. And when I say talented, I mean &#8220;genius&#8221;&#8230; Those are the founding fathers of CS; those are the Ones who shift right four times the price tags of their supermarket nachos to know how much their 3 friends will owe them&#8230; In their head of course&#8230; Doing so, I eventually find myself hitting their own personal page, clicking that mouse link with as much enthusiasm as a little boy opening up his first nintendo&#8230;</p>
<p align="justify">And everytime, it happens&#8230; I find myself mixed with feelings of admiration and deception. Something like : &#8220;this guy is a genius&#8230; but he sure has an ugly personal webpage&#8230;&#8221;</p>
<p>Why is that??</p>
<p align="justify">Those guys are pioneers, they have proved to be inovative and creative&#8230; When one would expect to see some webpage using advanced techniques, stunning css, unique algorithms, or a perfect mix of simplicity, beauty and speed; we usually end up seeing repulsive design. Instead of seeing an echo of their genius, we see our screen filled up with 100% width / height text, using a max of 3 tags (&#8221;a&#8221;, &#8220;li&#8221; &#038; &#8220;p&#8221;), and webpages that smell like old history books, the web&#8217;s first steps, my first 2400bps modem, &#8230; </p>
<p align="justify">Apart from the nostalgia it creates, I can understand how such a page can have some advantages : &#8220;who cares about heavy pages, buggy javascripts that slow down everything, bling-bling UIs that compensates for crappy contents? Let&#8217;s make a simple page, it&#8217;s fast, easy to maintain, it works everywhere the same, it&#8217;s stable, etc&#8230;&#8221; But still people, <strong>there is a balance in all things, even in web design</strong>&#8230; A little padding here, a little line-height there, some fonts, colors, divs, a bit more space and TADA! Your page becomes so much easier to read, much more attractive and friendlier. All of those little details that keep the speed and the functionalities while bringing a bit of warmth to a rich-yet-cold webpage.</p>
<p align="justify"><a href="http://users.tkk.fi/~jsykari/files/sicp.jpg"><img style="float:right; border: 5px solid #EEE; margin-left: 20px;" title="sicp" src="http://users.tkk.fi/~jsykari/files/sicp.jpg" alt="" width="128" height="174" /></a>Or has it become a stamp for quality? An ugly, old website now stands for quality content&#8230; ? It seems that&#8217;s the case for a couple of amazing books, including SICP&#8230; :</p>
<p align="justify">Or is it a question of humility? pride? I display myself as somewhat simple while having done extraordinary things?</p>
<p>Anyways&#8230; I&#8217;m not here to judge, I don&#8217;t have a personal web page! just this simple wordpress generated blog&#8230; I just found it somewhat funny. See it for yourself :
<ul>
<li><a href="http://en.wikipedia.org/wiki/Douglas_Crockford">Douglas Crockford</a> : this is the father of <a href="http://www.json.org/">json</a>, of <a href="http://javascript.crockford.com/code.html">javascript coding standards</a>, of the beautiful <a href="http://www.jslint.com/">jslint</a>, etc&#8230; (<a href="http://www.crockford.com/">see his homepage</a>)</li>
<li><a href="http://en.wikipedia.org/wiki/Bjarne_Stroustrup">Bjarne Stroustrup</a> : created C64 (commonly called C++) (<a href="http://www.research.att.com/~bs/C++.html">see his homepage</a>)</li>
<li><a href="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</a> : programming structures, TeX (<a href="http://www-cs-staff.stanford.edu/~uno/">see his homepage</a>)</li>
<li><a href="http://en.wikipedia.org/wiki/Guido_van_Rossum">Guido van Rossum</a> : created <a href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a>, unique owner of the licence plate that has that name <img src='http://nathetnico.fr/dev/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> (<a href="http://www.python.org/~guido/">see his homepage</a>)</li>
<li><a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg">Anders Hejlsberg</a> : <a href="http://en.wikipedia.org/wiki/Turbo_Pascal">Turbo Pascal</a>, <a href="http://en.wikipedia.org/wiki/Delphi">Delphi</a>, <a href="http://en.wikipedia.org/wiki/J_plus_plus">J++</a>, <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a> as well as the .NET framework (no webpage&#8230;)</li>
<li><a href="http://en.wikipedia.org/wiki/Richard_Stallman">Richard Stallman</a> : GNU, UNIX, and so much else&#8230; (<a href="http://www.stallman.org/">see his homepage</a>)</li>
<li><a href="http://en.wikipedia.org/wiki/Larry_Wall">Larry Wall</a> : <a href="http://en.wikipedia.org/wiki/Perl">Perl</a> (<a href="http://www.wall.org/~larry/">see his homepage</a>)</li>
<li><a href="http://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)">John McCarthy</a> : <a href="http://en.wikipedia.org/wiki/Lisp_programming_language">Lisp</a>, &#8230; (<a href="http://www-formal.stanford.edu/jmc/">see his homepage</a>)</li>
<li>etc.. etc&#8230; I&#8217;m sure you can find a lot more of them!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/76/feed</wfw:commentRss>
		</item>
		<item>
		<title>Les blocs conditionnels If, Case, etc&#8230;</title>
		<link>http://nathetnico.fr/dev/archives/70</link>
		<comments>http://nathetnico.fr/dev/archives/70#comments</comments>
		<pubDate>Fri, 03 Oct 2008 19:55:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[code propre]]></category>

		<category><![CDATA[optimisation]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=70</guid>
		<description><![CDATA[Il m&#8217;arrive souvent de voir des blocs de code de contrôle inutilement complexes, mais je suis tombé récemment sur un bloc qui m&#8217;a particulièrement bluffé :



if&#40; iNb &#60; 100 &#41; &#123;


&#160; if&#40; iNb &#62; 50 &#41; &#123;


&#160; &#160; &#160;&#91;&#8230; bloc 1 &#8230;&#93;


&#160; &#125; else if&#40; iNb &#62; 30 &#41; &#123;


&#160; &#160; &#160;&#91;&#8230; bloc 2 &#8230;&#93;


&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Il m&#8217;arrive souvent de voir des blocs de code de contrôle inutilement complexes, mais je suis tombé récemment sur un bloc qui m&#8217;a particulièrement bluffé :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span> iNb &lt; <span class="nu0">100</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> iNb &gt; <span class="nu0">50</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">1</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> iNb &gt; <span class="nu0">30</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp;<span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">2</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> iNb &gt; <span class="nu0">10</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span> iNb &lt;= <span class="nu0">20</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">3</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">4</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Lorsque l&#8217;on remplit les [...] avec des dizaines de lignes de code (ce que je déconseille aussi fortement), on se retrouve vite à oublier le contrôle mal organisé qui se planque dans le code&#8230;</p>
<p>Il existe une pratique simple, qui doit être mise sous forme de théorie quelque part sur le net, qui consiste d&#8217;abord à visualiser les ensembles sur lesquels on fait le contrôle. Ici, on peut facilement déterminer 4 ensembles que l&#8217;on essaye de distinguer:<br />
iNb dans ]50, 100[ (bloc 1)<br />
iNb dans ]30, 50 [ (bloc 2)<br />
iNb dans ]20, 30 [ (bloc 3)<br />
iNb dans ]10, 20 [ (bloc 4)</p>
<p>Ensuite, le principe de base est le suivant : on conditionne sur le plus grand conteneur d&#8217;abord, et on restreint par la suite. On se retrouve alors avec un code beaucoup plus clair : </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span> iNb &lt; <span class="nu0">100</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">1</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> iNb &lt; <span class="nu0">50</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">2</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> iNb &lt; <span class="nu0">30</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">3</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> <span class="br0">&#40;</span>iNb &lt; <span class="nu0">20</span><span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>iNb &gt; <span class="nu0">10</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">4</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Autre possibilité, encore plus lisible je trouve :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>iNb &gt; <span class="nu0">50</span><span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>iNb &lt; <span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">1</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>iNb &gt; <span class="nu0">30</span><span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>iNb &lt; <span class="nu0">50</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">2</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>iNb &gt; <span class="nu0">20</span><span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>iNb &lt; <span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">3</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>iNb &gt; <span class="nu0">10</span><span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>iNb &lt; <span class="nu0">20</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#91;</span>&#8230; <span class="me1">bloc</span> <span class="nu0">4</span> &#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>On redécrit les ensembles directement au sein des conditionnelles, de manière à ce que l&#8217;on ait pas à retrouver la condition précédente pour bien comprendre l&#8217;actuelle&#8230; Enfin tout du moins c&#8217;est ce que je pense&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/70/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bien implémenter son singleton</title>
		<link>http://nathetnico.fr/dev/archives/52</link>
		<comments>http://nathetnico.fr/dev/archives/52#comments</comments>
		<pubDate>Fri, 03 Oct 2008 09:54:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[prog]]></category>

		<category><![CDATA[singleton]]></category>

		<category><![CDATA[statique]]></category>

		<guid isPermaLink="false">http://nathetnico.fr/dev/?p=52</guid>
		<description><![CDATA[Lorsque plusieurs membres d&#8217;un programme vont utiliser les mêmes données, on se retrouve confronté au choix entre le singleton et la classe statique. Ce choix est assez important, et dépend entièrement de la visibilité de ces données. Il sera parfois plus judicieux d&#8217;utiliser une classe statique qu&#8217;un singleton. Par exemple, en programmant un jeu de [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque plusieurs membres d&#8217;un programme vont utiliser les mêmes données, on se retrouve confronté au choix entre le singleton et la classe statique. Ce choix est assez important, et dépend entièrement de la visibilité de ces données. Il sera parfois plus judicieux d&#8217;utiliser une classe statique qu&#8217;un singleton. Par exemple, en programmant un jeu de tennis en C# (que je n&#8217;ai pas encore complètement terminé d&#8217;ailleurs&#8230;), j&#8217;avais besoin d&#8217;accéder souvent au calendrier ATP. La visibilité de ce calendrier était pratiquement globale, beaucoup de classes devaient y avoir accès et il était plus facile d&#8217;en faire une classe statique avec ses méthodes statiques&#8230; Dans d&#8217;autres cas, le singleton était plus approprié. Il n&#8217;est pas limité en accès aux membres statiques, il est sérializable, etc&#8230;</p>
<p>Récemment, en révisant du code sur un projet au boulot, je suis tombé sur des mauvaises implémentations de singletons de ce type :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> <span class="kw2">public</span> <span class="kw2">class</span> SinglePart <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">private</span> <span class="kw2">static</span> SinglePart oPart = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">static</span> SinglePart getSinglePart<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>oPart == <span class="kw2">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;oPart = <span class="kw2">new</span> SinglePart<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">return</span> oPart;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>La classe fonctionnait bien, puisque le programmeur avait fait attention à ne l&#8217;instancier qu&#8217;une seule fois. En fait, il y a 2 erreurs avec cette implémentation : </p>
<p>- Il manque un constructeur privé pour remplacer le constructeur public et donc éviter une autre instanciation via ce dernier.<br />
- Rien n&#8217;assure que le singleton ne soit créé deux fois en même temps par deux threads séparés.</p>
<p>La solution consiste donc à ne pas oublier le constructeur privé, ainsi que l&#8217;utilisation du mot clef synchronized :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> <span class="kw2">public</span> <span class="kw2">class</span> SinglePart <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">private</span> <span class="kw2">static</span> SinglePart oPart = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="co1">// constructeur privé</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp;<span class="kw2">private</span> SinglePart<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">synchronized</span> <span class="kw2">static</span> SinglePart getSinglePart<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>oPart == <span class="kw2">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;oPart = <span class="kw2">new</span> SinglePart<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">return</span> oPart;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nathetnico.fr/dev/archives/52/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

