<?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/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://michaelbanzon.com</link>
	<description></description>
	<lastBuildDate>Sun, 05 Feb 2012 13:54:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Apache setup trouble</title>
		<link>http://michaelbanzon.com/2012/01/20/apache-setup-trouble/</link>
		<comments>http://michaelbanzon.com/2012/01/20/apache-setup-trouble/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 03:53:12 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Digital life]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=233</guid>
		<description><![CDATA[Last night I had a rather frustrating problem. I was setting up the XAMPP package on a Windows 7 box and wanted to configure some virtual hosts. This is fairly easy &#8211; there is a dedicated configuration file for virtual hosts and in my case they needed to be virtual virtual hosts &#8211; so I [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I had a rather frustrating problem.</p>
<p>I was setting up the XAMPP package on a Windows 7 box and wanted to configure some virtual hosts. This is fairly easy &#8211; there is a dedicated configuration file for virtual hosts and in my case they needed to be virtual virtual hosts &#8211; so I added them to the local Windows hosts file and to the Apache configuration file and saved.</p>
<p>Restarting the server gave the error code &#8220;-1 server not started&#8221;. One really frustrating fact about XAMPP on Windows (7) is that the errors in the configuration which prevent the server from starting is not written to the error log. Instead (and this might be the preferred behavior of others) it is logged using the Windows logging mechanism which is stored/found gods-knows-where?!! What is up with that?!</p>
<p>After finding the (right) log which actually showed the error nicely &#8211; I found that it was my &#8220;Order&#8221; setting that caused the trouble. It turns out that it has three valid values &#8220;allow,deny&#8221;, &#8220;deny,allow&#8221; and… some other setting I don&#8217;t care about… I had happily typed &#8220;allow, deny&#8221; and this simple mistake prevented the whole server from running! A tiny whitespace. One tiny whitespace!!</p>
<p>When going over the configuration to spot errors I never even thought of this as being an option &#8211; I am now much wiser.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2012/01/20/apache-setup-trouble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dataflow programming</title>
		<link>http://michaelbanzon.com/2011/12/19/dataflow-programming/</link>
		<comments>http://michaelbanzon.com/2011/12/19/dataflow-programming/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 14:24:36 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=219</guid>
		<description><![CDATA[In a previous post I wrote about how we could do some performance tuning by developing applications suited for parallel execution. Please pardon my ignorance &#8211; but I stumbled upon an article in Dr.Dobb&#8217;s &#8211; about &#8220;Dataflow programming&#8221; &#8211; which is actually what this is all about! If you would like to learn more on [...]]]></description>
			<content:encoded><![CDATA[<p>In <a title="Parallel execution" href="http://michaelbanzon.com/2011/09/21/parallel-execution/">a previous post</a> I wrote about how we could do some performance tuning by developing applications suited for parallel execution.</p>
<p>Please pardon my ignorance &#8211; but I stumbled upon <a href="http://drdobbs.com/database/231400148">an article in Dr.Dobb&#8217;s &#8211; about &#8220;Dataflow programming&#8221;</a> &#8211; which is actually what this is all about! If you would like to learn more on the matter or refresh your knowledge please go read the article &#8211; it describes the problem and solution very well. You might also want to read the Wikipedia article on <a href="http://en.wikipedia.org/wiki/Dataflow_programming">Dataflow programming</a> and the one on <a href="http://en.wikipedia.org/wiki/Flow-based_programming">Flow-based programming</a>. If you have more time and thirst for this subject please read <a href="http://zone.ni.com/devzone/cda/tut/p/id/6098">this article</a> which clarifies why this type of problem solving is suitable for parallel hardware.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/12/19/dataflow-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check out the usage of Read Later for Instapaper</title>
		<link>http://michaelbanzon.com/2011/11/03/check-out-the-instapaper-usage/</link>
		<comments>http://michaelbanzon.com/2011/11/03/check-out-the-instapaper-usage/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 10:09:29 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Digital life]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[download]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=217</guid>
		<description><![CDATA[Did you read the monthly usage statistics for Read Later for Instapaper?? I wrote a blog post containing the october figures at the Southbound Software blog &#8211; and before that a post containing the september figures. I believe that the october figures are more representative than the september figures &#8211; although september rocked hard!]]></description>
			<content:encoded><![CDATA[<p>Did you read the monthly usage statistics for <a href="https://market.android.com/details?id=dk.southbound.instapaper">Read Later for Instapaper</a>??</p>
<p>I wrote <a href="http://southbound.dk/2011/11/01/instapaper-usage-october-2011/">a blog post containing the october figures</a> at <a href="http://southbound.dk/">the Southbound Software blog</a> &#8211; and before that <a href="http://southbound.dk/2011/10/23/instapaper-usage-september-2011/">a post containing the september figures</a>. I believe that the october figures are more representative than the september figures &#8211; although september rocked hard!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/11/03/check-out-the-instapaper-usage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Android Back Button</title>
		<link>http://michaelbanzon.com/2011/11/02/the-android-back-button/</link>
		<comments>http://michaelbanzon.com/2011/11/02/the-android-back-button/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 17:28:28 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Digital life]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=215</guid>
		<description><![CDATA[Disclaimer: I like Android and iOS equally &#8211; and I love developing apps for both!!! Recently I&#8217;ve read some blog posts on the general Android hardware/software design. Especially this post and the mention on DF triggered some emotion! My point is that I really don&#8217;t think that Android missed the target with the hardware back [...]]]></description>
			<content:encoded><![CDATA[<p><strong><em>Disclaimer: I like Android and iOS equally &#8211; and I love developing apps for both!!!</em></strong></p>
<p>Recently I&#8217;ve read some blog posts on the general Android hardware/software design. Especially <a href="http://durietz.tumblr.com/post/12131947412/the-android-hardware-buttons-are-broken">this post</a> and the mention on DF triggered some emotion!</p>
<p>My point is that I really don&#8217;t think that Android missed the target with the hardware back button. Not at all. I actually think it is the most useful button.</p>
<p>The thing is &#8211; I use both Android and iOS on a daily basis &#8211; and I&#8217;m not sure that is the case for many people. When I am using my Android devices I really use the back button a lot and when I use my iOS devices I keep complaining that it is not there.</p>
<p>The example given in <a href="http://durietz.tumblr.com/post/12131947412/the-android-hardware-buttons-are-broken">the article</a> mentions <a href="https://market.android.com/details?id=com.twitter.android">the Twitter app</a>. Let&#8217;s all agree to leave the Twitter app out of this discussion &#8211; it is clearly broken. When I get a notification about a new mention on Android and press it the app fails to load the tweet. The fact that I can&#8217;t get to the Twitter app main screen is not really a problem with my hardware &#8211; it is the result of bad app design!</p>
<p>When I use my Android phone I usually read news (actually I just process news feeds and send relevant articles to <a href="http://www.instapaper.com/">Instapaper</a> using the <a href="https://market.android.com/details?id=dk.southbound.instapaper">Read Later for Instapaper</a> app). When I get an e-mail, text message or someone mention/writes me on Facebook I get a notification. Pressing the notification takes me to the app handling the notification and when I am done &#8211; I press the back button &#8211; and by magic I am back in my news processing cycle &#8211; amazing!</p>
<p>When I actually read news &#8211; which I usually do on my iPad &#8211; I use the Instapaper app. It is very nice &#8211; but when someone e-mails me e.g. I get a notification (luckily I&#8217;m describing the iOS 5.0+ flow!!!) and press it &#8211; which takes me to the app (so far not very different from the Android story). The trouble starts when I want to get back to the article I was reading. If I press the software back button in Twitter/Facebook/Mail/etc. I go to someplace inside the app! If I want to get back to news reading (and trust me &#8211; I really need to get back there!) I have to press the button (no need to call it names &#8211; there is only one) which takes me to the home screen where all my apps are (wtf!!). Here I need to locate the Instapaper app &#8211; it might be on another page (it is where I left it though &#8211; but WTF?!) &#8211; and press it to re-open the program. Alternately I can choose to double-press the button (see <a href="http://www.flickr.com/photos/adurdin/4944720731/lightbox/">this flowchart</a> for more information &#8211; seriously WTF!!!?!!) and get the list of recent apps and choose Instapaper.</p>
<p>As you can see &#8211; I clearly need to adjust my use. Trying to apply &#8220;the Android way&#8221; on iOS gets me frustrated. Using &#8220;the iOS way&#8221; on Android is just a silly waste of time.</p>
<p>To me this isn&#8217;t really about what mobile OS is right or wrong! iOS delivers a very strong single-running-application frame that can be used to very tightly control the user experience without thinking about any other app than your own. And iOS does this very effectively and very good. Android on the other hand is made to display activities. An activity is a single screen in an application. Activities stack and the hardware back button takes the user backwards through the stack. This is very powerful &#8211; especially considering the ability to mix activities from different apps on the activity stack!</p>
<p>Android and iOS handle stuff very differently. This is because they are two very different operating systems &#8211; made for not-so-different devices. They each handle their specific task very nicely &#8211; in my humble opinion. The real problem is lazy conversions &#8211; the Twitter team should clearly have done a better job understanding the two platforms instead of trying to make a one-to-one conversion.</p>
<p>As I said in the beginning &#8211; I like Android and I like iOS &#8211; and I love developing apps for both!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/11/02/the-android-back-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When rating apps</title>
		<link>http://michaelbanzon.com/2011/10/31/when-rating-apps/</link>
		<comments>http://michaelbanzon.com/2011/10/31/when-rating-apps/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 17:55:22 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Digital life]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[share]]></category>
		<category><![CDATA[sharing]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=207</guid>
		<description><![CDATA[Let there be no doubt &#8211; I love that users have the ability to rate apps on the various app stores / markets! As a user I clearly trust other similar users opinions better that the usual sales pitch! The rating system only has one mayor flaw! Most users don&#8217;t acknowledge that the apps are [...]]]></description>
			<content:encoded><![CDATA[<p>Let there be no doubt &#8211; I love that users have the ability to rate apps on the various app stores / markets! As a user I clearly trust other similar users opinions better that the usual sales pitch!</p>
<p>The rating system only has one mayor flaw!</p>
<p>Most users don&#8217;t acknowledge that the apps are moving targets. Most apps are updated frequently in response to user comments and suggestions. Therefore user comments and ratings must change to reflect this.</p>
<p>As an example: I wrote the <a href="http://southbound.dk/wake-on-lan-client/">Wake on LAN Client</a> and released it to the Android Market. It quickly got a few ratings and some comments. In the description of the program I specifically stated that comments/suggestions should be e-mailed to me directly as there is no way to comment on the market. On july 26th the user Geronimo gave a one star rating and posted the comment &#8220;Keeps force closing when WiFi is disabled to save power…&#8221;. A few days later when I got the time to narrow down the problem I fixed it and released an updated version of the app. The problem is that the user comment + rating is still there &#8211; anyone checking out the program could think that this is still an issue and therefore not download the app.</p>
<p>The Wake on LAN Client is free and I made it to meet some personal needs. I would guess that the problem is even larger for paid apps!</p>
<p>My advice to people who comment and rate is: Please update your comments and ratings to match the current state of the app. Please don&#8217;t make comments or ratings based on crashed and/or flaws in the app before contacting the developer by e-mail &#8211; I am sure they will help you and possibly update their app to fix the issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/10/31/when-rating-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallel execution</title>
		<link>http://michaelbanzon.com/2011/09/21/parallel-execution/</link>
		<comments>http://michaelbanzon.com/2011/09/21/parallel-execution/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 05:48:37 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=202</guid>
		<description><![CDATA[In my previous post I briefly touched the subject of parallel execution in a spreadsheet-like desktop application. I&#8217;d like to go a bit deeper on that subject. Let&#8217;s say you have a spreadsheet. It consists of N rows and M columns. The columns 0…M &#8211; X are raw data &#8211; they most likely come from [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post I briefly touched the subject of parallel execution in a spreadsheet-like desktop application. I&#8217;d like to go a bit deeper on that subject.</p>
<p>Let&#8217;s say you have a spreadsheet. It consists of N rows and M columns. The columns 0…M &#8211; X are raw data &#8211; they most likely come from a different source but thats really not the point. The rest is the interesting part. They are calculated using formulas &#8211; most people have done this a million times in spreadsheets &#8211; it&#8217;s really not that big a deal.</p>
<p>Lets say I have a column C1, it is calculated using a formula. So C1 = C2 + C3. It&#8217;s a not-so-complicated formula &#8211; but that is not the point. I have many calculated columns. And they all use other columns in their formulas &#8211; all these formulas need to be calculated to show me the full dataset of N rows and M columns. This means that the program making the calculations are making (a minimum of) N * X calculated cells.</p>
<p>See &#8211; humans are very organized when they work with spreadsheets. Usually we don&#8217;t clutter things up all that much. Which means that column CN usually aren&#8217;t calculated by a formula using any column CM where M &gt; N. This comes very natural &#8211; we mentally execute from left to right (western-style) and don&#8217;t really like forcing our minds to do otherwise.</p>
<p>This leads to the normal execution style. We execute the calculation of new columns from left to right doing on at a time. Which is very time consuming. So now we have a new approach &#8211; which isn&#8217;t exactly rocket science &#8211; but it&#8217;s worth considering when you develop applications like ours.</p>
<p>Given a set of columns that needs to be calculated using formulas that contain reference statical columns we build a dependency graph. We apply a neat trick at the beginning. The static data is assembled in one node. If a formula reference any column on the static data we make a dependency to that node. There are columns that A: Don&#8217;t reference any column (these are rare &#8211; at least in the software that we develop), or B: Don&#8217;t reference any static column &#8211; which is very common for calculated columns referencing only other calculated columns. Consider the following dependency graph:</p>
<p><a href="http://michaelbanzon.com/2011/09/21/parallel-execution/graph/" rel="attachment wp-att-203"><img class="size-full wp-image-203 aligncenter" title="Execution graph" src="http://michaelbanzon.com/wp-content/uploads/graph.png" alt="" width="227" height="333" /></a></p>
<p>Here node #1 is our base data &#8211; we can&#8217;t and won&#8217;t do anything about that one! Node #2 is a calculated column using a simple formula utilizing the data provided by node #1. Node #3 and node #4 are based solely on the data provided in the column created by node #2. Node #5 represents a column created with the input of column derived from node #3 and #4.</p>
<p>To deliver a full dataset to the user every node must be processed. This is the time consuming part and therefore we are looking for ways to speed up this process. In this case we have nodes #2-5 that needs processing (remember the base data in node #1 is static). The simple way to deliver a better-than-sequential result is to move processing of individually independent nodes to parallel execution units. In fact &#8211; my solution to this problem is to actually start a calculation thread per node. Each of these threads will be waiting on the threads calculating the dependencies of the node. By doing this the execution will run in parallel &#8211; and hopefully this will result in a performance gain considering the overall execution speed of the complete graph calculation. On the graph presented node #2 will be the first to get processed. It&#8217;s only dependency is the root &#8211; which needs no processing. Right when the calculation of node #2 is done the threads controlling processing of node #3 and #4 will start in parallel &#8211; these two only have one dependency which has already been processed. Finally &#8211; when both node #3 and #4 are done &#8211; the calculation of node #5 will begin, as both #3 and #4 are dependencies of #5.</p>
<p>Keeping a graph structure is a also a great benefit in other ways. An example is how it allows one node to be changed &#8211; forcing a re-processing of all dependent nodes by having a recursive &#8220;dirty&#8221; marking scheme.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/09/21/parallel-execution/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Minimize the number of concepts</title>
		<link>http://michaelbanzon.com/2011/09/20/minimize-the-number-of-concepts/</link>
		<comments>http://michaelbanzon.com/2011/09/20/minimize-the-number-of-concepts/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 03:44:39 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=197</guid>
		<description><![CDATA[The latest iteration of our software is developed by applying the everlasting concept &#8220;make it better and more simple&#8221;. The process is driven by a long list of new features &#8211; this is how it always starts &#8211; but the overall design goal is &#8220;better and more simple&#8221;. This goal is of course extremely difficult [...]]]></description>
			<content:encoded><![CDATA[<p>The latest iteration of our software is developed by applying the everlasting concept &#8220;make it better and more simple&#8221;.</p>
<p>The process is driven by a long list of new features &#8211; this is how it always starts &#8211; but the overall design goal is &#8220;better and more simple&#8221;. This goal is of course extremely difficult to achieve. Combining a lot of new features with the extensive list of ones already in the software &#8211; while making the overall experience better and easier takes a lot of hard work.</p>
<p>One place where we have done an effort is on concept list. We have come a very long way with our demo of the new version &#8211; but the new features introduced some new concepts &#8211; like &#8220;formulas&#8221;, &#8220;policies&#8221; and &#8220;calculated columns&#8221;. These concepts &#8211; or what they represent &#8211; is needed in the software &#8211; but having a complete list of words and lingo to learn when starting to use our software made for a very steep learning curve. Especially considering the fact that two of the three new concepts was totally hidden in like 80 % of the program &#8211; which is bound to make users forget they even exist!</p>
<p>So &#8211; we&#8217;ve done the only thing we found really worked &#8211; we reduced the number of concepts the user has to juggle! From three to &#8211; one! &#8220;new column&#8221; &#8211; it is very easy to understand &#8211; the user can do exactly the same thing as before &#8211; and the code only needed a little tweaking to make everything with one concept. Not to mention the UI &#8211; which simply needed to be reduced to work the new way!</p>
<p>Hopefully our users will feel the simplicity when the program hits the streets!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/09/20/minimize-the-number-of-concepts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working 9 till 5&#8230;</title>
		<link>http://michaelbanzon.com/2011/08/31/working-9-till-5/</link>
		<comments>http://michaelbanzon.com/2011/08/31/working-9-till-5/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 17:46:38 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=194</guid>
		<description><![CDATA[These days at work are wonderful!! Our main product resemble a spreadsheet application with many custom data views and functions. On previous versions of the software we have executed the calculations sequentially with no real performance issues rising &#8211; but as we try to push the boundaries of our software we are aware of the [...]]]></description>
			<content:encoded><![CDATA[<p>These days <a href="http://abcsoftwork.com/">at work</a> are wonderful!!</p>
<p><a href="http://abcsoftwork.com/abc_analyzer/">Our main product</a> resemble a spreadsheet application with many custom data views and functions. On previous versions of the software we have executed the calculations sequentially with no real performance issues rising &#8211; but as we try to push the boundaries of our software we are aware of the limits that we may encounter.</p>
<p>Specifically large datasets and complex dependent calculations would make performance suffer! A side note to this is that previous versions of our software has handled the data storage and manipulation 100 % in memory &#8211; which naturally sets a limit in size e.g. &#8211; the program is running as a 32-bit application (due to <a href="http://www.microsoft.com/com/default.mspx">COM</a>-dependencies) and <a href="http://stackoverflow.com/questions/934314/maximum-memory-a-net-process-can-allocate">crashes occur at around 1.4 GB memory usage</a>!</p>
<p>The new version has this stuff all sorted out. We simply use an on disk database for storage. This makes all data creation and manipulation very expensive! Especially compared to the previous version &#8211; duplicating a .NET DataTable object don&#8217;t cost nearly as much time as duplicating a <a href="http://www.sqlite.org/">SQLite</a> table on disk. This naturally calls for some performance tuning.</p>
<p>Speaking in general terms &#8211; the desired performance is reached by limiting database operations to a minimum and executing them in transactions. Furthermore the performance is tuned by building a dependency graph and executing operations in parallel.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/08/31/working-9-till-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Different people &#8211; different focus</title>
		<link>http://michaelbanzon.com/2011/08/16/different-people-different-focus/</link>
		<comments>http://michaelbanzon.com/2011/08/16/different-people-different-focus/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 08:00:45 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[people]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=181</guid>
		<description><![CDATA[I spent most of my yesterday migrating a very old website to a new host. This was/is a process with many pitfalls and many annoyances &#8211; but that is stuff for a completely different post! What is really interesting is the way that different people choose to focus in the process of &#8211; well &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>I spent most of my yesterday migrating a very old website to a new host. This was/is a process with many pitfalls and many annoyances &#8211; but that is stuff for a completely different post!</p>
<p>What is really interesting is the way that different people choose to focus in the process of &#8211; well &#8211; anything related to &#8220;software&#8221;.</p>
<p>First thing I did with this particular site was to copy the database from one host to another. After that I moved the files (FTP download, FTP upload) and finally I changed the code (PHP) to reflect the new host &#8211; some database settings and some mail settings. At first load the page looked great &#8211; everything actually looked right. Navigation revealed no mistakes or configuration errors! Great!</p>
<p>Then I/we moved along to test some signup sequence (involving mail sending) and then problems started appearing! When listing some of the database content we saw that headlines suddenly contained question marks! Ouch! And the mails that the system should be generating never reached their target! Ouch again!</p>
<p>My natural response was to start debugging the mail send sequence &#8211; this part relied heavily on web server and SMTP server configuration &#8211; something had to be wrong somewhere. But the reaction from my peers was to focus mainly on the question marks in the text!</p>
<p>This situation is very common &#8211; I see it at least one every week at work &#8211; developers focus on the real problems, the real errors &#8211; and designers and managers focus mainly on the visual issues. I mean &#8211; who really cares if a line of text is placed two pixels higher or lower! The actual trouble is that these cases usually takes a very short time to fix and this leads designers and managers to think that it is better to fix right a-freaking-way! It is not! Cases like these are best solved by grouping them together and solving all of them at once &#8211; you know &#8211; that way you&#8217;ll have a whole hour worth of work.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/08/16/different-people-different-focus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copy-paste of Windows dialogs</title>
		<link>http://michaelbanzon.com/2011/03/24/copy-paste-of-windows-dialogs/</link>
		<comments>http://michaelbanzon.com/2011/03/24/copy-paste-of-windows-dialogs/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 19:09:49 +0000</pubDate>
		<dc:creator>mbanzon</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://michaelbanzon.com/?p=149</guid>
		<description><![CDATA[I just stumbled upon a very nifty feature. When a dialog (yes/no, ok/cancel etc.) is shown in Windows (at least in Windows 7) you can actually copy-paste the dialog text and get some meaningful output. The following output comes from the SQLite Database Browser &#8220;do-you-want-to-save&#8221; dialog, check it out: &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; SQLite Database Browser &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Do [...]]]></description>
			<content:encoded><![CDATA[<p>I just stumbled upon a very nifty feature.</p>
<p>When a dialog (yes/no, ok/cancel etc.) is shown in Windows (at least in Windows 7) you can actually copy-paste the dialog text and get some meaningful output. The following output comes from the <a href="http://sqlitebrowser.sourceforge.net/">SQLite Database Browser</a> &#8220;do-you-want-to-save&#8221; dialog, check it out:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
SQLite Database Browser<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Do you want to save the changes made to the database file C:/Users/Michael Banzon/Documents/Stage5.db?<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&#038;Yes   &#038;No<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p></blockquote>
<p>It is very nice! It actually produce som understandable output even for non-techies &#8211; I can imagine that I&#8217;ll be using this feature frequently now that I know that it is there. Pasting text into (Gmail) e-mails is so much easier than pasting images!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelbanzon.com/2011/03/24/copy-paste-of-windows-dialogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

