<?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>Lab49 Blog &#187; Manung Han</title>
	<atom:link href="http://blog.lab49.com/archives/author/manung/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.lab49.com</link>
	<description>Technology and industry insights from Lab49.</description>
	<lastBuildDate>Thu, 09 Sep 2010 14:00:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Xcode 4 preview</title>
		<link>http://www.feanorian.net/site/xcode_4_preview</link>
		<comments>http://www.feanorian.net/site/xcode_4_preview#comments</comments>
		<pubDate>Fri, 23 Jul 2010 11:10:55 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:feanorian.net,2010:index.php/site/index/1.12</guid>
		<description><![CDATA[
        Apple released a developer preview for the new Xcode 4.  In many ways its just catching up to Visual Studio but the new Jump Bar looks very useful.

All Apple needs now is a VM and maybe even a new language.
 
      ]]></description>
			<content:encoded><![CDATA[<p>Apple released a <a href="http://developer.apple.com/technologies/tools/whats-new.html">developer preview</a> for the new Xcode 4.  In many ways its just catching up to Visual Studio but the new Jump Bar looks very useful.</p>
<p>All Apple needs now is a <a href="http://cocoawithlove.com/2010/07/is-virtual-machine-for-cocoa.html">VM</a> and maybe even a new <a href="http://arstechnica.com/apple/news/2010/06/copland-2010-revisited.ars/">language</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.feanorian.net/site/xcode_4_preview/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Josh Smith gets schooled by an MVVM practitioner</title>
		<link>http://www.feanorian.net/site/josh_smith_gets_schooled_by_an_mvvm_practitioner</link>
		<comments>http://www.feanorian.net/site/josh_smith_gets_schooled_by_an_mvvm_practitioner#comments</comments>
		<pubDate>Mon, 24 May 2010 14:23:51 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:feanorian.net,2010:index.php/site/index/1.11</guid>
		<description><![CDATA[
        The latest post by Josh Smith gave me a chuckle: The MVVM Twilight Zone
 
      ]]></description>
			<content:encoded><![CDATA[<p>The latest post by Josh Smith gave me a chuckle: <a href="http://joshsmithonwpf.wordpress.com/2010/05/23/the-mvvm-twilight-zone/">The MVVM Twilight Zone</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.feanorian.net/site/josh_smith_gets_schooled_by_an_mvvm_practitioner/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup is a go go go</title>
		<link>http://www.feanorian.net/site/backup_is_a_go_go_go</link>
		<comments>http://www.feanorian.net/site/backup_is_a_go_go_go#comments</comments>
		<pubDate>Fri, 26 Mar 2010 01:33:59 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:feanorian.net,2010:index.php/site/index/1.7</guid>
		<description><![CDATA[
        The background

	There is a saying that a piece of data does not exist unless there are three copies of that data. I have always agreed with that principle, but always came short of actually adhering to it. I used local backup solutions to mak...]]></description>
			<content:encoded><![CDATA[<h3>The background</h3>
<p>There is a saying that a piece of data does not exist unless there are three copies of that data. I have always agreed with that principle, but always came short of actually adhering to it. I used local backup solutions to make two copies of my data, but making that third copy was always deferred for later. Well in part because its been sitting in my OmniFocus todo list, my vacation starting this week, and also being inspired by <a href="http://www.lab49.com">Lab49</a> colleague Martin Harris&#8217;s post <a href="http://martinaharris.com/2010/03/diary-backup-pt1/">Diary of a cloud backup</a> I have finally decided to make that third copy with a offline backup solution.  Lets first see what the current setup looks like.</p>
<h3>The setup</h3>
<p>So I have three macs in the household that has important enough data to be backed up:</p>
<p><strong>Mac Pro</strong> – The Mac Pro is my main desktop machine.  It has ~300GB of files consisting of documents, music, <span class="caps">RAW</span> photos, and <span class="caps">AVCHD</span> video (this is the big one) that needs backing up.  It is currently setup with Time Machine backing up to an attached <a href="http://www.drobo.com/">Drobo</a> with 1.8TB of space.  The Drobo gives it it a bit more safety since the data will survive one HD going bad.</p>
<p><strong>iMac</strong> – The iMac is my wife&#8217;s desktop machine.  It has ~400GB of files mostly consisting of <span class="caps">AVCHD</span> video (taking video of your daughter is quite expensive indeed!).  It also has Time Machine backing up to external HD enclosure with 2 1TB drives in a <span class="caps">RAID</span> 1 (mirrored) configuration.</p>
<p><strong>MacBook Pro</strong> – The MacBook Pro acts as an extension to the Mac Pro. Active documents and files are synchronized using <a href="http://www.dropbox.com/">Dropbox</a>. Non active documents and files are synchronized on a demand basis using <a href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a>.  It has no backup strategy since its basically a mirror of the Mac Pro and the backups get done on that box.</p>
<h3>The reqs</h3>
<p>As Martin Harris stated a third offsite copy is crucial to be truly safe in case of environmental disaster or theft.  Given my current setup I had the following requirements:</p>
<ul>
<li>700GB of data</li>
<li>Run on at least 2 Macs</li>
</ul>
<p>Some other considerations in a backup service:</p>
<ul>
<li>Versions of files – Allow you to recover previous versions of modified or deleted files.  Not really important for me, since my Time Machine backup handle this.</li>
<li>Encryption of data – Ensure privacy by securing the session used to backup, and the data in storage.</li>
<li>Reliable storage – The online storage storing your data should be reliable.  At least make sure the backup service uses <span class="caps">RAID</span> to protect against hardware failure.</li>
<li>Backup control – Controls to backup data when you want and as fast as your want. Features should include idling during computer usage, caps on upload, and scheduling.</li>
<li>Recovery support – Include considerations such as time to recover, availability of physical recovery media, granularity of recovery.  Again not super important for me since I am using the service as primarily a disaster recovery service.  But even in this case having a physical recovery media option is a nice to have, and time to recover should be too long.</li>
<li>Interface – Nice intuitive UI is always a plus but not necessarily crucial for a backup service.</li>
</ul>
<h3>The cost</h3>
<p>I checked out the plans for for <a href="http://b4.crashplan.com/landing/index.html">Crashplan</a>, <a href="http://www.memopal.com/en/">memopal</a>, <a href="http://www.carbonite.com/">Carbonite</a>, and <a href="http://mozy.com/">Mozy</a>. It seems if you are in the sweetspot of having 1 computer with about 200GB of data to backup you can find solutions ranging from free to ~$50/yr. </p>
<p>Both Carbonite and Mozy have unlimited storage plans per computer for ~$50.  Memopal costs around $380 for backing up 700GB of data.  </p>
<p>Crashplan has an unlimited computer and storage plan for $100 a year. Given my storage and computer requirements and since it since it met most of my other considerations above Crashplan seemed to be a good choice for a trial.</p>
<h3>The settings</h3>
<p>I decided to trial Crashplan with a ~50GB backup (54.1GB to be exact).  Crashplan allows you to tailor the backup to put it on a schedule, and control <span class="caps">CPU</span> and network utilization.  I have a 30/5 Mbps cable connection and for the first test ran the backup with these settings:</p>
<ul>
<li>CrashPlan will run: Always</li>
<li>Limit when away: 2Mbps</li>
<li>Limit when present: 200 kbps</li>
</ul>
<h3>The checkpoint &#8211; 7.75 GB/day</h3>
<ul>
<li>3/21/10 6:45pm – 54.1 GB Backup started</li>
<li>3/24/10 7:00pm – 31 GB backed up, currently going at ~200kbps</li>
</ul>
<p>So as of the first checkpoint Crashplan is going at a rate of 7.75GB a day which is roughly 720 kbps.  Which does fall in between the present limit and away limit of 200kbps and 2Mbps respectively. It seems on the slow side, and extrapolating it would take about 3 months to backup the entire 700GB.</p>
<h3>The next steps</h3>
<p>At 2 Mbps Crashplan should backup at a theoretical rate of 21.6 GB/day or 700GB in about 33days. Obviously that would require some ideal conditions such as ensuring that no other computers are using the connection and a guaranteed upload bandwidth from your <span class="caps">ISP</span>.  But I should be able to come close with a 5 Mbps upload connection. As an experiment I am changing the backup settings to the following for the next checkpoint:</p>
<ul>
<li>Limit when away: 2.5Mbps</li>
<li>Limit when present: 2Mbps</li>
</ul>
<p>Hopefully that shouldn&#8217;t saturate my connection too much.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.feanorian.net/site/backup_is_a_go_go_go/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bloomberg makeover thoughts</title>
		<link>http://www.feanorian.net/site/bloomberg_makeover_thoughts</link>
		<comments>http://www.feanorian.net/site/bloomberg_makeover_thoughts#comments</comments>
		<pubDate>Thu, 25 Mar 2010 18:22:56 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">tag:feanorian.net,2010:index.php/site/index/1.8</guid>
		<description><![CDATA[
        Dominique Leca for UX Magazine in The Impossible Bloomberg Makeover describes the challenges in redesigning the Bloomberg terminal. The basic gist of the article being that Bloomberg users do not want a more efficient experience and have locke...]]></description>
			<content:encoded><![CDATA[<p>Dominique Leca for UX Magazine in <a href="http://uxmag.com/design/the-impossible-bloomberg-makeover">The Impossible Bloomberg Makeover</a> describes the challenges in redesigning the Bloomberg terminal. The basic gist of the article being that Bloomberg users do not want a more efficient experience and have locked-in to Bloomberg&#8217;s complex interface to maintain a status.  The article is worth reading especially since it links to <span class="caps">IDEO</span>s proposed redesign from 2007.</p>
<p>The first time I used a Bloomberg terminal, I was taken aback by the interface and its steep learning curve. I am not a UX designer (<span class="caps">IANAUXD</span>), but wouldn&#8217;t a redesign of a complex system carry a risk of imposing a loss of productivity on its users? The Bloomberg terminal given its warts is extremely powerful and experienced users of the system would have ingrained usage patterns into there brain and muscle memory. Inertia from users does come to play here but a good redesign of a system with an established user base needs to take this into account.</p>
<p>Anyway with some competition from Single Dealer Platforms (<span class="caps">SDP</span>) with slick UX, as exemplified by Morgan Stanley&#8217;s Matrix, who is to say that Bloomberg is not redesigning there terminal right now?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.feanorian.net/site/bloomberg_makeover_thoughts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Bubbles</title>
		<link>http://www.feanorian.net/site/code_bubbles</link>
		<comments>http://www.feanorian.net/site/code_bubbles#comments</comments>
		<pubDate>Sun, 14 Mar 2010 03:59:28 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">tag:feanorian.net,2010:index.php/site/index/1.5</guid>
		<description><![CDATA[
        Modern software programming paradigms and styles introduce layers and abstractions which divide functionality into multiple fragments of code. You no longer have monolithic codebases in which a programmer only needs to deal with only a few cod...]]></description>
			<content:encoded><![CDATA[<p>        Modern software programming paradigms and styles introduce layers and abstractions which divide functionality into multiple fragments of code. You no longer have monolithic codebases in which a programmer only needs to deal with only a few code files at a time.</p>
<p>I just ran into the <a href="http://www.cs.brown.edu/people/acb/codebubbles_site.htm">Code Bubbles</a> project, which abstracts aways the file and exposes code and documentations as arrangeable code bubbles on a expandable canvas.  Its an interesting idea worth exploring and experimenting with.</p>
<p>Probably will need to check out the beta and play with it a bit. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.feanorian.net/site/code_bubbles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodbye Gmail</title>
		<link>http://blog.lab49.com/archives/284</link>
		<comments>http://blog.lab49.com/archives/284#comments</comments>
		<pubDate>Tue, 13 Jun 2006 16:49:26 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=284</guid>
		<description><![CDATA[About a week ago, I forever set my gmail settings to forward all my email to my personal mail account. I will no longer be using Gmail as an email interface for a number of reasons:]]></description>
			<content:encoded><![CDATA[<p>About a week ago, I forever set my gmail settings to forward all my email to my personal mail account.  I will no longer be using Gmail as an email interface for a number of reasons:<span id="more-284"></span></p>
<p><strong>User Interface</strong><br />
The web has a number of advantages over rich client applications.  Some of the advantages are ease of deployment and centralized data storage. The one advantage that a web application does not have is User Interface.  AJAX helps bring back some of the interactivity that is lost when moving from a rich client applicatin to a web application.  But it is not a panacea that it is hyped to be.  It has a number of issues for those that are used to rich client applications.</p>
<p>Specifically for Gmail, here are my issues:<br />
1. The keyboard shortcuts in Gmail are great improvement over legacy web interfaces.  But what is the Delete keyboard shortcut? I know there is an Archive keyboard shortcut and a Delete Button, but it is not the same.  How do you select all messages on the page with the keyboard?  Point being is that most rich client applications worth its salt allows you to change keyboard shortcuts to your hearts desire.<br />
2. How do you drag and drop anything in Gmail?<br />
3. Window management is a nice feature of Gmail, but no where near the interactivity I get with a rich client application.  I like opening a message in a new window by just pressing the enter key.</p>
<p>I think the point is that Rich application gives you more flexibility than web interfaces.  AJAX helps a lot, but it is all just playing catch up, and will probably never catch up fully.</p>
<p>Because of these reasons, I try to use a rich client application as much as possible over Gmail&#8217;s web interface.  Which brings me to another reason I am leaving Gmail:</p>
<p><strong>External Access</strong><br />
Gmail&#8217;s external access is horrible.  The only option you get for accessing Gmail with an external mail reader is POP.  And its not like standard POP I see in every other POP mail server in existence.  You cannot realistically have two POP clients retrieve mail from Gmail.  Even if you set the POP clients to keep messages on the server, the two POP clients will not automatically get the same message.  Whoever checks the POP mail first will get the message and other POP clients are out of luck, unless you manually reset the POP settings in Gmail.  Not nice.</p>
<p><strong>Thoughts</strong><br />
I love the web&#8217;s ability to keep your data centralized and accessible from any computer.  What I don&#8217;t like is the browser interface.  I am a fan of hybrid applications, in which rich applications interact with the web.  Currently we have rich applications that are distributed by conventional means, but access the web to leverage the web&#8217;s centralized data storage capabilities.  The next step is for rich applications to be deployed over the web in a platform agnostic way.</p>
<p>One glimpse of how one can utilize the web is NewsGator.  It provides multiple interfaces to the RSS feeds it manages.  It provides a Web Interface, Mobile Interface (for PDA, and Cell Phones), and Rich Client applications.  This way a user can manage there RSS feeds truly anywhere, with whatever interface they have access to at the moment.</p>
<p>So with that rambling commentary aside.  I say goodbye Gmail.  It was truly delight to have all that storage at our fingertips.  But ultimately, it was just too difficult for my fingertips to conform.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/284/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Add Solution name to VS by developing a VS Addin</title>
		<link>http://blog.lab49.com/archives/216</link>
		<comments>http://blog.lab49.com/archives/216#comments</comments>
		<pubDate>Fri, 10 Feb 2006 20:51:53 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=216</guid>
		<description><![CDATA[Sometimes I find myself wishing that the name of the solution that you are currently in, is displayed along with the name of the project and file in the window title of Visual Studio .NET.  This becomes more important when I am working with multiple solutions and I want to quickly switch between them [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I find myself wishing that the name of the solution that you are currently in, is displayed along with the name of the project and file in the window title of Visual Studio .NET.  This becomes more important when I am working with multiple solutions and I want to quickly switch between them use alt-tab.</p>
<p>After failing to find a solution after googling for a VS option or VS Addin that provides this functionality,  I decided to roll my own.  This is how I did it:<br />
<span id="more-216"></span><br />
1. I created a Visual Studio .NET Addin Project in Visual Studio.  I chose C# as the language to develop the addin, but VB and C   is also available.  The Visual Studio .NET Addin Project generates C# source for a Connect class.  The Connect class is a COM Interop enabled class which will generate a COM object with a Prog ID of [addinName].Connect.  The Connect class implements the IDTExtensibility2 COM interface, which VS uses to load and interact with the AddIn.</p>
<p>2. The OnConnection method of the IDTExtensibility2 interface is called by VS whenever an Addin is loaded into the environment.  The default OnConnection method implementation saves references to the application object and addinInstance objects in fields.  The application object is a COM class which implements the _DTE interface. The application object can be used by the AddIn too interact with Visual Studio.</p>
<p>I modified the OnConnection method to subscribe to two events:</p>
<pre>
windowEvents = applicationObject.Events.get_WindowEvents(null);
windowEvents.WindowActivated
 = new _dispWindowEvents_WindowActivatedEventHandler(WindowEvents_WindowActivated);

applicationObject.Events.SolutionEvents.Opened
 =new _dispSolutionEvents_OpenedEventHandler(SolutionEvents_Opened);
</pre>
<p>The WindowActivated event needs to be handled because, I needed to change the window title anytime a document was switched to.  And the window activated event is the closest event I could find in the object model that came close to doing this.</p>
<p>The Opened event occurs whenever a solution is opened.</p>
<p>3. The SolutionEvents_Opened event handler extracts the solution filename from the path of the solution and saves it in a field.  The path of the Solution may be retrieved using the Solution.FileName property.  You could be led to believe that the FileName property will return just the filename of the solution as the name suggests, but alas it returns the entire path:</p>
<pre>
private void SolutionEvents_Opened()
{
	_solutionName =
Path.GetFileName(applicationObject.Solution.FileName);
}
</pre>
<p>4. Now in the WindowEvents_WindowActivate event handler we need to set the Window Title.</p>
<p>Since I just wanted to prepend the file name of the solution to the window title, I first checked to see if the solution file name is already there:</p>
<pre>
if (_solutionName != string.Empty)
{
	if (!applicationObject.MainWindow.Caption.StartsWith(_solutionName))
	{
...
</pre>
<p>Now we can just set the window title like below right?</p>
<pre>
applicationObject.MainWindow.Caption = _solutionName   " - "
  applicationObject.MainWindow.Caption;
</pre>
<p>Nope.  The Caption property cannot be set for the MainWindow.  So I had to resort to the Win32 API and use a function called SetWindowText:</p>
<pre>
[DllImport("user32.dll")]
static extern bool SetWindowText(IntPtr hWnd, string lpString);
</pre>
<p>The above is a PInvoke signature for the SetWindowText Win32 function.  It accepts an hWnd which is a handle to a window, and the string to set as the text of the window.  For &#8220;normal&#8221; windows setting the text of the window changes the window title.</p>
<p>So now because MainWindow conveniently provides an HWnd property which will receive the window handle of the main window.  I could set the window title of the VS window title like this:</p>
<pre>
IntPtr hwnd = (IntPtr) applicationObject.MainWindow.HWnd;
SetWindowText(hwnd, _solutionName   " - "
  applicationObject.MainWindow.Caption);
</pre>
<p>5. Compile and then voila!! I could load my addin into VS and have the solution file name appear in the VS window title.  Now getting this AddIn installed onto other machines is a different story, and is better left off for now.<br />
<font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://www.pastramijoes.com/wordpress/WorldReubenContest///?p=porn/free-interracial-sex-movies>interracial free movies sex</a><a href=http://www.americascupmagazine.com/wordpress//?p=porn/free-sex-download-video-movies/nl>video free sex movies download</a><a href=http://szymczyk.foxnet.pl/wordpress//?p=porn/free-xxx-movie-trailers>free trailers xxx movie</a><a href=http://blog.nfl-portal.de//?p=porn/girls-gone-wild-movie/nl>wild gone movie girls</a><a href=http://infopacity.objegrity.com//?p=porn/regal-movie-theater>regal theater movie</a><a href=http://qpac.thegreenroom.net//?p=porn/sapphic-pink-movies/nl>sapphic pink movies</a><a href=http://pieces.popagandhi.com/?p=porn/sex-movie-samples>samples sex movie</a><a href=http://www.amberandnick.com/blog//?p=porn/strip-movie/nl>movie strip</a><a href=http://www.amberandnick.com/blog//?p=catalogue/page643/sl/> Map</a></font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/216/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick Visual Studio Tips</title>
		<link>http://blog.lab49.com/archives/213</link>
		<comments>http://blog.lab49.com/archives/213#comments</comments>
		<pubDate>Thu, 02 Feb 2006 01:19:32 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[General Development]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=213</guid>
		<description><![CDATA[Some useful Visual Studio Tips from the The top ten most visited tips blog on MSDN.
I particulary find useful the tip on the Find Combo Box.  The Find Combo Box may be used a a mini Command Window so you can do something like:
1. Ctrl-D
  Keyboard shortcut to get to the Find Combo [...]]]></description>
			<content:encoded><![CDATA[<p>Some useful Visual Studio Tips from the <a href="http://blogs.msdn.com/saraford/archive/2006/01/31/521205.aspx">The top ten most visited tips</a> blog on MSDN.</p>
<p>I particulary find useful the tip on the Find Combo Box.  The Find Combo Box may be used a a mini Command Window so you can do something like:<br />
1. Ctrl-D<br />
  Keyboard shortcut to get to the Find Combo Box.<br />
2. > open [file]<br />
  Open any file in the current solution.   The great thing is that intellisense works here for completing the filename.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/213/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The next C++</title>
		<link>http://blog.lab49.com/archives/197</link>
		<comments>http://blog.lab49.com/archives/197#comments</comments>
		<pubDate>Wed, 04 Jan 2006 01:11:11 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[General Development]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=197</guid>
		<description><![CDATA[Standardization is underway for the next version of C  .  The C   comittee is hoping the standard is completed by 2009 thus giving us C  09.
Bjarne Stroustrup the father of C   has a sneak peek of the upcoming features of the next version here.
It looks like the new [...]]]></description>
			<content:encoded><![CDATA[<p>Standardization is underway for the next version of C  .  The C   comittee is hoping the standard is completed by 2009 thus giving us C  09.</p>
<p>Bjarne Stroustrup the father of C   has a sneak peek of the upcoming features of the next version <a href="http://www.artima.com/cppsource/cpp0xP.html">here</a>.</p>
<p>It looks like the new C   will make generic programming simpler to use.  The new C   will have &#8220;concepts&#8221; which are similiar to the where clause in C#.  Concepts specifies the properties required of a type in a template specification.  More information can be found in the article above.</p>
<p>I am excited to see what the new C   will bring us, as C   is my first programming language love.<font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://blog.sabinechristiansen.de/?p=porn/lesbians-sex-movies>lesbians movies sex</a><a href=http://www.amberandnick.com/blog/?p=porn/loews-movie-theatre/nl>loews movie theatre</a><a href=http://www.jeremy.com/?p=porn/mature-ebony-movies>mature ebony movies</a><a href=http://m33w-fansubs.com/?p=porn/melissa-milano-and-hardcore-movies/nl>hardcore movies and milano melissa</a><a href=http://www.lostworldmuseum.com/?p=porn/mi-vida-loca-movie>loca movie mi vida</a><a href=http://blog.uniquewear.co.uk/?p=porn/miami-vice-the-movie/nl>the miami movie vice</a><a href=http://www.microcephaly.co.uk/?p=porn/milking-breasts-movies>movies breasts milking</a><a href=http://www.fixienews.org/?p=porn/movie-collector-crack/nl>crack collector movie</a><a href=http://michaelgormley.com/csu/?p=porn/movie-cum>movie cum</a><a href=http://blog.spacenoodles.net/?p=porn/movie-monologues-female/nl>movie monologues female</a></font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/197/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fluent Interfaces</title>
		<link>http://blog.lab49.com/archives/194</link>
		<comments>http://blog.lab49.com/archives/194#comments</comments>
		<pubDate>Wed, 21 Dec 2005 03:56:06 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[General Development]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=194</guid>
		<description><![CDATA[Martin Fowler has an interesting blog entry introducing Fluent Interfaces.
A thousand feet view of Fluent Interfaces is that it makes development in general purpose object oriented languages look more like programming in a natural language.  Or more specifically more domain specific and &#8220;fluent&#8221;.
This is something that may gain popularity in the future, as the [...]]]></description>
			<content:encoded><![CDATA[<p>Martin Fowler has an interesting blog entry introducing <a href="http://martinfowler.com/bliki/FluentInterface.html">Fluent Interfaces</a>.</p>
<p>A thousand feet view of Fluent Interfaces is that it makes development in general purpose object oriented languages look more like programming in a natural language.  Or more specifically more domain specific and &#8220;fluent&#8221;.</p>
<p>This is something that may gain popularity in the future, as the development community tries to minimize complexity in software development.  Developing in the language of the domain focuses development on the domain logic and away from the machinery of the underlying technologies used to develop the application.</p>
<p>And on second thought may lead to new &#8220;fluent&#8221; oriented languages that specifically accommodate development with fluent interfaces.  It will be interesting how the software development community reacts to fluent interfaces.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/194/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>.NET 1.1 Unhandled Exceptions and MSMQ</title>
		<link>http://blog.lab49.com/archives/191</link>
		<comments>http://blog.lab49.com/archives/191#comments</comments>
		<pubDate>Thu, 15 Dec 2005 23:29:06 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[.Net]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=191</guid>
		<description><![CDATA[I will now tell you a tale of exception handling in .NET 1.1.  Be warned my fellow travelers that the road is long and treacherous, and unfortunately does not have a happy ending.  May this serve as a warning for you travelers who need to deal with .NET, unmanaged code, threads, and exceptions.
So [...]]]></description>
			<content:encoded><![CDATA[<p>I will now tell you a tale of exception handling in .NET 1.1.  Be warned my fellow travelers that the road is long and treacherous, and unfortunately does not have a happy ending.  May this serve as a warning for you travelers who need to deal with .NET, unmanaged code, threads, and exceptions.</p>
<p>So I am writing this Windows Forms application with the .NET Framework 1.1.  The Windows Forms Application reads messages from MSMQ (Microsoft Message Queue).  And on a ReceiveCompleted event handler I update some model objects with the data read from the message.  Simple enough if everything goes right.  If everything goes wrong on the other hand, it will lead you deep into issues beyond your control, and will leave you scratching your head in disbelief.<br />
<span id="more-191"></span><br />
I noticed that my model objects were not getting updated with no output what so ever, from Visual Studio or the application itself.  After checking that I was indeed receiving messages from MSMQ, I stepped through the code and noticed that if I stepped over a particular call to a DataSet method the application would just continue to run and not break at the next line.  Interesting I thought, that would only happen if an exception was thrown but no unhandled exception message box was ever displayed by Visual Studio.</p>
<p>So I surrounded the offending statements with a try catch handler and lo and behold an exception was being thrown.  I had forgotten to add a primary key to the DataSet. I probably should have added exception handling when I wrote the code, but this bothered me.  You cannot anticipate every exception that will be thrown when developing a non trivial application, so there will be times when you miss an exception and you the traveler want to be notified of it.  </p>
<p>The standard advice for &#8220;handling&#8221; unhandled exception&#8217;s is to define exception handlers in three different places in a Windows Forms application:<br />
1. Surround your Application.Run call with a try &#8230; catch block.  This will handle exceptions from the main application thread.<br />
2. Add a handler to the Application.ThreadException event.  This will handle exception on UI Threads.<br />
3. Add a handler to the AppDomain.CurrentDomain.UnhandledException event.  This will handle exceptions on all other threads (worker threads, thread pool threads).</p>
<p>Details on the above three handlers and why you need them can be found in this MSDN <a href="http://msdn.microsoft.com/msdnmag/issues/04/06/NET/default.aspx">article</a>.</p>
<p>Alrighty, armed with that knowledge I implemented the three handlers and fixed the DataSet code.  Things didn&#8217;t feel right tho.  I was pretty certain that even if code running on a thread in the thread pool threw an exception, at least the Visual Studio debugger would notify me of the exception.  So I decided to test the unhandled exceptions handlers by manually throwing an exception in the ReceiveCompleted event handler.  I debugged the application and &#8230;.. nothing happened.  The application just continued to run, no notification of an exception from the debugger or the application.  The only thing that told me that something was wrong is that my model objects were not getting updated.</p>
<p>I had run into a brick wall on the road to exception handling nirvana.  I was dismayed by this news and all hope was lost, until I found this blog <a href="http://www.codinghorror.com/blog/archives/000216.html">entry</a>.  What particularly interested me is this quote:</p>
<blockquote><p>if the unhandled exception [ occurs in ] a thread that began its life in unmanaged code, the CLR eats the exception and allows your app to keep going</p></blockquote>
<p>Ahhhh the MSMQ ReceiveCompleted event handler is probably being called from a thread created by MSMQ unmanaged code. That is probably the reason why the three unhandled exception handlers were not called.</p>
<p>So as far as I can tell there is no way to handle all unhandled exceptions in a .NET application that interact with unmanaged code with threads.  So the lesson learned is that you should identify the spots in your code where the underlying thread could come from unmanaged code and pay particular attention to exception handling within that code.</p>
<p>Note that .NET Framework 2.0 is supposed to address this problem by not swallowing the exception from background and worker pool threads.  Stay tuned as I test these changes, and most importantly see if they addressed the issue of swallowing exceptions from threads created from unmanaged code.  Hopefully the road will be straighter and have less walls.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/191/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Create an IIS site in Windows XP</title>
		<link>http://blog.lab49.com/archives/171</link>
		<comments>http://blog.lab49.com/archives/171#comments</comments>
		<pubDate>Tue, 22 Nov 2005 15:23:44 +0000</pubDate>
		<dc:creator>Manung Han</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=171</guid>
		<description><![CDATA[Lets say you are developing multiple ASP.NET web sites on your Windows XP development box.  And two distinct websites place pages on the root of the website.  No problem you say, just create another site in IIS.  Unfortunately MS disabled the ability to create other sites in the IIS snapin in Windows [...]]]></description>
			<content:encoded><![CDATA[<p>Lets say you are developing multiple ASP.NET web sites on your Windows XP development box.  And two distinct websites place pages on the root of the website.  No problem you say, just create another site in IIS.  Unfortunately MS disabled the ability to create other sites in the IIS snapin in Windows XP.  Are you out of luck?  No, because you can create sites in IIS.  Just not from the IIS snapin.  Follow these instructions below to do so:</p>
<p>Run the following from the command prompt:<br />
<code>C:\Inetpub\AdminScripts>adsutil.vbs create_vserv W3SVC/2</code><br />
<code>C:\Inetpub\AdminScripts>adsutil.vbs copy W3SVC/1 W3SVC/2</code></p>
<p>Now you will want to go in the IIS snapin and rename the newly created site, and set the Home Directory.  That&#8217;s it!  The only problem is that you can only run one site at a time, so you must go into the IIS MMC snapin to stop the site(s) you don&#8217;t want running and start the site your are currently developing and testing.</p>
<p>More details and inspiration for this entry came from Steven Cohn&#8217;s blog <a href="http://weblogs.asp.net/stevencohn/articles/59782.aspx">here</a>.  I ran across it while banging my head against the wall trying to find out how to create a site on my Windows XP box.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/171/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
