<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-7085941</id><updated>2009-11-14T04:42:41.782-08:00</updated><title type='text'>Experience in C++, C#, Java and Process : Living in Montreal</title><subtitle type='html'>* What is my technical experience as a software developer
&lt;p&gt;
* What I have learned in the software business 
&lt;/p&gt;
&lt;p&gt;
* Where I am heading to in my career
&lt;/p&gt;
&lt;p&gt;
* How to process in a project
&lt;/p&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default?start-index=26&amp;max-results=25'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7085941.post-116650750508488136</id><published>2006-12-18T21:51:00.000-08:00</published><updated>2006-12-18T21:51:45.246-08:00</updated><title type='text'>'.NET: Introducing Generics in the CLR,'bloggerForm','scrollbars=no,width=475,height=300,top=175,left=75,status=yes,resizable=yes</title><content type='html'>&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/00/NET/default.aspx"&gt;'.NET: Introducing Generics in the CLR,'bloggerForm','scrollbars=no,width=475,height=300,top=175,left=75,status=yes,resizable=yes&lt;/a&gt;: "Generics are an extension of the CLR type system that allow developers to define types for which certain details are left unspecified. These details are specified when the code is referenced by consumer code, making for enhanced flexibility. Jason Clark explains how."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-116650750508488136?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/116650750508488136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=116650750508488136' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/116650750508488136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/116650750508488136'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2006/12/net-introducing-generics-in.html' title='&apos;.NET: Introducing Generics in the CLR,&apos;bloggerForm&apos;,&apos;scrollbars=no,width=475,height=300,top=175,left=75,status=yes,resizable=yes'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-116551691679776516</id><published>2006-12-07T10:40:00.000-08:00</published><updated>2006-12-07T10:42:29.393-08:00</updated><title type='text'>How do I debug a custom action/installer class?</title><content type='html'>You can use one of the following methods:&lt;br /&gt;Add a call in your code to System.Diagnostics.Debugger.Launch. This method opens Just-In-Time debugging and allows you to attach a new debugger to your code.&lt;br /&gt;Add a call in your code to MessageBox.Show("Debug Me"). When the message box is shown, use Visual Studio to attach to the &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl18ctl00_LibFrame_ctl19',this);" href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.messagebox(VS.80).aspx"&gt;MessageBox&lt;/a&gt; process. Then place breaks (for Visual C# projects) or stops (for Visual Basic projects) in the code.&lt;br /&gt;Set your debugging preferences to start InstallUtil.exe (which is located in \winnt\Microsoft.net\Framework\version) and pass it your assembly as a parameter. When you press F5, you hit your breakpoint. InstallUtil.exe will run your custom actions the same way that MSI does.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-116551691679776516?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/116551691679776516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=116551691679776516' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/116551691679776516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/116551691679776516'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2006/12/how-do-i-debug-custom-actioninstaller.html' title='How do I debug a custom action/installer class?'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-112482644193067704</id><published>2005-08-23T12:44:00.000-07:00</published><updated>2005-08-23T12:47:21.936-07:00</updated><title type='text'>DBDate, DBTime, DBTimeStamp, Date</title><content type='html'>System.Data.OleDb.OleDbType.DBDate = store date only in the database;&lt;br /&gt;System.Data.OleDb.OleDbType.DBTime= store time only in the database;&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; The wrong one&lt;br /&gt;System.Data.OleDb.OleDbType.DBTimeStamp= store date&amp;time only in the database;&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; The right one&lt;br /&gt;System.Data.OleDb.OleDbType.Date= store date&amp;time only in the database;&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_TradeTime", System.Data.OleDb.OleDbType.Date, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TradeTime", System.Data.DataRowVersion.Original, null));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-112482644193067704?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/112482644193067704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=112482644193067704' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/112482644193067704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/112482644193067704'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/08/dbdate-dbtime-dbtimestamp-date.html' title='DBDate, DBTime, DBTimeStamp, Date'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-111653276905871863</id><published>2005-05-19T12:57:00.000-07:00</published><updated>2005-05-19T12:59:29.063-07:00</updated><title type='text'>Change color of one cell in the DataGrid control ( C#)</title><content type='html'>&lt;a href="http://datawebcontrols.com/faqs/CustomizingAppearance/ConditionalFormatting.shtml"&gt;http://datawebcontrols.com/faqs/CustomizingAppearance/ConditionalFormatting.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The DataGrid provides a plethora of properties that can be set to specify the DataGrid's formatting. For example, you can have each consecutive row of a DataGrid alternate between two different colors merely by setting the DataGrid's AlternatingItemStyle's BackColor property.&lt;br /&gt;While the AlternatingItemStyle is a great way to apply different formatting for every other DataGrid row, oftentimes developers want to perform conditional formatting based on the value(s) of a DataGrid row. For example, imagine a DataGrid that displays a list of products, including the product's name and price. Perhaps you want to draw the user's attention to products that are at "bargain-basement" prices. Namely, if a product has a price less than, say, $10.00, you want to have that row highlighted.&lt;br /&gt;This can be accomplished by providing an event handler for the DataGrid's ItemDataBound event. The ItemDataBound fires once for each DataGridItem added to the DataGrid (that is, it fires once for each row that is added to the DataGrid). Essentially, what we need to do is in this event handler, check to see if the price is below the threshold ($10.00, or whatever lower bound you choose). If it is, then we want to set the DataGridItem's BackColor property to Yellow, thereby highlighting the row.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-111653276905871863?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/111653276905871863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=111653276905871863' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111653276905871863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111653276905871863'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/05/change-color-of-one-cell-in-datagrid.html' title='Change color of one cell in the DataGrid control ( C#)'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-111627179406990485</id><published>2005-05-16T12:28:00.000-07:00</published><updated>2005-05-16T12:29:54.073-07:00</updated><title type='text'>Setup with Serial Key required</title><content type='html'>&lt;a name="vxgrfserialnumbertemplateproperty"&gt;&lt;/a&gt;SerialNumberTemplate Property&lt;br /&gt;&lt;br /&gt;&lt;####-????-%%%%-????-%%%%-????-%%%%&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Requires a digit that will not be included in the validation algorithm.&lt;br /&gt;% Requires a digit that will be included in the validation algorithm.&lt;br /&gt;? Requires an &lt;strong&gt;alphanumeric&lt;/strong&gt; character that will not be included in the validation algorithm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-111627179406990485?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/111627179406990485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=111627179406990485' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111627179406990485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111627179406990485'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/05/setup-with-serial-key-required.html' title='Setup with Serial Key required'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-111620862131477637</id><published>2005-05-15T18:51:00.000-07:00</published><updated>2005-05-15T18:57:01.320-07:00</updated><title type='text'>DataSet Form Problems ( As always)</title><content type='html'>- When I used the Data Set Form Wizard in VS.NET 2003 to generate a dataset form, I got the error: "there were errors configuring the data adapter".  My god, it happens again. I spent 1 hour to repeat the whole procedure and I spent 3o minutes on Internet to find out how other people say about it.&lt;br /&gt;&lt;br /&gt;Finally I recalled the problem happend before:&lt;br /&gt;&lt;br /&gt;- If a column name in the Access database is special (I am not clear how special it could be), it will have this problem.&lt;br /&gt;  So I check the column name, find one is called Symbol, which looks special. I changed it to ProductSymbol, Great! the dataset form wizard worked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-111620862131477637?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/111620862131477637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=111620862131477637' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111620862131477637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111620862131477637'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/05/dataset-form-problems-as-always.html' title='DataSet Form Problems ( As always)'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-111550112704228670</id><published>2005-05-07T14:24:00.000-07:00</published><updated>2005-05-07T14:25:27.046-07:00</updated><title type='text'>Good about Manifest</title><content type='html'>&lt;a href="http://blogs.msdn.com/junfeng/archive/2004/11/02/251318.aspx"&gt;http://blogs.msdn.com/junfeng/archive/2004/11/02/251318.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-111550112704228670?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/111550112704228670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=111550112704228670' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111550112704228670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111550112704228670'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/05/good-about-manifest.html' title='Good about Manifest'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-111435009773174029</id><published>2005-04-24T06:39:00.000-07:00</published><updated>2005-04-24T06:41:37.733-07:00</updated><title type='text'>Mix cin &gt;&gt; and cin.getline in C++ program</title><content type='html'>If the cin.getline() is used after cin &gt;&gt;, the getline may just get a '\0' bacause the last cin &gt;&gt; call left it.&lt;br /&gt;How to fix it?&lt;br /&gt;&lt;br /&gt;cin.ignore(100,'\n');   &lt;br /&gt;cin.getline(buffer1, 80, '\n');&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-111435009773174029?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/111435009773174029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=111435009773174029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111435009773174029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111435009773174029'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/04/mix-cin-and-cingetline-in-c-program.html' title='Mix cin &gt;&gt; and cin.getline in C++ program'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-111055188505634881</id><published>2005-03-11T06:22:00.000-08:00</published><updated>2005-03-11T06:38:05.056-08:00</updated><title type='text'>ADO.NET Datagrid database caching in VS.NET</title><content type='html'>// Add a new record to the database directlly&lt;br /&gt;// It is very slow since it is operating to the db without caching&lt;br /&gt;//&lt;br /&gt;public void AddLog(string info) &lt;br /&gt;{  &lt;br /&gt;objDatasetLog.LogTable.AddLogTableRow( DateTime.Now, 0, "User", info);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// Better approach:&lt;br /&gt;//&lt;br /&gt;// Create a cache record, then merge to the real database laterly&lt;br /&gt;//&lt;br /&gt;public void AddLog(string info) &lt;br /&gt;{  &lt;br /&gt;// Create a new dataset to hold the records returned from the call to FillDataSet.  &lt;br /&gt;// A temporary dataset is used because filling the existing dataset would  &lt;br /&gt;// require the databindings to be rebound.  &lt;br /&gt;PDFAuto.DatasetLog objDataSetTemp;  &lt;br /&gt;objDataSetTemp = new PDFAuto.DatasetLog();&lt;br /&gt;   try   &lt;br /&gt;{   &lt;br /&gt;// Attempt to fill the temporary dataset.   &lt;br /&gt;&lt;br /&gt;objDataSetTemp.LogTable.AddLogTableRow( DateTime.Now, 0, "User", info);  &lt;br /&gt;}  &lt;br /&gt;catch (System.Exception eFillDataSet)   &lt;br /&gt;{   &lt;br /&gt;// Add your error handling code here.   &lt;br /&gt;throw eFillDataSet;  &lt;br /&gt;}  &lt;br /&gt;try   &lt;br /&gt;{   &lt;br /&gt;grdLogTable.DataSource = null;   &lt;br /&gt;// Empty the old records from the dataset.   &lt;br /&gt;objDatasetLog.Clear();   &lt;br /&gt;// Merge the records into the main dataset.   &lt;br /&gt;objDatasetLog.Merge(objDataSetTemp);   &lt;br /&gt;grdLogTable.SetDataBinding(objDatasetLog, "LogTable");  &lt;br /&gt;}  &lt;br /&gt;catch (System.Exception eLoadMerge)   &lt;br /&gt;{   &lt;br /&gt;// Add your error handling code here.   &lt;br /&gt;throw eLoadMerge;  &lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-111055188505634881?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/111055188505634881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=111055188505634881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111055188505634881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/111055188505634881'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/03/adonet-datagrid-database-caching-in.html' title='ADO.NET Datagrid database caching in VS.NET'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110990637432963398</id><published>2005-03-03T19:17:00.000-08:00</published><updated>2005-03-03T19:19:34.330-08:00</updated><title type='text'>Set width and precision in iostream of STD</title><content type='html'>1. Call precision and width close to cout;&lt;br /&gt;2. fixed to enforce to show a float as 23.45 format&lt;br /&gt;&lt;br /&gt;int nLine = 1; for ( int i = 0; i &lt; 100; i += 5)&lt;br /&gt;{ &lt;br /&gt;cout.precision( 2);  cout.width( 6); &lt;br /&gt;cout &lt;&lt; fixed &lt;&lt; inch2cm( i) &lt;&lt; " ";&lt;br /&gt;if ( nLine % 10 == 0) &lt;br /&gt;{   cout &lt;&lt; endl;  } &lt;br /&gt;nLine++;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110990637432963398?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110990637432963398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110990637432963398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110990637432963398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110990637432963398'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/03/set-width-and-precision-in-iostream-of.html' title='Set width and precision in iostream of STD'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110720807195161508</id><published>2005-01-31T13:42:00.000-08:00</published><updated>2005-01-31T13:47:51.953-08:00</updated><title type='text'>Could not access 'CDO.Message' object while using SMTP in System.Web.Mail </title><content type='html'>Could not access 'CDO.Message' object:&lt;br /&gt;&lt;br /&gt;1. The SMTP server must accept your outcoming email address&lt;br /&gt;2. The SMTP server uses the standard port 25 for SMTP&lt;br /&gt;&lt;br /&gt;MailMessage Message = new MailMessage();&lt;br /&gt;&lt;br /&gt;Message.To = "&lt;a href="mailto:joe@xxx.com"&gt;joe@xxx.com&lt;/a&gt;";&lt;br /&gt;Message.From = "&lt;a href="mailto:xxx@sympatico.ca"&gt;xxx@sympatico.ca&lt;/a&gt;"; // This address must have been registered in the SMTP server you are using in SmtpMail.SmtpServer&lt;br /&gt;Message.Subject = "Test";&lt;br /&gt;Message.Body = "It is a testing message";&lt;br /&gt;&lt;br /&gt;SmtpMail.SmtpServer = "smtp8.sympatico.ca"; // The SMTP server&lt;br /&gt;&lt;br /&gt;SmtpMail.Send(Message);&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110720807195161508?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110720807195161508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110720807195161508' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110720807195161508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110720807195161508'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/could-not-access-cdomessage-object.html' title='Could not access &apos;CDO.Message&apos; object while using SMTP in System.Web.Mail '/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110687773307283453</id><published>2005-01-27T18:01:00.000-08:00</published><updated>2005-01-30T07:08:39.056-08:00</updated><title type='text'>Reference places</title><content type='html'>&lt;ul&gt;&lt;li&gt;HTML &lt;a href="http://www.w3schools.com/"&gt;http://www.w3schools.com/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;C# &lt;a href="http://www.sloppycode.net/"&gt;http://www.sloppycode.net&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110687773307283453?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110687773307283453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110687773307283453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110687773307283453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110687773307283453'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/reference-places.html' title='Reference places'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110679205360940524</id><published>2005-01-26T18:13:00.000-08:00</published><updated>2005-01-26T21:29:20.806-08:00</updated><title type='text'>Regular expression in C#</title><content type='html'>It is time consuming to build a regular expression.&lt;br /&gt;I have a text file as below:&lt;br /&gt;&lt;br /&gt;idnameaddressemailfaxpassowrd&lt;br /&gt;example:&lt;br /&gt;000010034981Mr. Ray BabsMontreal Canada Test@glinknet.com5142842903PassWord&lt;br /&gt;&lt;br /&gt;How do I parse it? Note it is possible no value for address, email, fax, or password&lt;br /&gt;&lt;br /&gt;Here is the regular expression I built ( 2 hours work)&lt;br /&gt;&lt;br /&gt;(?&lt;id&gt;\d+)\(?&lt;name&gt;(.[^]+))\(?&lt;br /&gt;&lt;address&gt;()(.[^]+))\(?&lt;email&gt;(.[^]+)())\(?&lt;fax&gt;()(.[^]+))\(?&lt;pdfcode&gt;(.+()))&lt;br /&gt;&lt;br /&gt;It retrives the value to groups defined by "?&lt;group&gt;"&lt;br /&gt;(&lt;span style="color:#ff6666;"&gt;? &lt;/span&gt;&lt;span style="color:#993300;"&gt;()&lt;/span&gt;&lt;span style="color:#990000;"&gt;&lt;/span&gt;&lt;span style="color:#66cccc;"&gt;(.[^]+)&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#ff6666;"&gt;Can you find better expression?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/address&gt;&lt;div align="left"&gt;&lt;address&gt;Regex regx = new Regex( @"(?&lt;id&gt;\d+)\(?&lt;name&gt;(.[^]+))\(? &lt;address&gt;()(.[^]+))\(?&lt;email&gt;(.[^]+)())\(?&lt;fax&gt;()(.[^]+))\(?&lt;pdfcode&gt;(.+()))", RegexOptions.IgnoreCase RegexOptions.Singleline RegexOptions.IgnorePatternWhitespace RegexOptions.Compiled );&lt;br /&gt;Match m = regx.Match( line);&lt;br /&gt;if ( !m.Success) &lt;/address&gt;&lt;address&gt;{ &lt;/address&gt;&lt;address&gt;System.Diagnostics.Debug.WriteLine( line, "Import Text Error"); &lt;/address&gt;&lt;address&gt;continue; &lt;/address&gt;&lt;address&gt;} &lt;/address&gt;&lt;address&gt; &lt;/address&gt;&lt;address&gt;string id = m.Result( "${id}"); &lt;/address&gt;&lt;address&gt;string name = m.Result( "${name}"); &lt;/address&gt;&lt;address&gt;string address = m.Result( "${address}"); &lt;/address&gt;&lt;address&gt;string email = m.Result( "${email}"); &lt;/address&gt;&lt;address&gt;string fax = m.Result( "${fax}"); &lt;/address&gt;&lt;address&gt;string pdfcode = m.Result( "${pdfcode}");&lt;br /&gt;&lt;/address&gt;&lt;address&gt;&lt;br /&gt; &lt;/address&gt;&lt;/address&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110679205360940524?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110679205360940524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110679205360940524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110679205360940524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110679205360940524'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/regular-expression-in-c.html' title='Regular expression in C#'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110668050919552604</id><published>2005-01-25T11:14:00.000-08:00</published><updated>2005-02-10T09:30:23.520-08:00</updated><title type='text'>Data access in VS.NET demo : C#</title><content type='html'>1. &lt;a href="http://www.dotnetjunkies.com/Tutorial/92FD33CA-7528-42A0-B974-8607A04B8B56.dcik"&gt;http://www.dotnetjunkies.com/Tutorial/92FD33CA-7528-42A0-B974-8607A04B8B56.dcik&lt;/a&gt;&lt;br /&gt;2. Introduction&lt;br /&gt;When using the Visual Studio.NET IDE to create connections to MS Access databases, the default wrapper only puts Dates into Date/Time fields. This causes only the date to be saved and on the time when a date/time is written to the data set and Update is called.&lt;br /&gt;How to fix it?&lt;br /&gt;1) This is caused by the Wizard using DBDate rather than DBTimeStamp in the OleDbParameter method generated by the wizard. Ofcourse each time you regenerate this code using the wizard you will have to do the replace again.&lt;br /&gt;Note: This has to be done in all OleDbParameter calls that use System.Data.OleDb.OleDbType.DBDate and replace with System.Data.OleDb.OleDbType.DBTimeStamp&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;Actually, this solution does not work. INSERT causes an error about type mismatch&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;2) Just change to &lt;span style="color:#ff0000;"&gt;&lt;em&gt;&lt;strong&gt;System.Data.OleDb.OleDbType.Date&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt; and it will work. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3. Don't use 'Level' as a row name in a table, VS.NET IDE will not generate data adapter for it.&lt;br /&gt;&lt;br /&gt;4. Expend the width of a column&lt;br /&gt;   int nWidth = objColumnStylegrdLogTableEvent_Level.Width+objColumnStylegrdLogTableInfo.Width + objColumnStylegrdLogTableTime.Width;&lt;br /&gt;   objColumnStylegrdLogTableInfo.Width = grdLogTable.Width - nWidth;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110668050919552604?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110668050919552604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110668050919552604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110668050919552604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110668050919552604'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/data-access-in-vsnet-demo-c.html' title='Data access in VS.NET demo : C#'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110667093720729434</id><published>2005-01-25T08:33:00.000-08:00</published><updated>2005-01-25T08:35:37.206-08:00</updated><title type='text'>Get the application start up path : C#</title><content type='html'>// Gets the path for the executable file that started the application, including the executable name.&lt;br /&gt;string aPath1 = System.Windows.Forms.Application.ExecutablePath;    &lt;br /&gt;&lt;br /&gt;// Gets the path for the executable file that started the application, not including the executable name.&lt;br /&gt;string aPath2 = System.Windows.Forms.Application.StartupPath;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110667093720729434?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110667093720729434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110667093720729434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110667093720729434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110667093720729434'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/get-application-start-up-path-c.html' title='Get the application start up path : C#'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110654097738421942</id><published>2005-01-23T20:28:00.000-08:00</published><updated>2005-01-23T20:29:37.386-08:00</updated><title type='text'>.NET Framework Launch Condition</title><content type='html'>&lt;a name="vxtskaddingnetframeworklaunchcondition"&gt;&lt;/a&gt;&lt;br /&gt;See Also&lt;br /&gt;&lt;a href="ms-help://MS.VSCC.2003/MS.MSDNQTR.2004OCT.1033/vsintro7/html/vxconlaunchconditionmanagementindeployment.htm"&gt;Launch Condition Management in Deployment&lt;/a&gt;  &lt;a href="ms-help://MS.VSCC.2003/MS.MSDNQTR.2004OCT.1033/vsintro7/html/vxgrfsupportedruntimesproperty.htm"&gt;SupportedRuntimes Property&lt;/a&gt;  &lt;a href="ms-help://MS.VSCC.2003/MS.MSDNQTR.2004OCT.1033/vsintro7/html/vxgrfmessageproperty.htm"&gt;Message Property&lt;/a&gt;  &lt;a href="ms-help://MS.VSCC.2003/MS.MSDNQTR.2004OCT.1033/vsintro7/html/vxgrfinstallurlproperty.htm"&gt;InstallUrl Property&lt;/a&gt;  Working With Multiple Versions of the .NET Framework  Side-by-Side Execution  &lt;a href="ms-help://MS.VSCC.2003/MS.MSDNQTR.2004OCT.1033/vsintro7/html/vxconlaunchconditionproperties.htm"&gt;Properties for the Launch Conditions Editor&lt;/a&gt;&lt;br /&gt;The .NET Framework launch condition is used to check for the common language runtime on a target computer during installation. This launch condition is automatically added to a deployment project when a dependency on the .NET Framework is detected; it cannot be removed.&lt;br /&gt;If a version of the runtime specified in the SupportedRuntimes property is not found, the installation is halted. The user is presented with a Yes / No dialog box containing the text specified in the Message property. If the user chooses Yes, he is redirected to the location specified in the InstallUrl property (the default is a Microsoft Support Web site that contains a downloadable copy of the .NET Framework redistributable file).&lt;br /&gt;In many cases, you will want to modify the InstallUrl property to point to your own location for the redistributable file. For example, if you are distributing your application on CD-ROM, you should include the redistributable file on the CD and change the InstallUrl property to a relative file path. If you change the InstallUrl property, you should also change the Message property to explain what is being installed and from where.&lt;br /&gt;In addition, any Visual Studio .NET application or component that includes data access has a dependency on Microsoft Data Access Components (MDAC) version 2.7 or later. You will also need to add a launch condition to check for MDAC if your application includes data access. For more information, see Adding a Launch Condition for Microsoft Data Access Components.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110654097738421942?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110654097738421942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110654097738421942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110654097738421942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110654097738421942'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/net-framework-launch-condition.html' title='.NET Framework Launch Condition'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110649847349661915</id><published>2005-01-23T08:39:00.000-08:00</published><updated>2005-01-23T08:41:13.496-08:00</updated><title type='text'>Add a taskbar tray in C#</title><content type='html'>C# provides the NotifyIcon in task bar as a component. Here is some event it has to handle:&lt;br /&gt;&lt;br /&gt;private void FormMain_Resize(object sender, System.EventArgs e) &lt;br /&gt;{  &lt;br /&gt;  if (FormWindowState.Minimized == WindowState)    Hide(); &lt;br /&gt;}&lt;br /&gt;private void notifyIconTask_DoubleClick(object sender, System.EventArgs e) &lt;br /&gt;{  &lt;br /&gt; Show();  &lt;br /&gt; WindowState = FormWindowState.Normal;  &lt;br /&gt;}&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110649847349661915?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110649847349661915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110649847349661915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110649847349661915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110649847349661915'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/add-taskbar-tray-in-c.html' title='Add a taskbar tray in C#'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110617909625399648</id><published>2005-01-19T15:51:00.000-08:00</published><updated>2005-01-19T15:58:16.253-08:00</updated><title type='text'>Thread pool in C#</title><content type='html'>There is pre-created threads pool in C#. Use this threads in the pool could make the programming easier and faster. But be noted, if all of the threads in the pool are used, you will get an exception.&lt;br /&gt;How does it exactly work for a threads pool? Can a application creates its own threads pool with the same design?&lt;br /&gt;&lt;br /&gt;Need to be clarified!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110617909625399648?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110617909625399648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110617909625399648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110617909625399648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110617909625399648'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/thread-pool-in-c.html' title='Thread pool in C#'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110608557391704130</id><published>2005-01-18T13:46:00.000-08:00</published><updated>2005-01-18T13:59:50.596-08:00</updated><title type='text'>Broken Software Design theory </title><content type='html'>It must exists a research area to break software design.&lt;br /&gt;A software is designed for purpose and it must run correctly following the procedure designed. In the design process, the designer may only think of how to make it works smoothly which assumes every condition is followed correctly. It is not designed for exceptions which may make the software failed.&lt;br /&gt;&lt;br /&gt;The Broken Software Design theory stduies how to break a software in the design stage.&lt;br /&gt;&lt;br /&gt;It helps the designer to look at the design from different perspectives and improve the design as well.&lt;br /&gt;&lt;br /&gt;For more information, please keep trace this blog.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110608557391704130?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110608557391704130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110608557391704130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110608557391704130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110608557391704130'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/broken-software-design-theory.html' title='Broken Software Design theory '/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110549883929309688</id><published>2005-01-11T18:50:00.000-08:00</published><updated>2005-01-11T19:00:39.293-08:00</updated><title type='text'>XP can't boot to safemode !!!</title><content type='html'>Big problem:&lt;br /&gt;1. I am working on a project and I installed a MIDI input device simulation driver called MIDI-YOKE.&lt;br /&gt;2. After computer restarted as required, it stopped just before the login screen showup&lt;br /&gt;3. I can not boot into safemode; I believe that the problems was in the YOKE driver.&lt;br /&gt;4. What I am going to do? reformatting the disk and install XP again? No way! I have a lot of work to do: a new system release is coming and my computer can's stop&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;5. Clam down, Joe.&lt;/span&gt;&lt;br /&gt;6. Search online, didn't find something really helpful.&lt;br /&gt;7. I am a Microsoft believer. There must a way to let windows booting procedure ingore the YOKE driver&lt;br /&gt;8. I tried to boot into Safemode command&lt;br /&gt;9. OK, I can type dos command&lt;br /&gt;10. Regedit, search the drive name, delete everything related to it.&lt;br /&gt;11. Control.exe. Cool! the control panel shows up. Goto System-&gt;Device Management, find the YOKE device, delete it!&lt;br /&gt;12. Reboot, then it is working!&lt;br /&gt;13. I have to Ghost my disk C and back up all of my work.&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;14. Never try anything stupid&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110549883929309688?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110549883929309688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110549883929309688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110549883929309688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110549883929309688'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/xp-cant-boot-to-safemode.html' title='XP can&apos;t boot to safemode !!!'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110520131866630413</id><published>2005-01-08T08:18:00.000-08:00</published><updated>2005-01-08T08:21:58.666-08:00</updated><title type='text'>C# : Marshal class is a bridge between managed memory and unmanaged memory</title><content type='html'>Marshal provides a collection of methods:&lt;br /&gt;- allocating unmanaged memory,&lt;br /&gt;- copying unmanaged memory blocks,&lt;br /&gt;- converting managed to unmanaged types,&lt;br /&gt;- interacting with unmanaged code.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110520131866630413?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110520131866630413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110520131866630413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110520131866630413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110520131866630413'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2005/01/c-marshal-class-is-bridge-between.html' title='C# : Marshal class is a bridge between managed memory and unmanaged memory'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110360291589230872</id><published>2004-12-20T20:20:00.000-08:00</published><updated>2004-12-20T20:21:55.893-08:00</updated><title type='text'>Show a form as a dialog box in C#</title><content type='html'>About about = new About();  &lt;br /&gt;&lt;br /&gt;// Show it as a diaglog&lt;br /&gt;about.ShowDialog(); &lt;br /&gt;&lt;br /&gt;// Show it as a form&lt;br /&gt;about.Show(); &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110360291589230872?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110360291589230872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110360291589230872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110360291589230872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110360291589230872'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2004/12/show-form-as-dialog-box-in-c.html' title='Show a form as a dialog box in C#'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110351004865371888</id><published>2004-12-19T18:11:00.000-08:00</published><updated>2005-01-27T07:43:59.393-08:00</updated><title type='text'>VS.NET Setup Project : Issues and Solutions</title><content type='html'>&lt;strong&gt;Environment:&lt;/strong&gt;&lt;br /&gt;Microsoft Visual Studio.NET 2003&lt;br /&gt;Windows XP SP2&lt;br /&gt;DELL Inspiron 8200, CPU P4-M 1.6M ,512MB 15.4LCD, 40G, 3COM Wireless, DVD+CDRW, Logitech MX310&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Project:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;During the install process , the setup asks users to give a project name [ProjectName]. If the user select Link.NET Example, the setup will install a [defult database]; if not, the database will not be installed.&lt;/li&gt;&lt;li&gt;The [defult database] contains a few of folders up to 20.&lt;/li&gt;&lt;li&gt;Add an Uninstall menu along with the main program menu.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Solutions &amp; &lt;span style="color:#ff0000;"&gt;Problems&lt;/span&gt;:&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Add a new dialog Textboxes (B) in the user interface editor, press F4 to show its property window. Assign "EDIT_PROJECTNAME" as Edit1Property and "Link.NET Example" as Edit1Value, so [EDIT_PROJECTNAME] can be used anywhere to represent "Link.NET Example".&lt;/li&gt;&lt;li&gt;Drag/drop a database folder to the Application Folder in the File System. VS.NET will add the whole folder hiberarchy to the setup folder. &lt;span style="color:#ff0000;"&gt;[Problem] &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;If you wnat to delete the folders from the setup project, it would be nightmare. The root folder can not be deleted if each of its subfolders contains any files. To remove the whole folder, first of all, you have to remove all files in each folder, by hands! I have tried to move the database file to a MSM file, but it never works.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#ff0000;"&gt;&lt;span style="color:#000000;"&gt;Show the database folder property, set the Condition property as "[EDIT_PROJECTNAME] == "Link.NET Example"". During the setup procedure, this Condition will be checked to determine if the database should be installed.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;[More about Condition]  Add a provision that allows users to create a shortcut to the FormattingApplication in their desktops. As before, you'll need to add the shortcut to the User's Desktop folder. Right-click on Primary output from the FormattingApplication (Active) item in the Application folder and select Create Shortcut to Primary output from FormattingApplication (Active) from the context menu. Rename the shortcut Formatting Application. Drag and drop it in the User's Desktop folder. However, you want this shortcut to be installed only if the user wants to install it. Therefore, set the Condition property of the User's Desktop folder to SHORTCUTDEMO. This ensures that the shortcut will be installed only if this condition is set to true. Later in this article, you will create a dialog box where this property can be set.  &lt;a href="http://www.codeguru.com/Csharp/.NET/net_vs_addins/visualstudioadd-ins/article.php/c7245/"&gt;Web like help&lt;/a&gt;&lt;/li&gt;&lt;li&gt;VS.NET setup project does not encourage to add a uninstallation menu along with the application invoking menu. To do that, you have to add a shortcut for &lt;strong&gt;"msiexec /x [productcode]". &lt;/strong&gt;&lt;span style="color:#ff0000;"&gt;But, you have to add msiexec into your application folder first before creating the shortcut.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;I can create a menu with static name during the setup, but I want to assign the menu name with user's own defined project name. &lt;span style="color:#ff0000;"&gt;It is impossible to do it in VS.NET setup project.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110351004865371888?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110351004865371888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110351004865371888' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110351004865371888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110351004865371888'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2004/12/vsnet-setup-project-issues-and.html' title='VS.NET Setup Project : Issues and Solutions'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110332330775642911</id><published>2004-12-17T14:40:00.001-08:00</published><updated>2004-12-17T14:41:47.756-08:00</updated><title type='text'>Add a new link for Employment</title><content type='html'>&lt;a href="http://www.newworldproducts.org/Employment/"&gt;Employment&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110332330775642911?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110332330775642911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110332330775642911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110332330775642911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110332330775642911'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2004/12/add-new-link-for-employment.html' title='Add a new link for Employment'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7085941.post-110312241237089251</id><published>2004-12-15T06:50:00.000-08:00</published><updated>2004-12-15T06:53:32.370-08:00</updated><title type='text'>C# Practise: System.Diagnostics.Process.Start</title><content type='html'>The following two code blocks are same:&lt;br /&gt;1.&lt;br /&gt;System.Diagnostics.Process.Start("&lt;a href="http://www.glinknet.com"&gt;http://www.glinknet.com&lt;/a&gt;");&lt;br /&gt;return;&lt;br /&gt;  &lt;br /&gt;2.&lt;br /&gt;System.Diagnostics.Process p = new System.Diagnostics.Process();  &lt;br /&gt;p.StartInfo.FileName = "&lt;a href="http://www.glinknet.com/"&gt;http://www.glinknet.com&lt;/a&gt;";   &lt;br /&gt;p.StartInfo.Verb = "Show";  &lt;br /&gt;p.StartInfo.CreateNoWindow = true;  &lt;br /&gt;p.Start(); &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7085941-110312241237089251?l=billibit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://billibit.blogspot.com/feeds/110312241237089251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7085941&amp;postID=110312241237089251' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110312241237089251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7085941/posts/default/110312241237089251'/><link rel='alternate' type='text/html' href='http://billibit.blogspot.com/2004/12/c-practise-systemdiagnosticsprocesssta.html' title='C# Practise: System.Diagnostics.Process.Start'/><author><name>Joe</name><uri>http://www.blogger.com/profile/04618327687649458144</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09378927886019551260'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry></feed>