<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Michael Banzon &#187; Programming</title>
	<atom:link href="http://michaelbanzon.com/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://michaelbanzon.com</link>
	<description></description>
	<lastBuildDate>Thu, 02 Sep 2010 19:17:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Commit-policies</title>
		<link>http://michaelbanzon.com/2010/04/27/commit-policies/</link>
		<comments>http://michaelbanzon.com/2010/04/27/commit-policies/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 17:44:54 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[share]]></category>
		<category><![CDATA[sharing]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=108</guid>
		<description><![CDATA[You use a version control system – of course you do! Personally I use Subversion (re-rolled from CVS) and no project is too small for version control imho. Both projects at work and at home go in a repository. Even the smallest amount of programming I do go in my repository, and I wouldn’t want [...]]]></description>
			<content:encoded><![CDATA[<p>You use a version control system – of course you do! Personally I use Subversion (re-rolled from CVS) and no project is too small for version control imho. Both projects at work and at home go in a repository.</p>
<p>Even the smallest amount of programming I do go in my repository, and I wouldn’t want it any other way – the luxury of being able to roll back and forth, branching, merging and suddenly sharing with other developers if the need arise is very nice!</p>
<p>One of the main issues though – especially when working in a team – is how often and how much to commit. During the past few years I’ve realized a few key points:</p>
<ul>
<li>You can never commit too often! (Given that:)</li>
<li>You should never commit code that doesn’t compile!</li>
</ul>
<p>Following these points is easy, important and gives you very high flexibility. I bend the  second rule a bit, and add the following:</p>
<ul>
<li>Branches are for experiments and long hard deviations, and</li>
<li>Only trunk needs to be compileable at all times</li>
</ul>
<p>This comes from the (well known) trunk/branches/tags-model which we established when we started using Subversion. We reserve trunk for the place from where we can always release a new version. Code in here should always be compile-ready – no exceptions to this rule at all!</p>
<p>Our branches are used for experimental development, new versions etc. and the compile-issues in here shouldn’t be to the annoyance of the other developers but generally no more than one day’s work should go in each commit (see the first rule)!</p>
<p>Needless to say I follow these rules very precisely all other projects, even the ones where I’m alone and working at night.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2010/04/27/commit-policies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrapping the project&#8230; Sorry Google App Engine</title>
		<link>http://michaelbanzon.com/2010/04/15/scrapping-the-project/</link>
		<comments>http://michaelbanzon.com/2010/04/15/scrapping-the-project/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 16:39:10 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=105</guid>
		<description><![CDATA[I have decided to put my filesharing project on a hold for now&#8230; The problem with the whole idea is that Google App Engine don&#8217;t allow me to handle data requests larger that 1 MB without going through the Blobstore interface. This would be now big problem for me except the fact that to use [...]]]></description>
			<content:encoded><![CDATA[<p>I have decided to put <a href="http://michaelbanzon.com/2010/03/30/fileshare-service/">my filesharing project</a> on a hold for now&#8230;</p>
<p>The problem with the whole idea is that <a href="http://code.google.com/appengine/">Google App Engine</a> don&#8217;t allow me to handle data requests larger that 1 MB without going through the Blobstore interface. This would be now big problem for me except the fact that to use the <a href="http://code.google.com/intl/en-US/appengine/docs/java/blobstore/">Blobstore API</a> my account should enable billing. The&#8230; Setup&#8230; Process&#8230; Of&#8230; Billing&#8230; And&#8230; Quotas&#8230; Is&#8230; Long&#8230; And&#8230; Hard&#8230; Geez! There are various (personal as well as non-personal) reasons that I just don&#8217;t feel like enabling billing on my Google App Engine account just yet&#8230;</p>
<p>So for now &#8211; this project has been shelved &#8211; at least for the Google App Engine platform &#8211; I am (as you would guess) still keen on the whole idea and will look into a more traditional development environment ASAP.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2010/04/15/scrapping-the-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Surrogate Characters?!</title>
		<link>http://michaelbanzon.com/2010/03/16/surrogate-characters/</link>
		<comments>http://michaelbanzon.com/2010/03/16/surrogate-characters/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 17:54:05 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=93</guid>
		<description><![CDATA[Some time ago I/we ran into a problem at work. The file format that our software uses for saving and loading projects are basicly a ZIP-archive containing XML. We started noticing some strange error reports that all pointed in the direction of the save-method. This is one part of the program that have never really [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I/we ran into a problem at work.</p>
<p>The file format that our software uses for saving and loading projects are basicly a ZIP-archive containing XML. We started noticing some strange error reports that all pointed in the direction of the save-method. This is one part of the program that have never really caused any problems before. The exception being thrown said something about &#8220;surrogate character&#8221;&#8230; More specificly invalid high surrogate&#8230; This was the first time I&#8217;d heard that term so I quickly googled it and found the answer: Something in the string being saved in the XML-document was in an invalid byte range. How nice&#8230;</p>
<p>This is particular funny because the input data came from Excel 2007 files, which is also ZIP-archives containing XML&#8230; Which means that the .NET conversion from XML to unicode string and back to XML was failing&#8230; ! The solution was to sanitize the strings before putting them in the XML-document for output &#8211; something that seems like a nasty hack I didn&#8217;t really need if the XML-output code in .NET would encode the strings properly.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2010/03/16/surrogate-characters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The good thing about standards&#8230;</title>
		<link>http://michaelbanzon.com/2010/03/15/the-good-thing-about-standards/</link>
		<comments>http://michaelbanzon.com/2010/03/15/the-good-thing-about-standards/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 03:18:52 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=90</guid>
		<description><![CDATA[Sadly the good thing about standards is that there are so many! Or to put it in other words: Silverlight &#8211; I don&#8217;t get what the fuzz is about! We already have applets (Java) and flash&#8230; To be honest &#8211; the only real reason to add another technology to the list of shockingly overlapping solutions [...]]]></description>
			<content:encoded><![CDATA[<p>Sadly the good thing about standards is that there are so many!</p>
<p>Or to put it in other words: Silverlight &#8211; I don&#8217;t get what the fuzz is about!</p>
<p>We already have applets (Java) and flash&#8230; To be honest &#8211; the only real reason to add another technology to the list of shockingly overlapping solutions is that it is powered by .NET and backed by Miscrosoft&#8230;</p>
<p>(ok ok &#8211; I know &#8211; Silverlight isn&#8217;t new &#8211; not even by a long shot &#8211; but I really still find it kind of redundant)</p>
<p>I have been researching web technologies and programming languages for a future project &#8211; and the overwhelming array of redundant technologies left we with a slightly confused feeling. Anyway &#8211; I know what road to take &#8211; I suspect that I actually did before doing my research.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2010/03/15/the-good-thing-about-standards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ready, set, Go!</title>
		<link>http://michaelbanzon.com/2010/03/04/ready-set-go/</link>
		<comments>http://michaelbanzon.com/2010/03/04/ready-set-go/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 16:17:16 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[language]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=78</guid>
		<description><![CDATA[I&#8217;m currently experimenting with Go. I would really recommend anyone who takes programming seriously to have a look at it. What I&#8217;ve seen so far is very nice. I mean VERY nice. The concept and idea behind the language (we need a new systems programming language) is very good &#8211; I&#8217;m sure this will be [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently experimenting with <a href="http://golang.org/">Go</a>.</p>
<p>I would really recommend anyone who takes programming seriously to have a look at it. What I&#8217;ve seen so far is very nice. I mean VERY nice.</p>
<p>The concept and idea behind the language (we need a new systems programming language) is very good &#8211; I&#8217;m sure this will be big! And those of you caring about size and speed &#8211; well &#8211; go manage your own memory!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2010/03/04/ready-set-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remember to flush!</title>
		<link>http://michaelbanzon.com/2009/05/08/remember-to-flush/</link>
		<comments>http://michaelbanzon.com/2009/05/08/remember-to-flush/#comments</comments>
		<pubDate>Fri, 08 May 2009 05:41:48 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=62</guid>
		<description><![CDATA[Last night I was doing some network/socket programming. Just for the fun of it. This was done as I always do (it&#8217;s not the first time I&#8217;m doing this kind of programming) by building up the socket connection and running it through the stream handlers that the programming language library (Java/C#) provides. Last night I [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I was doing some network/socket programming. Just for the fun of it. This was done as I always do (it&#8217;s not the first time I&#8217;m doing this kind of programming) by building up the socket connection and running it through the stream handlers that the programming language library (Java/C#) provides.</p>
<p>Last night I found &#8211; as I always do the first time around &#8211; that my communication wasn&#8217;t coming around to the server. I tried, I tried some more, I failed&#8230;. And went to bed upset.</p>
<p>I woke up this morning &#8211; went to do my morning business and BAM it hit me! Flush!! Oh my&#8230; ! I booted the computer, added a &#8220;stream.Flush()&#8221; and we where off! It is certainly NOT the first time I&#8217;ve missed this part! I blame the high level stream handlers &#8211; did I tell them to buffer? No!</p>
<p>Anyway &#8211; remember to flush people!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2009/05/08/remember-to-flush/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minimizing memory footprint</title>
		<link>http://michaelbanzon.com/2008/10/27/minimizing-memory-footprint/</link>
		<comments>http://michaelbanzon.com/2008/10/27/minimizing-memory-footprint/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 05:12:06 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.southbound.dk/?p=47</guid>
		<description><![CDATA[My work on ABC-tool keeps looping back to optimizing memory usage. The ABC-tool application runs on Windows PCs which means that it has a 2 GB memory limit (typically). The largest datasets I have every run across is about 150 MB in size – but this was XML-files and the data part was significantly smaller. [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>DA</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading<br />
2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden<br />
="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabel - Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal"><span lang="EN-GB">My work on ABC-tool keeps looping back to optimizing memory usage. The ABC-tool application runs on Windows PCs which means that it has a 2 GB memory limit (typically). The largest datasets I have every run across is about 150 MB in size – but this was XML-files and the data part was significantly smaller. Even though – we come across the OutOfMemoryException waaaaay too often!</span></p>
<p class="MsoNormal"><span lang="EN-GB">How can that be? What are we doing wrong? How can we make it better?</span></p>
<p class="MsoNormal"><span lang="EN-GB">First off I would like to make some points clear. We write our main product ABC-tool in C#.NET. The program runs in all managed code with a few exceptions. The main exit from managed code is when we send data to Microsoft Excel. The data transmitted could include as much as the entire set of data imported into our program. Beside that we have a small brake from managed code to handle various license specific features – nothing much; probably not even worth mentioning. </span></p>
<p class="MsoNormal"><span lang="EN-GB">Running an entire program in managed code means that we generally don’t manage memory allocation and certainly not de-allocation by ourselves! A few weeks back I wrote a little tool to manage memory consumption evolving over time by different processes and the result was very upsetting! When importing data to ABC-tool the memory consumption peaks due to the internal processing of all text into numbers, dates etc. The troubling part is that right when the data import is complete the data is applied to the views of our program which uses a fair amount of memory in itself. By inserting different pauses and delays I have concluded that the memory consumption level won’t drop until after at least 2-3 seconds of runtime. This means that there is a short delay between releasing the memory and it actually being available again. I have observed that when I start allocating more memory or even do heavy computations the garbage collector refuse to run! My conclusion was that it does nothing until idle! This means that we can have out of memory errors occurring simply because the garbage collector is waiting for us to stop allocating memory – that isn’t right!</span></p>
<p class="MsoNormal"><span lang="EN-GB">One thing that we have certainly done wrong is assuming that memory allocating and releasing was being handled for us. Actually it was – just not while we were doing other things. This means that we will have to change the way we think of our managed code and memory.</span></p>
<p class="MsoNormal"><span lang="EN-GB">During the last few weeks I’ve tried to identify areas of the code that makes the memory consumption peak. I’ve also tried to identify strings of events each resulting in memory peaks and forced garbage collection between them. Last but not least I feel the way I think change every time I write managed code. Memory management is still an issue – I didn’t dodge it and probably never will!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2008/10/27/minimizing-memory-footprint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio &#8211; Again!</title>
		<link>http://michaelbanzon.com/2008/10/22/visual-studio-again/</link>
		<comments>http://michaelbanzon.com/2008/10/22/visual-studio-again/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 13:46:07 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[vs2005]]></category>

		<guid isPermaLink="false">http://www.southbound.dk/?p=45</guid>
		<description><![CDATA[Once again Visual Studio has proven troubleish! I&#8217;ve spent the last hour trying to find out why our project at work wouldn&#8217;t compile (complaining about missing files) on other machines but would on mine! I went through every file in the repository and confirmed that it was up to date. I confirmed that the same [...]]]></description>
			<content:encoded><![CDATA[<p>Once again Visual Studio has proven troubleish!</p>
<p>I&#8217;ve spent the last hour trying to find out why our project at work wouldn&#8217;t compile (complaining about missing files) on other machines but would on mine! I went through every file in the repository and confirmed that it was up to date. I confirmed that the same files where present and up-to-date on the other machines&#8230; !!!</p>
<p>I turned out that I had been moving files around. I had made a sub-namespace to one of our project and moved some files into it. This can be done with no worries &#8211; except I didn&#8217;t <em><strong>close</strong></em> VS2005 before I did a commit. BIG mistake!! Apparently the project-file only gets updated with the new file locations when I close VS2005 and not when I hit the save-button&#8230;</p>
<p>Another hour spent learning the hard truth about Visual Studio.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2008/10/22/visual-studio-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Office 2007 formats</title>
		<link>http://michaelbanzon.com/2008/10/10/office-2007-formats/</link>
		<comments>http://michaelbanzon.com/2008/10/10/office-2007-formats/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 06:59:37 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[office]]></category>

		<guid isPermaLink="false">http://www.southbound.dk/?p=42</guid>
		<description><![CDATA[I haven&#8217;t followed the great format wars over the last year or so &#8211; and I must admit that it had slipped out of my consciousness for a bit. Until I saw Mortens post the other day (warning: the link is in danish). After reading this post my mind spent 5 seconds looping through all [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t followed the great <em>format wars</em> over the last year or so &#8211; and I must admit that it had slipped out of my consciousness for a bit. Until I saw <a href="http://websmed.dk/2008/10/excel-mm-i-php/">Mortens post</a> the other day (warning: the link is in danish).</p>
<p>After reading this post my mind spent 5 seconds looping through all the data it has passively consumes over the last year &#8211; about formats and stuff. It was hard! For those of you who have seen the movie <em>Butterfly Effect</em> &#8211; I image it was like those loop backs&#8230;</p>
<p>Well&#8230; These days I do a large amount of programming and interaction with the Microsoft Office formats. This means that I do a LOT of COM interfacing from my C# code &#8211; and I generally hate it!</p>
<p>The only thing on my mind right now is the possibility of doing XML-only based input/output. And if I am lucky &#8211; I can add Open Office support in that process!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2008/10/10/office-2007-formats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bayesian filtering</title>
		<link>http://michaelbanzon.com/2008/08/21/bayesian-filtering/</link>
		<comments>http://michaelbanzon.com/2008/08/21/bayesian-filtering/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 06:08:21 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.southbound.dk/?p=32</guid>
		<description><![CDATA[Currently I&#8217;m thinking a lot about Bayesian filtering and new ways to apply this to my every day software. For those who aren&#8217;t that informed on the subject I would recommend reading A Plan for Spam by Paul Graham. Wikipedia has a few articles of interest as well. I&#8217;d recommend the ones on Bayes&#8217; theorem [...]]]></description>
			<content:encoded><![CDATA[<p>Currently I&#8217;m thinking a lot about Bayesian filtering and <em>new</em> ways to apply this to my every day software.</p>
<p>For those who aren&#8217;t that informed on the subject I would recommend reading <a title="Paul Graham - A Plan for Span" href="http://www.paulgraham.com/spam.html">A Plan for Spam</a> by Paul Graham. Wikipedia has a few articles of interest as well. I&#8217;d recommend the ones on <a title="Bayes' theorem" href="http://en.wikipedia.org/wiki/Bayes%27_theorem">Bayes&#8217; theorem</a> and <a title="Bayesian spam filtering" href="http://en.wikipedia.org/wiki/Bayesian_spam_filtering">Bayesian spam filtering</a>.</p>
<p>Currently I see a lot of areas where this technique can be applied &#8211; generally everything evolve around e-mails, RSS-feeds and automatic web-site crawling.</p>
<p>I hope that I&#8217;ll have the time in the near future to actually implement something.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2008/08/21/bayesian-filtering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
