<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>.ForEach(delegate (Blog blog){</title>
    <description>at my core, I'm a scientist/engineer.  Translation : A big nerd, like you have no idea</description>
    <link>http://blog.rileytech.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://blog.rileytech.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://blog.rileytech.net/syndication.axd</blogChannel:blink>
    <dc:creator>JesseRiley</dc:creator>
    <dc:title>.ForEach(delegate (Blog blog){</dc:title>
    <geo:lat>40.146340</geo:lat>
    <geo:long>-82.944980</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/rileytech" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>TDD Chronicle</title>
      <description>&lt;p&gt;
I just started a new feature and I&amp;#39;ve seen a lot of questions surrounding &amp;quot;how do I _START_ with tdd?&amp;quot;&amp;nbsp;because, well, sometimes its not straight forward.&amp;nbsp; So this will be a hot and loose blog post full of screw ups and how it all plays out.&amp;nbsp; No really, if it don&amp;#39;t work the first time ...theeennn it doesn&amp;#39;t work.&amp;nbsp; Anyway, here we go. 
&lt;/p&gt;
&lt;p&gt;
My first thought was break out notepad, write out what it should do and how I think it should work.&amp;nbsp; Here&amp;#39;s what I wrote ... 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Scheduling Service&lt;br /&gt;
	&lt;br /&gt;
	When given a schedule and a room&lt;br /&gt;
	&amp;nbsp;adding a list of events to that room should occur&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
and I stopped.&amp;nbsp; There&amp;#39;s more than one type of schedule -- say the user does a one off, and then does a list of 50 (something that recurs) ... so already I need to go back and change stuff as such and had to stop myself again 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Event Scheduling Service&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given a single event and a room&lt;br /&gt;
	&amp;nbsp;that event should save without a recurId&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given an event range and a room&lt;br /&gt;
	&amp;nbsp;that event should save&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Should save how?&amp;nbsp; I have to have days on the list somewhere, so the test is now driving my design, which I&amp;#39;m ok with.&amp;nbsp; Back tracking a little bit ... I need to include some design details in this and as you may have guessed, I stopped again.&amp;nbsp; How am I scheduling this?&amp;nbsp; An event takes place on a certain day so you have a start time and end time but the event in and of itself doesn&amp;#39;t span days (not a requirement) so I need&amp;nbsp;a separate pieces of this.&amp;nbsp; Back to notepad. 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Event Scheduling Service&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;design : Two calendars for range of occurrence&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ListBoxes of Days (mon-sun)&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Two time boxes for start/stop times&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Single day event/recur button (different views?)&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given a single event and a room&lt;br /&gt;
	&amp;nbsp;that event should save without a recurId&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given an calendar range, an event, selected days and a room&lt;br /&gt;
	&amp;nbsp;that event should save with a recurId and&lt;br /&gt;
	&amp;nbsp;that event should&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
notice the last line ... because it should spawn a whole ton of events ... oh I got it here we go 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Event Scheduling Service&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;design : Two calendars for range of occurrence&lt;br /&gt;
	&amp;nbsp; ListBoxes of Days (mon-sun)&lt;br /&gt;
	&amp;nbsp; Two time boxes for start/stop times&lt;br /&gt;
	&amp;nbsp; Single day event/recur button (different views?)&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given a single event and a room&lt;br /&gt;
	&amp;nbsp;that event should save without a recurId&lt;br /&gt;
	&amp;nbsp;and that should result in just one event for that room&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given an calendar range, an event, selected days and a room&lt;br /&gt;
	&amp;nbsp;that event should save with a recurId and&lt;br /&gt;
	&amp;nbsp;that first event&amp;#39;s ID should be the recurId and&lt;br /&gt;
	&amp;nbsp;that should result in multiple events saved for that room&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Alright, now I have some testing criteria.&amp;nbsp; Using some copy/paste kung fu I get my basic class for testing setup and start writing my first test. 
&lt;/p&gt;
&lt;font size="2"&gt;
&lt;p&gt;
&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; AndWhenSavingASingleEventIShouldNotHaveARecurIDAndOnlyAddOne()&lt;br /&gt;
{&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;
Completely ignoring the class name, um, wow, that&amp;#39;s one hell of a method name, even for me.&amp;nbsp; WAY too much is going to happen in that -- the &amp;quot;AND&amp;quot;&amp;nbsp;is the big hint, so split it out!&amp;nbsp; While doing so, I ran into yet another problem ... what&amp;#39;s a valid event?!&amp;nbsp; What&amp;#39;s required?&amp;nbsp; Back to the text file... 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Event Scheduling Service&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;design : Two calendars for range of occurrence&lt;br /&gt;
	&amp;nbsp; ListBoxes of Days (mon-sun)&lt;br /&gt;
	&amp;nbsp; Two time boxes for start/stop times&lt;br /&gt;
	&amp;nbsp; Single day event/recur button (different views?)&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;a valid single event&lt;br /&gt;
	&amp;nbsp;should have a date&lt;br /&gt;
	&amp;nbsp;should have a start time&lt;br /&gt;
	&amp;nbsp;should have an end time&lt;br /&gt;
	&amp;nbsp;should have a room&lt;br /&gt;
	&amp;nbsp;should have a title&lt;br /&gt;
	&lt;/em&gt;&lt;em&gt;&amp;nbsp;should be in the future (duh!)&lt;br /&gt;
	&amp;nbsp;could have a org id&lt;br /&gt;
	&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;When given a valid single event and a room&lt;br /&gt;
	&amp;nbsp;that event should save without a recurId&lt;br /&gt;
	&amp;nbsp;and that should result in just one event for that room&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;When given an calendar range, a valid event, selected days and a room&lt;br /&gt;
	&amp;nbsp;that event should save with a recurId and&lt;br /&gt;
	&amp;nbsp;that first event&amp;#39;s ID should be the recurId and&lt;br /&gt;
	&amp;nbsp;that should result in multiple events saved for that room&lt;br /&gt;
	&amp;nbsp;&lt;br /&gt;
	When given an invalid single event&lt;br /&gt;
	&amp;nbsp;that event should not save&lt;br /&gt;
	&amp;nbsp;and return an error(? does this break the repository knowledge boundary?)&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;when given an invalid multiple events&lt;br /&gt;
	&amp;nbsp;those events should not save&lt;br /&gt;
	&amp;nbsp;and return an error(? again, does this break the boundary rule?)&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Woah, now we got some stuff going on here.&amp;nbsp; So now I have a new test for just the entity and make sure its valid before event attempting to save and raises an interesting question - who should know that the entity is valid?&amp;nbsp; Because of my background, I go with &amp;quot;who needs to know?&amp;quot; -- the entity does, it should know if its correct or not.&amp;nbsp; Also notice where I put that data -- above what it should do (the service) so its &lt;em&gt;&lt;strong&gt;separate&lt;/strong&gt;&lt;/em&gt;.&amp;nbsp; So I&amp;#39;ll need to add in &amp;quot;IsValid()&amp;quot; off the CalendarEvent object with a boolean return value... no sweat.&amp;nbsp; I go stub out a IsValid as such... 
&lt;/p&gt;
&lt;font size="2"&gt;
&lt;p&gt;
&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;virtual&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; IsValid()&lt;br /&gt;
{&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;&lt;font size="2" color="#2b91af"&gt;NotImplementedException&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;();&lt;br /&gt;
}&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;
And I create a test as such to test the first one on my list ...and ran face first into a problem.&amp;nbsp; The current database model doesn&amp;#39;t support this.&amp;nbsp; So now I have a database issue on top of everything else.&amp;nbsp; Now I&amp;#39;m annoyed.&amp;nbsp; I have to go BACK into the database, create a new column, etc etc etc.&amp;nbsp; Even worse, when I go into the database, I see everything is nullable.&amp;nbsp; Fail.&amp;nbsp; Put that on the clean-up list.&amp;nbsp; Anyway, I add a column event_date, and move forward. 
&lt;/p&gt;
&lt;p&gt;
Still annoyed by my most recent discovery, I write out my test as such. 
&lt;/p&gt;
&lt;font size="2"&gt;
&lt;p&gt;
[&lt;font size="2" color="#2b91af"&gt;&lt;font size="2" color="#2b91af"&gt;Test&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;]&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; ACalendarEventShouldHaveADate()&lt;br /&gt;
{&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; eventCal = BuildCalEvent();&lt;br /&gt;
	eventCal.IsValid().ShouldBeTrue();&lt;/font&gt; 
	&lt;/p&gt;
	&lt;font size="2"&gt;eventCal.event_date = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;null&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
	eventCal.IsValid().ShouldBeFalse();&lt;/font&gt;&lt;font size="2"&gt; 
	&lt;p&gt;
	} 
	&lt;/p&gt;
	&lt;/font&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Assuming (which I don&amp;#39;t) that buildcalevent returns a valid object, the first &amp;quot;shouldbetrue&amp;quot; is a sanity test -- otherwise whats the worth in having a test pass when you have invalid data to begin with?&amp;nbsp; Anyway, got the test, it fails, as it should -- not implemented.&amp;nbsp; Go implement it! 
&lt;/p&gt;
&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;
&lt;p&gt;
public&lt;font size="2" color="#000000"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;virtual&lt;/font&gt;&lt;/font&gt;&lt;font size="2" color="#000000"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; IsValid()&lt;br /&gt;
&lt;/font&gt;{&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; (event_date.HasValue);&lt;br /&gt;
}&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;
&lt;p&gt;
And run out test... and I failed.&amp;nbsp; I screwed something up. 
&lt;/p&gt;
&lt;font size="1"&gt;
&lt;p&gt;
TestCase &amp;#39;&amp;lt;blahblah&amp;gt;.WhenWorkingWithCalendarEvents.ACalendarEventShouldHaveADate&amp;#39;&lt;br /&gt;
failed: &lt;br /&gt;
Expected: True&lt;br /&gt;
But was: False 
&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;
Debugger time and HA! It&amp;#39;s the sanity check -- I didn&amp;#39;t add the data in for my new column!&amp;nbsp; Ok fine, go fix that and ... yay! Test passes!&amp;nbsp; So now I&amp;#39;ll write out the rest of my tests and spare you the boredom... (DateTime.AddMinutes(10)) ... Ok, no surprise, I ended up with about 7 tests.&amp;nbsp; I nixed the &amp;quot;could have&amp;quot; because its not part of it being valid and I split out the sanity check to its own test.&amp;nbsp; Now to write the validation checks one at a time. 
&lt;/p&gt;
&lt;p&gt;
Well, I got to my last test and ran into -- you guessed it, another problem.&amp;nbsp; I smelled an edge case with the &amp;quot;should be in the future&amp;quot; because technically, today isn&amp;#39;t in the future ... its now.&amp;nbsp; Sure enough when I added an event_date as today, it failed.&amp;nbsp; A quick &amp;lt; to &amp;lt;= and all my tests now pass. The result for the IsValid looks something like this 
&lt;/p&gt;
&lt;font size="2"&gt;
&lt;p&gt;
&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;virtual&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; IsValid()&lt;br /&gt;
{&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; (!event_date.HasValue)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;false&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; (!event_start.HasValue)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;false&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;....&lt;br /&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;else&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;true&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
}&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;
and my tests look something like this ... 
&lt;/p&gt;
&lt;font size="2"&gt;[&lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;&lt;font size="2" color="#2b91af"&gt;Test&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;]&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; BuildOfEnityShouldBeSanitary()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BuildCalEvent().IsValid().ShouldBeTrue();&lt;br /&gt;
}&lt;/font&gt;&lt;font size="2"&gt; [&lt;font size="2" color="#2b91af"&gt;&lt;font size="2" color="#2b91af"&gt;Test&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;]&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; ACalendarEventShouldHaveADate()&lt;br /&gt;
{&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; eventCal = BuildCalEvent();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eventCal.event_date = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;font size="2" color="#0000ff"&gt;null&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eventCal.IsValid().ShouldBeFalse();&lt;br /&gt;
} &lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;
For now, I&amp;#39;m going to stop here so I can check in what I have -- to be continued! 
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/WveXPq8w8XE/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/10/06/TDD-Chronicle.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=a78664e6-57f3-49cc-9f16-c1db5036a9e1</guid>
      <pubDate>Tue, 06 Oct 2009 14:14:00 -0500</pubDate>
      <category>Methods</category>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=a78664e6-57f3-49cc-9f16-c1db5036a9e1</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=a78664e6-57f3-49cc-9f16-c1db5036a9e1</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/10/06/TDD-Chronicle.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=a78664e6-57f3-49cc-9f16-c1db5036a9e1</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=a78664e6-57f3-49cc-9f16-c1db5036a9e1</feedburner:origLink></item>
    <item>
      <title>All your base are belong to notepad</title>
      <description>&lt;p&gt;
I was creating a virtual this evening in prep for moving boxes around on my network and I did something rather magical.&amp;nbsp; Long story cut REALLY short, I associated notepad with .exe file extensions ... which seems like no big deal, UNTIL you try to undo it.&amp;nbsp; Now if you let this simmer for a minute ... you have no regedit, no explorer, no command prompt, NOTHING with a .exe will run in anything except notepad.&amp;nbsp; They&amp;#39;re done,&amp;nbsp;gone, bye bye&amp;nbsp;... ok not GONE but ... just WOW.&amp;nbsp; What&amp;#39;s worse, I&amp;#39;m &lt;a href="http://www.google.com/search?hl=en&amp;amp;source=hp&amp;amp;q=associate+.exe+notepad&amp;amp;aq=f&amp;amp;oq=&amp;amp;aqi=" target="_blank"&gt;not the only person who has done this&lt;/a&gt;.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
As for the fix, make yourself a registry key with the following data (in yep, NOTEPAD!), save it as whatever.reg and double click and merge it (worked on 2k3 and looks like it could work on a lot of other versions, vista)
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;[HKEY_CLASSES_ROOT\.exe]&lt;br /&gt;
	@=&amp;quot;exefile&amp;quot;&lt;br /&gt;
	&amp;quot;Content Type&amp;quot;=&amp;quot;application/x-msdownload&amp;quot;&lt;/em&gt;
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;[HKEY_CLASSES_ROOT\.exe\PersistentHandler]&lt;br /&gt;
	@=&amp;quot;{098f2470-bae0-11cd-b579-08002b30bfeb}&amp;quot;&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Anyway, just thought I would share.&amp;nbsp; Oh and restart after you un-do the snafu and expect it to be ...um, angry.&amp;nbsp; Yes, I&amp;#39;m saying you might have to/want to just ... reinstall.
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/aoQrdjCbC84/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/09/28/All-your-base-are-belong-to-notepad.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=09cacb4c-9909-488d-ad13-39fd5eaec8a0</guid>
      <pubDate>Mon, 28 Sep 2009 20:03:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=09cacb4c-9909-488d-ad13-39fd5eaec8a0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=09cacb4c-9909-488d-ad13-39fd5eaec8a0</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/09/28/All-your-base-are-belong-to-notepad.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=09cacb4c-9909-488d-ad13-39fd5eaec8a0</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=09cacb4c-9909-488d-ad13-39fd5eaec8a0</feedburner:origLink></item>
    <item>
      <title>Opinion: Software Dev is more complex?  No, it's software envy and the oversimplification.</title>
      <description>&lt;p&gt;
I was listening to .Net Rocks #476 and I heard multiple times that they&amp;#39;re leaving the one man shop behind and so on and so forth and complaining how they&amp;#39;ve been left behind and its too complicated for someone to pick up.&amp;nbsp; I whole heartedly disagree on every single level.&amp;nbsp; Software isn&amp;#39;t more complex, its more about software envy and oversimplification that&amp;#39;s the rudimentary problem.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
A few years back I was that 3 man shop.&amp;nbsp; I, like a lot of others, would go to the microsoft conferences and watch all the gee wiz bang cool stuff and would genuinely WANT to do what I had just learned about.&amp;nbsp; Then reality set in once I&amp;#39;d get back at the office...  In order to take advantage of 90% of the stuff, there was a huge up front resource cost.&amp;nbsp;&amp;nbsp;From&amp;nbsp;downloading, installing,&amp;nbsp;configuration and THEN getting it to work like I wanted&amp;nbsp;there&amp;#39;s a huge learning curve ... none of which was talked about&amp;nbsp;at the conference.&amp;nbsp;&amp;nbsp;Not ONCE&amp;nbsp;did someone say &amp;quot;oh by the way, this&amp;nbsp;took two people 3 months and 7 tons of coffee and 15&amp;nbsp;attempts of my own&amp;nbsp;to put this together&amp;quot;.&amp;nbsp; Would that make a significant impact on my perception?&amp;nbsp; Of course.&amp;nbsp; Would it make an even BIGGER impact on the perception of people approving it?&amp;nbsp; You bet.&amp;nbsp; Would I even had tried it?&amp;nbsp; Mmmmm maybe. 
&lt;/p&gt;
&lt;p&gt;
Quote time -- &amp;quot;Everything is hard before its gets easy&amp;quot;.&amp;nbsp; Think back to basics -- walking.&amp;nbsp; How many times do you think it took before you could walk?&amp;nbsp; How many years of practicing did it take before you could run without falling?&amp;nbsp; Then why do we expect to jump in a fighter jet and instantly know how it all works?&amp;nbsp; Developing software in and of itself, I feel, is not complicated.&amp;nbsp; It&amp;#39;s using the latest newest whatever that is.&amp;nbsp; I can write a vbscript to quickly toss out some info and do x, y and z which looks great and can write out&amp;nbsp;some c# code to take stuff from a database and spit it out to a web page&amp;nbsp;-- BUT how long did it take me to learn that?&amp;nbsp; How many times did I fall on my face, trip stumble and have to try again?&amp;nbsp; Just like walking, I still have problems staying upright at times. 
&lt;/p&gt;
&lt;p&gt;
I am by no means advocating someone shouldn&amp;#39;t learn a particular technology, quite the opposite, but an understanding of up front cost will greatly influence a discussion of &amp;quot;do I need this, right now, today and should I spend time and resources on it?&amp;quot;.&amp;nbsp; So in my opinion, and I&amp;#39;ll do this as well, there needs to be a disclose before any talk, any blog post, article, etc that outlines&amp;nbsp;the length of time to create said demo/product/functionality along with all the necessary resources on how you got to that point ... starting now.&amp;nbsp; This probably took a solid hour plus to write this along with&amp;nbsp;2-3 hours to listen and re-listen to the .net rocks podcast. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/FR8vKjPajCs/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/08/29/Opinion-Software-Dev-is-too-complex-No-its-software-envy-and-the-oversimplification.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=7d2ae107-a913-4d0e-b949-7916dd2300c5</guid>
      <pubDate>Sat, 29 Aug 2009 10:41:00 -0500</pubDate>
      <category>Software</category>
      <category>Opinion</category>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=7d2ae107-a913-4d0e-b949-7916dd2300c5</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=7d2ae107-a913-4d0e-b949-7916dd2300c5</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/08/29/Opinion-Software-Dev-is-too-complex-No-its-software-envy-and-the-oversimplification.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=7d2ae107-a913-4d0e-b949-7916dd2300c5</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=7d2ae107-a913-4d0e-b949-7916dd2300c5</feedburner:origLink></item>
    <item>
      <title>The Power of Social Networking</title>
      <description>&lt;p&gt;
Previously I blogged about my experiences of &lt;a href="http://blog.rileytech.net/post/2008/09/24/Doing-social-networking-right-and-wrong.aspx" target="_blank"&gt;social networking done right&lt;/a&gt; and ...well wrong.&amp;nbsp; A while back, the power of social networking got me an interview with &lt;a href="http://www.10tv.com" target="_blank"&gt;10TV&lt;/a&gt; regarding the &lt;a href="http://maps.live.com/default.aspx?v=2&amp;amp;FORM=LMLTCP&amp;amp;cp=39.959162~-82.996988&amp;amp;style=r&amp;amp;lvl=14&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000&amp;amp;scene=4956849&amp;amp;phx=0&amp;amp;phy=0&amp;amp;phscl=1&amp;amp;encType=1" target="_blank"&gt;70/71 split in downtown Columbus&lt;/a&gt; and the &lt;a href="http://dispatch.com/live/content/local_news/stories/2009/01/23/THEMERGE.ART_ART_01-23-09_A1_JBCLAC5.html?sid=101" target="_blank"&gt;1.6 billion dollar project&lt;/a&gt; that should begin soon.&amp;nbsp; A few phone calls and an hour later, I was talking to &lt;a href="http://twitter.com/Karinanova" target="_blank"&gt;Karina Nova&lt;/a&gt; about how I make my way home every evening and a good part of my interview made it on the 5pm&amp;nbsp;news.&amp;nbsp; Nice hu?  
&lt;/p&gt;
&lt;p&gt;
In the 90s, the web was new, fresh, untapped (remember those days?).&amp;nbsp; No one knew what this new &amp;quot;information super highway&amp;quot; could possibly do.&amp;nbsp; Chat rooms, the &amp;quot;new thing&amp;quot; on the computer, connected people across the &lt;strike&gt;world&lt;/strike&gt; country that you&amp;#39;d never otherwise meet.&amp;nbsp; It was nothing short of a revolution, a game changer for how people communicate.&amp;nbsp; But there was&amp;nbsp;a problem with this -- the likelihood of you running into the same person twice wasn&amp;#39;t really possible, so the chat room button became a chat room listing.&amp;nbsp; As chat started to really take off, with categories/theme rooms, email started to tie into this.&amp;nbsp; You could keep in contact with people that weren&amp;#39;t even online!&amp;nbsp; Everytime you logged in, people expected to hear that &amp;quot;you&amp;#39;ve got mail!&amp;quot; (AOL was big at one time).&amp;nbsp; Instant messaging quickly followed and unless you used ICQ, the other person had to be online.&amp;nbsp; So email/IM was it. 
&lt;/p&gt;
&lt;p&gt;
As this was all taking place,&amp;nbsp;some&amp;nbsp;other things were&amp;nbsp;happening that had a lasting, completely changing&amp;nbsp;effect...&amp;nbsp; 1, Corporate world trying to figure out how to make money with this stuff -- how to sell, automate, etc.&amp;nbsp; 2, Computers were becoming a&amp;nbsp;legitimate tool in the work place.&amp;nbsp; 3, Phone&amp;#39;s evolved into portable devices that everyone had.&amp;nbsp; 4, We (Americans) weren&amp;#39;t working 9 to 5 anymore, taking our work home with us.&amp;nbsp; So what?&amp;nbsp; If you can remember back to, say 1980s, we didn&amp;#39;t have anything like this.&amp;nbsp; Communication was ...personal, intimate!&amp;nbsp; The internet changed that.&amp;nbsp; You really didn&amp;#39;t have to know someone to talk to them, somewhat frequently, and all those people you never really talked to in the first place (cough, relatives, cough) became people among light social interaction on a regular basis. 
&lt;/p&gt;
&lt;p&gt;
What does this have to do with social networking?&amp;nbsp; Everything.&amp;nbsp; Being social is a human need, without it, you go nuts.&amp;nbsp; &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=solitary+confinement+effects&amp;amp;aq=1&amp;amp;oq=solitary+conf" target="_blank"&gt;Solitary confinement&lt;/a&gt; is a perfect example of this.&amp;nbsp; The INTERNET HAS made us more social but it&amp;#39;s fringe socializing, (very) loose connections, nothing like in the past.&amp;nbsp; Take a look at your face book/myspace and maybe even your linkedin&amp;nbsp;account.&amp;nbsp; How many of your friends/contacts do you &lt;strong&gt;REALLY &lt;/strong&gt;know and are really friends with?&amp;nbsp; Just a quick scan of my accounts, I&amp;#39;m guessing half at best.&amp;nbsp; It&amp;#39;s not necessarily a bad thing, its just the way it is. 
&lt;/p&gt;
&lt;p&gt;
Twitter is a little different.&amp;nbsp; It adds value.&amp;nbsp; Some will argue that if you post up nothing of value then following you is not necessary -- and I beg to differ.&amp;nbsp; If someone posts up about their weekend cook out, I find that valuable.&amp;nbsp; Why?&amp;nbsp; I learn a little something about that person I may not have known earlier, or even better, I may want to join them.&amp;nbsp; So how can business leverage this?&amp;nbsp; Easy, &lt;a href="http://twitter.com/search/users?q=Dell" target="_blank"&gt;Dell&lt;/a&gt; has found a good way to use social networking to&amp;nbsp;get&amp;nbsp;their world onto a direct audience, as have others.&amp;nbsp; I&amp;#39;ve even seen a story on TV about people getting better, faster customer service from twitter than the companies phone tree (people HATE those anyway).
&lt;/p&gt;
&lt;p&gt;
Ultimately, it gives you something to talk&amp;nbsp;about with a person you may never would meet or otherwise socialize with.&amp;nbsp; How many times has someone seen something you&amp;nbsp;posted and asked you about it ... and your first reaction was &amp;quot;how the hell did you&amp;nbsp;know ... ooohhh right!&amp;nbsp; Yea, the cook out was great, I had ...&amp;quot;&amp;nbsp; and a conversation starts?&amp;nbsp; If not, you may not be posting enough :)
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/BjK3F7cU5No/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/08/17/The-Power-of-Social-Networking.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=ff288485-07b1-43c3-a403-34f1d4b62325</guid>
      <pubDate>Mon, 17 Aug 2009 20:27:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=ff288485-07b1-43c3-a403-34f1d4b62325</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=ff288485-07b1-43c3-a403-34f1d4b62325</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/08/17/The-Power-of-Social-Networking.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=ff288485-07b1-43c3-a403-34f1d4b62325</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=ff288485-07b1-43c3-a403-34f1d4b62325</feedburner:origLink></item>
    <item>
      <title>This message will self destruct in 10 seconds</title>
      <description>&lt;p&gt;
Reading an interesting &lt;a href="http://www.wired.com/techbiz/people/magazine/17-08/st_thompson" target="_blank"&gt;article on Wired&lt;/a&gt; (they&amp;#39;ve been pumping out some good stuff lately ... or is it just I&amp;#39;m paying more attention?) regarding the internet and its inherit &amp;quot;never forget&amp;quot; functionality.&amp;nbsp; So I sat back for a minute and pondered this idea.&amp;nbsp; What if NOTHING ever went away?&amp;nbsp; Everything you said, everything you took a picture of never would go away.&amp;nbsp; It was stuck forever&amp;nbsp;on some hard drive somewhere.&amp;nbsp; That&amp;#39;s kind of scary. 
&lt;/p&gt;
&lt;p&gt;
Imagine it ... &amp;quot;That picture&amp;quot; you really didn&amp;#39;t want a future employer to see, a certain rant you posted up on a website that really wasn&amp;#39;t justified and so forth.&amp;nbsp; Even more simply, think of how much differently you might have acted simply IF there was a camera somewhere?&amp;nbsp; Would you have done half of what you did as a kid?&amp;nbsp; Of course not, I never would have&amp;nbsp;experienced the &amp;quot;half full&amp;quot; incident or the cap explosion if cameras were involved. 
&lt;/p&gt;
&lt;p&gt;
At the same time, do I think that everything should be deleted in a period of time?&amp;nbsp; No, but within context and usefulness, yes.&amp;nbsp; If we would delete everything, we would&amp;#39;ve forgotten about the declaration of independence, the Constitution, and other major events in human history.&amp;nbsp; Pictures in this regard are more&amp;nbsp;&amp;quot;heavy&amp;quot; because they leave interpretation up to the viewer, where a written document can have biased writing within it ... like my blog is awesome and you should read it :-)&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I don&amp;#39;t think my blog should persist posts after 10 years.&amp;nbsp; In 10 years time, think of how far computers have come ... would most, if ANY of that be relevant?&amp;nbsp; I would hardly think so.&amp;nbsp; Now would someone that makes furniture and posted up instruction 10 years from now still hold merit?&amp;nbsp; Of course. Ultimately, I think some data should go away.&amp;nbsp; It&amp;#39;s not relevant other than for historical or research reasons (where we&amp;#39;ve been) but for now, we&amp;#39;re stuck in the age of never forgetting (or at least being able to look it up ... be it right or wrong) 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/yzSQSIU0WKQ/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/08/17/This-message-will-self-destruct-in-10-seconds.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=98266227-afec-4a10-83b9-17c53165c58f</guid>
      <pubDate>Mon, 17 Aug 2009 20:09:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=98266227-afec-4a10-83b9-17c53165c58f</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=98266227-afec-4a10-83b9-17c53165c58f</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/08/17/This-message-will-self-destruct-in-10-seconds.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=98266227-afec-4a10-83b9-17c53165c58f</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=98266227-afec-4a10-83b9-17c53165c58f</feedburner:origLink></item>
    <item>
      <title>End to End .wim image creation with Windows 7 and Windows AIK</title>
      <description>&lt;p&gt;
Similar to my previous post, this one will focus on nothing more than how to create an image from beginning to end and where to get the stuff to make it all happen.&amp;nbsp; For this example, I&amp;#39;m going to be explaining a Windows 7 image.&amp;nbsp; Why?&amp;nbsp; It&amp;#39;s the only one I&amp;#39;ve ran across that includes a special step -- so skip that step if you plan on using other versions.&amp;nbsp; The rest will be identical.&amp;nbsp; I&amp;#39;ll start out by explaining what I used, what I was thinking when I created them and please, take this as&amp;nbsp;a guide, not gospel, you&amp;#39;re experience may vary.&amp;nbsp; After that, I&amp;#39;ll get into the technical details of how I planned this out and some potential pitfalls and expansions on what I&amp;#39;ve done to this point.&amp;nbsp; &lt;strong&gt;&lt;em&gt;If you know NOTHING about how to make wim images&lt;/em&gt;&lt;/strong&gt;, this will cover a LOT of it and should get you well on your way.&amp;nbsp; I do assume you know at least some basic command line things ... like how to change to another drive and such. 
&lt;/p&gt;
&lt;p&gt;
First, pick a good solid machine that will generally install things quickly and has a fast network card (1gb+).&amp;nbsp; My reason behind this is simple: the faster you do the install, the faster you can make the image, the faster you can be kicking the image out the door.&amp;nbsp; It might be cool to be able to install&amp;nbsp;Win7 on a 1ghz PIII but if it takes you 3 days to install, its just stupid.&amp;nbsp;&amp;nbsp;As always, there&amp;#39;s a catch -&amp;nbsp;you might have to load a network or other driver into an ISO and&amp;nbsp;to illustrate this, I&amp;#39;ll be using a desktop that does NOT include the driver for the winpe image which I&amp;#39;ll get into more detail about later.  
&lt;/p&gt;
&lt;p&gt;
When I created my first image for the office, I didn&amp;#39;t plan on installing stuff they did in previous installs -- too much junk and most of the end users were uninstalling the trash anyway, those were out.&amp;nbsp; Think basic, basic, basic.&amp;nbsp; On my first shot, I simply installed the OS, updated it, and created an image at that point, calling it &amp;quot;Base Win7 x86&amp;quot;.&amp;nbsp; Base should be &lt;strong&gt;_BASE_&lt;/strong&gt; nothing else, the OS is installed, updated, a standard password, shutdown, make image.&amp;nbsp; After that is completed, install your basic user required items -- in our case, .net developers.&amp;nbsp; This included 15-20 things to install, most are fire and forget so the total install took maybe half a day.&amp;nbsp; Not bad.&amp;nbsp; For the follow mile long blog post, Assume there&amp;#39;s 2 PCs and a server --&amp;nbsp;One I&amp;#39;m imaging, my desktop and a file server somewhere. 
&lt;/p&gt;
&lt;p&gt;
[Technical Starts Here] Now you&amp;#39;re ready to image a quality setup, let&amp;#39;s create that image!&amp;nbsp; Not so fast.&amp;nbsp; There&amp;#39;s a LOT to do even before an image is made -- mostly homework items that aren&amp;#39;t much fun and rather annoying but ...necessary.&amp;nbsp; For&amp;nbsp;reference, I&amp;#39;m imaging a Optiplex 755 which has an intel driver that is not&amp;nbsp;included on the winpe image.&amp;nbsp; What the hell is winpe!?&amp;nbsp; I&amp;#39;m glad you asked, and so beings our journey down the rabbit hole.&amp;nbsp; We&amp;#39;ll need to create a bootable USB drive to test whether the network driver is there or not.&amp;nbsp; IF you have a USB hard drive that can handle the image, you won&amp;#39;t care about the network driver, but most will and its a bit more involved, so again, I&amp;#39;ll go that route. 
&lt;/p&gt;
&lt;p&gt;
If you haven&amp;#39;t already, go download the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&amp;amp;displaylang=en" target="_blank"&gt;Windows AIK&lt;/a&gt;.&amp;nbsp; Make sure it includes Windows 7 and 2k8 R2 -- why? You&amp;#39;ll need it later and its easier to use than the older versions (they threw together a whole ton of stuff into 1 program, we&amp;#39;ll get to it ... you guessed it, later).&amp;nbsp; Install that on your desktop, and it&amp;#39;ll give you a few items on your start menu, namely the User&amp;#39;s&amp;nbsp;Guide and&amp;nbsp;Deployment Tools Command Prompt&lt;strong&gt;.&amp;nbsp; &lt;/strong&gt;Run&amp;nbsp;the deployment tools cmd&amp;nbsp;as administrator, and to tell this to puke out the ISO for our image, &lt;strong&gt;copype &amp;lt;x86/amd64&amp;gt; &amp;lt;folder&amp;gt;&lt;/strong&gt; and it&amp;#39;ll&amp;nbsp;drop&amp;nbsp;some files into the&amp;nbsp;folder&amp;nbsp;specified.&amp;nbsp; &amp;nbsp;In that &amp;lt;folder&amp;gt;, locate winpe.wim, copy it to &amp;lt;folder&amp;gt;\ISO\Sources\ and rename it &lt;em&gt;boot.wim&lt;/em&gt;.&amp;nbsp; Also copy over&amp;nbsp;C:\Program Files\Windows AIK\Tools\&amp;lt;x86/amd64/a64&amp;gt;\imagex.exe to the &amp;lt;folder&amp;gt; directory.&amp;nbsp; Imagex is the program that actually does the imaging and such.&amp;nbsp; For reference, you can find this in the User&amp;#39;s Guide under Windows preinstall blah blah --&amp;gt; Windows PE Build Enviro --&amp;gt; To build a Windows PE Enviro. 
&lt;/p&gt;
&lt;p&gt;
Now is a good time for me to explain why I&amp;#39;m NOT using cd&amp;#39;s for the next phase of this.&amp;nbsp; 1. There&amp;#39;s no undo with a CD and 2. USB thumb drives are MUCH faster.&amp;nbsp; So locate a usb thumb drive you can wipe COMPLETELY and plug it in.&amp;nbsp; Also for demonstration I am plugging in two usb thumb drives -- nothing is worse than following a set of instructions and having it fail because there&amp;#39;s an extra device the author didn&amp;#39;t intend to be plugged in (like your USB hard drive?).&amp;nbsp; Anyway, moving on. 
&lt;/p&gt;
&lt;p&gt;
We need to identify our disk to wipe to make it bootable.&amp;nbsp; Open up a command prompt window as administrator if you happened to close the previous one and punch in the following... 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;diskpart&lt;br /&gt;
	list disk&lt;/strong&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
DISKPART&amp;gt; list disk&lt;br /&gt;
&amp;nbsp; Disk ###&amp;nbsp; Status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Free&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dyn&amp;nbsp; Gpt&lt;br /&gt;
&amp;nbsp; --------&amp;nbsp; ----------&amp;nbsp; -------&amp;nbsp; -------&amp;nbsp; ---&amp;nbsp; ---&lt;br /&gt;
&amp;nbsp; Disk 0&amp;nbsp;&amp;nbsp;&amp;nbsp; Online&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 149 GB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 B&lt;br /&gt;
&amp;nbsp; Disk 1&amp;nbsp;&amp;nbsp;&amp;nbsp; Online&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1906 MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 B&lt;br /&gt;
&amp;nbsp; Disk 2&amp;nbsp;&amp;nbsp;&amp;nbsp; Online&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 500 MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 B 
&lt;/p&gt;
&lt;p&gt;
It shows 3 disks -- the one I&amp;#39;m after is the 500mb thumb drive, so Disk 2 is my target.&amp;nbsp; Knowing this, I can run the following without too much worry...&amp;nbsp; (You can find these steps under Customizing Windows PE --&amp;gt; Windows PE Walkthoughs --&amp;gt; Create a Bootable blah blah UFD) 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;diskpart&lt;br /&gt;
	select disk 2&lt;br /&gt;
	clean&lt;br /&gt;
	create partition primary&lt;br /&gt;
	select partition 1&lt;br /&gt;
	active&lt;br /&gt;
	format fs=fat32 quick&lt;br /&gt;
	assign&lt;br /&gt;
	exit&lt;/strong&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Ok, the thumb drive is ready.&amp;nbsp; Copy all the files from &amp;lt;folder&amp;gt;\ISO to the usb drive and we&amp;#39;re ready to think about imaging.&amp;nbsp; On the PC to be imaged, run &lt;strong&gt;C:\windows\system32\sysprep /quiet&lt;/strong&gt;.&amp;nbsp; The short of it -- this cleans up the image so it can find stuff on another computer.&amp;nbsp; It&amp;#39;ll take almost no time to run at all (half second?) so run that, and plug in that thumb drive, restart and boot to it.&amp;nbsp; When it finally comes up, there&amp;#39;s a command prompt -- run ipconfig and see if you get a result.&amp;nbsp; If you do, that&amp;#39;s great, you won&amp;#39;t have to do this following step and can skip down to the [ Imaging ] tag.&amp;nbsp; For the rest of you, prepare for some pain.&amp;nbsp; It&amp;#39;s ok though, it&amp;#39;s not too bad. 
&lt;/p&gt;
&lt;p&gt;
On the system to be imaged, go into device manager, check your network card and get the model number.&amp;nbsp; I took this one step further and opened up the properties on it, hit the driver tab, driver details and found this... 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.rileytech.net/image.axd?picture=2009%2f8%2fdriver.jpg" alt="" width="347" height="213" /&gt; 
&lt;/p&gt;
&lt;p&gt;
The e1e6032.sys is important, that&amp;#39;s the base&amp;nbsp;driver, so I know I need that.&amp;nbsp; I went&amp;nbsp;on intel&amp;#39;s website and downloaded &amp;quot;provista.exe&amp;quot; which&amp;nbsp;includes a ton of drivers.&amp;nbsp;&amp;nbsp;Extracting this isn&amp;#39;t straight forward, you have to run &lt;strong&gt;provista.exe /s /e /f&amp;nbsp;&amp;lt;target&amp;gt;&lt;/strong&gt; to get the inf files, which is REALLY what I want (it&amp;#39;s how the next step works, by inf).&amp;nbsp; I find in the &amp;lt;target&amp;gt; my inf that (GASP!) matches the e1e6032.sys.&amp;nbsp; To ensure this driver is the right one, I updated the image box with this driver to make sure, 100%, that&amp;#39;s the one and it is.&amp;nbsp; Now I have to add that to the winpe.wim image ... You do that by&amp;nbsp;doing the following on your desktop in the deployment tools command prompt (run as admin!) 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;mkdir c:\&amp;lt;somefolder&amp;gt;&lt;br /&gt;
	dism /mount-wim /wim-file:c:\&amp;lt;folder&amp;gt;\winpe.wim /index:1 /mountdir:c:\&amp;lt;somefolder&amp;gt;&lt;/strong&gt; (this takes forever ...why I don&amp;#39;t know)&lt;br /&gt;
	&lt;strong&gt;dism /image:c:\&amp;lt;somefolder&amp;gt; /add-driver /driver:c:\&amp;lt;target&amp;gt;\e1e6032.inf&lt;br /&gt;
	dism /unmount-wim /mount-dir:c:\&amp;lt;somefolder&amp;gt; /commit&lt;/strong&gt; (fast) 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Take the newly created winpe.wim and drop it into that ISO\Sources\ folder, rename it boot.wim (might have to delete the one from earlier) and again, copy over the &amp;lt;folder&amp;gt;\ISO\&amp;nbsp;contents over to your usb thumb drive and boot the box to be imaged again.&amp;nbsp; You should get an ip address now.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
[ Imaging&amp;nbsp;: Create&amp;nbsp;] Alright, NOW we can image something!&amp;nbsp; Let&amp;#39;s map a network drive and get this show&amp;nbsp;rolling ... 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;net use z:&amp;nbsp;\\myserver\myshare\myimagestore&lt;/strong&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Using diskpart again, type in &lt;strong&gt;list volumes&lt;/strong&gt; to find your usb drive and it&amp;#39;s letter, go to it (&amp;quot;cd F:&amp;quot;) and, since we&amp;#39;re imaging a windows 7 box, we don&amp;#39;t target the C drive, we&amp;nbsp;target D (second partition) so&amp;nbsp;I&amp;nbsp;enter in ... 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;imagex /capture d: z:\Dev_Win7_x86.wim &amp;quot;Windows 7&amp;quot; /Compress fast&lt;/strong&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
and off it goes.&amp;nbsp; This&amp;#39;ll take some time and you&amp;#39;ll see some scary looking things on the screen but when it&amp;#39;s done, you&amp;#39;ll have some huge image sitting on your file server.&amp;nbsp; Ok, not huge but they&amp;#39;re not 100mb.&amp;nbsp; You can use /Comrpess maximum if you like too.&amp;nbsp; Also note, if I&amp;#39;m imaging a vista or 2k3 or 2k8, just do imagex /capture c: instead of d.&amp;nbsp; This comes into play later as well when we cast our image out. 
&lt;/p&gt;
&lt;p&gt;
[ Imaging : Cast ] Congratulations, you&amp;#39;ve done most of the hard work already and now it&amp;#39;s time to abuse it.&amp;nbsp; Find an unsuspecting computer to hijack (your workstation?) and pop in your USB drive and boot to the WinPE environment (that&amp;#39;s what the console thing is called by the way).&amp;nbsp; Break out your net use kung fu again ... 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;net use z:&amp;nbsp;\\myserver\myshare\myimagestore&lt;/strong&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
And back into disk part.&amp;nbsp; At this point, there&amp;#39;s a slight shift and a perfect time to explain something with Windows 7.&amp;nbsp; There&amp;#39;s an additional partition Win7 installs in front of the OS.&amp;nbsp; So you must re-create this file structure for the OS to load correctly.&amp;nbsp; For Vista&amp;nbsp;and&amp;nbsp;2k3 (and 2k8?), you do NOT need to create two partitions.&amp;nbsp; I&amp;#39;ve marked the follow steps unbolded to indicate that you won&amp;#39;t need it for Vista/2k3 but you DO need it for Win7.&amp;nbsp; &amp;lt;&lt;em&gt;Update 8/31/09&amp;gt; &lt;/em&gt;Also, if you wish to automate this, check out some of the comments below. &lt;em&gt;&amp;lt;/Update&amp;gt;&lt;/em&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;Diskpart&lt;br /&gt;
	list disk (get the drive number)&lt;br /&gt;
	select disk #&lt;br /&gt;
	clean&lt;br /&gt;
	create partition primary &lt;/strong&gt;size=200&lt;br /&gt;
	&lt;strong&gt;select partition 1&lt;br /&gt;
	format fs=ntfs quick&amp;nbsp;&lt;/strong&gt;label=&amp;quot;system&amp;quot;&lt;strong&gt; &lt;br /&gt;
	&lt;/strong&gt;assign letter=c&lt;br /&gt;
	&lt;strong&gt;active&lt;br /&gt;
	&lt;/strong&gt;create partition primary&lt;br /&gt;
	select partition 2&lt;br /&gt;
	format fs=ntfs label=&amp;quot;Windows&amp;quot; quick&lt;br /&gt;
	assign letter=d (if this fails, give it any drive letter)&lt;br /&gt;
	&lt;strong&gt;exit &lt;/strong&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
For Windows 7, I always restart after setting the partitions because the drive letters may not line up but when you restart, they do.&amp;nbsp; Vista/2k3&amp;nbsp;there&amp;#39;s no need to.&amp;nbsp; Ok, now ... to image our desktop!&amp;nbsp; Remember, for windows 7 we image to D, all others, C (in this example, I&amp;#39;m still imaging a windows 7 box) 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;imagex /apply z:\Dev_Win7_x86.wim 1 d:&lt;/strong&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
The image is now flowing down to your desktop. 
&lt;/p&gt;
&lt;p&gt;
For Windows 7, before you&amp;#39;re done, navigate into D:\Windows\System32 and run &lt;strong&gt;bcdboot.exe D:\Windows&lt;/strong&gt;.&amp;nbsp; This will tell the bootloader &amp;quot;hey, go here and run this&amp;quot;.&amp;nbsp; Otherwise you&amp;#39;ll get a the nasty error message I mentioned in the previous post. 
&lt;/p&gt;
&lt;p&gt;
And thats it!&amp;nbsp; You are 100% done.&amp;nbsp; Restart your newly imaged machine a few times (as it sets up stuff) and you&amp;#39;re well on your way.&amp;nbsp; Also, please, if you actually read this whole thing, please leave comments if it worked for you or not or if I misspelled something.&amp;nbsp; I was writing this for double documentation (one for work that was strictly technical, and this one more for myself and &amp;quot;what was I thinking&amp;quot;) so my eyes were bleeding when I was to this point.&amp;nbsp; Oh, and of course, spread this around as much as possible, it&amp;#39;s a really cool, useful tool. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/yWVdEwfAfso/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/08/14/End-to-End-wim-image-creation-with-Windows-7-and-Windows-AIK.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=de241758-628a-4faf-991e-0d19b71d1ca2</guid>
      <pubDate>Fri, 14 Aug 2009 18:02:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=de241758-628a-4faf-991e-0d19b71d1ca2</pingback:target>
      <slash:comments>20</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=de241758-628a-4faf-991e-0d19b71d1ca2</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/08/14/End-to-End-wim-image-creation-with-Windows-7-and-Windows-AIK.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=de241758-628a-4faf-991e-0d19b71d1ca2</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=de241758-628a-4faf-991e-0d19b71d1ca2</feedburner:origLink></item>
    <item>
      <title>Gotcha! Creating a Windows 7 Image with imagex</title>
      <description>&lt;p&gt;
I&amp;#39;ve been building out a new windows 7 image and ran into the &lt;strong&gt;BOOTMGR is missing&lt;/strong&gt;.&amp;nbsp; I let it sit for a night and it came to be -- there&amp;#39;s an extra partition on win7 that vista didn&amp;#39;t have.&amp;nbsp; Ok, makes sense because I applied the image to C:, in my case, that&amp;#39;s partition&amp;nbsp;1 on disk&amp;nbsp;0, it should be disk 1.&amp;nbsp; Hmm, so there must be a way to do this and of course there is.&amp;nbsp; So let&amp;#39;s jump right in.  
&lt;/p&gt;
&lt;p&gt;
I downloaded&amp;nbsp;the new WAIK (Windows Automation Install Kit) and its huge, 1.66GB by my download box thinking there was some new magic I wasn&amp;#39;t aware of.&amp;nbsp; There isn&amp;#39;t BUT there&amp;#39;s a &amp;quot;new&amp;quot; step.&amp;nbsp; Within the kit, I found the following ...&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;diskpart&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;select disk 0&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;clean&lt;br /&gt;
create partition primary size=200&lt;br /&gt;
select partition 1&lt;br /&gt;
format fs=ntfs label=&amp;quot;system&amp;quot;&lt;br /&gt;
assign letter=c&lt;br /&gt;
active&lt;br /&gt;
create partition primary&lt;br /&gt;
select partition 2&lt;br /&gt;
format fs=ntfs label=&amp;quot;Windows&amp;quot; quick&lt;br /&gt;
assign letter=d&lt;br /&gt;
exit&lt;/strong&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Which is great, unless you have cd drive and that windows volume you just created is no where to be found.&amp;nbsp; Just restart and it&amp;#39;ll be there.&amp;nbsp; Dump your image and run D:\windows\system32\bcdboot d:\windows and that should do it. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/PPUSYYuV-GI/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/08/13/Gotcha!-Creating-a-Windows-7-Image-with-imagex.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=8a13abb1-739c-4b1d-8245-5e5f77588ce5</guid>
      <pubDate>Thu, 13 Aug 2009 08:54:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=8a13abb1-739c-4b1d-8245-5e5f77588ce5</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=8a13abb1-739c-4b1d-8245-5e5f77588ce5</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/08/13/Gotcha!-Creating-a-Windows-7-Image-with-imagex.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=8a13abb1-739c-4b1d-8245-5e5f77588ce5</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=8a13abb1-739c-4b1d-8245-5e5f77588ce5</feedburner:origLink></item>
    <item>
      <title>Social Engineering is alive and well</title>
      <description>&lt;p&gt;
Don&amp;#39;t believe social engineering can become viral like the latest youtube hamster video?&amp;nbsp; &lt;a href="http://search.twitter.com/search?q=Want+to+know+whos+stalking+you+on+twitter%21%3F%3A+http%3A%2F%2FTwitViewer.net" target="_blank"&gt;Think again&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
From my best count, 12 people every 3 seconds were falling for this.&amp;nbsp; The website is very vague, claiming its safe ...but with whom?!&amp;nbsp; Do people really fall for this?&amp;nbsp; Why yes, yes they do. People want to know who&amp;#39;s stalking them ... and yet they can protect their tweets quite easily.&amp;nbsp; Doing a quick look up on them, they&amp;#39;re registered via godaddy and their proxy service so you can&amp;#39;t really see who they are.&amp;nbsp; Any real service won&amp;#39;t do this (yea, I said it, watcho gonna do about it?) so wonder how much damage this will do ... and how many people won&amp;#39;t learn there lesson? 
&lt;/p&gt;
&lt;p&gt;
Twitter can&amp;#39;t stop this either, not without taking out everyone else that&amp;#39;s using the API.&amp;nbsp; Might be time for them to issue API codes. 
&lt;/p&gt;
&lt;p&gt;
Do you have nice day?! :-) 
&lt;/p&gt;
&lt;p&gt;
*** UPDATE *** 
&lt;/p&gt;
&lt;p&gt;
Now the site displays the following message 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.rileytech.net/image.axd?picture=2009%2f7%2ftwitfail.jpg" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
and its straight HTML &amp;lt;center&amp;gt; and the text you see above.&amp;nbsp; So was it a hack of a hack?&amp;nbsp; Hmmmmm interesting.&amp;nbsp; It&amp;#39;s too bad they don&amp;#39;t have contact info because now I&amp;#39;m curious. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/YbkJbmeDWSg/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/07/28/Social-Engineering-is-alive-and-well.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=6f8b1068-2eb8-4efa-a212-ef8772ff1618</guid>
      <pubDate>Tue, 28 Jul 2009 14:13:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=6f8b1068-2eb8-4efa-a212-ef8772ff1618</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=6f8b1068-2eb8-4efa-a212-ef8772ff1618</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/07/28/Social-Engineering-is-alive-and-well.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=6f8b1068-2eb8-4efa-a212-ef8772ff1618</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=6f8b1068-2eb8-4efa-a212-ef8772ff1618</feedburner:origLink></item>
    <item>
      <title>Ask the right question, get the right answer</title>
      <description>&lt;p&gt;
Talked about this during a lunch I went to with Brent Huston (&lt;a href="http://stateofsecurity.com/" target="_blank"&gt;web&lt;/a&gt;, &lt;a href="http://twitter.com/lbhuston" target="_blank"&gt;twitter&lt;/a&gt;) and he asked me had I done a write up on this ... and I haven&amp;#39;t so I shall.&amp;nbsp; It&amp;#39;s a good piece of info that I think&amp;nbsp;everyone should master - Ask the right question, get the right answer.&amp;nbsp; This pays off in so many ways, it isn&amp;#39;t funny and you can use it and abuse it everywhere, in everyday life.&amp;nbsp; This isn&amp;#39;t a great theory that doesn&amp;#39;t work in reality, this is a basic foundational requirement.&amp;nbsp; Yes, I feel very strongly about this and Brent suggested I should write up how I managed to teach it so here goes. 
&lt;/p&gt;
&lt;p&gt;
I hinted at this when I mentioned a good friend of mine, Jay Saunders,&amp;nbsp;was &lt;a href="http://blog.rileytech.net/post/2008/06/22/Graduation.aspx" target="_blank"&gt;graduating&lt;/a&gt;.&amp;nbsp; I tortured him for a solid 2 months (probably more), teaching him this practice.&amp;nbsp; When he started, I told him the number one thing was teaching him how to ask the right questions.&amp;nbsp; Purpose being is multi-layered.&amp;nbsp; First, without asking the right questions, you waste a lot of time figuring out what they (the users)&amp;nbsp;really mean.&amp;nbsp; Second, if you take a minute to think about what you really want, you also should think of the possible reactions of the person being asked -- I will come back to this because there&amp;#39;s a lot of nasty pitfalls that need to be addressed.&amp;nbsp; Third, it forces a different thought process and finally, the real goal, it forces the person being asked to NOT give a wrong answer.  
&lt;/p&gt;
&lt;p&gt;
So take the following example.&amp;nbsp; A given shop has&amp;nbsp;three types of printers and two locations to store toner.&amp;nbsp; Jay comes in and asks &amp;quot;hey, where do we keep the toner?&amp;quot;.&amp;nbsp; In and of itself this is a fair question, but it expects the recipient to assume some information and therefore&amp;nbsp;gives the person the possibility of giving a wrong answer ... so of course I gave him the wrong one.&amp;nbsp; A few minutes later, Jay returned to inform me that no toner was found -- I suggested he may want to ask the question again but don&amp;#39;t give me the option of giving him a wrong answer.&amp;nbsp; &amp;quot;Do you know if we&amp;#39;re out of toner?&amp;quot; -- this still isn&amp;#39;t the right question, so I told him to ask again.&amp;nbsp; This frustrated him to no end.&amp;nbsp;&amp;nbsp;Realizing he was to this point, I asked him what he wanted to do.&amp;nbsp; The conversation went something like this... 
&lt;/p&gt;
&lt;p&gt;
&amp;quot;I need to get some toner so they can print&amp;quot;&lt;br /&gt;
&lt;em&gt;What toner?&lt;br /&gt;
&lt;/em&gt;:confused: &amp;quot;Toner for the printer&amp;quot;&lt;br /&gt;
&lt;em&gt;What printer?&lt;br /&gt;
&lt;/em&gt;&amp;quot;The HP 4000&amp;quot;&lt;br /&gt;
&lt;em&gt;Now ask your question again, and don&amp;#39;t let me have the option to give you a wrong answer.&lt;/em&gt;&lt;br /&gt;
&amp;quot;.... Are we out of toner for the HP 4000s?&amp;quot;&lt;br /&gt;
&lt;em&gt;No, we got a ton of it, probably 20-30 of &amp;#39;em.&amp;nbsp; Now ask what you really want.&lt;br /&gt;
&lt;/em&gt;&amp;quot;Ok ... where are the toners for the HP 4000s?&amp;quot; 
&lt;/p&gt;
&lt;p&gt;
This is a far more exact question with only one answer.&amp;nbsp; It&amp;#39;s not offensive nor disruptive, it just contains the recipient to answer one way, the correct way.&amp;nbsp; Even if the answer is &amp;quot;I don&amp;#39;t know&amp;quot;, it&amp;#39;s still a RIGHT answer.&amp;nbsp; Fast forward a month or so where he was starting to apply it -- and it got rather amusing.&amp;nbsp; Jay would come by my office and begin to ask a question, stop, and ask again but with no option for me to give him a wrong answer.&amp;nbsp; I would laugh when he would stop mid-sentence because I knew he was using what I had taught him.&amp;nbsp; As this became more natural, his interaction with the users became a lot more effective.&amp;nbsp; They can&amp;#39;t give wrong answers but it doesn&amp;#39;t stop them from being misinformed. :) 
&lt;/p&gt;
&lt;p&gt;
There is one problem with this approach and also my bit of warning.&amp;nbsp; When teaching this, it must be explained that it is NOT to put words into someones mouth, nor &amp;quot;already know what the problem is&amp;quot;.&amp;nbsp; It&amp;#39;s not a bad thing to say its probably X or Y but that&amp;#39;s not known, so do not anticipate an answer.&amp;nbsp; If you anticipate, this reduces your ability to listen and will result in hearing what you want to hear instead of listening to what was said.&amp;nbsp; That&amp;#39;s something that NEVER comes naturally and has to be learned and actively practiced. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/SN-YTLYkMGs/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/07/27/Ask-the-right-question-get-the-right-answer.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=cc9aab34-09a8-4813-bac3-faafe8b8d11d</guid>
      <pubDate>Mon, 27 Jul 2009 23:17:00 -0500</pubDate>
      <category>Management</category>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=cc9aab34-09a8-4813-bac3-faafe8b8d11d</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=cc9aab34-09a8-4813-bac3-faafe8b8d11d</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/07/27/Ask-the-right-question-get-the-right-answer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=cc9aab34-09a8-4813-bac3-faafe8b8d11d</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=cc9aab34-09a8-4813-bac3-faafe8b8d11d</feedburner:origLink></item>
    <item>
      <title>Start the discussion</title>
      <description>&lt;p&gt;
This is a continuation of my mentoring post made a few days ago but on a more fundamental level.&amp;nbsp; I have no doubt that within every organization, every team and their members are thinking the same thing, but no one is saying it.&amp;nbsp; There&amp;#39;s a lot of reasons why and none of them are good.&amp;nbsp; So what&amp;#39;s the problem?&amp;nbsp; &lt;strong&gt;Communication&lt;/strong&gt;.&amp;nbsp; People are afraid of looking stupid, asking a dumb question and generally don&amp;#39;t want to look like the guy that doesn&amp;#39;t know.&amp;nbsp; Well, I usually don&amp;#39;t know, so I ask and I&amp;#39;ve noticed a trend that doesn&amp;#39;t surprise me - discussions begin to spawn awesomeness&amp;nbsp;but they&amp;#39;re not happening everywhere. 
&lt;/p&gt;
&lt;p&gt;
A perfect example came around a few weeks back.&amp;nbsp;&amp;nbsp;I got some time to sit back and learn something so I asked &lt;a href="http://jonkruger.com" target="_blank"&gt;Jon Kruger&lt;/a&gt; about what I should be learning next?&amp;nbsp; It&amp;#39;s a huge, open ended question but he had a quick, exact&amp;nbsp;response - learn TDD.&amp;nbsp; He didn&amp;#39;t say read up on silverlight or ruby or any thing else, he went right for a practice that he&amp;#39;s using, regardless of its language.&amp;nbsp; Ok, great, so I asked him &amp;quot;point me in a direction&amp;quot; ... he didn&amp;#39;t find anything that was particularly good so,&amp;nbsp;bonus, it spawned a lot of discussions and a few blog posts ... 
&lt;/p&gt;
&lt;p&gt;
&lt;a rel="bookmark" href="http://jonkruger.com/blog/2009/07/23/tdd-starter-kit-sample-projects-and-links/"&gt;TDD Starter Kit - Sample Projects and Links&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a rel="bookmark" href="http://jonkruger.com/blog/2009/07/26/what-should-you-learn-next/"&gt;What should you learn next?&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Even more important,&amp;nbsp;he did&amp;nbsp;a&amp;nbsp;Lunch and Learn -- we had a full house, around 60 people showed up.&amp;nbsp; That&amp;#39;s a great turn out and even better for Jon (people need to listen to him) but when I left I noticed yet another issue ... a group of people, 5 of them were discussing among themselves how they didn&amp;#39;t understand where his mocking came from and how his structure map was working because &amp;quot;it was a custom written thing&amp;quot;.&amp;nbsp; The fail was simple : They didn&amp;#39;t ask.&amp;nbsp; If they would&amp;#39;ve went up and started talking to Jon about it, I&amp;#39;m sure Jon would have tore it apart and showed them anything and everything -- maybe even wrote a supplement post on it.&amp;nbsp; But they didn&amp;#39;t and the general take away was &amp;quot;I don&amp;#39;t know how this part works, so I don&amp;#39;t need it&amp;quot;.&amp;nbsp; Again, this is the fear of asking stupid questions in it&amp;#39;s perfect sense. 
&lt;/p&gt;
&lt;p&gt;
So what&amp;#39;s my point?&amp;nbsp; Start the discussion.&amp;nbsp; Take a chance, ask and find out.&amp;nbsp; The excuse of being silent and pretending &amp;quot;I get it&amp;quot; doesn&amp;#39;t apply if you sit back and don&amp;#39;t ask.&amp;nbsp; The biggest result that can happen is a wide, sweeping discussion that hashes out a ton of stuff that no one knew everything else is thinking. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/1ujxDQTppVg/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/07/26/Start-the-discussion.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=613ab34f-7b0d-4c83-bcd8-1fe812ea0df8</guid>
      <pubDate>Sun, 26 Jul 2009 22:38:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=613ab34f-7b0d-4c83-bcd8-1fe812ea0df8</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=613ab34f-7b0d-4c83-bcd8-1fe812ea0df8</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/07/26/Start-the-discussion.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=613ab34f-7b0d-4c83-bcd8-1fe812ea0df8</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=613ab34f-7b0d-4c83-bcd8-1fe812ea0df8</feedburner:origLink></item>
    <item>
      <title>Mentorship from the mentored side</title>
      <description>&lt;p&gt;
I was taking part in a conversation on twitter which was semi-sparked when Jim Holmes made &lt;a href="http://twitter.com/JimHolmes/status/2779313056" target="_blank"&gt;the following comment &lt;/a&gt;- 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;em&gt;&lt;font size="3"&gt;It&amp;#39;s been my biggest gripe about our industry: utter whale fail for mentoring or apprenticeship. We suck. Lead, damnit, and mentor folks.&lt;/font&gt;&lt;/em&gt; 
&lt;/blockquote&gt;
&lt;p&gt;
And as someone who&amp;#39;s been mentored, I agree, 100% -- but only on the grounds of approach.&amp;nbsp; Some mentoring programs put every dev in a little box, package it up and ship it to everyone.&amp;nbsp; This just&amp;nbsp;doesn&amp;#39;t work.&amp;nbsp; Each dev has various level of experience, desire to learn, and aspirations and that is&amp;nbsp;easy to identify, just ask.&amp;nbsp; The less obvious is the magic HOW question.&amp;nbsp;&amp;nbsp;HOW did they get that experience, HOW do they learn, HOW do they want to get to a certain career position.&amp;nbsp; This is where the &amp;quot;We suck&amp;quot; starts to come out.&amp;nbsp; A good dev isn&amp;#39;t always a good mentor, and a good mentor &lt;em&gt;MUST&lt;/em&gt; be a great dev.  
&lt;/p&gt;
&lt;p&gt;
Ok, time to pick on someone.&amp;nbsp; To his full credit, Jim&amp;#39;s a &lt;strong&gt;&lt;em&gt;mentor&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; I know I put him into a few uncomfortable conversations where he wanted to smack me (that&amp;#39;s putting it lightly) but I was asking purely based on &amp;quot;why in the hell are we doing this?!&amp;quot;.&amp;nbsp; If I don&amp;#39;t understand why something is done, I&amp;#39;m of the mindset that there must be a really good reason and want to understand this -- thats how I learn, big picture and then bust it up into smaller pieces.&amp;nbsp; After a day or so, I understood it (didn&amp;#39;t mean I liked it) and was able to use other existing items as templates and went on my way. 
&lt;/p&gt;
&lt;p&gt;
During the time that Jim was my mentor,&amp;nbsp;I asked him what he thought how I do things, how I code, etc.&amp;nbsp; I was happy with the response (didn&amp;#39;t mean I like it!).&amp;nbsp; He said&amp;nbsp;my code was OK -- &amp;quot;not the way I would do it, but it does work and its ... sorta crappy to follow sometimes, but not&amp;nbsp;usually&amp;quot;.&amp;nbsp; I took away from that I needed to look over my code, if it was complicated, break it up into &amp;quot;more better&amp;quot; parts.&amp;nbsp;&amp;nbsp;There was more to it of course (personal development), but my point is I didn&amp;#39;t take it as an insult and nor should I -- I asked for it, I wanted to know so I asked and got a good, solid answer that wasn&amp;#39;t beating around the bush hoping I would get it. 
&lt;/p&gt;
&lt;p&gt;
When I started to write this, I thought I could cover each point that outlined what was wrong with mentoring and came to the conclusion no one wants to read it, so I&amp;#39;ll just cut the crap and get right to it.&amp;nbsp;&amp;nbsp;If I&amp;#39;m wrong on some points, so what, at least I&amp;#39;m continuing the discussion and feel free to hack away -- so here goes. 
&lt;/p&gt;
&lt;h4&gt;Mentors ...&lt;/h4&gt;
&lt;p&gt;
&lt;strong&gt;1. If asked any question, do your absolute best to explain everything from the beginning.&lt;/strong&gt;&amp;nbsp; I&amp;#39;m guilty of this -- starting in the middle of a spot thinking that person might know ... don&amp;#39;t do that.&amp;nbsp; It&amp;#39;ll alienate them and make them feel like you already answered it. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2.&amp;nbsp;Foster an environment where asking any question won&amp;#39;t be attacked.&lt;/strong&gt;&amp;nbsp; If that&amp;#39;s one on one, so be it.&amp;nbsp; One on one with a laptop/desktop/something with screen and a topic is even better.&amp;nbsp; Many people fear rejection, so create an environment where that&amp;#39;s not possible. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. &amp;quot;Here, read this book&amp;quot; doesn&amp;#39;t count as mentoring.&lt;/strong&gt;&amp;nbsp; This one comes with a slight clause to it -- if the mentored asks &amp;quot;can I read a book on &amp;lt;blah&amp;gt;&amp;quot; ...then its ok. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. If you don&amp;#39;t think they get it, come back and do it again ... on your time if necessary.&lt;/strong&gt;&amp;nbsp; No, I&amp;#39;m not kidding and giving a community talk does not count either if the mentored isn&amp;#39;t directly involved.&amp;nbsp; Speaking is great, giving back to the community is great but if the kids&amp;nbsp;(the mentored)&amp;nbsp;ain&amp;#39;t eatin&amp;#39; at home, it&amp;#39;s just stupid. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5. Lead by example.&lt;/strong&gt;&amp;nbsp; You are held to a higher standard so ... do it.&amp;nbsp; Take advantage to improve your leadership.&amp;nbsp; If done right, the people under you will do anything, willingly.&amp;nbsp; I&amp;#39;ve been there, done that and its nothing short of amazing. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;6. When your mentored makes a mistake show them immediately (or as soon as possible).&lt;/strong&gt;&amp;nbsp; It doesn&amp;#39;t do any good for one person to sit around all pissed off because new guy Joe wrote something completely off the wall.&amp;nbsp; It made sense to Joe, so make sure he understands why that doesn&amp;#39;t work.&amp;nbsp; A good way to nip this early&amp;nbsp;- pair program, let them drive.&amp;nbsp; Do not confuse this with the code equivalent of bible thumping. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;7. If at all possible, mentors and mentored should work together in the same room, if not on the same project.&lt;/strong&gt;&amp;nbsp; See number 6 and number 1.&amp;nbsp; This one will help tie it together. 
&lt;/p&gt;
&lt;h4&gt;Mentored ...&lt;/h4&gt;
&lt;p&gt;
&lt;strong&gt;1. Ask the right questions to get the right answers.&lt;/strong&gt;&amp;nbsp; This is a skill absolutely necessary -- be able to&amp;nbsp;observe,&amp;nbsp;state what you are thinking,&amp;nbsp;your opinion, and what you want, EVERY SINGLE TIME.&amp;nbsp; If those are included you&amp;#39;ll always get the right answer, even if it&amp;#39;s &amp;quot;I don&amp;#39;t know&amp;quot;.&amp;nbsp; If there&amp;#39;s nothing you ever take away from anything I say, its that.&amp;nbsp; Try it, you&amp;#39;ll thank me later. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. Once &amp;quot;you get it&amp;quot;, take the risk and do it.&lt;/strong&gt;&amp;nbsp; No gain without reward, so take a chance with what you&amp;#39;ve learned.&amp;nbsp; Pound out some code and before you go too crazy, have someone check you on it. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Don&amp;#39;t be the brat/step child/prodigy. &lt;/strong&gt;Everyone you come across will know something you don&amp;#39;t.&amp;nbsp; Once you discover this, abuse the hell out of it and learn from them.&amp;nbsp; Your mentor is no exception ... keep digging, you&amp;#39;ll never know what you might find out. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. Be an explorer ... you don&amp;#39;t have a choice.&amp;nbsp; &lt;/strong&gt;Expect to go into uncertain territory, a lot.&amp;nbsp; Things are changing so fast and so often, what worked yesterday and was the new hotness today, won&amp;#39;t be by the time you read this. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5. Find multiple outlets.&amp;nbsp; &lt;/strong&gt;A mentor can&amp;#39;t be there all the time, so find others that will help or you can bounce ideas off of.&amp;nbsp; Even if it seems totally stupid, say it anyway, you never know what might come out of it. 
&lt;/p&gt;
&lt;p&gt;
So there we go.&amp;nbsp; I hope this helps in continuing the discussion because out of all the talking that occurred today, one this is clear -- Mentoring has a long way to go and not a lot of people are openly discussing it because it sucks and no one seems to know what to do about it.&amp;nbsp; It&amp;#39;ll never get fixed if we ignore it so let&amp;#39;s have these discussions. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/lE_a3UXHNQk/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/07/22/Mentorship-from-the-mentored-side.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=19e06bce-18fe-4e3b-a988-21f0ad13e78e</guid>
      <pubDate>Wed, 22 Jul 2009 11:28:00 -0500</pubDate>
      <category>Architecture</category>
      <category>Design</category>
      <category>Management</category>
      <category>science</category>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=19e06bce-18fe-4e3b-a988-21f0ad13e78e</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=19e06bce-18fe-4e3b-a988-21f0ad13e78e</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/07/22/Mentorship-from-the-mentored-side.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=19e06bce-18fe-4e3b-a988-21f0ad13e78e</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=19e06bce-18fe-4e3b-a988-21f0ad13e78e</feedburner:origLink></item>
    <item>
      <title>NFS on Server 2008 == annoying</title>
      <description>&lt;p&gt;
Got a linux box that has a nfs share - say its at 192.168.1.10 and the share under /etc/exports is 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;/some_nfs_share 192.168.1.0/24(rw,no_root_squash)&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
No problem right?&amp;nbsp; On another linux box within the 192 subnet, the following works quite nicely.&amp;nbsp; Assume folders exist.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;mount.nfs -rw 192.168.1.10:/some_nfs_share&amp;nbsp;/myfiles&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
No sweat, mounts right up and I get read-write so I know I did it correctly and ready for the Win2k8.&amp;nbsp; Hop over, install the unix file share stuff (NFS, SMB) and do this ...
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;mount -o fileaccess=777 nolock casesensitive=yes -u:root -p:*&amp;nbsp;\\192.168.1.10\some_nfs_share&amp;nbsp; *&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
I can read files ...sort of and I can&amp;#39;t write anything.&amp;nbsp; In the windows application logs, I get Event ID: 16397, Source: NfsClnt with this crap
&lt;/p&gt;
&lt;span&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Windows(R) Lightweight Directory Access Protocol (LDAP) failed a request to connect to Active Directory Domain Services(R) for Windows user &amp;lt;Domain\MyUserAccount&amp;gt;.&lt;/em&gt;
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;Without the corresponding UNIX identity of the Windows user, the user cannot access Network File System (NFS) shared resources.&lt;/em&gt;
	&lt;/p&gt;
	&lt;p&gt;
	&lt;em&gt;Verify that the Windows user is in Active Directory Domain Services and has access permissions&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/span&gt;
&lt;p&gt;
The hell?&amp;nbsp; WHY are you trying to authenticate to LDAP?&amp;nbsp; I just gave you a user/pass, why would I need more than that?&amp;nbsp; Ok, FINE I bust out a local account, take that.&amp;nbsp; Nope, exactly same error.&amp;nbsp; Authen fail.&amp;nbsp; I guess I&amp;#39;ll have to go uber-lame and go ftp.&amp;nbsp; I hate ftp.
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/x5qmE0GyQDU/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/06/29/NFS-on-Server-2008-3d3d-annoying.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=c8b704e6-e5fa-4004-8ca0-03c38d495667</guid>
      <pubDate>Mon, 29 Jun 2009 14:03:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=c8b704e6-e5fa-4004-8ca0-03c38d495667</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=c8b704e6-e5fa-4004-8ca0-03c38d495667</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/06/29/NFS-on-Server-2008-3d3d-annoying.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=c8b704e6-e5fa-4004-8ca0-03c38d495667</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=c8b704e6-e5fa-4004-8ca0-03c38d495667</feedburner:origLink></item>
    <item>
      <title>Customer Service - Nexsan</title>
      <description>&lt;p&gt;
Back in January, I was tossed into a fire regarding an environment from your absolute worst nightmare.&amp;nbsp; Yes, that bad.&amp;nbsp; It&amp;#39;s been called a &amp;quot;technology showcase&amp;quot;, &amp;quot;how to do everything wrong&amp;quot;, &amp;quot;what happens when you have no plan&amp;quot; and so on -- a real top notch problem suited for those who are &lt;strike&gt;stupid enough&lt;/strike&gt;&amp;nbsp;given the opportunity to fix something so terrible, I didn&amp;#39;t&amp;nbsp;really know where to start.  
&lt;/p&gt;
&lt;p&gt;
When I got my mind around this environment and some of the terrible things within it, I found something rather surprising -- lack of support and willingness to assist by vendors of hardware and low-level software -- &lt;strong&gt;that were under warranty&lt;/strong&gt;.&amp;nbsp; Some of which when contacted return an email saying &amp;quot;we don&amp;#39;t recognize your email address, go away&amp;quot;, others go into a black hole.&amp;nbsp; Then came one whoop-ass exception - Nexsan. 
&lt;/p&gt;
&lt;p&gt;
For those who&amp;#39;ve never heard of them, &lt;a href="http://www.nexsan.com/" target="_blank"&gt;Nexsan&lt;/a&gt; makes Storage Area Network devices and other storage centric solutions (archiving, compliance)&amp;nbsp;for various industries such as Financial, Health care, etc.&amp;nbsp; I was unfamiliar with Nexsan before this, but now, I&amp;#39;m a big fan for a bunch of reasons. 
&lt;/p&gt;
&lt;p&gt;
First off,&amp;nbsp;finding a contact.&amp;nbsp; I was AMAZED at how hard it was to get a simple &amp;quot;support@&amp;quot; or &amp;quot;contact@&amp;quot; addresses from some other site, but Nexsan does it right -- &amp;quot;support@nexsan.com&amp;quot; what a concept!&amp;nbsp; Simple, easy.&amp;nbsp; Sooo how&amp;#39;s the response?&amp;nbsp; Well, you get the auto-reply as confirmation and normally you get a reply within an hour or so.&amp;nbsp; That&amp;#39;s more than reasonable.&amp;nbsp; I typically expect 4 business hours give or take. 
&lt;/p&gt;
&lt;p&gt;
Second, willingness to help.&amp;nbsp; This is where Nexsan &amp;quot;gets it&amp;quot;.&amp;nbsp; Most companies I&amp;#39;ve found give you a not-so-greatly-trained person that is probably looking though a book to find your problem and are more than happy to push you off to the next person.&amp;nbsp; This never happened, not once.&amp;nbsp; My first contact person, Darrell Snipes asked that I give him a call and discuss our situation.&amp;nbsp; After a short talk, he emailed me some recommendations for performance, a best practice document, a new firmware version, when our current support was going to run out&amp;nbsp;&lt;strong&gt;and&lt;/strong&gt; how to send him back the logs so he could take a deeper look ... and he followed&amp;nbsp;up.&amp;nbsp; What else could you want from a device you know nothing about?&amp;nbsp; I couldn&amp;#39;t think of one! 
&lt;/p&gt;
&lt;p&gt;
Third, following though and going beyond.&amp;nbsp; At where I work, we push for exceeding client&amp;#39;s expectations all the time -- someone must have told them the same thing.&amp;nbsp; Our support ran out and, of course, we ran into a problem.&amp;nbsp; With no more contract, nothing, I expected the rightfully-so &amp;quot;too bad, so sad&amp;quot;.&amp;nbsp; I contacted them asking if we could open up a pay-per-incident ticket&amp;nbsp;and this is the response I got ... 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;&lt;span style="font-family: 'Calibri','serif'; color: #004080; font-size: 10pt"&gt;Jesse,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Calibri','serif'; color: #004080; font-size: 10pt"&gt;If your unit is out of warranty/support as a industry leading company we don&amp;rsquo;t mind providing you with a help Monday to Friday 7AM to 5 PM PST.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Calibri','serif'; color: #004080; font-size: 10pt"&gt;However we will not be able to issue any RMA for damaged parts or anything similar.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Calibri','serif'; color: #004080; font-size: 10pt"&gt;Please let me know if you need any additional help,&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
It isn&amp;#39;t a failure and wow, how great is that.&amp;nbsp; I sent a reply asking them about a problem and&amp;nbsp;again, totally reasonable, expecting the stated&amp;nbsp;7am to 5pm PST -- I sent my reply around 7:45pm fully NOT expecting a reply until the next day.&amp;nbsp; At 11:42pm EST Chad Steele responded to my question, saying it was very fixable (firmware, we&amp;#39;re WAY out of date) and to boot, 11:42pm is&amp;nbsp;not within the 5pm PST time frame.&amp;nbsp; Define : &lt;u&gt;Awesomeness&lt;/u&gt;.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I have a short list of companies on my &amp;quot;list&amp;quot;.&amp;nbsp; Companies I&amp;nbsp;do not hesitate recommending or sending anyone to&amp;nbsp;-- Nexsan is definitely on that list.&amp;nbsp; I &lt;strong&gt;&lt;em&gt;highly&lt;/em&gt;&lt;/strong&gt; recommend them. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/DVC1OK4UUOw/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/06/25/Customer-Service-Nexsan.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=628319f7-bd27-4649-91a6-6f199bec5ff5</guid>
      <pubDate>Thu, 25 Jun 2009 12:34:00 -0500</pubDate>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=628319f7-bd27-4649-91a6-6f199bec5ff5</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=628319f7-bd27-4649-91a6-6f199bec5ff5</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/06/25/Customer-Service-Nexsan.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=628319f7-bd27-4649-91a6-6f199bec5ff5</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=628319f7-bd27-4649-91a6-6f199bec5ff5</feedburner:origLink></item>
    <item>
      <title>Reverse phishing?</title>
      <description>&lt;p&gt;
I&amp;#39;m convinced there&amp;#39;s a new type of phishing expedition going on in an attempt to hack search engine results.&amp;nbsp; Why?&amp;nbsp; Comments on my blog&amp;nbsp;that don&amp;#39;t add up.&amp;nbsp; For one, the magic key words the person leaves as their name.&amp;nbsp; I&amp;#39;ve dropped this as an image because I want none of those getting picked up by a search engine but its pretty clear they want an email.  
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.rileytech.net/image.axd?picture=2009%2f6%2fposts.jpg" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
The IP traces back to .ph ...hmmm, think they&amp;#39;re could be a &amp;quot;California Orange County Lawyer&amp;quot;? Hardly not.&amp;nbsp; Website comes back to nothing, which surprises me, but I&amp;#39;ve seen them come back to random, infested sites.&amp;nbsp; Icing on the cake, the half right, confusing context english.&amp;nbsp; Ahhh I love it.&amp;nbsp; Curious, should I send an email to that account (after I create a new fake one of course)?&amp;nbsp; Could be fun... 
&lt;/p&gt;
&lt;p&gt;
Update : 6/17/09 - here&amp;#39;s another one I got.&amp;nbsp; I post &amp;quot;interesting matters here&amp;quot;!&amp;nbsp; Yay!
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.rileytech.net/image.axd?picture=2009%2f6%2fphish1.jpg" alt="" /&gt;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/of0hmwuajMs/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/06/12/Reverse-phishing.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=83d146ba-1b10-4233-9015-e4cea97f4224</guid>
      <pubDate>Fri, 12 Jun 2009 08:35:00 -0500</pubDate>
      <category>Security</category>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=83d146ba-1b10-4233-9015-e4cea97f4224</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=83d146ba-1b10-4233-9015-e4cea97f4224</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/06/12/Reverse-phishing.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=83d146ba-1b10-4233-9015-e4cea97f4224</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=83d146ba-1b10-4233-9015-e4cea97f4224</feedburner:origLink></item>
    <item>
      <title>Rolling off the Net Admin - 12 lessons learned</title>
      <description>&lt;p&gt;
My past rash of posts have mostly focused on hardware, servers, linux and other related devices and I&amp;#39;m glad to say, I&amp;#39;m heading back into development.&amp;nbsp; Granted, its VB but its development.&amp;nbsp; So what have I learned in my nearly 6 month absence?&amp;nbsp; Quite a few things, some of which will change my approach on a variety of things. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;0. Doing lists of things is cool.&lt;/strong&gt;&amp;nbsp; I like lists.&amp;nbsp; I like sites that give me lists.&amp;nbsp; It gives me a&amp;nbsp;clear beginning and end but also limits the amount of content for each point.&amp;nbsp; I don&amp;#39;t have to explain in great detail how I get to the point, it&amp;#39;s already spelled out and I can get to explaining it. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. Outages&amp;nbsp;suck on any platform.&lt;/strong&gt;&amp;nbsp; Windows, Linux, don&amp;#39;t matter.&amp;nbsp; When the system goes down, regardless of the reason, its always&amp;nbsp;like cockroaches when the lights turn on -- everyone&amp;nbsp;darts around wildly until someone gets an&amp;nbsp;answer ...or the lights go out.&lt;strong&gt;&amp;nbsp;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. If you know nothing about linux, doing everything is near impossible without someone who does or one uber well written book or ...ten.&lt;/strong&gt;&amp;nbsp; Forums, web sites, etc are not very effective when you want to know how to do something linux.&amp;nbsp; There are rare exceptions to this (&lt;a href="http://nagios.org/docs" target="_blank"&gt;Nagios&lt;/a&gt; website is _very_ nicely documented for instance), but an overwhelming majority of them assume you already know 99% of the problem or issue you are searching for - worse, it doesn&amp;#39;t get better when you do have a specific problem.&amp;nbsp; There&amp;#39;s so many distros, code bases, dependencies, etc you might as well be kicked out into the Congo with a bag full of money and t-bone steaks pinned to your body. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Few Linux admins understand anything about Windows, other than they don&amp;#39;t like it.&amp;nbsp; &lt;/strong&gt;Yes, this is a bold statement, but I&amp;#39;ve found compounding evidence that it is true.&amp;nbsp; Opinions run rampant and&amp;nbsp;a common approach is &amp;quot;if I don&amp;#39;t understand it, it must be doing it wrong&amp;quot;&amp;nbsp;-- which is a total setup for failure.&amp;nbsp; I&amp;#39;ve learned how to make linux do things ...why can&amp;#39;t linux admins do the same in windows?&amp;nbsp; The arguments of changing things, seeing things and modifying every little aspect&amp;nbsp;is completely, utterly&amp;nbsp;a lack of an ability to understand and drive to FIND how one OS does something and 99.999% of the time is&amp;nbsp;unnecessary. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. The art of asking the right question is still solid gold.&lt;/strong&gt;&amp;nbsp; See #2.&amp;nbsp; Being able to ask those who have a good idea of how it works is great, knowing how to ask them the right question to get an answer is best.&amp;nbsp; Ask your questions carefully and fully.&amp;nbsp; Listen a lot, speak less. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5. Things that are simple in windows are not in linux. &lt;/strong&gt;I don&amp;#39;t care if every linux admin on the planet says otherwise, it&amp;#39;s simply not true.&amp;nbsp; Compiling code, making then making installs is the most bass akwards way of getting something to work that I have ever seen.&amp;nbsp; If I download something and run it, I expect it to install.&amp;nbsp; Linux does not do this very well.&amp;nbsp; Further, the code you download, build and install may not work on the next version of OS or another distro.&amp;nbsp; I won&amp;#39;t have to worry about this as much with windows applications ...they typically tell you that up front. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;6. Once setup,&amp;nbsp;linux services&amp;nbsp;are easier to replicate than in windows.&amp;nbsp; &lt;/strong&gt;It might be a pain to get up and running at first, but once its setup -- copy paste that conf file out and you can clone it just about anywhere, quickly and easily and you can do it with just about anything.&amp;nbsp; Windows, that&amp;#39;s not always the case. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;7. The configuration process is nearly identical for every service in linux. &lt;/strong&gt;Most services come with a /etc/&amp;lt;service&amp;gt;, /etc/&amp;lt;service&amp;gt;.conf where most of the action occurs.&amp;nbsp; Lots of services are setup this way. Some of them have a check config command of some kind so you can test it before you punt it out there.&amp;nbsp; Also, some of it will hot-replace one instance with another without killing people using your system.&amp;nbsp; Now that&amp;#39;s kinda cool. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;8. A linux OS version 5 and version 5.3 could mean months ...or years have passed between them.&lt;/strong&gt;&amp;nbsp; We have been using CentOS 4.4 and 5.0 - current version is 5.3.&amp;nbsp; At first glance, assumption could be that it&amp;#39;s only a minor revision from 5 to 5.3.&amp;nbsp; Later I found out it&amp;#39;s been 3 years between them, 4.4 was 5+ years.&amp;nbsp; Minor revision numbers aren&amp;#39;t. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;9. Admins are ignored as much as Devs. &lt;/strong&gt;Tangent story time.&amp;nbsp; The Army core of engineers told the city of New Orleans years ago that, at best, it was &lt;strong&gt;&lt;em&gt;&lt;u&gt;DESIGNED&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; to withstand a category 3 hurricane.&amp;nbsp; When a category 5 hit, everyone when into an uproar that&amp;nbsp;it, the levy,&amp;nbsp;failed.&amp;nbsp; No, wrong, it exceeded its tolerance and therefore should not have been expected to withstand that level of force at all.&amp;nbsp; It&amp;#39;s like taking a common home and building it to 20 stories and wondering why the foundation fell apart.&amp;nbsp; The warnings of devs and admins are ignored ...until the category 5 hits.&amp;nbsp; Then its &amp;quot;oh wow, this works so much better&amp;quot;.&amp;nbsp; Yep, tried to warn ya! 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;10. Free versions of stuff&amp;nbsp;still kinda suck.&lt;/strong&gt;&amp;nbsp; VMware 2, CentOS, and don&amp;#39;t get me started about the bajillion other items within the app itself -- a lot of these things suck.&amp;nbsp; No support, spotty &amp;quot;community&amp;quot; following (much less help), limitations because after all, they want you to pay for the big boy version, makes these things not so great.&amp;nbsp; If you want the real toys, pony up and pay for it.&amp;nbsp; Trail versions still suck more, but free&amp;nbsp;has its drawbacks.&amp;nbsp; Cept for nagios ...I&amp;#39;m a fan of nagios ...and PNP4Nagios.&amp;nbsp; Both are free and ain&amp;#39;t that bad.&amp;nbsp; Needs a better gui though. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;11. Mind stretching is rewarding&amp;nbsp;the most when it&amp;#39;s something you know nothing about.&amp;nbsp;&lt;/strong&gt;Going into this I knew how to download linux ...sometimes and knew next to nothing about it.&amp;nbsp; Now I&amp;#39;ve got SVN on a home server just for kicks along with it doing some other random junk &amp;quot;just because I can&amp;quot;.&amp;nbsp; It&amp;#39;s equally nice to know I can do it again whenever and it wasn&amp;#39;t a fluke. 
&lt;/p&gt;
&lt;p&gt;
To wrap things up - am I a fan of linux?&amp;nbsp; No.&amp;nbsp; Between rpms, dependencies, compiling code&amp;nbsp;that isn&amp;#39;t mine, sudo-ing&amp;nbsp;and other silliness (did you know root can be called reut?),&amp;nbsp;it&amp;nbsp;isn&amp;#39;t my first choice.&amp;nbsp; Does it have a place?&amp;nbsp; Sure.&amp;nbsp; I would use linux at home to monitor sensors all over my house but&amp;nbsp;I wouldn&amp;#39;t use it in something that requires a living&amp;nbsp;application, by that I mean something that&amp;#39;s going to move constantly and change it&amp;#39;s &amp;quot;shape&amp;quot;.&amp;nbsp;&amp;nbsp;It was interesting to work on and downright annoying at others, but I&amp;#39;m glad I did - &amp;quot;it&amp;#39;s just another club in the bag&amp;quot;. 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/rileytech/~3/A7ldA1DNQ2Y/post.aspx</link>
      <author>jeriley.nospam@nospam.gmail.com (Jesse)</author>
      <comments>http://blog.rileytech.net/post/2009/05/29/Return-from-Net-Admin-lessons-learned.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.rileytech.net/post.aspx?id=d679c453-27ea-4d55-b5b1-193a349833e7</guid>
      <pubDate>Fri, 29 May 2009 09:43:00 -0500</pubDate>
      <category>Linux</category>
      <dc:publisher>Jesse</dc:publisher>
      <pingback:server>http://blog.rileytech.net/pingback.axd</pingback:server>
      <pingback:target>http://blog.rileytech.net/post.aspx?id=d679c453-27ea-4d55-b5b1-193a349833e7</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.rileytech.net/trackback.axd?id=d679c453-27ea-4d55-b5b1-193a349833e7</trackback:ping>
      <wfw:comment>http://blog.rileytech.net/post/2009/05/29/Return-from-Net-Admin-lessons-learned.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.rileytech.net/syndication.axd?post=d679c453-27ea-4d55-b5b1-193a349833e7</wfw:commentRss>
    <feedburner:origLink>http://blog.rileytech.net/post.aspx?id=d679c453-27ea-4d55-b5b1-193a349833e7</feedburner:origLink></item>
  </channel>
</rss>
