<?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>Blue Cog Blog</title>
	<atom:link href="http://www.bluecog.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bluecog.com/blog</link>
	<description>It's just a freaking blue cog...</description>
	<lastBuildDate>Mon, 08 Mar 2010 18:45:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Crowdsourced Internationalization</title>
		<link>http://www.bluecog.com/blog/2010/03/08/crowdsourced-internationalization/</link>
		<comments>http://www.bluecog.com/blog/2010/03/08/crowdsourced-internationalization/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 18:45:59 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Internationalization]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=575</guid>
		<description><![CDATA[I listened recently to a couple (not so recent) episodes of the Startup Success Podcast where the topic was &#8220;crowdsourced&#8221; testing. In episode 20 Bob Walsh and Patrick Foley interviewed Dave Garr and Darrell Benatar, founders of UserTesting.com. In episode 22 they interviewed Matt Johnston from uTest. These are both interesting services that facilitate a [...]]]></description>
			<content:encoded><![CDATA[<p>I listened recently to a couple (not so recent) episodes of the <a href="http://startuppodcast.wordpress.com/">Startup Success Podcast</a> where the topic was &#8220;crowdsourced&#8221; testing. In <a href="http://startuppodcast.wordpress.com/2009/03/26/show-20-usertestingcom-disruptive-usability-testing/">episode 20</a> Bob Walsh and Patrick Foley interviewed Dave Garr and Darrell Benatar, founders of <a href="http://www.usertesting.com/">UserTesting.com</a>. In <a href="http://startuppodcast.wordpress.com/2009/04/15/show-22-crowdsourced-bug-detection-with-utest/">episode 22</a> they interviewed Matt Johnston from <a href="http://www.utest.com/">uTest</a>. These are both interesting services that facilitate a kind of hands on testing that would otherwise be too expensive for smaller (not so well funded) companies, whether they&#8217;re startups or not.</p>
<p>This also got me thinking about translation and internationalization. Since these services enlist testers from around the globe they could provide testing of translated versions of an application. There are <a href="http://www.hanselman.com/blog/UsingCrowdsourcingForExpandingLocalizationOfProducts.aspx">crowdsourced translation services</a> as well. It seems to me that combining such a service with a separate user testing service that puts the translation in front of many more eyes of native speakers could result in higher quality translated versions of an application. In the case where an application is built on a (non-web) platform that these services do not support, it might be worth mocking up menus and forms as web pages simply to make use of crowsourced translation and testing services.</p>
<p>At this point I&#8217;m just thinking out loud. This is not something I have a use for today but I wanted to make a note here for future reference. If anyone reading this (not that I think anyone actually reads the <em>Blue Cog Blog</em>) has experience in this area I&#8217;d like to hear about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2010/03/08/crowdsourced-internationalization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git Resources</title>
		<link>http://www.bluecog.com/blog/2010/03/02/git-resources/</link>
		<comments>http://www.bluecog.com/blog/2010/03/02/git-resources/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 17:27:16 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=549</guid>
		<description><![CDATA[I have been learning to use Git. The following is a list of resources I found to be useful, interesting, or that I want to explore further as I get into Git:

Website: Git &#8211; Fast Version Control System &#8211; The home of Git. When you think source code management it&#8217;s only natural to picture a [...]]]></description>
			<content:encoded><![CDATA[<p>I have been learning to use Git. The following is a list of resources I found to be useful, interesting, or that I want to explore further as I get into Git:<br />
<a href="http://www.bluecog.com/blog/wp-content/uploads/2010/03/GitYummyTrees.png"><img src="http://www.bluecog.com/blog/wp-content/uploads/2010/03/GitYummyTrees.png" alt="" title="GitYummyTrees" width="101" height="98" class="alignright size-full wp-image-566" /></a><br />
Website: <a href="http://git-scm.com/">Git &#8211; Fast Version Control System</a> &#8211; The home of Git. When you think <em>source code management</em> it&#8217;s only natural to picture a monster eating trees.</p>
<p>Website: <a href="http://github.com/">GitHub &#8211; Secure Git hosting and collaborative development</a></p>
<p>Tool: <a href="http://code.google.com/p/msysgit/">msysgit</a> &#8211; Run Git on Windows from a specialized BASH prompt.</p>
<p>Book: <a href="http://my.safaribooksonline.com/9780596158187">Safari Books Online: Version Control with Git, 1st Edition</a></p>
<p>Book: <a href="http://progit.org/">Book &#8211; Pro Git &#8211; by Scott Chacon</a> &#8211; Concise coverage of using Git. You can purchase the book or read the whole book online.</p>
<p>Video: <a href="http://www.oreillynet.com/pub/e/1394?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+oreilly%2Fnews+%28O%27Reilly+News%29&#038;utm_content=Google+Reader">Webcast: Git in One Hour</a> &#8211; Scott Chacon shows a lot of what he covers in his book in this screencast.</p>
<p>Video: <a href="http://vimeo.com/9324683">James Gregory on Git</a> &#8211; <a href="http://jagregory.com/">James Gregory</a> does a screencast on Git as well.</p>
<p>Website: <a href="http://gitready.com/">git ready &#8211; learn git one commit at a time</a> </p>
<p>Article: <a href="http://utsl.gen.nz/talks/git-svn/intro.html">An introduction to git-svn for Subversion/SVK users and deserters</a></p>
<p>Article: <a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way">scie.nti.st &#8211; Hosting Git repositories, The Easy (and Secure) Way</a> &#8211; Gitosis.</p>
<p>Article: <a href="http://blog.wekeroad.com/2009/11/23/deploying-a-web-application-with-git-and-ftp?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+wekeroad%2FEeKc+%28Rob+Conery%29&#038;utm_content=Google+Reader">Deploying A Web Application with Git and FTP</a> &#8211; Rob Conery shows one way he uses Git.</p>
<p>Article: <a href="http://www.lostechies.com/blogs/jason_meridth/archive/2009/06/01/git-for-windows-developers-git-series-part-1.aspx">Git For Windows Developers – Git Series &#8211; Part 1 &#8211; Jason Meridth &#8211; Los Techies</a> &#8211; Describes using msysgit.</p>
<p>Article: <a href="http://www.lostechies.com/blogs/derickbailey/archive/2010/02/03/branch-per-feature-how-i-manage-subversion-with-git-branches.aspx">Branch-Per-Feature &#8211;  How I Manage Subversion With Git Branches &#8211; Los Techies</a></p>
<p>Article: <a href="http://www.lostechies.com/blogs/jagregory/archive/2009/11/25/git-s-guts-branches-head-and-fast-forwards.aspx">Git&#39;s guts: Branches, HEAD, and fast-forwards &#8211; James Gregory&#39;s Blog &#8211; Los Techies</a></p>
<p>Article: <a href="http://martinfowler.com/bliki/VersionControlTools.html">Martin Fowler &#8211; Version Control Tools</a> &#8211; Not about Git specifically. </p>
<p>Article: <a href="http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html">ReinH &#8211; A Git Workflow for Agile Teams</a></p>
<p>Article: <a href="http://blog.weiskotten.com/2009/04/my-git-workflow.html">Jer on Rails &#8211; My Git Workflow</a></p>
<p>Article: <a href="http://justinfrench.com/index.php?id=253">JustinFrench.com &#8211; Git Aliases Rock</a></p>
<p>Article: <a href="http://github.com/guides/put-your-git-branch-name-in-your-shell-prompt">GitHub &#8211; Guides &#8211; Put your git branch name in your shell prompt</a></p>
<p>Article: <a href="http://www.tpope.net/node/106">A Note About Git Commit Messages | tpope.net</a></p>
<p>Article/Tool: <a href="http://michael-bien.com/mbien/entry/netbeans_git_plugin">Michael Bien&#39;s Weblog &#8211; NetBeans GIT support</a> &#8211; I have not tried the NBGit plugin yet but I have been playing with NetBeans a bit.</p>
<p>Podcast: <a href="http://www.hanselman.com/blog/HanselminutesPodcast108ExploringDistributedSourceControlWithGit.aspx">Hanselminutes Podcast 108 &#8211; Exploring Distributed Source Control with Git</a></p>
<p>Tool: <a href="http://github.com/webmat/git_remote_branch">git_remote_branch</a></p>
<p>Tool: <a href="http://code.google.com/p/tortoisegit/">tortoisegit</a> &#8211; Maybe like TortoiseSVN. I have not tried it.</p>
<p>Tool: <a href="http://www.eclipse.org/egit/">EGit</a> &#8211; Git plugin for Eclipse. I have not tried it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2010/03/02/git-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keith Hill&#8217;s Effective PowerShell Series</title>
		<link>http://www.bluecog.com/blog/2010/01/07/keith-hills-effective-powershell-series/</link>
		<comments>http://www.bluecog.com/blog/2010/01/07/keith-hills-effective-powershell-series/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 23:24:03 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=531</guid>
		<description><![CDATA[I&#8217;ve been aware of PowerShell for some time now but I haven&#8217;t had the need to use it much. As one who has written many batch files over the years I want to be ready to take that sort of automation to the much higher level PowerShell makes possible.
Windows PowerShell MVP Keith Hill&#39;s Blog is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been aware of <a href="http://microsoft.com/powershell/">PowerShell</a> for some time now but I haven&#8217;t had the need to use it much. As one who has written many batch files over the years I want to be ready to take that sort of automation to the much higher level PowerShell makes possible.</p>
<p>Windows PowerShell MVP <a href="http://keithhill.spaces.live.com/default.aspx">Keith Hill&#39;s Blog</a> is a great resource for learning PowerShell. He has written a series of posts titled &quot;Effective PowerShell&quot; and combined them into <a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6930.entry">Effective Windows PowerShell: The Free eBook</a> as well.</p>
<ul>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!788.entry">Effective PowerShell Item 1: The Four Cmdlets That are the Keys to Finding Your Way Around PowerShell</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!791.entry">Effective PowerShell Item 2: Use the Objects Luke. Use the Objects!</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!793.entry">Effective PowerShell Item 3: Know Your Output Formatters</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!794.entry">Effective PowerShell Item 4: Commenting Out Lines in a Script File</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!796.entry">Effective PowerShell Item 5: Use Set-PSDebug -Strict In Your Scripts &#8211; Religiously</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!800.entry">Effective PowerShell Item 6: Know What Objects Are Flowing Down the Pipe</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!811.entry">Effective PowerShell Item 7: Understanding &quot;Output&quot;</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!816.entry">Effective PowerShell Item 8: Output Cardinality &#8211; Scalars, Collections and Empty Sets &#8211; Oh My!</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!820.entry">Effective PowerShell Item 9: Regular Expressions &#8211; One of the Power Tools in PowerShell</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6058.entry">Effective PowerShell Item 10: Understanding PowerShell Parsing Modes</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6130.entry">Effective PowerShell Item 11: Understanding ByPropertyName Pipeline Bound Parameters</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6158.entry">Effective PowerShell Item 12: Understanding ByValue Pipeline Bound Parameters</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6159.entry">Effective PowerShell Item 13: Comparing Arrays in Windows PowerShell</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6926.entry">Effective PowerShell Item 14: Capturing All Output from a Script</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6957.entry">Effective PowerShell Item 15: Using the Output Field Separator $OFS</a></li>
<li><a href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!7107.entry">Effective PowerShell Item 16: Dealing with Errors</a></li>
</ul>
<p>I just ran across these today and I look forward to exploring each in the series.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2010/01/07/keith-hills-effective-powershell-series/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Docs Backup with GDocBackup</title>
		<link>http://www.bluecog.com/blog/2009/12/31/google-docs-backup-with-gdocbackup/</link>
		<comments>http://www.bluecog.com/blog/2009/12/31/google-docs-backup-with-gdocbackup/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 19:26:33 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Computer User]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=521</guid>
		<description><![CDATA[I was searching for a simple way to make local backups of my Google Docs and found gdocbackup on Google Code. According to the project docs it runs on Windows and Linux (with Mono) so I tried it on both Windows 7 and Ubuntu 9.10 Desktop. 
On the Windows 7 PC, I downloaded the installer [...]]]></description>
			<content:encoded><![CDATA[<p>I was searching for a simple way to make local backups of my Google Docs and found <a href="http://code.google.com/p/gdocbackup/">gdocbackup</a> on Google Code. According to the project docs it runs on Windows and Linux (with Mono) so I tried it on both Windows 7 and Ubuntu 9.10 Desktop. </p>
<p>On the Windows 7 PC, I downloaded the installer from the Google Code project page, installed the application, and ran it. After configuring the backup directory and export formats for the documents I executed the backup and it worked fine.</p>
<p>Running it on Ubuntu took a bit more setup since I did not have Mono installed. First I installed the required Mono packages. </p>
<p><code>sudo apt-get install mono-runtime libmono-winforms2.0-cil mono-devel</code></p>
<p>The mono-devel package installs the mozroots utility needed to install a certificate required to access Google Docs (see <a href="http://gs.fhtino.it/gdocbackup/faq">http://gs.fhtino.it/gdocbackup/faq</a>).</p>
<p>Next I imported the Mozilla root certificates into Mono (see <a href="http://manpages.ubuntu.com/manpages/intrepid/man1/mozroots.1.html">http://manpages.ubuntu.com/manpages/intrepid/man1/mozroots.1.html</a>).</p>
<p><code>mozroots --import --sync</code></p>
<p>I downloaded <span style="font-weight:bold;">GDocBackup_0.4.9.71_BIN.zip</span> from the gdocbackup project&#8217;s Downloads page and extracted it to a GDocBak directory I created in my home directory. I also created a Data directory under GDocBak to hold the backup files. I opened a terminal in the GDocBak directory and ran GDocBackup.exe in Mono.</p>
<p><code>mono ./GDocBackup.exe</code></p>
<p>At this point the GDocBackup application worked the same as in Windows 7. It looks a little different but it downloaded the documents without errors. Now I just need to automate the backups. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/12/31/google-docs-backup-with-gdocbackup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>COhPy Meeting &#8211; December 2009</title>
		<link>http://www.bluecog.com/blog/2009/12/08/cohpy-meeting-december-2009/</link>
		<comments>http://www.bluecog.com/blog/2009/12/08/cohpy-meeting-december-2009/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 15:56:24 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[UG]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=507</guid>
		<description><![CDATA[Here is my link dump from last night&#8217;s meeting of the Central Ohio Python Users Group:
The scheduled presenter, Brian Costlow, didn&#8217;t make it. Something about work being more important than a Python meeting. Priorities?
To fill the void, Eric Floehr showed a weather-related web application he has been working on that is built with Django. The [...]]]></description>
			<content:encoded><![CDATA[<p>Here is my <em>link dump</em> from last night&#8217;s meeting of the <strong>Central Ohio Python Users Group</strong>:</p>
<p>The scheduled presenter, Brian Costlow, didn&#8217;t make it. Something about work being more important than a Python meeting. Priorities?</p>
<p>To fill the void, <strong>Eric Floehr</strong> showed a weather-related web application he has been working on that is built with <a href="http://www.djangoproject.com/">Django</a>. The app uses HTMLCalendar (<a href="http://stackoverflow.com/questions/1284923/django-calendar">Django, calendar &#8211; Stack Overflow</a>).</p>
<p><strong>Mark Erbaugh</strong> showed the web application he built using <a href="http://webpy.org/">web.py</a>. He also uses <a href="http://www.reportlab.org/">ReportLab.org</a> to generate PDF files.</p>
<p>I had not run across this before: <a href="http://docs.python.org/3.1/library/zipimport.html">29.2. zipimport &#8211; Import modules from Zip archives</a>.</p>
<p><a href="http://catherinedevlin.pythoneers.com/"><strong>Catherine Devlin</strong></a> presented <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>, <a href="http://meyerweb.com/eric/tools/s5/">S5</a>, and <a href="http://sphinx.pocoo.org/">Sphinx</a>.</p>
<p>A few related links:<br />
<a href="http://en.wikipedia.org/wiki/ReStructuredText">reStructuredText</a> on Wikipedia<br />
<a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html">Quick reStructuredText</a><br />
<a href="http://docutils.sourceforge.net/docs/user/slide-shows.html">Easy Slide Shows With reST &amp; S5</a><br />
<a href="http://sphinx.pocoo.org/rest.html">reStructuredText Primer — Sphinx v0.6.3 documentation</a></p>
<p>Catherien also mentioned:<br />
<a href="http://us.pycon.org/2010/about/">PyCon 2010 Atlanta &#8211; A Conference for the Python Community</a><br />
<a href="http://pypi.python.org/pypi">Python Package Index : PyPI</a>, AKA the <a href="http://www.youtube.com/watch?v=B3KBuQHHKx0">Cheese Shop</a></p>
<p>Also discussed was the construction of the COhPy web site:<br />
Code at <a href="http://bitbucket.org/cohpy/cohpy/">cohpy — bitbucket.org</a>.<br />
Using <a href="http://code.google.com/appengine/">Google App Engine</a>.</p>
<p>Finally, I haven&#8217;t used decorators in Python (nor in my house) but I&#8217;d like to read up on that:<br />
<a href="http://www.python.org/dev/peps/pep-0318/">PEP 318 &#8212; Decorators for Functions and Methods</a><br />
<a href="http://www.ddj.com/web-development/184406073;jsessionid=QBP45WIFDGM5XQE1GHOSKHWATMY32JVN?_requestid=407863">Dr. Dobb&#39;s &#8211; Python 2.4 Decorators</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/12/08/cohpy-meeting-december-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CbusPASS &#8211; November 2009</title>
		<link>http://www.bluecog.com/blog/2009/11/13/cbuspass-november-2009/</link>
		<comments>http://www.bluecog.com/blog/2009/11/13/cbuspass-november-2009/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 14:53:24 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[UG]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=477</guid>
		<description><![CDATA[Last night I attended the CbusPASS (that&#8217;s the Columbus chapter of the Professional Association for SQL Server, aka the Columbus SQL Server Users Group) meeting. I&#8217;m not using SQL Server much these days so the take home value isn&#8217;t immediate for me. I&#8217;m interested in databases in general, I have used SQL Server in the [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I attended the <a href="http://columbus.sqlpass.org/">CbusPASS</a> (that&#8217;s the Columbus chapter of the <a href="http://www.sqlpass.org/">Professional Association for SQL Server</a>, aka the Columbus SQL Server Users Group) meeting. I&#8217;m not using SQL Server much these days so the take home value isn&#8217;t immediate for me. I&#8217;m interested in databases in general, I have used SQL Server in the past, and I expect I will use it even more in the future so I do enjoy these meetings. The remote presentation almost failed due to audio problems but fortunately a member of the group had a notebook PC that worked for both audio and video. Tim Ford presented on SQL Server Dynamic Management Views and Dynamic Management Functions. What follows is basically a link dump from my notes:</p>
<p>Group leader: <a href="http://facility9.com/">Jeremiah Peschka, SQL Server Developer</a><br />
<a href="http://twitter.com/peschkaj">Jeremiah Peschka (peschkaj) on Twitter</a></p>
<p>Tim Ford&#8217;s web site <a href="http://www.ford-it.com/sqlagentman/">SQLAgentMan</a><br />
<a href="http://twitter.com/sqlagentman">Tim Ford (sqlagentman) on Twitter</a></p>
<p>Tim writes for <a href="http://www.mssqltips.com/">MSSQLTips.com</a>, among other things.</p>
<p>Tim said he will post the slides and examples from the presentation at <a href="http://speakerrate.com/sqlagentman">SpeakerRate</a>. </p>
<p>MSDN: <a href="http://msdn.microsoft.com/en-us/library/ms188754.aspx">Dynamic Management Views and Functions</a></p>
<p>SQLTeam: <a href="http://www.sqlteam.com/article/dynamic-management-views">Dynamic Management Views</a></p>
<p>SQLTeam: <a href="http://weblogs.sqlteam.com/mladenp/archive/2009/04/08/SQL-Server---Find-missing-and-unused-indexes.aspx">SQL Server &#8211; Find missing and unused indexes</a></p>
<p>MSDN: <a href="http://msdn.microsoft.com/en-us/library/ms189858.aspx">Reorganizing and Rebuilding Indexes</a></p>
<p><a href="http://www.mssqltips.com/tip.asp?tip=1544">Backup</a> your <a href="http://msdn.microsoft.com/en-us/library/ms190940.aspx">Resource Database</a>.</p>
<p>There was discussion after the meeting about <a href="http://powerpivot.com/">PowerPivot</a>, previously code named <a href="http://www.beyeblogs.com/donaldfarmer/archive/2009/04/microsoft_proje.php">Project</a> <a href="http://www.bi-verdict.com/fileadmin/FreeAnalyses/Comment_Gemini.htm">Gemini</a>, and the <a href="http://powerpivotpro.com/">PowerPivotPro</a> site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/11/13/cbuspass-november-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on TDD</title>
		<link>http://www.bluecog.com/blog/2009/11/11/thoughts-on-tdd/</link>
		<comments>http://www.bluecog.com/blog/2009/11/11/thoughts-on-tdd/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 16:07:08 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=455</guid>
		<description><![CDATA[I want to know what the buzz around Test-Driven Development is all about. The proponents make a good case for it. I&#8217;ve read about it a good bit but have never worked with anyone who practiced it. I also tend to be leery when I see people becoming religiously fanatical about anything, and some of [...]]]></description>
			<content:encoded><![CDATA[<p>I want to know what the buzz around Test-Driven Development is all about. The proponents make a good case for it. I&#8217;ve read about it a good bit but have never worked with anyone who practiced it. I also tend to be leery when I see people becoming religiously fanatical about anything, and some of what I read sounds, if not fanatical, at least unrealistic. Nonetheless there are a lot of sensible voices promoting TDD as a way to build better, more maintainable software. That sounds good to me.</p>
<p>I have tried to use TDD on several small projects to get a feel for it. I am recording my (somewhat random) thoughts on it here for future reference:</p>
<ul>
<li>I want to know that TDD really helps and works and that it&#8217;s not just a smartypants thing.</li>
<li>I&#8217;m not good at it yet. I haven&#8217;t done enough TDD (but I still have thoughts on it).</li>
<li>It&#8217;s not a panacea. Get your silver bullet <a href="http://www.bogusoft.com/">here</a>.</li>
<li>It IS helpful when refactoring.</li>
<li>I think there probably were fewer bugs in the first live versions because of the tests.</li>
<li>It can be a trap if you&#8217;re not careful to keep the end result of the system in mind. Seems easy to focus too much on writing tests. I feel a tendency toward myopia when writing a lot of tests before doing any integration.
</li>
<li>It doesn&#8217;t replace the need to look at the results of your code (for example, writing results to text files, or CSV files to be imported into a spreadsheet to look at, visualize with your brain).</li>
<li>You&#8217;ll never write enough tests to catch every possible failure.</li>
<li>The wrong algorithm with 100% test coverage is still the wrong algorithm.</li>
<li>It doesn&#8217;t replace manual or automated acceptance testing.</li>
<li>It <em>will</em> take longer up front to build a system using TDD. It <em>may</em> lead to a more correct system at the first release. It <em>may</em> save time later when the system needs to change.</li>
<li>You will throw away more code. If you find that some code isn&#8217;t needed and remove it, that code may have multiple tests associated with it that will also be removed. Maybe this isn&#8217;t bad since we&#8217;re supposed to be <a href="http://www.codinghorror.com/blog/archives/000256.html">throwing away the prototype</a> but often the prototype ends up turning directly into the production version. Perhaps this is a way of throwing away the prototype a little piece at a time. But seriously&#8230;</li>
<li>I don&#8217;t like the idea of significantly changing or adding complexity to the architecture of a system solely to make it more amenable to unit testing. Maybe it&#8217;s worth it.</li>
<li>It&#8217;s easier to do unit testing when using dynamic languages.</li>
<li>You&#8217;re more likely to need those tests when using dynamic languages.</li>
<li>I&#8217;m not sold on writing tests as THE way to drive development, but then, like I said, I&#8217;m not good at it yet.</li>
<li>Having unit tests is good. Regardless of whether tests are in the driver seat I plan to take advantage of automated unit testing and automated acceptance testing.</li>
<li>At this point it seems unlikely that I&#8217;ll adopt test-first style TDD as my preferred method for building software (or as a religion) but I&#8217;m still going to try to do it as a first approach. I&#8217;ll also be willing to abandon it without regrets if it becomes cumbersome for the job at hand.</li>
<li>Finally, it will be good to know how to do TDD in case someday I end up with a boss who says I have to. BTW: If that&#8217;s the reason you&#8217;re doing TDD you&#8217;re probably doing it for the wrong reason.</li>
</ul>
<p>That&#8217;s enough for now. I also plan to look into Behavior-Driven Development (AKA smartypants TDD) and the associated <a href="http://cukes.info/">tooling</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/11/11/thoughts-on-tdd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pair Networks Database Backup Automation</title>
		<link>http://www.bluecog.com/blog/2009/11/10/pair-networks-database-backup/</link>
		<comments>http://www.bluecog.com/blog/2009/11/10/pair-networks-database-backup/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 22:00:47 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=403</guid>
		<description><![CDATA[I have a couple WordPress blogs, this being one of them, hosted at Pair Networks. I also have another non-blog site that uses a MySQL database. I have been doing backups of the databases manually through Pair&#8217;s Account Control Center (ACC) web interface on a somewhat regular basis, but it was bugging me that I [...]]]></description>
			<content:encoded><![CDATA[<p>I have a couple WordPress blogs, this being one of them, hosted at <a href="http://www.pair.com/" target="_blank">Pair Networks</a>. I also have another non-blog site that uses a MySQL database. I have been doing backups of the databases manually through Pair&#8217;s Account Control Center (ACC) web interface on a somewhat regular basis, but it was bugging me that I hadn&#8217;t automated it. I finally got around to doing so.</p>
<p>A search led to this <a href="http://www.bradtrupp.com/mysql-backup-cron.html" target="_blank">blog post</a> by Brad Trupp. He describes how to set up an automated database backup on a Pair Networks host. I used &#8220;technique 2&#8243; from his post as the basis for the script I wrote.</p>
<h3>Automating the Backup on the Pair Networks Host</h3>
<p>First I connected to my assigned server at Pair Networks using SSH (I use <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">PuTTY</a> for that). There was already a directory named <strong>backup</strong> in my home directory where the backups done through the ACC were written. I decided to use that directory for the scripted backups as well.</p>
<p>In my home directory I created a shell script named <strong>dbbak.sh</strong>.</p>
<p><code>touch dbbak.sh</code></p>
<p>The script should have permissions set to make it private (it will contain database passwords) and executable.</p>
<p><code>chmod 700 dbbak.sh</code></p>
<p>I used the nano editor to write the script.</p>
<p><code>nano -w dbbak.sh</code></p>
<p>The script stores the current date and time (formatted as YYYYmmdd_HHMM) in a variable and then runs the mysqldump utility that creates the database backups. The resulting backup files are simply SQL text that will recreate the objects in a MySQL database and insert the data. The shell script I use backs up three different MySQL databases so the following example shows the same.</p>
<pre class="brush: bash">
#!/bin/sh

dt=`/bin/date +%Y%m%d_%H%M`

/usr/local/bin/mysqldump -hDBHOST1 -uDBUSERNAME1 -pDBPASSWORD1 USERNAME_DBNAME1 &gt; /usr/home/USERNAME/backup/dbbak_${dt}_DBNAME1.sql

/usr/local/bin/mysqldump -hDBHOST2 -uDBUSERNAME2 -pDBPASSWORD2 USERNAME_DBNAME2 &gt; /usr/home/USERNAME/backup/dbbak_${dt}_DBNAME2.sql

/usr/local/bin/mysqldump -hDBHOST3 -uDBUSERNAME3 -pDBPASSWORD3 USERNAME_DBNAME3 &gt; /usr/home/USERNAME/backup/dbbak_${dt}_DBNAME3.sql
</pre>
<p>Substitute these tags in the above example with your database and account details:</p>
<ul>
<li><strong>DBHOST</strong> is the database server, such as db24.pair.com.</li>
<li><strong>DBUSERNAME</strong><em>n</em> is the full access username for the database.</li>
<li><strong>DBPASSWORD</strong><em>n</em> is the password for that database user.</li>
<li><strong>USERNAME_DBNAME</strong><em>n</em> is the full database name that has the account user name as the prefix. </li>
<li><strong>USERNAME</strong> is the Pair Networks account user name.</li>
<li><strong>DBNAME</strong><em>n</em> is the database name without the account user name prefix.</li>
</ul>
<p>Once the script was written and tested manually on the host, I used the ACC (Advanced Features / Manage Cron jobs) to set up a cron job to run the script daily at 4:01 AM.</p>
<h3>Automating Retrieval of the Backup Files</h3>
<p>It was nice having the backups running daily without any further work on my part but, if I wanted a local copy of the backups, I still had to download them manually. Though <a href="http://filezilla-project.org/" target="_blank">FileZilla</a> is easy to use, downloading files via FTP seemed like a prime candidate for automation as well. I turned to Python for that. Actually I turned to an excellent book that has been on my shelf for a few years now, <a href="http://www.amazon.com/gp/product/1590593715?ie=UTF8&#038;tag=bluecog-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1590593715">Foundations of Python Network Programming</a><img src="http://www.assoc-amazon.com/e/ir?t=bluecog-20&#038;l=as2&#038;o=1&#038;a=1590593715" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by John Goerzen. Using the <strong>ftplib</strong> examples in the book as a foundation, I created a Python script named <strong>getdbbak.py</strong> to download the backup files automatically. </p>
<pre class="brush: python">
#!/usr/bin/env python
# getdbbak.py

from ftplib import FTP
from datetime import datetime
from DeleteList import GetDeleteList
import os, sys
import getdbbak_email

logfilename = &#039;getdbbak-log.txt&#039;
msglist = []

def writelog(msg):
    scriptdir = os.path.dirname(sys.argv[0])
    filename = os.path.join(scriptdir, logfilename)
    logfile = open(filename, &#039;a&#039;)
    logfile.writelines(&quot;%s\n&quot; % msg)
    logfile.close()

def say(what):
    print what
    msglist.append(what)
    writelog(what)

def retrieve_db_backups():
    host = sys.argv[1]
    username = sys.argv[2]
    password = sys.argv[3]
    local_backup_dir = sys.argv[4]

    say(&quot;START %s&quot; % datetime.now().strftime(&#039;%Y-%m-%d %H:%M&#039;))
    say(&quot;Connect to %s as %s&quot; % (host, username))

    f = FTP(host)
    f.login(username, password)

    ls = f.nlst(&quot;dbbak_*.sql&quot;)
    ls.sort()
    say(&quot;items = %d&quot; % len(ls))
    for filename in ls:
        local_filename = os.path.join(local_backup_dir, filename)
        if os.path.exists(local_filename):
            say(&quot;(skip) %s&quot; % local_filename)
        else:
            say(&quot;(RETR) %s&quot; % local_filename)
            local_file = open(local_filename, &#039;wb&#039;)
            f.retrbinary(&quot;RETR %s&quot; % filename, local_file.write)
            local_file.close()

    date_pos = 6
    keep_days = 5
    keep_weeks = 6
    keep_months = 4
    del_list = GetDeleteList(ls, date_pos, keep_days, keep_weeks, keep_months)
    if len(del_list) &gt; 0:
        if len(ls) - len(del_list) &gt;= keep_days:
            for del_filename in del_list:
                say(&quot;DELETE %s&quot; % del_filename)
                f.delete(del_filename)
        else:
            say(&quot;WARNING: GetDeleteList failed sanity check. No files deleted.&quot;)

    f.quit()
    say(&quot;FINISH %s&quot; % datetime.now().strftime(&#039;%Y-%m-%d %H:%M&#039;))
    getdbbak_email.SendLogMessage(msglist)

if len(sys.argv) == 5:
    retrieve_db_backups()
else:
    print &#039;USAGE: getdbbak.py Host User Password LocalBackupDirectory&#039;
</pre>
<p>This script runs via cron on a PC running Ubuntu 8.04 LTS that I use as a local file/subversion/trac server. The script does a bit more than just download the files. It deletes older files from the host based on rules for number of days, weeks, and months to keep. It also writes some messages to a log file and sends an email with the current session&#8217;s log entries.</p>
<p>To set up the cron job in Ubuntu I opened a terminal and ran the following command to edit the crontab file:</p>
<p><code>crontab -e</code></p>
<p>The crontab file specifies commands to run automatically at scheduled times. I added an entry to the crontab file that runs a script named <strong>getdbbak.sh</strong> at 6 AM every day. Here is the crontab file:</p>
<pre class="brush: bash">
MAILTO=&quot;&quot; 

# m h dom mon dow command 

0 6 * * * /home/bill/GetDbBak/getdbbak.sh
</pre>
<p>The first line prevents cron from sending an email listing the output of any commands cron runs. The getdbbak.py script will send its own email so I don&#8217;t need one from cron. I can always enable the cron email later if I want to see that output to debug a failure in a script cron runs.</p>
<p>Here is the getdbbak.sh shell script that is executed by cron:</p>
<pre class="brush: bash">
#!/bin/bash 

/home/bill/GetDbBak/getdbbak.py FTP.EXAMPLE.COM USERNAME PASSWORD /mnt/data2/files/Backup/PairNetworksDb
</pre>
<p>This shell script runs the getdbbak.py Python script and passes the FTP login credentials and the destination directory for the backup files as command line arguments. </p>
<p>As I mentioned, the getdbbak.py script deletes older files from the host based on rules. The call to <strong>GetDeleteList</strong> returns a list of files to delete from the host. That function is implemented in a separate module, <strong>DeleteList.py</strong>:</p>
<pre class="brush: python">
#!/usr/bin/env python
# DeleteList.py

from datetime import datetime
import KeepDateList

def GetDateFromFileName(filename, datePos):
    &quot;&quot;&quot;Expects filename to contain a date in the format YYYYMMDD starting
       at position datePos.
    &quot;&quot;&quot;
    try:
        yr = int(filename[datePos : datePos + 4])
        mo = int(filename[datePos + 4 : datePos + 6])
        dy = int(filename[datePos + 6 : datePos + 8])
        dt = datetime(yr, mo, dy)
        return dt
    except:
        return None

def GetDeleteList(fileList, datePos, keepDays, keepWeeks, keepMonths):
    dates = []
    for filename in fileList:
        dt = GetDateFromFileName(filename, datePos)
        if dt != None:
            dates.append(dt)
    keep_dates = KeepDateList.GetDatesToKeep(dates, keepDays, keepWeeks, keepMonths)
    del_list = []
    for filename in fileList:
        dt = GetDateFromFileName(filename, datePos)
        if (dt != None) and (not dt in keep_dates):
                del_list.append(filename)
    return del_list
</pre>
<p>That module in turn uses the function <strong>GetDatesToKeep</strong> defined in the module <strong>KeepDateList.py</strong> to decide which files to keep on order to maintain the desired days, weeks, and months of backup history. If a file&#8217;s name contains a date that&#8217;s not in the list of dates to keep then it goes in the list of files to delete.</p>
<pre class="brush: python">
#!/usr/bin/env python
# KeepDateList.py

from datetime import datetime

def ListHasOnlyDates(listOfDates):
    dt_type = type(datetime(2009, 11, 10))
    for item in listOfDates:
        if type(item) != dt_type:
            return False
    return True

def GetUniqueSortedDateList(listOfDates):
    if len(listOfDates) &lt; 2:
        return listOfDates
    listOfDates.sort()
    result = [listOfDates[0]]
    last_date = listOfDates[0].date()
    for i in range(1, len(listOfDates)):
        if listOfDates[i].date() != last_date:
            last_date = listOfDates[i].date()
            result.append(listOfDates[i])
    return result

def GetDatesToKeep(listOfDates, daysToKeep, weeksToKeep, monthsToKeep):
    if daysToKeep &lt; 1:
        raise ValueError(&quot;daysToKeep must be greater than zero.&quot;)
    if weeksToKeep &lt; 0:
        raise ValueError(&quot;weeksToKeep must not be less than zero.&quot;)
    if monthsToKeep &lt; 0:
        raise ValueError(&quot;monthsToKeep must not be less than zero.&quot;)

    if not ListHasOnlyDates(listOfDates):
        raise TypeError(&quot;List must only contain items of type &#039;datetime.datetime&#039;.&quot;)

    dates = GetUniqueSortedDateList(listOfDates)    

    tail = len(dates) - 1
    keep = [dates[tail]]
    days_left = daysToKeep - 1
    while (days_left &gt; 0) and (tail &gt; 0):
        tail -= 1
        days_left -= 1
        keep.append(dates[tail])

    year, week_number, weekday = dates[tail].isocalendar()
    weeks_left = weeksToKeep
    while (weeks_left &gt; 0) and (tail &gt; 0):
        tail -= 1
        yr, wn, wd = dates[tail].isocalendar()
        if (wn &lt;&gt; week_number) or (yr &lt;&gt; year):
            weeks_left -= 1
            year, week_number, weekday = dates[tail].isocalendar()
            keep.append(dates[tail])

    month = dates[tail].month
    year = dates[tail].year
    months_left = monthsToKeep
    while (months_left &gt; 0) and (tail &gt; 0):
        tail -= 1
        if (dates[tail].month &lt;&gt; month) or (dates[tail].year &lt;&gt; year):
            months_left -= 1
            month = dates[tail].month
            year = dates[tail].year
            keep.append(dates[tail])

    return keep
</pre>
<p>I also put the function <strong>SendLogMessage</strong> that sends the session log via email in a separate module, <strong>getdbbak_email.py</strong>:</p>
<pre class="brush: python">
#!/usr/bin/env python
# getdbbak_email.py

from email.MIMEText import MIMEText
from email import Utils
import smtplib

def SendLogMessage(msgList):
    from_addr = &#039;atest@bogusoft.com&#039;
    to_addr = &#039;wm.melvin@gmail.com&#039;
    smtp_server = &#039;localhost&#039;

    message = &quot;&quot;
    for s in msgList:
        message += s + &quot;\n&quot;

    msg = MIMEText(message)
    msg[&#039;To&#039;] = to_addr
    msg[&#039;From&#039;] = from_addr
    msg[&#039;Subject&#039;] = &#039;Download results&#039;
    msg[&#039;Date&#039;] = Utils.formatdate(localtime = 1)
    msg[&#039;Message-ID&#039;] = Utils.make_msgid()

    smtp = smtplib.SMTP(smtp_server)
    smtp.sendmail(from_addr, to_addr, msg.as_string())
</pre>
<p>Here is a ZIP file containing the set of Python scripts, including some unit tests (such as they are) for the file deletion logic: <a href="http://www.bogusoft.com/files/public/GetDbBak.zip">GetDbBak.zip</a></p>
<p>I hope this may be useful to others with a similar desire to automate MySQL database backups and FTP transfers who haven&#8217;t come up with their own solution yet. Even if you don&#8217;t use Pair Networks as your hosting provider some of the techniques may still apply. I&#8217;m still learning too so if you find mistakes or come up with improvements to this solution, please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/11/10/pair-networks-database-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bookmarks Selective History</title>
		<link>http://www.bluecog.com/blog/2009/09/01/bookmarks-selective-history/</link>
		<comments>http://www.bluecog.com/blog/2009/09/01/bookmarks-selective-history/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 19:40:22 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Computer User]]></category>
		<category><![CDATA[Bookmarking]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=382</guid>
		<description><![CDATA[Some folks don&#8217;t keep bookmarks in their browsers anymore since you can always use a search engine to find things when you need them. Problem is, often the thing that interests me is not one of the top items in a search result set (even when I can remember the right search terms to use). [...]]]></description>
			<content:encoded><![CDATA[<p>Some folks don&#8217;t keep bookmarks in their browsers anymore since you can always use a search engine to find things when you need them. Problem is, often the thing that interests me is not one of the top items in a search result set (even when I <em>can</em> remember the right search terms to use). If I&#8217;m looking for a specific thing I saw before I&#8217;m probably not going to be satisfied with search results showing me similar things but not that specific thing. I still use bookmarks.</p>
<p>I used to try to put bookmarks into folders based on category. That&#8217;s labor intensive always sorting out a categorization every time I create a bookmark. What I&#8217;ve been doing lately is this: When I first open Firefox (doesn&#8217;t have to be Firefox but that&#8217;s my main browser) I create a folder in the Bookmarks Toolbar named for the date such as <em>20090901</em>. That folder is where I&#8217;ll drop any bookmarks collected during the day. I will also review the previous day&#8217;s folder for any items that I want to move to a category folder I already have (usually don&#8217;t move any). I then move the previous day&#8217;s folder to a folder named <em>SelectiveHistory</em> that is one level down from the Bookmarks Toolbar under a folder named Bill.</p>
<p><img class="alignnone size-full wp-image-391" title="selectivehistoryexample3" src="http://www.bluecog.com/blog/wp-content/uploads/2009/09/selectivehistoryexample3.png" alt="selectivehistoryexample3" width="450" height="313" /></p>
<p>This has been working well. I have found that when I want to go back to a web page it is more likely to be a recent one so I don&#8217;t usually have to browse back too far in my SelectiveHistory. Firefox makes it easy to browse the bookmarks tree by simply hovering the pointer. I can also choose Tools &#8211; Organize Bookmarks to open the bookmarks Library and do a search when looking for something not so recent.</p>
<p>I do some maintenance on the SelectiveHistory folder by moving the daily folders into a previous month folder and monthly folders into a previous year folder. Doing so takes little time and not a lot of thought (easy enough to do before the coffee kicks in). I should also mention that I use <a href="http://www.xmarks.com/">Xmarks</a> to synchronize my massive bookmarks collection across the computers I use Firefox on frequently. I really should mention that, because I don&#8217;t think my method of collecting bookmarks described above would work nearly as well without synchronization.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/09/01/bookmarks-selective-history/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CONDG Meeting &#8211; August 2009</title>
		<link>http://www.bluecog.com/blog/2009/08/27/condg-meeting-august-2009/</link>
		<comments>http://www.bluecog.com/blog/2009/08/27/condg-meeting-august-2009/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 02:51:40 +0000</pubDate>
		<dc:creator>Bill Melvin</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[UG]]></category>

		<guid isPermaLink="false">http://www.bluecog.com/blog/?p=366</guid>
		<description><![CDATA[I enjoyed the presentation by Bill Sempf at this month&#8217;s Central Ohio .NET Developers Group even if it was a little disorganized. I think Mr. Sempf and I share a certain scatterbrain quality though his achievements point to an ability to focus deeply when needed. He&#8217;s like smarter more extroverted version of the Bill writing [...]]]></description>
			<content:encoded><![CDATA[<p>I enjoyed the presentation by <a href="http://www.sempf.net/">Bill Sempf</a> at this month&#8217;s <a href="http://condg.org/archive/2009/08/21/August-Meeting-AnnouncementAgain.aspx">Central Ohio .NET Developers Group</a> even if it was a little disorganized. I think Mr. Sempf and I share a certain scatterbrain quality though his achievements point to an ability to focus deeply when needed. He&#8217;s like smarter more extroverted version of the Bill writing this post. And we share a similar hairline.</p>
<p>Bill discussed some of the changes coming in C# 4.0 and how some of the smaller changes that started in C# 3.0 are part of a larger strategy to make things like LINQ possible, and make COM interop work more smoothly. He also pointed out some additions to Visual Studio that may be helpful when doing Test Driven Development. Visual Studio has been rewritten in WPF for version 2010 so go get more RAM. </p>
<p>A lot of the changes to C# are to help it compete with <a href="http://www.hanselman.com/blog/C4AndTheDynamicKeywordWhirlwindTourAroundNET4AndVisualStudio2010Beta1.aspx">dynamic</a> languages like Ruby and Python, and to make it <a href="http://www.hanselman.com/blog/CLRAndDLRAndBCLOhMyWhirlwindTourAroundNET4AndVisualStudio2010Beta1.aspx">not suck for automating Microsoft Office</a>. Oh no. It&#8217;s VB with braces. At least it doesn&#8217;t have DIMs and SUBs. </p>
<p>Pizza was provided by Information Control Corporation (<a href="http://www.iccohio.com/">ICC</a>), a company based in Columbus that (if I heard right) Bill Sempf works with as a consultant. ICC has released an open source framework called <a href="http://www.mvc4wpf.com/">MVC4WPF</a>. Thanks for the framework, and the pizza.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluecog.com/blog/2009/08/27/condg-meeting-august-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
