<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Tomes Of Experience</title>
	
	<link>http://www.xerxesb.com</link>
	<description>'Cause there are some things you just *can't* get from a book...</description>
	<pubDate>Wed, 12 Nov 2008 22:42:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TheTomesOfExperience" type="application/rss+xml" /><item>
		<title>Writing Tests to Catch Memory Leaks in .NET</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/451184549/</link>
		<comments>http://www.xerxesb.com/2008/writing-tests-to-catch-memory-leaks-in-net/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 22:42:20 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/?p=203</guid>
		<description><![CDATA[http://brian.genisio.org/2008/11/writing-tests-to-catch-memory-leaks-in.html
keeping for my own reference purposes.
]]></description>
			<content:encoded><![CDATA[<p>http://brian.genisio.org/2008/11/writing-tests-to-catch-memory-leaks-in.html</p>
<p>keeping for my own reference purposes.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/451184549" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/writing-tests-to-catch-memory-leaks-in-net/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/writing-tests-to-catch-memory-leaks-in-net/</feedburner:origLink></item>
		<item>
		<title>Twitter Friend Feed Authentication</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/436809753/</link>
		<comments>http://www.xerxesb.com/2008/twitter-friend-feed-authentication/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 11:09:14 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<category><![CDATA[Silly Code]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/twitter-friend-feed-authentication/</guid>
		<description><![CDATA[I&#8217;m a twitter n00b. I joined up a month or so ago just to try it out, and occasionally i post something technology or work related. Turns out that I joined up right after they disallowed being able to subscribe to your &#8220;friends feed&#8221; feature without authenticating first. This is naturally a PITA because I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a twitter n00b. I joined up a month or so ago just to try it out, and occasionally i post something technology or work related. Turns out that I joined up right after they disallowed being able to subscribe to your &#8220;friends feed&#8221; feature without authenticating first. This is naturally a PITA because I use Google Reader, and it doesn&#8217;t pass down any credentials for me. Shit.</p>
<p>So my first reaction was to write a script in PHP which proxys the request on my behalf and authenticates me at the same time (hey it is silly-code Thursday after all). And that&#8217;s what this post was meant to be about. I was planning on blogging about my Thursday night somewhat learning PHP over again. In case you care, the code and links will come later.</p>
<p>As I was writing this to look up some references, I stumbled across this page which describes how you can <a href="http://dblume.livejournal.com/112262.html">use Yahoo Pipes to authenticate to Twitter</a> and achieve the same result. What took me a few hours to learn and do in PHP, took me seriously less than 10 minutes using <a href="http://pipes.yahoo.com">Yahoo Pipes</a>. Absolutely remarkable. I&#8217;ll be spending more time playing around with that, now!</p>
<p>So if you care, the PHP version looked something like this: </p>
<pre name="code" class="c-sharp">
&lt;?php

include("HttpClient.class.php");

$client = new HttpClient('twitter.com');
//$client->setDebug(true);
$client->setPersistReferers(false);
$client->setUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');
$reqHeaders["Accept-Charset"] = "ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$reqHeaders["Keep-Alive"] = "300";
$reqHeaders["Connection"] = "keep-alive";
$client->setRequestHeaders($reqHeaders);

if (!$client->get('/statuses/friends_timeline/16832429.rss')) {
    die('An error occurred: '.$client->getError());
}
$pageContents = $client->getContent();
$requestArray = array_values(explode(';', $client->getHeader('Set-Cookie')));
$cookieArray;

$split = explode('=', $requestArray[0]);
$cookieArray[$split[0]] = $split[1];

$client->setCookies($cookieArray);
$client->setAuthorization('username', 'password');
if (!$client->get('/statuses/friends_timeline.rss')) {
    die('An error occurred: '.$client->getError());
}
echo $pageContents = $client->getContent();

?&gt;
</pre>
<p>I used the <a href="http://scripts.incutio.com/httpclient/index.php">HttpClient class</a> to make the requests, which was the first result that came up in Google. Turns out this code hasn&#8217;t been updated since 2003 (incidentally that&#8217;s around the same time when I last did PHP), and there was a bug that the Authorization request header came AFTER the Cookie header, which (as it turns out) will be rejected by the webserver with a 401. That oddity alone took me an hour to figure out. *sigh*</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/436809753" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/twitter-friend-feed-authentication/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/twitter-friend-feed-authentication/</feedburner:origLink></item>
		<item>
		<title>Happy Birthday (The C-Sharp way)</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/429523946/</link>
		<comments>http://www.xerxesb.com/2008/happy-birthday-the-c-sharp-way/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 10:53:14 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/happy-birthday-the-c-sharp-way/</guid>
		<description><![CDATA[This evening I wanted to wish someone a happy birthday. In my infinate geekdom, I figured writing a tiny app to do it would be a nice way to waste 20 mins this evening. I started off writing in Notepad (because this really isn&#8217;t worth opening Visual Studio for), and compiled using CSC jsut to [...]]]></description>
			<content:encoded><![CDATA[<p>This evening I wanted to wish someone a happy birthday. In my infinate geekdom, I figured writing a tiny app to do it would be a nice way to waste 20 mins this evening. I started off writing in Notepad (because this really isn&#8217;t worth opening Visual Studio for), and compiled using CSC jsut to make sure it worked in the end (oops, forgot a few semi-colons&#8230;)</p>
<pre name="code" class="c-sharp">
using System;

public class BirthdayWisher
{
    public BirthdayWisher(string personName, DateTime birthDate)
    {
      this.PersonName = personName;
      this.BirthDate = birthDate;
    }
    public readonly DateTime BirthDate;
    public readonly string PersonName;

    const string BirthdayMessage =
        "\r\nDear {0}! Wishing you a happy birthday for {1}. Congratulations on being {2} years old!";

    public void WishBirthday()
    {
      Console.WriteLine(String.Format(BirthdayMessage, PersonName, BirthDate.ToString("MMMM dd"), DateTime.Today.Year - BirthDate.Year));
    }
}

public class NaomiBirthday
{
  [STAThread]
  public static void Main(string[] args)
  {
    BirthdayWisher naomi = new BirthdayWisher("Naomi", new DateTime(1983, 11, 21));
    naomi.WishBirthday();

    Console.WriteLine("\r\nPress any key to end.");
    Console.ReadKey();
  }
}
</pre>
<p>So i sent her an IM message with that code and the following instructions to run this:<br />
1. Copy the text above and save it to your desktop as a file called &#8220;birthday.cs&#8221;<br />
2. Click &#8220;Start &#8211;> Run&#8221; and paste the following into the box and then press enter. </p>
<blockquote><p>
%windir%\system32\cmd.exe /c &#8220;%WINDIR%\Microsoft.NET\Framework\v2.0.50727\csc /out:&#8221;%USERPROFILE%\birthday.exe&#8221; &#8220;%USERPROFILE%\desktop\birthday.cs&#8221; > null&#038;&#038;&#8221;%USERPROFILE%\birthday.exe&#8221;&#038;&#038; del &#8220;%USERPROFILE%\birthday.exe&#8221; &#8221;
</p></blockquote>
<p>Yes, i am a massive geek, but now I can re-use the same code for someone else&#8217;s birthday - yay for reuse! The harsest part about this whole thing wasn&#8217;t the code, but in the command-prompt syntax required to chain commands properly and get it to execute as i&#8217;d expect. Even after spending maybe 30 mins on it, I don&#8217;t think I got it right, and certianly it could be improved upon&#8230;.I guess that leaves room for Happy Birthday v2 <img src='http://www.xerxesb.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/429523946" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/happy-birthday-the-c-sharp-way/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/happy-birthday-the-c-sharp-way/</feedburner:origLink></item>
		<item>
		<title>Instant Twitter Bookmark</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/429523947/</link>
		<comments>http://www.xerxesb.com/2008/instant-twitter-bookmark/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 09:34:35 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/?p=190</guid>
		<description><![CDATA[Tonight&#8217;s been a busy night for silly coding  
This first post is about a short-cut i&#8217;ve created do an instant twitter. Just create a bookmark with the following code (tested only in Chrome), and when you want to tweet, just click the bookmark, type your twitter message and then click &#8220;upload&#8221;.
Saves having to open [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight&#8217;s been a busy night for silly coding <img src='http://www.xerxesb.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This first post is about a short-cut i&#8217;ve created do an instant twitter. Just create a bookmark with the following code (tested only in Chrome), and when you want to tweet, just click the bookmark, type your twitter message and then click &#8220;upload&#8221;.</p>
<p>Saves having to open the twitter window each time, etc etc&#8230;This code is based on something i found elsewhere on the net, but modified slightly so it doesnt need to use their custom server-side scripts - its all JS talking to Twitter.com</p>
<blockquote><p>javascript:void(window.open(&#8221;http://twitter.com/home?status=&#8221; + window.prompt(&#8221;Enter your twitter status&#8221;, &#8220;bored&#8230;&#8221;), &#8216;tweeting&#8217;, &#8217;scrollbars=no,width=550,height=250,top=175,left=75,status=yes,resizable=yes&#8217;))</p></blockquote>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/429523947" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/instant-twitter-bookmark/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/instant-twitter-bookmark/</feedburner:origLink></item>
		<item>
		<title>XBAP Is Cached When Running Without Debugger</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/424560355/</link>
		<comments>http://www.xerxesb.com/2008/xbap-is-cached-when-running-without-debugger/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 11:15:07 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/xbap-is-cached-when-running-without-debugger/</guid>
		<description><![CDATA[I&#8217;m digging deeper into WPF and learning more about XAML, web-XAML and XBAP. This evening i&#8217;ve stumbled across a nasty side-effect. When i&#8217;m creating an XBAP project in Visual Studio and run it without the debugger, the XBAP gets cached somewhere and any subsequent changes don&#8217;t show up - It keeps running the old XBAP [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m digging deeper into WPF and learning more about XAML, web-XAML and XBAP. This evening i&#8217;ve stumbled across a nasty side-effect. When i&#8217;m creating an XBAP project in Visual Studio and run it without the debugger, the XBAP gets cached somewhere and any subsequent changes don&#8217;t show up - It keeps running the old XBAP file.</p>
<p>I&#8217;ve done a little digging and found out that the <a href="http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/2e7cf680-cd32-4094-875c-691e4bb8af84/">XBAP is cached by Click-Once</a> when you run it outside the debugger. When executed, the application is deployed and run using Click-Once which (amongst other things) versions the assembly, checks for dependencies on the target machine and loads the application. If the application has been cached, then it will use the cached version instead. However you don&#8217;t have this problem when you&#8217;re running through the debugger because the process is launched by Visual Studio, and it will always run the latest assembly.  This bugs me because I more frequently run my development apps outside the debugger and only attach when I need to. I know when my code is generally going to work, and most errors can be spotted without the need for attaching a debugger to the process.</p>
<p>Anyway the temporary solution is to add a pre-build event which clears the Click-Once cache and upon execution, the correct version of my app will be spawned. The command for the event is:</p>
<blockquote><p>%windir%\system32\rundll32 %windir%\system32\dfshim.dll CleanOnlineAppCache</p></blockquote>
<p>You can also run the command <i><b>mage.exe -cc</b></i> which is a CLI tool to do the same thing. More research is required into Click-Once and all this. Please note that this is a preliminary post, and I haven&#8217;t done much research in depth into the problem - if you know of a better way, i&#8217;d like to hear it!</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/424560355" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/xbap-is-cached-when-running-without-debugger/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/xbap-is-cached-when-running-without-debugger/</feedburner:origLink></item>
		<item>
		<title>Australian’s To Have Internet Filtered - And We Don’t Have A Choice</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/423685974/</link>
		<comments>http://www.xerxesb.com/2008/australians-to-have-internet-filtered-and-we-dont-have-a-choice/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 12:48:16 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/australians-to-have-internet-filtered-and-we-dont-have-a-choice/</guid>
		<description><![CDATA[Well if you believe what you read on the wires, this would be probably the country&#8217;s greatest step towards a communist state after our somewhat draconian immigration policies.
I&#8217;m not a civil libertarian - in fact I get annoyed when the libertarians jump up and down about us losing our rights with this, that, and the [...]]]></description>
			<content:encoded><![CDATA[<p>Well if you believe what you <a href="http://www.infoworld.com/news/feeds/08/10/13/No-opt-out-of-filtered-Internet.html?source=gs">read on the wires</a>, this would be probably the country&#8217;s greatest step towards a communist state after our somewhat draconian immigration policies.</p>
<p>I&#8217;m not a civil libertarian - in fact I get annoyed when the libertarians jump up and down about us losing our rights with <a href="http://www.smh.com.au/news/national/official-national-card-due-by-2010/2006/04/26/1145861419456.html">this</a>, <a href="http://austlii.law.uts.edu.au/au/journals/MULR/2002/34.html">that</a>, and the <a href="http://www.abc.net.au/news/newsitems/200502/s1296993.htm">other</a>. Pick the battles worth fighting and fight until you win; that&#8217;s what I believe in. Otherwise, you run the risk of stretching yourself too thin.</p>
<p>However the news about a <a href="http://arstechnica.com/news.ars/post/20081016-net-filters-required-for-all-australians-no-opt-out.html">nation-wide internet filter</a> has got me concerned. It wasn&#8217;t that long ago we sent an entire media cohort over to China for the Olympics and learnt that despite their initial promises, <a href="http://thenextweb.org/2008/07/30/china-retains-internet-censorship-during-the-olympics/">China still filtered what internet sites people could access</a>. Did we (as a society) not learn from what we saw there? Where a dictator state has the infrastructure in place to police what should be a completely free medium? Clearly not. Seems like they&#8217;re pressing ahead with the bill and trying to lay down the foundation for such a system.</p>
<p>&#8230;.And then where to? It starts with kiddy filtering and illegal activities, but then where to? Should the government be trying to stop us from accessing this kind of material, or should it be up to the parents to educate and/or prevent their kids from getting access to this content. The government&#8217;s rationale for taking such a <i>progressive</i> move? <i>If we cant educate parents and children on how they can do it, we&#8217;ll just do it ourselves</i><sup>Citation needed</sup>.</p>
<p>On the flip-side, I wonder if the government would continue to be so &#8220;progressive&#8221; and prevent people from hurting themselves by outlawing smoking? Or is that too cynical of me?</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/423685974" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/australians-to-have-internet-filtered-and-we-dont-have-a-choice/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/australians-to-have-internet-filtered-and-we-dont-have-a-choice/</feedburner:origLink></item>
		<item>
		<title>Catching Out Those Who Cheat</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/415452732/</link>
		<comments>http://www.xerxesb.com/2008/catching-out-those-who-cheat/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 15:58:18 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/?p=176</guid>
		<description><![CDATA[It&#8217;s no secret that i&#8217;ve had a job on the side for a number of months now tutoring programming at the local university. I won&#8217;t get into the gritty details about the experience (at least not yet), but I want to briefly talk about my experience with catching out students who have cheated in their [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s no secret that i&#8217;ve had a job on the side for a number of months now tutoring programming at <a href="http://www.uts.edu.au" title="UTS">the local university</a>. I won&#8217;t get into the gritty details about the experience (at least not yet), but I want to briefly talk about my experience with catching out students who have cheated in their assignments.</p>
<p>The subject is Visual Basic .NET. I&#8217;m not a great VB.NET programmer, in fact i&#8217;m not a VB.NET programmer at all, but i&#8217;m able to stay one week ahead of the students and generally have an answer to the questions they ask. If I don&#8217;t have an answer, I at least offer the consolation of providing them a solution in C# :). The major assessment for this subject is to write a project (based on some given specs) in VB.NET and submit your working binaries + all code in a compressed ZIP file, and we mark it based on some marking scheme.</p>
<p>When the project works, I don&#8217;t really need to delve into too much depth when assessing their solution. The fact that it works indicates they&#8217;ve understood at least the majority of what was being asked of them and I&#8217;m satisfied that it works.</p>
<p>However - when it doesn&#8217;t work, my triggers get fired. <b>Why did they submit an assignment which doesn&#8217;t work?</b>. I attach a debugger, and start looking at code. Any programmer will understand what i&#8217;m about to say&#8230;Code, is a lot like a face. You see it once and then in future, although you might have a problem figuring out WHERE you originally saw it, you&#8217;ll recognise the same code.</p>
<p>Where am I going with all this? Well firstly - I found one assessment which didn&#8217;t work. Attached debugger, saw code, imprinted in brain. <b>3 DAYS LATER</b> I opened another person&#8217;s assignment, assignment didn&#8217;t work (<i>hmmm i&#8217;ve seen an error like that before&#8230;.</i>), attached a debugger and saw code (<i>hmmm&#8230;.I <b>know</b> i&#8217;ve seen that code before&#8230;.</i>). Hopefully now the title of this post makes more sense. So yes, I indeed did find two students who cheated. They used the same code, and made obvious attempts at trying to cover it up&#8230;.Not terribly clever attempts, mind you&#8230;Which then led me to wonder how many others have also done the same thing&#8230;And here&#8217;s where I talk about my QnD app to check for duplicates.</p>
<p>Some time back, I posted about some <a href="http://www.xerxesb.com/2008/list-of-technologiessoftware-i-would-like-to-try-out-from-ground-zero/">technologies I wanted to play around with</a>. This was a good opportunity to start with that and some features of framework 3.5 i&#8217;ve been meaning to try out.</p>
<p>The basic idea behind the utility is to search through a folder (and its subfolders) and find files which are identical (or similar). I want it to be modular so that I can write several different algorithms for determining similarity and swap them in/out easily. The first iteration I knocked together in a few hours and sure enough, I found another set of students who had copied their work. The first algorithm used is just a straight file-compare. Nothing fancy, just straight text comparisons. If two students have the same code byte for byte, they would need the excuse of the century to explain how it is not plagiarism.</p>
<p>Although I haven&#8217;t added Castle Windsor to it yet, i&#8217;ve at least written it in such a way that it will be easy for me to implement. Code is attached below in case you wish to go forth and conquer.</p>
<p><a href='http://www.xerxesb.com/wp-content/uploads/2008/10/duplicateschecker1.zip'>DuplicatesChecker Code</a></p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/415452732" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/catching-out-those-who-cheat/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/catching-out-those-who-cheat/</feedburner:origLink></item>
		<item>
		<title>Root Priviledge Escalation in Windows</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/405807098/</link>
		<comments>http://www.xerxesb.com/2008/root-priviledge-escalation-in-windows/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 00:57:03 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/?p=174</guid>
		<description><![CDATA[I have just uncovered a way to perform root priviledge escalation under Windows (tested using Server 2003 SP2)&#8230;so easy, with no addons or anything - all you need is a console.

Open up a command prompt (cmd.exe)
Type whoami. This should return your username - lowly peon user.
In the command prompt, enter the following: at &#60;current time [...]]]></description>
			<content:encoded><![CDATA[<p>I have just uncovered a way to perform root priviledge escalation under Windows (tested using Server 2003 SP2)&#8230;so easy, with no addons or anything - all you need is a console.</p>
<ol>
<li>Open up a command prompt (cmd.exe)</li>
<li>Type whoami. This should return your username - lowly peon user.</li>
<li>In the command prompt, enter the following: <i>at &lt;current time + 1 min&gt; /interactive &#8220;cmd.exe&#8221;</i><br />
The point of this step is to set up a scheduled task to execute in one minute of the current time. This scheduled task will launch a command prompt under the credentials of Local System.<br />
For example: <i>at 11:05 /interactive &#8220;cmd.exe&#8221;</i> will launch the cmd window at 11:05am.
</li>
<li>Type whoami into the new cmd window&#8230;..Voila!</li>
</ol>
<p>Once escalated, you can use taskmgr to kill explorer and then re-run it from the new command prompt with the escalated priviledge.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/405807098" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/root-priviledge-escalation-in-windows/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/root-priviledge-escalation-in-windows/</feedburner:origLink></item>
		<item>
		<title>Thread Safety and Locking</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/405392049/</link>
		<comments>http://www.xerxesb.com/2008/thread-safety-and-locking/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 11:13:58 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/thread-safety-and-locking/</guid>
		<description><![CDATA[I was recently reading a post about writing non-threadsafe code which talks about the main peril of multi-threading, and one way you can work around it.
I&#8217;ve long been a believer that doing anything multi-threaded is fraught with danger and you have to tread incredibly carefully when doing so. I say this with experience. What I [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently reading a post about <a href="http://timstall.dotnetdevelopersjournal.com/writing_nonthreadsafe_code.htm">writing non-threadsafe code</a> which talks about the main peril of multi-threading, and one way you can work around it.</p>
<p>I&#8217;ve long been a believer that doing anything multi-threaded is fraught with danger and you have to tread incredibly carefully when doing so. I say this with experience. What I learnt from reading that post wasn&#8217;t in the content, but in the comments, which talked about the <em>Interlocked</em> class for performing simple, thread-safe increments and decrements of operators.</p>
<p>So i decided to try it and see what the benefit really is, and i was surprised by by the results! I did my own profile against 3 scenarios: </p>
<ol>
<li>No thread safety (fast comparitively, though gave incorrect results)</li>
<li>Locking using &#8220;lock&#8221; keyword (correct, but very slow by magnitude of nearly 10x)</li>
<li>Locking using Interlocked class (correct, and fast - faster than no thread safety in some test runs)</li>
</ol>
<p>Clearly these results aren&#8217;t scientific, but are quite good to give relative indicators of performance. I&#8217;ve reproduced the code below.</p>
<pre name="code" class="c-sharp">

using System;
using System.Diagnostics;
using System.Threading;
using NUnit.Framework;

namespace ThreadingExample
{
	public interface IThreadTest
	{
		int Value { get; }
		void Debit();
		void Credit();
	}

	public class NonThreadSafe : IThreadTest
	{
		public int Value { get; private set; }

		public void Debit()
		{
			Value--;
		}

		public void Credit()
		{
			Value++;
		}
	}

	public class ThreadSafe : IThreadTest
	{
		public int Value { get; private set; }

		object lockSentinel = new object();

		public void Debit()
		{
			lock (lockSentinel)
			{
				Value--;
			}
		}

		public void Credit()
		{
			lock (lockSentinel)
			{
				Value++;
			}
		}
	}

	public class ThreadSafeUsingInterlocking : IThreadTest
	{
		private int value;
		public int Value
		{
			get { return value; }
			private set { this.value = value; }
		}

		public void Debit()
		{
			Interlocked.Decrement(ref value);
		}

		public void Credit()
		{
			Interlocked.Increment(ref value);
		}
	}

	[TestFixture]
	public class TestClass
	{
		[Test]
		public void TestNonThreadSafe()
		{
			NonThreadSafe nts = new NonThreadSafe();

			ExecuteThreadedTest(nts);

			Assert.AreEqual(0, nts.Value);
		}

		[Test]
		public void TestThreadSafe()
		{
			ThreadSafe ts = new ThreadSafe();

			ExecuteThreadedTest(ts);

			Assert.AreEqual(0, ts.Value);
		}

		[Test]
		public void TestThreadSafeUsingInterlocking()
		{
			ThreadSafeUsingInterlocking tsui = new ThreadSafeUsingInterlocking();

			ExecuteThreadedTest(tsui);

			Assert.AreEqual(0, tsui.Value);
		}

		private void ExecuteThreadedTest(IThreadTest threadTest)
		{
			int maxIterations = 99999999;
			DateTime start = DateTime.Now;
			Thread t1 = new Thread(() =>
			{
				for (int i = 0; i < maxIterations; i++)
				{
					threadTest.Credit();
				}
			}
			);
			t1.Name = "t1";

			Thread t2 = new Thread(() =>
			{
				for (int i = 0; i < maxIterations; i++)
				{
					threadTest.Debit();
				}
			}
			);
			t2.Name = "t2";

			t1.Start();
			t2.Start();

			t1.Join();
			t2.Join();

			DateTime finish = DateTime.Now;
			Debug.WriteLine(String.Format("Took {0}ms to complete", (finish - start).TotalMilliseconds));
		}
	}
}
</pre>
</pre>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/405392049" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/thread-safety-and-locking/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/thread-safety-and-locking/</feedburner:origLink></item>
		<item>
		<title>Passing Interfaces Instead of Concrete Classes</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/402376345/</link>
		<comments>http://www.xerxesb.com/2008/passing-interfaces-instead-of-concrete-classes/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 02:21:05 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/passing-interfaces-instead-of-concrete-classes/</guid>
		<description><![CDATA[I&#8217;ve just read a blog post about why you should pass interfaces instead of concrete classes as arguments to your methods.
I normally try to think about the most appropriate usages of interfaces for my own classes, but what this post alerted me to was the necessity to use interfaces when working with framework classes.
IE: IDictionary [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just read a blog post about why you should <a href="http://brian.genisio.org/2008/09/why-you-really-need-to-think-about-your.html">pass interfaces instead of concrete classes</a> as arguments to your methods.</p>
<p>I normally try to think about the most appropriate usages of interfaces for my own classes, but what this post alerted me to was the necessity to use interfaces when working with framework classes.<br />
IE: IDictionary<t , T> instead of Dictionary</t><t , T></p>
<p>The reasons the author discusses i believe are quite valid&#8230;.It&#8217;s something i&#8217;m going to more actively do when writing code&#8230;</t></p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/402376345" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/passing-interfaces-instead-of-concrete-classes/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/passing-interfaces-instead-of-concrete-classes/</feedburner:origLink></item>
		<item>
		<title>Using $exception to inspect thrown exceptions</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/396737647/</link>
		<comments>http://www.xerxesb.com/2008/using-exception-to-inspect-thrown-exceptions/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 01:13:13 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/using-exception-to-inspect-thrown-exceptions/</guid>
		<description><![CDATA[You can use the reserved keyword $exception in the object inspector to get details of any caught exception.
I&#8217;d forgotten about this one. Found it when reading about other tricks for tracking down exceptions
]]></description>
			<content:encoded><![CDATA[<p>You can use the reserved keyword <em>$exception</em> in the object inspector to get details of any caught exception.</p>
<p>I&#8217;d forgotten about this one. Found it when reading about other <a href="http://www.atalasoft.com/cs/blogs/stevehawley/archive/2008/09/11/some-managed-unmanaged-exception-tricks.aspx">tricks for tracking down exceptions</a></p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/396737647" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/using-exception-to-inspect-thrown-exceptions/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/using-exception-to-inspect-thrown-exceptions/</feedburner:origLink></item>
		<item>
		<title>List of Technologies/Software I would like to try out from ground zero</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/393689443/</link>
		<comments>http://www.xerxesb.com/2008/list-of-technologiessoftware-i-would-like-to-try-out-from-ground-zero/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 00:23:30 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/list-of-technologiessoftware-i-would-like-to-try-out-from-ground-zero/</guid>
		<description><![CDATA[Reading an article about unit testing got me thinking about some of the tools i&#8217;d love to sink my teeth into.
I&#8217;m documenting them here in case i forget.
Backend
NHibernate (ORM)
SQLLite (DB)
Framework
Castle Windsor/Ninject (DI)
Lof4Net (Logging)
LINQ (Language Querying)
Tree Surgeon (Environment setup)
Testing
NUNit (Unit testing)
Rhino.Mocks/Moq (Mocking)
WatIn (UI testing)
Build Integration
Nant (Build tool)
CC.NET (CI server)
UI
WPF (GUI)
ASP.NET MVC /Monorail (Web engine)
PRISM (WPF App [...]]]></description>
			<content:encoded><![CDATA[<p>Reading an article about unit testing got me thinking about some of the tools i&#8217;d love to sink my teeth into.</p>
<p>I&#8217;m documenting them here in case i forget.</p>
<p><strong>Backend</strong><br />
NHibernate (ORM)<br />
SQLLite (DB)</p>
<p><strong>Framework</strong><br />
Castle Windsor/Ninject (DI)<br />
Lof4Net (Logging)<br />
LINQ (Language Querying)<br />
Tree Surgeon (Environment setup)</p>
<p><strong>Testing</strong><br />
NUNit (Unit testing)<br />
Rhino.Mocks/Moq (Mocking)<br />
WatIn (UI testing)</p>
<p><strong>Build Integration</strong><br />
Nant (Build tool)<br />
CC.NET (CI server)</p>
<p><strong>UI</strong><br />
WPF (GUI)<br />
ASP.NET MVC /Monorail (Web engine)<br />
PRISM (WPF App framework)<br />
NHaml (MVC View Engine)</p>
<p>a lot of these i have or currently do use&#8230;.some of them i have only ever played around with and a few i&#8217;ve never even touched.</p>
<p>At least me putting it down on paper (or bits, in this case) is a reminder of what i&#8217;m keen to try, and will get to it soon.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/393689443" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/list-of-technologiessoftware-i-would-like-to-try-out-from-ground-zero/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/list-of-technologiessoftware-i-would-like-to-try-out-from-ground-zero/</feedburner:origLink></item>
		<item>
		<title>Recently Closed Tabs in Chrome</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/392709380/</link>
		<comments>http://www.xerxesb.com/2008/recently-closed-tabs-in-chrome/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 00:16:59 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/recently-closed-tabs-in-chrome/</guid>
		<description><![CDATA[A friend told me this one - I missed the feature of &#8220;recently closed tabs&#8221; in FireFox - it displays a small menu which lists all tabs closed in chronological order.
Well Chrome doesnt have exactly that, but CTRL-SHIFT-T will re-open the last closed tab. If you repeat the keystroke in sucession, it will re-open the [...]]]></description>
			<content:encoded><![CDATA[<p>A friend told me this one - I missed the feature of &#8220;recently closed tabs&#8221; in FireFox - it displays a small menu which lists all tabs closed in chronological order.</p>
<p>Well Chrome doesnt have exactly that, but CTRL-SHIFT-T will re-open the last closed tab. If you repeat the keystroke in sucession, it will re-open the one before that, ad nausem.</p>
<p>its perfect for the trigger happy like myself.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/392709380" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/recently-closed-tabs-in-chrome/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/recently-closed-tabs-in-chrome/</feedburner:origLink></item>
		<item>
		<title>My Syndication URLs Have Changed!</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/389013877/</link>
		<comments>http://www.xerxesb.com/2008/my-syndication-urls-have-changed/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 21:09:06 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/my-syndication-urls-have-changed/</guid>
		<description><![CDATA[If you are reading this through an RSS reader, take note - I have changed the URLs for my feeds, and they are not accessible via this website, but through the following URL:
http://feeds.feedburner.com/TheTomesOfExperience
So just to re-iterate, please update the feed URLs to the new address:
http://feeds.feedburner.com/TheTomesOfExperience
]]></description>
			<content:encoded><![CDATA[<p>If you are reading this through an RSS reader, take note - I have changed the URLs for my feeds, and they are not accessible via this website, but through the following URL:<br />
http://feeds.feedburner.com/TheTomesOfExperience</p>
<p>So just to re-iterate, please update the feed URLs to the new address:</p>
<p>http://feeds.feedburner.com/TheTomesOfExperience</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/389013877" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/my-syndication-urls-have-changed/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/my-syndication-urls-have-changed/</feedburner:origLink></item>
		<item>
		<title>MissingMethodException: ?</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/388520680/</link>
		<comments>http://www.xerxesb.com/2008/missingmethodexception/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 04:35:08 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/missingmethodexception/</guid>
		<description><![CDATA[Sometimes though when you&#8217;re changing interfaces across several projects, you can end up in a stink because a method reference is removed or a signature is changed, and you end up with the following error:
When i build in Visual Studio, in order to save time, I don&#8217;t always do a - (Rebuild Solution). instead, i [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes though when you&#8217;re changing interfaces across several projects, you can end up in a stink because a method reference is removed or a signature is changed, and you end up with the following error:</p>
<p>When i build in Visual Studio, in order to save time, I don&#8217;t always do a <ctrl><shift>-<b> (Rebuild Solution). instead, i do a <alt>-<b>,<u> in order to rebuild just the project, and its dependencies (faster build).</p>
<p>I&#8217;ve had this error come up a few times, and it&#8217;s easy to solve - in case i ever forget here it is:.</p>
<blockquote><p>Server Error in &#8216;/&#8217; Application.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>?<br />
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. </p>
<p>Exception Details: System.MissingMethodException: ?
</p></blockquote>
<p>When you get this problem, just re-build the entire project.</u></b></alt></b></shift></ctrl></p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/388520680" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/missingmethodexception/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/missingmethodexception/</feedburner:origLink></item>
		<item>
		<title>The Hollywood Principle</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/388520681/</link>
		<comments>http://www.xerxesb.com/2008/the-hollywood-principle/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 23:29:16 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/the-hollywood-principle/</guid>
		<description><![CDATA[The Hollywood principle is a software design methodology that takes its name from the cliché response given to amateurs auditioning in Hollywood: &#8220;Don&#8217;t call us, we&#8217;ll call you&#8221;. It is a useful paradigm that assists in the development of code with high cohesion and low coupling that is easier to debug, maintain and test.
http://en.wikipedia.org/wiki/Hollywood_Principle
]]></description>
			<content:encoded><![CDATA[<blockquote><p>The Hollywood principle is a software design methodology that takes its name from the cliché response given to amateurs auditioning in Hollywood: &#8220;Don&#8217;t call us, we&#8217;ll call you&#8221;. It is a useful paradigm that assists in the development of code with high cohesion and low coupling that is easier to debug, maintain and test.</p></blockquote>
<p>http://en.wikipedia.org/wiki/Hollywood_Principle</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/388520681" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/the-hollywood-principle/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/the-hollywood-principle/</feedburner:origLink></item>
		<item>
		<title>Mass Reverse-DNS Lookup</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/388520682/</link>
		<comments>http://www.xerxesb.com/2008/mass-reverse-dns-lookup/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 04:06:47 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/mass-reverse-dns-lookup/</guid>
		<description><![CDATA[I needed to quickly browse through some web-server logs and pull out the hostnames which were accessing the web-server (to see where people were originating from).
The following single linux command will pull the IP address out of the apache log (for a particular date) and do the reverse DNS lookup for me:
cat access.log &#124; grep [...]]]></description>
			<content:encoded><![CDATA[<p>I needed to quickly browse through some web-server logs and pull out the hostnames which were accessing the web-server (to see where people were originating from).</p>
<p>The following single linux command will pull the IP address out of the apache log (for a particular date) and do the reverse DNS lookup for me:</p>
<blockquote><p>cat access.log | grep &#8216;1/Sep&#8217; | awk &#8216;{print $1}&#8217; | sort | uniq | xargs -n1 host | grep -v &#8216;not found&#8217;</p></blockquote>
<p>just in case i ever need it again&#8230;.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/388520682" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/mass-reverse-dns-lookup/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/mass-reverse-dns-lookup/</feedburner:origLink></item>
		<item>
		<title>FireFox hit back at Chrome</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/388520683/</link>
		<comments>http://www.xerxesb.com/2008/firefox-hit-back-at-chrome/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 03:01:40 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/firefox-hit-back-at-chrome/</guid>
		<description><![CDATA[In a stunning display of dick-measuring, FireFox has countered Google&#8217;s Chrome browser by claiming New Firefox JavaScript engine is faster than Chrome&#8217;s V8
Give me a break. If this new JS engine in FF was so good, why has noone heard of it until AFTER Chrome was launched? Coincidence? I think not.
And more importantly, even if [...]]]></description>
			<content:encoded><![CDATA[<p>In a stunning display of dick-measuring, FireFox has countered Google&#8217;s Chrome browser by claiming <em><a href="http://arstechnica.com/journals/linux.ars/2008/09/03/new-firefox-javascript-engine-is-faster-than-chromes-v8">New Firefox JavaScript engine is faster than Chrome&#8217;s V8</a></em></p>
<p>Give me a break. If this new JS engine in FF was so good, why has noone heard of it until AFTER Chrome was launched? Coincidence? I think not.</p>
<p>And more importantly, even if the new JS engine in FF has been around for some time, the fact is that Chrome beat them to the market. Stop talking shit and <a href="https://wiki.mozilla.org/Firefox3/Schedule">show me the money</a>.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/388520683" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/firefox-hit-back-at-chrome/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/firefox-hit-back-at-chrome/</feedburner:origLink></item>
		<item>
		<title>Chrome Saves The Day: Unsecured HTTP Content</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/388520684/</link>
		<comments>http://www.xerxesb.com/2008/chrome-saves-the-day-unsecured-http-content/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 01:36:37 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/chrome-saves-the-day-unsecured-http-content/</guid>
		<description><![CDATA[This morning at work we had a conundrum - one of our client&#8217;s websites was displaying the infamous &#8220;This page contains unsecured content&#8221; message when you navigate to the secured (HTTPS) version of their website.
In order to work out which parts of the page were making references to unsecured (HTTP) content, I could either start [...]]]></description>
			<content:encoded><![CDATA[<p>This morning at work we had a conundrum - one of our client&#8217;s websites was displaying the infamous &#8220;This page contains unsecured content&#8221; message when you navigate to the secured (HTTPS) version of their website.</p>
<p>In order to work out which parts of the page were making references to unsecured (HTTP) content, I could either start by trial and error and target code I believe might be causing the problem. Possibly time-consuming and in the end no guarantee I will work it out.</p>
<p>Enter <a href="http://www.google.com/chrome/">Google Chrome</a>. This new little beauty has a built in debugging console, which allows me to inspect JS elements on the page, or view any errors which are thrown. and coincidentally, it perfectly listed all the URLs which were being referenced via the unsecured scheme. It&#8217;s unreal. Just saved me 10-20 mins of unnecessary work.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/388520684" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/chrome-saves-the-day-unsecured-http-content/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/chrome-saves-the-day-unsecured-http-content/</feedburner:origLink></item>
		<item>
		<title>Google Chrome: My thoughts</title>
		<link>http://feeds.feedburner.com/~r/TheTomesOfExperience/~3/388520685/</link>
		<comments>http://www.xerxesb.com/2008/google-chrome-my-thoughts/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 23:25:11 +0000</pubDate>
		<dc:creator>Xerxes</dc:creator>
		
		<category><![CDATA[IT &#038; Software]]></category>

		<guid isPermaLink="false">http://www.xerxesb.com/2008/google-chrome-my-thoughts/</guid>
		<description><![CDATA[Well first thing i have to state is that unlike FireFox, the initial download is actually a 500KB downloader which actually gets the full Chrome package off the net. Just how big is the full package? Well Chrome drops itself into the %Program Files\User\Local Settings\Application Data\Google\Chrome\ directory, and the installer there is about 22MB, so [...]]]></description>
			<content:encoded><![CDATA[<p>Well first thing i have to state is that unlike FireFox, the initial download is actually a 500KB downloader which actually gets the full Chrome package off the net. Just how big is the full package? Well Chrome drops itself into the %Program Files\User\Local Settings\Application Data\Google\Chrome\ directory, and the installer there is about 22MB, so not terribly big.</p>
<p>Its also nice to see that after installing, Chrome will import my bookmarks (not that I use any). You need to close FF in order for it to access the bookmark data file (presumably) but that&#8217;s really a negligible issue.</p>
<p>i&#8217;m somewhat surprised that Google have seemingly ignored the use of standard windows controls for the application. It doesn&#8217;t adhere to my Windows theme, there&#8217;s no menu system at all. It really is the minimalist app, but they must have gone to a lot of effort to make it look and work like that.</p>
<p><strong>[UPDATE 1]</strong><br />
Chrome allows you to customise which search engine is your default and interestingly enough, it&#8217;s actually modified the list of available search engines based on my locality and the services provided. So I can choose Yahoo7, Sensis or ninemsn as my default search engine&#8230;</p>
<p><strong>[UPDATE 2]</strong><br />
Scarily enough, Chrome has a &#8220;Passwords&#8221; section in its options dialog which allows you to see all usernames and passwords that it has kept track of during your browsing session&#8230;..Or as in my case, the passwords it has imported from FireFox. I never realised just how much data my browser was keeping for me&#8230;</p>
<p><strong>[UPDATE 3]</strong><br />
The address bar text is color coded!! Simple idea, pretty effective, too. The domain portion of the URL is in full-black colour, and all other parts of the URL are in a lighter, grey colour in order to emphasise the fact that you&#8217;re still viewing a primary site, and not interested in the subdirectories below the top. And when you&#8217;re viewing a site which is encrypted with SSL, the &#8220;https&#8221; scheme is green in colour. </p>
<p><strong>[UPDATE 4]</strong><br />
Boy it&#8217;s fast. very fast. And the popup-blocker is non-obtrusive!</p>
<p><strong>[UPDATE 5]</strong><br />
Lol this is great. It even has a built-in task manager for micro managing any tabs which get out of control! For each tab, it clearly tabulates the memory usage, the CPU usage and live bandwidth that tab is consuming. At the bottom of the tab, is a link &#8220;Stats for nerds&#8221; which takes you to the URL &#8220;about:memory&#8221;, and gives you a complete breakdown of all memory usage (physical and virtual) for all internal threads.</p>
<p><strong>[UPDATE 6]</strong><br />
This is bizzare&#8230;.The DNS resolver built into Chrome seems to ignore any overrides I specify in my HOSTS file&#8230;.I have changed the resolving IP for Site A in the hosts file, and despite many &lt;CTRL&gt;-F5 refreshes, Chrome is still adamant on using the old IP. There is an option called <em>Use DNS pre-fetching to improve page load performance</em> in the Options dialog. Only after turning this option OFF and restarting Chrome did it faithfully adhere to my HOST entry override. This might catch other people out there.</p>
<p><strong>[UPDATE 7]</strong><br />
Most applications have external dialogs for configuration, or options, or downloaded files etc&#8230;I&#8217;ve noticed that Chrome does away with a lot of these. The Options dialog is probably the only desktop-level window apart from the main browser window itself. Everything else is represented as an HTML page in the browser itself. (sorry i correct myself - the task manager is another top-level dialog) </p>
<p><strong>[UPDATE 8]</strong><br />
Very cool - I can drag-drop tabs from FF into Chrome. This is a BIIIIG boon considering i&#8217;m a tab-slut and have no less than 10-15 open at any one time. </p>
<p><strong>[UPDATE 9]</strong><br />
Chrome attaches a little resize &#8220;grip&#8221; to the bottom left of any HTML &lt;textarea&gt; control. This allows you to resize the textarea beyond what the original designers intended - perfect for those designers who still have websites running in &#8220;1990&#8217;s&#8221; mode (ie: 800&#215;600)</p>
<p><strong>[UPDATE 10]</strong><br />
Cute. When you forcibly kill a process using Chome&#8217;s built-in task manager, the offending page changes to the following:<br />
<img src='http://www.xerxesb.com/wp-content/uploads/2008/09/chrome_error.png' alt='Chrome Error Page' /><br />
&#8230;I guess the obviosu problem here is that there is no Reload button&#8230;..but i digress&#8230;.. <img src='http://www.xerxesb.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<strong>[UPDATE 11]</strong><br />
Well this just bugs me. The address-bar search feature seems to take precendent over the fact that I haven&#8217;t entered a scheme in my URL, and therefore won&#8217;t resolve my website unless I specifically put &#8220;http&#8221;.<br />
For example: If i create a host header entry called <em>mywebsite.localhost</em> and navigate to &#8220;mywebsite.localhost&#8221; in Chrome (nb: no HTTP://), it takes me to a Google search with that web-address as the search seed. IMO what it *SHOULD* have done was to try and resolve <em>mywebsite.localhost</em> FIRST, and IFF it couldn&#8217;t resolve, should it fall-back to the keyword search.<br />
After you enter the scheme for the first time (and it resolves), Chrome learns that <em>mywebsite.localhost</em> is actually a site, and in future will resolve the website without requiring the scheme to be input. </p>
<p>This bugs me because i constantly enter URLs without entering a scheme. Moreover, as a web-developer i&#8217;m creating lots of host-header entries in order to run multiple websites too, so without entering HTTP the first time around for each URL, i&#8217;ll end up going to search when I didn&#8217;t actually need to. Very simple fix, guys - it would be nice if you could do it!</p>
<p><strong>[UPDATE 12]</strong><br />
My enthusiasm for Chrome and what it represents has been recognised by my fan base in New Zealand. In an effort to try and achieve *some* work today, This will be my last update to this entry&#8230;<br />
Application shortcuts are very cool. You can take any tab in Chrome, click the Options icon and select <em>Create Application Shortcuts&#8230;</em>This creates a launcher shortcut for Chrome to open in a very specific window, designed to make it looks and feel like a desktop-application.<br />
Why does this excite me? Because I authored a project to do exactly that about 5 years ago, and it was incorporated and sold into a suite of products at the time. Unlike Chrome, my software was built using Internet Explorer&#8217;s rendering engine, but the &#8220;browser-less&#8221; concept was the same - to make a web-application feel like a desktop app&#8230;..And to the best of my knowledge, the project <a href="http://www.dataforce.com.au/casestudies_04.html">is</a> <a href="http://http://www.dataforce.com.au/casestudies_05.html">still</a> <a href="http://www.dataforce.com.au/casestudies_02.html">in use</a>.</p>
<img src="http://feeds.feedburner.com/~r/TheTomesOfExperience/~4/388520685" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.xerxesb.com/2008/google-chrome-my-thoughts/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.xerxesb.com/2008/google-chrome-my-thoughts/</feedburner:origLink></item>
	</channel>
</rss>
