<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3016351793700121300</id><updated>2011-07-29T03:49:06.480-04:00</updated><category term='Wix MSI'/><category term='Rant Notes Debugging'/><title type='text'>Notes and DotNet</title><subtitle type='html'>Things I've learned about Lotus Notes, Domino and Microsoft's .Net platform.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://notesanddotnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://notesanddotnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peter LaComb Jr.</name><uri>http://www.blogger.com/profile/07579551071283747920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3016351793700121300.post-6645767845262794684</id><published>2011-02-25T17:26:00.000-05:00</published><updated>2011-02-25T17:26:39.431-05:00</updated><title type='text'>What not to do when using the remote debugger in Visual Studio.</title><content type='html'>&lt;div&gt;I learned a two-part lesson today:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Do not attach to wininit.exe unless you really mean it.&lt;/li&gt;&lt;li&gt;If you broke rule number one, do not accidentally select 'Terminate All' from the debug menu when you mean to select 'Detach All'. Doing so will result in a BSOD and, if you're lucky, an immediate restart of the the remote machine.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;That is all.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3016351793700121300-6645767845262794684?l=notesanddotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesanddotnet.blogspot.com/feeds/6645767845262794684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://notesanddotnet.blogspot.com/2011/02/what-not-to-do-when-using-remote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/6645767845262794684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/6645767845262794684'/><link rel='alternate' type='text/html' href='http://notesanddotnet.blogspot.com/2011/02/what-not-to-do-when-using-remote.html' title='What not to do when using the remote debugger in Visual Studio.'/><author><name>Peter LaComb Jr.</name><uri>http://www.blogger.com/profile/07579551071283747920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3016351793700121300.post-193342594753449044</id><published>2010-02-12T15:47:00.000-05:00</published><updated>2010-02-12T15:47:50.768-05:00</updated><title type='text'>Consistent Data Generation in Visual Studio 2008</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;The data generation tool in Visual Studio 2008 Data Edition is a great tool for populating your database with meaningless information to use in your unit tests, but when it comes time to do integration testing it's often important to have your data generation plan recreate a consistent dataset in key tables (like the lookup tables used in foreign keys which are often mirrored as Enums in your C# or VB.Net solutions). Fortunately, the data generation tool includes the sequential data-bound generator. This generator selects records from the specified data source and uses the results to populate your table.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;So how do we make use of this? In our database solutions, we include two databases - the actual database we're working on, and a datageneration database. For the tables we need to consistenly populate, we duplicate the schema &amp;amp; table in the datageneration database (minus any indexes/keys/constraints/triggers, etc.), and then use the post-deployment script for that database to create the desired records. To reduce duplication of the populate scripts, the post-deployment script for the real database points to the datagenration populate script by a relative path. This also means that these tables will have the same records in them whether you have just deployed the database, or just run the data generation plan - which makes life easier for everyone on the team.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;OK - enough talk - let's show this in action. Here is my solution, with three projects (datageneration database, production database, and unit tests).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vzP1nSycmkw/S3W895sQzHI/AAAAAAAAAAk/xemj_KNi1vU/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vzP1nSycmkw/S3W895sQzHI/AAAAAAAAAAk/xemj_KNi1vU/s320/1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;And here you can see that I've duplicated some of the schemas from my production database in the datageneration database.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_vzP1nSycmkw/S3W9CIrxeaI/AAAAAAAAAAs/SDscPliI0AU/s1600-h/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_vzP1nSycmkw/S3W9CIrxeaI/AAAAAAAAAAs/SDscPliI0AU/s320/2.png" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_vzP1nSycmkw/S3W9UJ7p56I/AAAAAAAAAA8/q0dbgtPzl80/s1600-h/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_vzP1nSycmkw/S3W9UJ7p56I/AAAAAAAAAA8/q0dbgtPzl80/s320/3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;&lt;br clear="all" style="page-break-before: always;" /&gt; &lt;/span&gt;  &lt;div class="MsoNormal"&gt;Here are&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;my post-deployment and populate scripts for the datageneration database.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1030" type="#_x0000_t75" style='width:6in;height:234.75pt'&gt;  &lt;v:imagedata src="file:///C:\Users\placomb\AppData\Local\Temp\msohtml1\01\clip_image007.png"  o:title=""/&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vzP1nSycmkw/S3W9Y8uIOfI/AAAAAAAAABE/FccDUpnW8EU/s1600-h/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://3.bp.blogspot.com/_vzP1nSycmkw/S3W9Y8uIOfI/AAAAAAAAABE/FccDUpnW8EU/s640/4.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_vzP1nSycmkw/S3W9z1yDbKI/AAAAAAAAABc/XCTDoTDO_WY/s1600-h/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://2.bp.blogspot.com/_vzP1nSycmkw/S3W9z1yDbKI/AAAAAAAAABc/XCTDoTDO_WY/s640/4.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:6in;height:153pt'&gt;  &lt;v:imagedata src="file:///C:\Users\placomb\AppData\Local\Temp\msohtml1\01\clip_image009.png"  o:title=""/&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;And of course, I want that data in my database when I actually deploy, so in the production database project we reference that populate script with a relative path.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_vzP1nSycmkw/S3W94ein6-I/AAAAAAAAABk/xgGAhJjzNNo/s1600-h/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://4.bp.blogspot.com/_vzP1nSycmkw/S3W94ein6-I/AAAAAAAAABk/xgGAhJjzNNo/s640/6.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Now, how do we hook this up in our data generation plan? It's easy - First, create a data connection to the datageneration database in your server explorer. In our office, we have a local instance of SQL server on each developer workstation, so we make sure to use either . or (local) for the server name so that the datageneration plan works on all workstations.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vzP1nSycmkw/S3W-OB4fyoI/AAAAAAAAAB0/6N8D_e9kjOY/s1600-h/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="388" src="http://3.bp.blogspot.com/_vzP1nSycmkw/S3W-OB4fyoI/AAAAAAAAAB0/6N8D_e9kjOY/s640/7.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Now, in the datageneration plan, select the table you want to fill,&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;change the column or columns you need filled to the sequential databound generator, and set the connection and select query properties (be sure not to reference the database in the select query - just the schema and table - the connection specifies the database). The only thing to watch for is the number of rows to generate - don't select more than you've put in your populate script.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_vzP1nSycmkw/S3W-KsGzHkI/AAAAAAAAABs/AM7lYpvnays/s1600-h/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="340" src="http://1.bp.blogspot.com/_vzP1nSycmkw/S3W-KsGzHkI/AAAAAAAAABs/AM7lYpvnays/s640/8.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3016351793700121300-193342594753449044?l=notesanddotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesanddotnet.blogspot.com/feeds/193342594753449044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://notesanddotnet.blogspot.com/2010/02/consistent-data-generation-in-visual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/193342594753449044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/193342594753449044'/><link rel='alternate' type='text/html' href='http://notesanddotnet.blogspot.com/2010/02/consistent-data-generation-in-visual.html' title='Consistent Data Generation in Visual Studio 2008'/><author><name>Peter LaComb Jr.</name><uri>http://www.blogger.com/profile/07579551071283747920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vzP1nSycmkw/S3W895sQzHI/AAAAAAAAAAk/xemj_KNi1vU/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3016351793700121300.post-4885651305017248143</id><published>2009-12-24T14:37:00.000-05:00</published><updated>2009-12-24T14:37:24.507-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rant Notes Debugging'/><title type='text'>Debugging LotusScript agents in Notes 8.5.1</title><content type='html'>I've been working with Notes &amp;amp; Domino since R4.6, and did serious development in R5 through R6.5. Something that was brought to my attention recently really bothers me about Notes development. The debugger. It is essentially unchanged since R5. It interferes with the ability to use the Notes client if it's enabled (this is a &amp;nbsp;problem with the way the Design and Admin clients are built - lock up any one of them and your Notes client goes too), it has no support for watches or conditional breakpoints (aside from coded if yada then break blocks), and is just generally outdated.&lt;br /&gt;&lt;br /&gt;IBM has done a wonderful job of updating the Notes design client. auto-complete for custom classes, sensible code navigation, etc., but they've left the debugger essentially unchanged. Are the other Notes developers out there happy with this? I'm not. I actually enjoy using Notes to build applications where it's suited, and through blogs like &lt;a href="http://codestore.net/"&gt;Codestore.net&lt;/a&gt; and others, I've expanded my definition of "where it's suited." What it definitely isn't well suited to though, is debugging.&lt;br /&gt;&lt;br /&gt;I only wish it were my place to ask "What new features would you like in the LS debugger?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3016351793700121300-4885651305017248143?l=notesanddotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesanddotnet.blogspot.com/feeds/4885651305017248143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://notesanddotnet.blogspot.com/2009/12/debugging-lotusscript-agents-in-notes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/4885651305017248143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/4885651305017248143'/><link rel='alternate' type='text/html' href='http://notesanddotnet.blogspot.com/2009/12/debugging-lotusscript-agents-in-notes.html' title='Debugging LotusScript agents in Notes 8.5.1'/><author><name>Peter LaComb Jr.</name><uri>http://www.blogger.com/profile/07579551071283747920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3016351793700121300.post-3579158423553542818</id><published>2009-12-14T15:56:00.000-05:00</published><updated>2009-12-14T15:56:39.513-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wix MSI'/><title type='text'>MSI and Wix</title><content type='html'>I've spent a lot of time of the last few months building an installation package (MSI) for the programs we've been developing. Since we're using Team Foundation Server (TFS) 2008, automating that process has mean learning as much as I can about Wix - the Windows Installer Xml toolset. Wix can be a bit intimidating, but&amp;nbsp;Alex Shevchuk has &lt;a href="http://blogs.technet.com/alexshev/pages/from-msi-to-wix.aspx"&gt;a wonderful series that I found quite useful&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3016351793700121300-3579158423553542818?l=notesanddotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesanddotnet.blogspot.com/feeds/3579158423553542818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://notesanddotnet.blogspot.com/2009/12/msi-and-wix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/3579158423553542818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3016351793700121300/posts/default/3579158423553542818'/><link rel='alternate' type='text/html' href='http://notesanddotnet.blogspot.com/2009/12/msi-and-wix.html' title='MSI and Wix'/><author><name>Peter LaComb Jr.</name><uri>http://www.blogger.com/profile/07579551071283747920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
