<?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>FuGeRTech</title>
	<atom:link href="http://fugertech.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://fugertech.com</link>
	<description>Where motorcycles and technology collide to form creative solutions!</description>
	<lastBuildDate>Tue, 14 Apr 2009 14:59:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SharePoint Designer 2007 is Free</title>
		<link>http://fugertech.com/2009/04/14/sharepoint-designer-2007-is-free/</link>
		<comments>http://fugertech.com/2009/04/14/sharepoint-designer-2007-is-free/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 14:59:39 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WSS 3.0]]></category>

		<guid isPermaLink="false">http://fugertech.com/?p=137</guid>
		<description><![CDATA[Microsoft is now offering SharePoint Designer 2007 for free!
Share/Save]]></description>
			<content:encoded><![CDATA[<p>Microsoft is now offering <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42" target="_blank">SharePoint Designer 2007 for free</a>!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2009%2F04%2F14%2Fsharepoint-designer-2007-is-free%2F&amp;linkname=SharePoint%20Designer%202007%20is%20Free">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2009/04/14/sharepoint-designer-2007-is-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireless Networking with Directional Antennas</title>
		<link>http://fugertech.com/2009/02/23/wireless-networking-with-directional-antennas/</link>
		<comments>http://fugertech.com/2009/02/23/wireless-networking-with-directional-antennas/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 04:06:22 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[802.11g]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[directional antenna]]></category>
		<category><![CDATA[ethernet]]></category>
		<category><![CDATA[ISP]]></category>
		<category><![CDATA[Linksys]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[WAP54G]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[WRT54G]]></category>
		<category><![CDATA[Yagi antenna]]></category>

		<guid isPermaLink="false">http://fugertech.com/?p=109</guid>
		<description><![CDATA[Over the weekend, I helped install and configure a wireless network for James, my soon to be brother-in-law. The task was to connect the Internet service from his office at the back of his property to his house at the front of his property. We incorporated some &#8220;Aggie engineering&#8221; as James, an NMSU Alumnus,  called it. It [...]]]></description>
			<content:encoded><![CDATA[<p>Over the weekend, I helped install and configure a wireless network for James, my soon to be brother-in-law. The task was to connect the Internet service from his office at the back of his property to his house at the front of his property. We incorporated some &#8220;Aggie engineering&#8221; as James, an NMSU Alumnus,  called it. It wasn&#8217;t the cleanest of jobs, but it works!</p>
<p><span id="more-109"></span></p>
<h2>Problem</h2>
<p>James and his family own property that has two houses on it. The one at the back of his lot is used as his business offices. The house on the front of the lot is the family&#8217;s house. The houses are 300+ feet apart (too far for Ethernet). James would like to utilize the Internet connection from the office in his house as it is provides a higher bandwidth. In addition to that, he would also like to be able to &#8220;work from home&#8221; on his laptop.</p>
<h2>Current Configuration</h2>
<p>The business office has a 1Mbps Internet connection via wireless. A parabolic antenna receives a line-of-sight connection from a sending antenna across town. A router resides in the office that serves DHCP to the connecting PCs. One desktop PC shares folders and printers on this network. There is also one laptop that is used by James. He hard-wires into the network as there is no wireless in the office.</p>
<p>The house has a 384kbps Internet connection via DSL. A D-Link wireless router is connected to serve wireless and DHCP to the house. There is a PC hard-wired to the D-Link router. The wireless is wide open (no security at all) and serves as a connection for guests with laptops. Security is not an issue at this time as the property is far enough from dense populations, and the neighbors are not a threat.</p>
<h2>Idea Iterations</h2>
<ol>
<li>Back near the summer of 2008, James approached me with the idea of connecting the two houses in order to utilize the higher bandwidth from the office. He mentioned an old, dormant gas line between the houses that created the perfect conduit for cabling. We began to investigate using Ethernet over CAT-5e or CAT-6. He already owned a 1000&#8242; box of CAT-5e leftover from wiring the office. I knew that CAT-5e/6 Ethernet had a distance limitation of 328 ft at 100Mbps. During my next visit, we measured the distance needed to cover, and it ended up being well over this limitation. I was worried that if we did all the work to run the cable, that it would be in vain and packets would be dropped.</li>
<li>James found an acquaintance that did optical fiber work. We began to research the costs to run fiber and convert it to CAT-5e Ethernet at each end of the house. The costs to accomplish this versus the costs of CAT-5e were nearly double and outside of his budget. We returned to the drawing board.</li>
<li>I don&#8217;t recall what triggered my brain to wireless. I think it was a mixture of the struggles at my house to get maximum signal from every corner (including the garage) and my exposure to the wireless configuration at my parents&#8217; bed and breakfast. It came to me one day, and I began to research directional antennas. Within a few hours, I found multiple blogs, forum postings, etc. with people that were connecting long distances with directional antennas pointing at each other. Three times a charm?</li>
</ol>
<h2>Solution</h2>
<p><a href="http://fugertech.com/wp-content/uploads/2009/02/pmi_yagi_on_roof.jpg"><img class="alignleft size-thumbnail wp-image-123" src="http://fugertech.com/wp-content/uploads/2009/02/pmi_yagi_on_roof-150x150.jpg" alt="" width="150" height="150" /></a>I searched high and low for the best prices for wireless antennas, cabling and equipment to accomplish this project. Eventually, I found the best deal with <a href="http://www.l-com.com" target="_blank">L-Com.com</a> and their Hyperlink brand antennas. Their 2.4GHz Yagi, directional antenna and 20-foot RP-TNC to N-male cable were a perfect match for the project requirements. The antenna is a 2.4GHz 15dBi Yagi Antenna, model number <span class="defaultB">HG2415Y-NF. It is</span> shielded by a <span id="ctl00_CenterContent_bullets_ctl00_lblBullets" class="itemBullets"><span id="ctl00_CenterContent_bullets_ctl03_bullet" class="itemBullets">UV-stable &amp; UL flame rated radome. It offers a 30-degree beam-width (which means the antennas don&#8217;t have to pointed PRECISELY at each other) and DC short lightning protection. The 20-foot cable is model number </span></span><span id="ctl00_CenterContent_grdOrders_ctl03_Label9">CA-RTPNMA020. It features RP-TNC Plug and N-Male ends made with 195-series coaxial cable. This allowed us to connect the antennas to the wireless components to a place inside the buildings.</span> I read online about using the Linksys WRT54G wireless router and the WAP54G wireless access point to create a wireless bridge. Some people have obtained wireless bridges spanning up to 1.5+ miles with these Linksys products and Yagi antennas.</p>
<p>The configuration of the wireless components was fairly simple. Here is the procedure that I followed:</p>
<ol>
<li>Download and install the latest firmware for both the WRT54G and WAP54G.</li>
</ol>
<p><strong>WRT54G Information Gathering</strong></p>
<ol>
<li>Access the router&#8217;s setup page from a web browser via the default IP address (192.168.1.1)</li>
<li>Login using the User Name and Password defaults are:<br />
username &#8211; &#8220;admin&#8221;<br />
password &#8211; leave blank</li>
<li>Click the Status tab
<p><div id="attachment_124" class="wp-caption alignnone" style="width: 160px"><a href="http://fugertech.com/wp-content/uploads/2009/02/231-0011.jpg"><img class="size-thumbnail wp-image-124" title="Linksys Status Page" src="http://fugertech.com/wp-content/uploads/2009/02/231-0011-150x150.jpg" alt="Linksys Status Page" width="150" height="150" /></a><p class="wp-caption-text">Click to enlarge</p></div></li>
<li>Write down the WIRELESS MAC Address and the Channel Number values.</li>
<li>If you would like to use WEP Encryption, click the Wireless tab, then Wireless Security sub tab. Note the passphrase.<br />
<span style="text-decoration: underline;"><strong>Note:</strong></span> WPA (Wi-Fi Protected Access) is not compatible with wireless repeater mode. You must use WEP Encryption if you wish to use security options.</p>
<p><div id="attachment_125" class="wp-caption alignnone" style="width: 160px"><a href="http://fugertech.com/wp-content/uploads/2009/02/231-0021.gif"><img class="size-thumbnail wp-image-125" title="Wireless Security" src="http://fugertech.com/wp-content/uploads/2009/02/231-0021-150x150.gif" alt="Click to enlarge" width="150" height="150" /></a><p class="wp-caption-text">Click to enlarge</p></div></li>
</ol>
<p><strong>WAP54G Repeater Setup</strong></p>
<ol>
<li>Plug the WAP54G directly into one of the WRT54G&#8217;s numbered ports.</li>
<li>Access the WAP54G setup page from a web browser via the default IP Address (192.168.1.245)</li>
<li>Login using the User Name and Password defaults are:<br />
username &#8211; leave blank<br />
password &#8211; &#8220;admin&#8221;</li>
<li>On the Setup page, set the Channel value to the same channel value as the WRT54G router from step 4 above.</li>
<li>If WEP Encryption is being used, click Enable for Wireless Security. Click Edit Security Settings and enter the same Passphrase as obtained in step 5 above. Click Generate to populate the WEP key fields.
<p><div id="attachment_126" class="wp-caption alignnone" style="width: 160px"><a href="http://fugertech.com/wp-content/uploads/2009/02/231-0031.jpg"><img class="size-thumbnail wp-image-126" title="AP Channel/Security" src="http://fugertech.com/wp-content/uploads/2009/02/231-0031-150x150.jpg" alt="Click to enlarge" width="150" height="150" /></a><p class="wp-caption-text">Click to enlarge</p></div></li>
<li>Click Save Settings.</li>
<li>Next, click on the AP Mode Tab.</li>
<li>Select Wireless Repeater and enter the WIRELESS MAC Address obtained in step 4 above.</li>
</ol>
<p>Notes:</p>
<ul>
<li>This procedure was adapted from <a href="http://linksys.custhelp.com/cgi-bin/linksys.cfg/php/enduser/std_adp.php?p_faqid=231" target="_blank">Linksys by Cisco&#8217;s online Knowledge Base article #231 written on 1/26/2006</a>.</li>
<li>If MAC Filtering is configured on the WRT54G, no extra configuration is needed.  Wireless clients will still need to be added the MAC Filter list of the WRT54G, but the WAP54G does <span style="text-decoration: underline;"><strong>NOT</strong></span> have to on the list.</li>
<li>I highly recommend MAC Filtering over WEP Encryption as WEP has been cracked: <a href="http://www.google.com/search?q=cracking+WEP" target="_blank">http://www.google.com/search?q=cracking+WEP</a></li>
<li>As mentioned before, WPA (Wi-Fi Protected Access) is not compatible with wireless repeater mode. You must use WEP Encryption if you wish to use security options.</li>
</ul>
<p>Next was installation of the antennas. First, we simply placed the antennas on ladders with relative line-of-sight to test. Once we were able to establish connection, we mounted the antennas to the side of each house with the included hardware. James bought a 12&#8243; x 1-1/4&#8243; pipe and mounting plate to mount on the family house. This enabled the antenna to align with the office&#8217;s antenna which was slightly offset from the main house. The 30-degree beam-width allowed us to roughly line up the antennas without need of special alignment equipment.</p>
<p>We ran the pigtails in through existing holes in the wall into the attic of the house and the garage of the office. This is where the &#8220;Aggie engineering&#8221; took place. To get power to the router and access point, we ran extension cords across each location. The final touch was to run CAT-5e Ethernet cables to pre-existing wall plates that James had previously installed when his electrician did the initial wiring of the office.</p>
<h2>Residual</h2>
<p>We neglected to double check the printer sharing from his laptop. Unfortunately, communications to the printer did fail. James has to hard-wire into the office network when he is down there, and just deal without printing when working from the house. I will be double checking that on our next visit. Other than that, everything is running great after two days!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2009%2F02%2F23%2Fwireless-networking-with-directional-antennas%2F&amp;linkname=Wireless%20Networking%20with%20Directional%20Antennas">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2009/02/23/wireless-networking-with-directional-antennas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LogMeIn Interface v0.1</title>
		<link>http://fugertech.com/2009/02/11/logmein-interface-v01/</link>
		<comments>http://fugertech.com/2009/02/11/logmein-interface-v01/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 00:38:30 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[LogMeIn.com]]></category>
		<category><![CDATA[remote desktop]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://fugertech.com/?p=94</guid>
		<description><![CDATA[I&#8217;ve been using LogMeIn.com&#8217;s LogMeIn Pro for about a year now and it is great for accessing my desktops and laptops at home from anywhere. With most people carrying laptops these days it seems useless as one would have his/her computer along for the ride. However, when I am at work and there is a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://www.logmein.com" target="_blank">LogMeIn.com</a>&#8217;s LogMeIn Pro for about a year now and it is great for accessing my desktops and laptops at home from anywhere. With most people carrying laptops these days it seems useless as one would have his/her computer along for the ride. However, when I am at work and there is a website blocked by WebSense or some other limitation that slows me down, I can jump onto my desktop at home and get something done without hassle. It also provides IT shops with the ability to manage hundreds of clients&#8217; PCs from the office. This can be extremely helpful!</p>
<p>One annoyance I have though is with the ActiveX based remote desktop. Unfortunately, I am stuck with IE6 at work. I am not allowed to install IE7, Firefox, Chrome or any other browser than IE6. I also prefer not to run the ActiveX plugin in full-screen mode. I like to be able to quickly and efficiently tab to another window on my local desktop. Running it from the browser requires me to hide/un-hide the address bar and standard buttons though. I have Visual Studio 2005 though. So, I made a very quick little tool that allows me to maximize the space in which the browser sits. It is a Windows application but has nothing except a web browser object that fills the entire window. The default URL is <a href="http://www.logmein.com" target="_blank">http://www.logmein.com</a>. It allows me to save my IE6 toolbar settings and maximize the space for my remote desktop!</p>
<p>I know, I know the tool is really simple and lame, but I figured not everyone has access to the development tools to make something like this. So, for the non-developers out there, I present FuGeRTech&#8217;s <a href="http://fugertech.com/wp-content/uploads/2009/02/logmein.zip" target="_blank">LogMeIn Interface v0.1</a>.</p>
<p>Code is released under the <a href="http://en.wikipedia.org/wiki/MIT_License" target="_blank">MIT License</a>.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2009%2F02%2F11%2Flogmein-interface-v01%2F&amp;linkname=LogMeIn%20Interface%20v0.1">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2009/02/11/logmein-interface-v01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Log Files</title>
		<link>http://fugertech.com/2009/01/26/sharepoint-log-files/</link>
		<comments>http://fugertech.com/2009/01/26/sharepoint-log-files/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 15:30:01 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Diagnostic Logging]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft SQL Server 2005]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Trace Log]]></category>
		<category><![CDATA[WSS 3.0]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=86</guid>
		<description><![CDATA[I am willing to bet that not too many people run into this issue, but it is still good to know. On, my client&#8217;s web server began to stall due to a full C: drive. Their server is an economy model and the C: drive is only 16GB. After some quick investigation, I found that [...]]]></description>
			<content:encoded><![CDATA[<p>I am willing to bet that not too many people run into this issue, but it is still good to know. On, my client&#8217;s web server began to stall due to a full C: drive. Their server is an economy model and the C: drive is only 16GB. After some quick investigation, I found that 3.5GB were being used in the C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12LOGS folder. This is the default location for the trace log. The path must exist on all servers in the farm, too. I decided to turn down the logging, at least temporarily, to get the server running again. To complete this task, I took the following steps:</p>
<ol>
<li>Navigate to SharePoint Central Administration</li>
<li>Click Operations</li>
<li>Click Diagnostic Logging</li>
<li>Scroll to the bottom of the page to the Trace Log section</li>
<li>Change Number of log files to <strong><span style="text-decoration: underline;">1</span></strong></li>
<li>Change Number of minutes to use a log file to <strong><span style="text-decoration: underline;">5</span></strong></li>
</ol>
<p>My client&#8217;s server is back up and running again, and I should not have to worry about the Trace Log getting out of control again.</p>
<p>The downside is that my Trace Log only goes back to the last 5 minutes of work on the server. I am researching my options here. It may not be important enough though.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2009%2F01%2F26%2Fsharepoint-log-files%2F&amp;linkname=SharePoint%20Log%20Files">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2009/01/26/sharepoint-log-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2005 and NTFS Compressed Folders</title>
		<link>http://fugertech.com/2009/01/08/sql-server-2005-and-ntfs-compressed-folders/</link>
		<comments>http://fugertech.com/2009/01/08/sql-server-2005-and-ntfs-compressed-folders/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 05:37:00 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[compressed folders]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Microsoft SQL Server 2005]]></category>
		<category><![CDATA[NTFS]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=78</guid>
		<description><![CDATA[Summary: SQL Server 2005 does not support compressed folders. Don&#8217;t use them for database storage or backups.
I had a backup process running at work that would back up my server&#8217;s databases into a compressed folder. Everything was fine until my SharePoint database and another database grew larger than 32GB. My backups began to fail with [...]]]></description>
			<content:encoded><![CDATA[<p>Summary: SQL Server 2005 does not support compressed folders. Don&#8217;t use them for database storage or backups.</p>
<p>I had a backup process running at work that would back up my server&#8217;s databases into a compressed folder. Everything was fine until my SharePoint database and another database grew larger than 32GB. My backups began to fail with an error that read:</p>
<pre class="sql" style="padding-left: 30px;">The process cannot access the file
because another process has locked
a portion of the file.</pre>
<p>I was stumped! I contacted a colleague that is a SQL Server expert, and she suggested using <a href="http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx" target="_blank">FileMon</a> to watch for intruding processes. It may be the anti-virus software requesting the file in the middle of backing up. At that time, I ran my backups manually singling out the two that were failing to backup. I noticed that they would consistently fail at the 32GB mark. That drew my suspicion, and I did some googling to find that Microsoft SQL Server 2005 does NOT support compressed folders!</p>
<p>So, I moved my backups to a regular folder and all is well again. Even my expert colleague did not know of this problem. Luckily, I have read that SQL Server 2008 will support compressed folders.</p>
<p>I hope this information gets grabbed by the web crawlers as finding this information was NOT as easy as it should be.</p>
<p>Here&#8217;s another blogger that found this problem a year earlier than me!<a href="http://clay.lenharts.net/blog/2008/01/28/backing-up-to-a-ntfs-compressed-folder/" target="_blank"></p>
<p>http://clay.lenharts.net/blog/2008/01/28/backing-up-to-a-ntfs-compressed-folder/</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2009%2F01%2F08%2Fsql-server-2005-and-ntfs-compressed-folders%2F&amp;linkname=SQL%20Server%202005%20and%20NTFS%20Compressed%20Folders">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2009/01/08/sql-server-2005-and-ntfs-compressed-folders/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint: Recurring Events on Calendars</title>
		<link>http://fugertech.com/2008/11/21/sharepoint-recurring-events-on-calendars/</link>
		<comments>http://fugertech.com/2008/11/21/sharepoint-recurring-events-on-calendars/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 18:48:57 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[recurring]]></category>
		<category><![CDATA[WSS 3.0]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=60</guid>
		<description><![CDATA[While I am in the blogging mood today, I thought I would share a very helpful link. I was trying to figure out the proper way to retrieve the latest recurring events based on the current month. I Googled around for a bit before stumbling upon this:
http://blogs.msdn.com/sharepoint/archive/2007/05/14/understanding-the-sharepoint-calendar-and-how-to-export-it-to-ical-format.aspx
The key point is the query used:
SPQuery query = [...]]]></description>
			<content:encoded><![CDATA[<p>While I am in the blogging mood today, I thought I would share a very helpful link. I was trying to figure out the proper way to retrieve the latest recurring events based on the current month. I Googled around for a bit before stumbling upon this:</p>
<p><a href="http://blogs.msdn.com/sharepoint/archive/2007/05/14/understanding-the-sharepoint-calendar-and-how-to-export-it-to-ical-format.aspx">http://blogs.msdn.com/sharepoint/archive/2007/05/14/understanding-the-sharepoint-calendar-and-how-to-export-it-to-ical-format.aspx</a></p>
<p>The key point is the query used:</p>
<p><code>SPQuery query = new SPQuery();<br />
query.ExpandRecurrence = true;<br />
query.Query =<br />
    "&lt;Where&gt;" +<br />
        "&lt;DateRangesOverlap&gt;" +<br />
            "&lt;FieldRef Name='EventDate' /&gt;" +<br />
            "&lt;FieldRef Name='EndDate' /&gt;" +<br />
            "&lt;FieldRef Name='RecurrenceID' /&gt;" +<br />
            "&lt;Value Type='DateTime'&gt;&lt;Month /&gt;&lt;/Value&gt;" +<br />
        "&lt;/DateRangesOverlap&gt;" +<br />
    "&lt;/Where&gt;";<br />
// Look forward from the beginning of the current month<br />
query.CalendarDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); </code></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2008%2F11%2F21%2Fsharepoint-recurring-events-on-calendars%2F&amp;linkname=SharePoint%3A%20Recurring%20Events%20on%20Calendars">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2008/11/21/sharepoint-recurring-events-on-calendars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint: User Auditing</title>
		<link>http://fugertech.com/2008/11/21/sharepoint-user-auditing/</link>
		<comments>http://fugertech.com/2008/11/21/sharepoint-user-auditing/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 17:26:35 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[designer]]></category>
		<category><![CDATA[groups]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[membership]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[object model]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[users]]></category>
		<category><![CDATA[WSS 3.0]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=59</guid>
		<description><![CDATA[At my current place of employment, my development environment is limited to creating custom SharePoint tools through SharePoint Designer. I typically create an override to the OnLoad method to get my work done.
Today&#8217;s topic: a simple interface for checking out who has group memberships and where they have them. I came up with the idea [...]]]></description>
			<content:encoded><![CDATA[<p>At my current place of employment, my development environment is limited to creating custom SharePoint tools through SharePoint Designer. I typically create an override to the OnLoad method to get my work done.</p>
<p>Today&#8217;s topic: a simple interface for checking out who has group memberships and where they have them. I came up with the idea after seeing the constant organizational changes and the employee role changes associated with them. So let&#8217;s talk about the two parts. If you just want the code without the breakdown, scroll to the bottom of the full article.</p>
<p><span id="more-59"></span></p>
<h2>User Lookup</h2>
<p>There are three methods to this (in addition to a base of methods that I find helpful with my custom pages). First let&#8217;s take a look at my basic header.</p>
<p><code>&lt;%@ Page language="C#"<br />
MasterPageFile="~masterurl/default.master"<br />
SmartNavigation="true"<br />
Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,<br />
Microsoft.SharePoint,<br />
Version=12.0.0.0,<br />
Culture=neutral,<br />
PublicKeyToken=71e9bce111e9429c"<br />
meta:progid="SharePoint.WebPartPage.Document" %&gt;<br />
&lt;%@ Import Namespace="Microsoft.SharePoint" %&gt;<br />
</code></p>
<p>It really is this simple. You only need the Microsoft.SharePoint library! Now I begin my &lt;script&gt; section that contains the OnLoad override and other methods needed.</p>
<p><code> protected SPSite site;<br />
protected SPWeb web;</code></p>
<p><code> protected override void OnLoad(EventArgs e)<br />
{<br />
try<br />
{<br />
site = new SPSite("http://server/");<br />
web = site.OpenWeb("webdev");<br />
SPGroup grpMembers = web.SiteGroups["Website Development Members"];<br />
if(grpMembers.ContainsCurrentUser)<br />
{<br />
mvViewManager.ActiveViewIndex = 1;<br />
runPage();<br />
}<br />
}<br />
catch (Exception err)<br />
{<br />
litError.Visible = true;<br />
litError.Text = err.Message;<br />
}<br />
}</code></p>
<p>The first thing I do is just a simple check to make sure that the user is in a group that is allowed to perform these tasks. I also wrap the entire thing in a try/catch just to make my life easier for error catching and display it in a Literal that is in the content of the page (you&#8217;ll see later). I have been playing around with ViewManagers lately, and that controls what content is displayed on the page. The content of the page is as follows.</p>
<p><code>&lt;asp:Content ContentPlaceHolderID="PlaceHolderPageTitle" runat="server"&gt;<br />
Web Development Admin Tools - User Audit<br />
&lt;/asp:Content&gt;<br />
&lt;asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server"&gt;<br />
&lt;asp:MultiView ID="mvViewManager" runat="server" ActiveViewIndex="0"&gt;<br />
&lt;asp:View ID="vNoPerms" runat="server"&gt;<br />
&lt;h3&gt;You do not have permissions to view this page!&lt;/h3&gt;<br />
&lt;/asp:View&gt;<br />
&lt;asp:View ID="vMain" runat="server"&gt;<br />
&lt;asp:DropDownList ID="ddlUsers" runat="server" AutoPostBack="true" OnSelectedIndexChanged="findUser"/&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
&lt;asp:Literal ID="litOutput" runat="server"/&gt;<br />
&lt;/asp:View&gt;<br />
&lt;/asp:MultiView&gt;<br />
&lt;asp:Literal ID="litError" runat="server" Visible="false"/&gt;<br />
&lt;/asp:Content&gt;</code></p>
<p>The litOutput and litError Literals are used for displaying information. The ddlUsers DropDownList is used for displaying a list of all users. As mentioned before, there are two views inside the ViewManager mvViewManager. The first view (index 0) is the default view. If the group evaluation from OnLoad passes, the second view (index 1) is displayed. The rest of this section is pretty self explanatory. Onto the methods that manipulate the DropDownList and output Literal.</p>
<p><code> protected void runPage()<br />
{<br />
if(Request.HttpMethod != "POST")<br />
{<br />
populateUsers();<br />
}<br />
}</code></p>
<p>protected void populateUsers()<br />
{<br />
foreach(SPUser user in site.RootWeb.AllUsers)<br />
{<br />
ListItem li = new ListItem();<br />
li.Text = user.Name;<br />
li.Value = user.ID.ToString();<br />
ddlUsers.Items.Add(li);<br />
}<br />
}</p>
<p>protected void findUser(Object sender, EventArgs e)<br />
{<br />
SPUser user = site.RootWeb.AllUsers.GetByID(Convert.ToInt32(ddlUsers.SelectedItem.Value));<br />
litOutput.Text = &#8220;&#8221;" + user.Name + &#8220;&#8221; belongs to the following groups:&lt;br/&gt;&lt;br/&gt;&#8221;;<br />
litOutput.Text += userMembership(user, site.RootWeb, &#8220;&#8221;);<br />
}</p>
<p>protected string userMembership(SPUser user, SPWeb web, string webPath)<br />
{<br />
StringBuilder retVal = new StringBuilder();<br />
//retVal.AppendFormat(&#8220;{0}&lt;br/&gt;&#8221;, web.Name == &#8220;&#8221; ? &#8220;Root&#8221; : web.Name);<br />
webPath += (webPath == &#8220;&#8221; ? &#8220;&#8221; : &#8220;/&#8221;) + web.Name;<br />
foreach(SPGroup group in web.Groups)<br />
{<br />
try<br />
{<br />
group.Users.GetByID(user.ID);<br />
retVal.AppendFormat(&#8220;&lt;b&gt;{0}&lt;/b&gt; &#8211; &lt;a href=&#8221;removeUserFromGroup.aspx?uid={1}&amp;gid={2}&amp;web={3}&#8221;&gt;REMOVE&lt;/a&gt;&lt;br/&gt;&#8221;,<br />
group.Name,<br />
user.ID,<br />
group.ID,<br />
webPath);<br />
}<br />
catch { }<br />
}<br />
foreach(SPWeb subweb in web.Webs)<br />
{<br />
retVal.AppendFormat(&#8220;{0}&#8221;, userMembership(user, subweb, webPath));<br />
}<br />
return retVal.ToString();<br />
}<br />
&lt;/script&gt;</p>
<p>The methods we have here are: runPage(), populateUsers(), findUser(Object sender, EventArgs e), and userMembership(SPUser user, SPWeb web, string webPath). I try to keep my methods in the order in which they are called. This makes my life easier when debugging, etc. The first method called is runPage(). It is just a simple starter that does a check to make sure that the page was not a POST. If it was a POST, then someone must have accessed the page incorrectly or someone chose a user from the DropDownList. This avoids duplicate population of the user DropDownList, and improper access of the page. That takes us to populateUsers(). This method uses SPWeb.AllUsers to find all the users in the system and add them to the DropDownList. It makes their name the Text property and their userID the Value property. Notice the DropDownList gets the AutoPostBack property set to True and the OnSelectedIndexChanged property set to the findUser() method. This writes some header information to the output Literal, then kicks off a call to the recursive method userMembership. Using the SPUser object of the user chosen, SPWeb object of the current web in which we&#8217;re looking, and a string of the path to the web in which we&#8217;re looking, userMembership will traverse all webs and sub-webs in the site collection looking for memberships to groups in those webs. It will return a string that provides the group name and a link to remove that person from the group.</p>
<h2>Removing Users from a Group</h2>
<p>This page is fairly simple. It takes three GET parameters to determine which SPWeb to use, the SPUser.ID, and SPGroup.ID. The same permissions logic is used to determine if the person should be viewing this page. Then, it also makes sure that the Request.HttpMethod is set to GET. The runPage() method then takes these parameters and removes the user from that group. The code is below the userAudit.aspx code provided.</p>
<h2>userAudit.aspx</h2>
<p><code>&lt;%@ Page language="C#"<br />
MasterPageFile="~masterurl/default.master"<br />
SmartNavigation="true"<br />
Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,<br />
Microsoft.SharePoint,<br />
Version=12.0.0.0,<br />
Culture=neutral,<br />
PublicKeyToken=71e9bce111e9429c"<br />
meta:progid="SharePoint.WebPartPage.Document" %&gt;<br />
&lt;%@ Import Namespace="Microsoft.SharePoint" %&gt;<br />
&lt;script type="text/c#" runat="server"&gt;<br />
protected SPSite site;<br />
protected SPWeb web;<br />
protected override void OnLoad(EventArgs e)<br />
{<br />
try<br />
{<br />
site = new SPSite("http://server/");<br />
web = site.OpenWeb("webdev");<br />
SPGroup grpMembers = web.SiteGroups["Website Development Members"];<br />
if(grpMembers.ContainsCurrentUser)<br />
{<br />
mvViewManager.ActiveViewIndex = 1;<br />
runPage();<br />
}<br />
}<br />
catch (Exception err)<br />
{<br />
litError.Visible = true;<br />
litError.Text = err.Message;<br />
}<br />
}</code></p>
<p>protected void runPage()<br />
{<br />
if(Request.HttpMethod != &#8220;POST&#8221;)<br />
{<br />
populateUsers();<br />
}<br />
}</p>
<p>protected void populateUsers()<br />
{<br />
foreach(SPUser user in site.RootWeb.AllUsers)<br />
{<br />
ListItem li = new ListItem();<br />
li.Text = user.Name;<br />
li.Value = user.ID.ToString();<br />
ddlUsers.Items.Add(li);<br />
}<br />
}</p>
<p>protected void findUser(Object sender, EventArgs e)<br />
{<br />
SPUser user = site.RootWeb.AllUsers.GetByID(Convert.ToInt32(ddlUsers.SelectedItem.Value));<br />
litOutput.Text = &#8220;&#8221;" + user.Name + &#8220;&#8221; belongs to the following groups:&lt;br/&gt;&lt;br/&gt;&#8221;;<br />
litOutput.Text += userMembership(user, site.RootWeb, &#8220;&#8221;);<br />
}</p>
<p>protected string userMembership(SPUser user, SPWeb web, string webPath)<br />
{<br />
StringBuilder retVal = new StringBuilder();<br />
//retVal.AppendFormat(&#8220;{0}&lt;br/&gt;&#8221;, web.Name == &#8220;&#8221; ? &#8220;Root&#8221; : web.Name);<br />
webPath += (webPath == &#8220;&#8221; ? &#8220;&#8221; : &#8220;/&#8221;) + web.Name;<br />
foreach(SPGroup group in web.Groups)<br />
{<br />
try<br />
{<br />
group.Users.GetByID(user.ID);<br />
retVal.AppendFormat(&#8220;&lt;b&gt;{0}&lt;/b&gt; &#8211; &lt;a href=&#8221;removeUserFromGroup.aspx?uid={1}&amp;gid={2}&amp;web={3}&#8221;&gt;REMOVE&lt;/a&gt;&lt;br/&gt;&#8221;,<br />
group.Name,<br />
user.ID,<br />
group.ID,<br />
webPath);<br />
}<br />
catch { }<br />
}<br />
foreach(SPWeb subweb in web.Webs)<br />
{<br />
retVal.AppendFormat(&#8220;{0}&#8221;, userMembership(user, subweb, webPath));<br />
}<br />
return retVal.ToString();<br />
}<br />
&lt;/script&gt;<br />
&lt;asp:Content ContentPlaceHolderID=&#8221;PlaceHolderPageTitle&#8221; runat=&#8221;server&#8221;&gt;<br />
Web Development Admin Tools &#8211; User Audit<br />
&lt;/asp:Content&gt;<br />
&lt;asp:Content ContentPlaceHolderID=&#8221;PlaceHolderMain&#8221; runat=&#8221;server&#8221;&gt;<br />
&lt;asp:MultiView ID=&#8221;mvViewManager&#8221; runat=&#8221;server&#8221; ActiveViewIndex=&#8221;0&#8243;&gt;<br />
&lt;asp:View ID=&#8221;vNoPerms&#8221; runat=&#8221;server&#8221;&gt;<br />
&lt;h3&gt;You do not have permissions to view this page!&lt;/h3&gt;<br />
&lt;/asp:View&gt;<br />
&lt;asp:View ID=&#8221;vMain&#8221; runat=&#8221;server&#8221;&gt;<br />
&lt;asp:DropDownList ID=&#8221;ddlUsers&#8221; runat=&#8221;server&#8221; AutoPostBack=&#8221;true&#8221; OnSelectedIndexChanged=&#8221;findUser&#8221;/&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
&lt;asp:Literal ID=&#8221;litOutput&#8221; runat=&#8221;server&#8221;/&gt;<br />
&lt;/asp:View&gt;<br />
&lt;/asp:MultiView&gt;<br />
&lt;asp:Literal ID=&#8221;litError&#8221; runat=&#8221;server&#8221; Visible=&#8221;false&#8221;/&gt;<br />
&lt;/asp:Content&gt;</p>
<h2>removeUserFromGroup.aspx</h2>
<p><code>&lt;%@ Page language="C#"<br />
MasterPageFile="~masterurl/default.master"<br />
SmartNavigation="true"<br />
Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,<br />
Microsoft.SharePoint,<br />
Version=12.0.0.0,<br />
Culture=neutral,<br />
PublicKeyToken=71e9bce111e9429c"<br />
meta:progid="SharePoint.WebPartPage.Document" %&gt;<br />
&lt;%@ Import Namespace="Microsoft.SharePoint" %&gt;<br />
&lt;script type="text/c#" runat="server"&gt;<br />
protected SPSite site;<br />
protected SPWeb web;<br />
protected override void OnLoad(EventArgs e)<br />
{<br />
try<br />
{<br />
site = new SPSite("http://server/");<br />
web = site.OpenWeb("webdev");<br />
SPGroup grpMembers = web.SiteGroups["Website Development Members"];<br />
if(grpMembers.ContainsCurrentUser &amp;&amp; Request.HttpMethod == "GET")<br />
{<br />
mvViewManager.ActiveViewIndex = 1;<br />
runPage();<br />
}<br />
}<br />
catch (Exception err)<br />
{<br />
litError.Visible = true;<br />
litError.Text = err.Message;<br />
}<br />
}<br />
protected void runPage()<br />
{<br />
int uid = Convert.ToInt32(Request.QueryString["uid"]);<br />
int gid = Convert.ToInt32(Request.QueryString["gid"]);<br />
litOutput.Text += uid + " " + gid;<br />
SPWeb thisWeb = site.OpenWeb(Request.QueryString["web"]);<br />
SPGroup group = thisWeb.Groups.GetByID(gid);<br />
SPUser user = site.RootWeb.AllUsers.GetByID(uid);<br />
thisWeb.AllowUnsafeUpdates = true;<br />
thisWeb.Update();<br />
group.Users.RemoveByID(uid);<br />
thisWeb.AllowUnsafeUpdates = false;<br />
thisWeb.Update();<br />
litOutput.Text = """ + user.Name + "" REMOVED FROM: " + group.Name;<br />
}<br />
&lt;/script&gt;<br />
&lt;asp:Content ContentPlaceHolderID="PlaceHolderPageTitle" runat="server"&gt;<br />
Web Development Admin Tools - Remove User From Group<br />
&lt;/asp:Content&gt;<br />
&lt;asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server"&gt;<br />
&lt;asp:MultiView ID="mvViewManager" runat="server" ActiveViewIndex="0"&gt;<br />
&lt;asp:View ID="vNoPerms" runat="server"&gt;<br />
&lt;h3&gt;You do not have permissions to view this page!&lt;/h3&gt;<br />
&lt;/asp:View&gt;<br />
&lt;asp:View ID="vMain" runat="server"&gt;<br />
&lt;asp:Literal ID="litOutput" runat="server"/&gt;<br />
&lt;/asp:View&gt;<br />
&lt;/asp:MultiView&gt;<br />
&lt;asp:Literal ID="litError" runat="server" Visible="false"/&gt;<br />
&lt;/asp:Content&gt;</code></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2008%2F11%2F21%2Fsharepoint-user-auditing%2F&amp;linkname=SharePoint%3A%20User%20Auditing">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2008/11/21/sharepoint-user-auditing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jennings Track Days</title>
		<link>http://fugertech.com/2008/10/22/jennings-track-days/</link>
		<comments>http://fugertech.com/2008/10/22/jennings-track-days/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 20:49:58 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Jennings GP]]></category>
		<category><![CDATA[Motorcycle]]></category>
		<category><![CDATA[Racing]]></category>
		<category><![CDATA[Roadracing]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[cbr600rr]]></category>
		<category><![CDATA[Florida]]></category>
		<category><![CDATA[Gainesville]]></category>
		<category><![CDATA[GoPro]]></category>
		<category><![CDATA[gsxr600]]></category>
		<category><![CDATA[Honda]]></category>
		<category><![CDATA[Jacksonville]]></category>
		<category><![CDATA[motorcycle racing]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[Suzuki]]></category>
		<category><![CDATA[track days]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=55</guid>
		<description><![CDATA[Tamara and I flew out to Jacksonville for an extended weekend with Hollifield. He lives in Gainesville, and Jacksonville is the closest airport. We landed on Friday afternoon and got everything together that night. We left first thing Saturday morning for Jennings. It is about an hour and a half away from Gainesville.
For this trip [...]]]></description>
			<content:encoded><![CDATA[<p>Tamara and I flew out to Jacksonville for an extended weekend with Hollifield. He lives in Gainesville, and Jacksonville is the closest airport. We landed on Friday afternoon and got everything together that night. We left first thing Saturday morning for Jennings. It is about an hour and a half away from Gainesville.</p>
<p>For this trip to the track, we purchased the new GoPro Hero Wide for some testing. We are now dealers of the GoPro products and would like to begin to promote business at events like this. We shot about 2 hours worth of track time, and even sold one video to a guy that had a good battle with me. He out powered me in the straights, but I held stronger lines and corner speeds to keep up! I also had a good chase with Hollifield during the next session. He stayed behind me for quite a while, then he finally out braked me into turn 13. I was able to play chase though and kept up with him the rest of the session. YouTube doesn&#8217;t like me posting these videos due to length, so once I can find the best way to get them online, then I will put them up.</p>
<p><a href="http://www.fugertech.com/wp-content/uploads/2008/11/jennings0051.jpg"><img class="alignnone size-medium wp-image-56" title="jennings0051" src="http://www.fugertech.com/wp-content/uploads/2008/11/jennings0051-300x225.jpg" alt="Hollifield Turn 12" width="275" height="206" /></a> <a href="http://www.fugertech.com/wp-content/uploads/2008/11/jennings0161.jpg"><img class="alignnone size-medium wp-image-58" title="jennings0161" src="http://www.fugertech.com/wp-content/uploads/2008/11/jennings0161-300x225.jpg" alt="Tony in Turn 1" width="275" height="206" /></a></p>
<p>The weekend was mostly a success. Late in the track day on Sunday, the CBR600RR began to act up and would not run properly. Hollifield had to drop out of the last two sessions. The GSXR600 started out strong on Saturday morning, but by early Sunday it had the throttle issues again. I had no top-end acceleration whatsoever. It was still a great time. We had planned to ride Monday, but were too tired (as were the bikes) to do so. That gave us Monday to fool around with the bikes. We cleaned out the gas tank on the GSXR600, and tried to fiddle with the CBR600RR, but no luck.</p>
<p>Tuesday, we took our time to get up and out as our flight wasn&#8217;t until the afternoon. We ate lunch at Bojangles&#8217; which is a treat for all three of us as there is no Bojangles&#8217; in Gainesville or Albuquerque.</p>
<p>All photos here: <a href="http://www.tonyfugere.com/gallery/v/trips/2008/jennings_10-2008">http://www.tonyfugere.com/gallery/v/trips/2008/jennings_10-2008</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2008%2F10%2F22%2Fjennings-track-days%2F&amp;linkname=Jennings%20Track%20Days">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2008/10/22/jennings-track-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VStrom Gets Givi E36N Side Cases</title>
		<link>http://fugertech.com/2008/10/16/vstrom-gets-givi-e36n-side-cases/</link>
		<comments>http://fugertech.com/2008/10/16/vstrom-gets-givi-e36n-side-cases/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 05:17:28 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Modification]]></category>
		<category><![CDATA[Motorcycle]]></category>
		<category><![CDATA[Sport Touring]]></category>
		<category><![CDATA[DL1000]]></category>
		<category><![CDATA[E36N]]></category>
		<category><![CDATA[Givi]]></category>
		<category><![CDATA[motorcycles]]></category>
		<category><![CDATA[PL528]]></category>
		<category><![CDATA[RL Motorcycles]]></category>
		<category><![CDATA[Saddlebag]]></category>
		<category><![CDATA[Side case]]></category>
		<category><![CDATA[Suzuki]]></category>
		<category><![CDATA[T411]]></category>
		<category><![CDATA[Top case]]></category>
		<category><![CDATA[tubular rack]]></category>
		<category><![CDATA[Voyager]]></category>
		<category><![CDATA[VStrom]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=51</guid>
		<description><![CDATA[ 
After seeing my Givi T411 Voyager Saddlebags rub the paint job on the VFR and VStrom and the Two Brothers logo on the VStrom, I finally broke down and got a pair of Givi E36N cases. These cases are designed to be either top or side cases. With the addition of the Givi PL528, [...]]]></description>
			<content:encoded><![CDATA[<div><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+001.jpg.html"><img id="IFid1" class="alignleft ImageFrame_none giThumbnail" src="http://photos.tonyfugere.com/gallery/d/17394-1/Givi+Side+Cases+001.jpg" alt="Givi Side Cases 001.jpg" width="150" height="150" /></a><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+001.jpg.html"> </a></div>
<p>After seeing my Givi T411 Voyager Saddlebags rub the paint job on the VFR and VStrom and the Two Brothers logo on the VStrom, I finally broke down and got a pair of Givi E36N cases. These cases are designed to be either top or side cases. With the addition of the Givi PL528, I will mount them as side cases. I found all three components (2 x E36N&#8217;s and 1 x PL528) for a bit of a discounted price compared to most websites. A company out of Southern Georgia called <a href="http://www.rlmotorcycles.com/" target="_blank">RL Motorcycles</a> has a website dedicated to Motorcycle accessories. The cases and PL528 were a bit under typical MSRP and shipping is a flat $9.95 per order! <span id="more-51"></span></p>
<h2>The PL528</h2>
<p>The PL528 consists of three major parts. The two side case holders and a crossbar for stabilization.<a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+002.jpg.html"><img id="IFid2" class="alignright ImageFrame_none giThumbnail" style="float: right;" src="http://photos.tonyfugere.com/gallery/d/17398-1/Givi+Side+Cases+002.jpg" alt="Givi Side Cases 002.jpg" width="150" height="150" /></a> My first step was to remove my Givi top case rack to access the two bolts that hold the rack to the top of the motorcycle&#8217;s sub-frame. This was a fairly simple task. There is a plastic cover held by four (4) small screws. After removing that, there are four (4) nut/bolt/washer combination holding the Givi rack mount to the Suzuki rack. Remove those to access the two bolts that mount the rack into the sub-frame. I found that using a magnet to hold the nuts steady made it easier to remove and install the nut/bolt/washer combos on the front two bolts. Remove the two bolts that hold the rack to the sub-frame. These will be replaced with the large bolts that came with the PL528. <a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+011.jpg.html"><img id="IFid11" class="alignleft ImageFrame_none giThumbnail" style="float: left;" src="http://photos.tonyfugere.com/gallery/d/17425-1/Givi+Side+Cases+011.jpg" alt="Givi Side Cases 011.jpg" width="150" height="150" /></a>Wiggle the two side case holders into place. Get the two new Givi-supplied bolts into place and hand-screw them a few turns. Do not tighten them all the way as the other bolt holes won&#8217;t line up as easily. You will find that the lower bolt hole lines up with the top hole on the passenger peg mount. That is where you will place the bolt/washer/lock-nut combination. Again, do not tighten them until later, or the crossbar won&#8217;t line up. Side story: Funny thing is I have learned the old &#8220;don&#8217;t tighten first&#8221; trick from working on modifications/repairs on bikes, cars, etc. I actually remembered this time, not to tighten everything down. Then, the other night, I was watching Dirty Jobs on Discovery Channel. Mike Rowe, coincidentally, started tightening down some bolts one at a time. The guy leading him promptly said, &#8220;Don&#8217;t tighten them as you go like that or you won&#8217;t get the last one on.&#8221;</p>
<div><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+012.jpg.html"><img id="IFid12" class="alignright ImageFrame_none giThumbnail" style="float: right;" src="http://photos.tonyfugere.com/gallery/d/17428-1/Givi+Side+Cases+012.jpg" alt="Givi Side Cases 012.jpg" width="150" height="150" /></a><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+012.jpg.html"> </a></div>
<p>Back to business. Now that you have the bolts in place. Get the crossbar in place and use the funky-looking, concave washer and flush-mount bolts. Get these bolts in place and started. Now, tighten away! I would start with the top two bolts, then the passenger peg bolts, and finally the two crossbar bolts. Now you can put the top case rack back into place. Remember, use the magnet trick seen above to get the nuts on the front of the rack. It is not necessary, but it is helpful.</p>
<h2>The E36N</h2>
<p>That funky-looking, concave washer is the lower mount for the side case. You will notice that the side case will rest on the two mounts and snap into the large tab. It is simply the same interface as the top case turned 90 degrees!</p>
<p><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+013.jpg.html"><img id="IFid13" class="ImageFrame_none giThumbnail" src="http://photos.tonyfugere.com/gallery/d/17431-1/Givi+Side+Cases+013.jpg" alt="Givi Side Cases 013.jpg" width="150" height="150" /></a><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+014.jpg.html"><img id="IFid14" class="ImageFrame_none giThumbnail" src="http://photos.tonyfugere.com/gallery/d/17434-1/Givi+Side+Cases+014.jpg" alt="Givi Side Cases 014.jpg" width="150" height="150" /></a><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+015.jpg.html"><img id="IFid15" class="ImageFrame_none giThumbnail" src="http://photos.tonyfugere.com/gallery/d/17437-1/Givi+Side+Cases+015.jpg" alt="Givi Side Cases 015.jpg" width="150" height="150" /></a><a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/Givi+Side+Cases+016.jpg.html"><img id="IFid16" class="ImageFrame_none giThumbnail" src="http://photos.tonyfugere.com/gallery/d/17440-2/Givi+Side+Cases+016.jpg" alt="Givi Side Cases 016.jpg" width="150" height="150" /></a></p>
<p>See all the photos: <a href="http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/" target="_blank">http://photos.tonyfugere.com/gallery/v/vehicles/bikes/vstrom_k12/givi_sidecases/</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2008%2F10%2F16%2Fvstrom-gets-givi-e36n-side-cases%2F&amp;linkname=VStrom%20Gets%20Givi%20E36N%20Side%20Cases">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2008/10/16/vstrom-gets-givi-e36n-side-cases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dr. TransLog: Or How I Learned to Stop Worrying and Love SQL Server</title>
		<link>http://fugertech.com/2008/09/24/dr-translog-or-how-i-learned-to-stop-worrying-and-love-sql-server/</link>
		<comments>http://fugertech.com/2008/09/24/dr-translog-or-how-i-learned-to-stop-worrying-and-love-sql-server/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 16:15:20 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Database Administration]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[LDF]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[MDF]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft SQL Server 2005]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transaction Log]]></category>
		<category><![CDATA[WSS 3.0]]></category>

		<guid isPermaLink="false">http://www.fugertech.com/?p=50</guid>
		<description><![CDATA[Preface
My current day job is developing SharePoint-based web applications. On Thursday, September 11 (coincidence), the SharePoint site became unresponsive. It was not storing any new data, but viewing existing data was still possible. This was important as I have end-users that rely on reports stored in Document Libraries. The daily reports would not save onto [...]]]></description>
			<content:encoded><![CDATA[<h2>Preface</h2>
<p>My current day job is developing SharePoint-based web applications. On Thursday, September 11 (coincidence), the SharePoint site became unresponsive. It was not storing any new data, but viewing existing data was still possible. This was important as I have end-users that rely on reports stored in Document Libraries. The daily reports would not save onto the website.</p>
<p>I&#8217;m sure that this article is SQL Server Administration 101 for most folks. For those diving into SharePoint with no DBA, this could be a lifesaver.</p>
<h2>Table of Contents</h2>
<p>Chapter 1: Transaction Log Deletion &#8211; what happens when I lost the WSS_Content transaction log<br />
Chapter 2: The Recovery &#8211; the steps to recovering the corrupt MDF file<br />
Chapter 3: Prevention &#8211; best practices for database and transaction log backup and truncation</p>
<p><span id="more-50"></span></p>
<h2>Chapter 1: Transaction Log Deletion</h2>
<p>After crawling around the servers a bit, I found out it was a disk space issue. Ends up that the Data drive for the SQL server that stores my SharePoint databases was full. I noticed a 136GB transaction log (LDF) file. I have not had formal SQL server training and the bulk of my experience is in the Linux world, so I was unsure of my next steps. Googling around I found people with similar issues and learned about sp_detach_db. I began to scramble as 8am was near and people would be coming into work. The detach was not working quickly enough. I shut down my SQL server processes and deleted the LDF file to start over on the transaction log. Little did I know that I just entered myself into a world of pain.</p>
<p>When the SQL server was brought back online, to my surprise, the WSS_Content database was toast. It would not allow access to it, and said that the database was corrupt. It was not shutdown cleanly&#8230; awesome news&#8230; lesson learned&#8230;</p>
<p>So, my first reaction is to call IT and ask for a restore of that file. More awesome news: &#8220;yea, the backups have been saying they were successful, but that file hasn&#8217;t been backed up&#8230;&#8221; Now I am worrying! I read further on Google results. I see forum replies saying things like, &#8220;well chances are if you lost your LDF file and the MDF won&#8217;t attach, the data is corrupt and you cannot get it back.&#8221;</p>
<p>I spend most of the day trying to find the right solution. Many of the answers on Google got me close, but did not work in the end. I find a piece of software called Stellar Phoenix SQL Database Recovery for $420. I think, well, I&#8217;ll try it and if it doesn&#8217;t work, I&#8217;ll get a refund. First problem I run into is the purchasing of the software. It takes 4 hours and 5 phone calls to get the software installed and the license working. They have a sales website that knows nothing about the software and their support team had me waiting on E-mails that never showed up. Again, lesson learned&#8230;</p>
<p>So, I finally have the software in hand. I rescue the MDF file, but to no avail. It transformed my 25GB MDF file into a 7MB MDF file. I apply for a refund (which is another story altogether). Soon, I learned to stop worrying and love SQL Server.</p>
<h2>Chapter 2: The Recovery</h2>
<p>At this point it is getting late in the evening and I am not getting anywhere. My brain is becoming mush, so I call it a night. The next morning I network around the office to learn of a colleague that is a SQL Server expert. She walks me through these steps and to my avail, the database comes back to life and SharePoint is happy. The icing on the cake is that I lost no data!</p>
<ol>
<li>Make a copy of the MDF file to a remote location just in case.</li>
<li>Rename the MDF file on the SQL server.</li>
<li>Run: <code>CREATE DATABASE WSS_Content</code> (Double check that it puts the MDF and LDF files in the same location as they were before. Add the proper options if need be.)</li>
<li>Shutdown the SQL server.</li>
<li>Copy original database MDF file over the newly created MDF file.</li>
<li>Rename, Move or Delete the newly create LDF file to &#8220;hide&#8221; it from SQL.</li>
<li>Start SQL server.</li>
<li>Run: <code>EXEC('ALTER DATABASE ''[WSS_Content]'' SET EMERGENCY');</code></li>
<li>Run: <code>ALTER DATABASE [WSS_Content] SET SINGLE_USER;</code></li>
<li>Run: <code>DBCC CHECKDB ([WSS_Content], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;</code></li>
<li>Run: <code>ALTER DATABASE [WSS_Content] SET MULTI_USER;</code></li>
</ol>
<h2>Chapter 3: Prevention</h2>
<p>At this point, my transaction log would still grow to enormous proportions without the proper practices. My colleague and SQL Server expert showed me how to run backups and truncate the transaction logs daily.</p>
<ul>
<li>Run full database backups that overwrite themselves the next day.
<ul>
<li>Create a job for running full backups as so for each database that needs to be backed up:<br />
<code>BACKUP DATABASE [WSS_Content] TO DISK='C:PATHTOBACKUP[WSS_Content].bak' WITH INIT</code></li>
<li>If the database needs to have the transaction log truncated, run this after the BACKUP DATABASE command:<br />
<code>BACKUP LOG [WSS_Content] TO DISK='C:PATHTOBACKUP[WSS_Content]_LOG.bak'</code></li>
<li>Schedule the job to run once nightly such that it will end prior to any tape backups.</li>
</ul>
</li>
<li>Optional, run transaction log backups every 4 hours to ensure that data from 4 hours ago can be recovered in case of a problem throughout the day.
<ul>
<li>For each database that needs to have the transaction log backed up and truncated run:<br />
<code>BACKUP LOG [WSS_Content] TO DISK='C:PATHTOBACKUP[WSS_Content]_LOG.bak'</code></li>
<li>Schedule the job to run every 4 hours and stop prior to the full database backup above.</li>
</ul>
</li>
</ul>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffugertech.com%2F2008%2F09%2F24%2Fdr-translog-or-how-i-learned-to-stop-worrying-and-love-sql-server%2F&amp;linkname=Dr.%20TransLog%3A%20Or%20How%20I%20Learned%20to%20Stop%20Worrying%20and%20Love%20SQL%20Server">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://fugertech.com/2008/09/24/dr-translog-or-how-i-learned-to-stop-worrying-and-love-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.360 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-10 17:12:41 -->
