<?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.jeffreypalermo.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Jeffrey Palermo (.com)</title><link>http://jeffreypalermo.com/</link><description>Chief Technology Officer, Headspring Systems</description><generator>Graffiti CMS 1.2 (build 1.2.0.2308)</generator><lastBuildDate>Thu, 02 Jul 2009 22:27:22 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.jeffreypalermo.com/jeffreypalermo" type="application/rss+xml" /><feedburner:emailServiceId>jeffreypalermo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Agile Austin talk coming up this next Tuesday – June 10th</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/CSRKChRvYOc/</link><pubDate>Thu, 02 Jul 2009 21:27:22 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/agile-austin-talk-coming-up-this-next-tuesday-ndash-june-10th/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>1</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;I am honored to be the speaker at &lt;a href="http://agileaustin.org"&gt;AgileAustin&lt;/a&gt; this next Tuesday on June 10th, 2009.&amp;#160; You can see the details of my &lt;a href="http://www.agileaustin.org/?p=181"&gt;talk here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Speaker: Jeffrey Palermo – CTO, Headspring   &lt;br /&gt;Title: Being The Manager Of An Agile Team    &lt;br /&gt;Description:    &lt;br /&gt;Extreme Programming has lots to say about agile software engineering and testing.&amp;#160; Scrum has a lot to say about the process of iterating and organizing priority.&amp;#160; Lean has a lot to say about increasing production and production quality as well as eliminating waste.&amp;#160; Lots of client, even with agile training, still remain with questions about where management fits in within an agile culture.&amp;#160; This session is a blend of project management and people management.&amp;#160; Some of the looming questions surround:&lt;/p&gt;  &lt;p&gt;* How to deal with risk   &lt;br /&gt;* Predicting issues    &lt;br /&gt;* Forecasting    &lt;br /&gt;* Hiring and firing    &lt;br /&gt;* No broken windows (defects)    &lt;br /&gt;* Feedback and metrics    &lt;br /&gt;* Managing scope &amp;amp; setting expectations&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Additional Information:   &lt;br /&gt;Cost: Free    &lt;br /&gt;Map &amp;amp; Directions: From South of Hwy 183: Travel North on Mopac (Loop 1) exiting at Capitol of Texas Hwy. Make a U-turn before the traffic light. Go one block on the access road.&amp;#160; Stonebridge Plaza One is to the right, with an entrance between the two towers.&amp;#160; Building One is on the right as you enter.&amp;#160; (map)    &lt;br /&gt;More Info:&amp;#160; &lt;a href="mailto:info@AgileAustin.org"&gt;info@AgileAustin.org&lt;/a&gt;    &lt;br /&gt;Agenda: Sign-in and Networking 6:00 - 6:30 PM    &lt;br /&gt;Announcements, Presentation 6:30 - 8:00 PM    &lt;br /&gt;Q&amp;amp;A and Networking 8:00 - 8:30 PM&lt;/p&gt;  &lt;p&gt;Proof of Attendance forms will be provided for PMI (PDU), ASQ (RU) and PDMA (PDH) re-certifications&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=CSRKChRvYOc:OpR9A5y9wz8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=CSRKChRvYOc:OpR9A5y9wz8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=CSRKChRvYOc:OpR9A5y9wz8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/CSRKChRvYOc" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/agile-austin-talk-coming-up-this-next-tuesday-ndash-june-10th/</feedburner:origLink></item><item><title>Upgraded to Windows 7 RC – how I kept from reinstalling everything, and what didn’t work</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/3uZQAYdqTGs/</link><pubDate>Thu, 02 Jul 2009 21:15:17 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/upgraded-to-windows-7-rc-ndash-how-i-kept-from-reinstalling-everything-and-what-didn-rsquo-t-work/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>0</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;Last night, I downloaded and installed Windows 7 RC.&amp;#160; I installed the Beta for my wife on a spare laptop, and she hated it, so I gave her her Windows XP back. :-).&amp;#160; I have used it for a single day now, and I haven’t encountered any blocking issues.&amp;#160; My process:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Backup disk partition with Acronis True Image Home 2009&lt;/li&gt;    &lt;li&gt;Upgrade from Vista x64 to Windows7 x64&lt;/li&gt;    &lt;li&gt;Try all critical applications and drivers to ensure they still work&lt;/li&gt;    &lt;li&gt;Breath a sigh of relief.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If anything had stopped working, I was prepared to immediately reimage my hard drive with the backup image taken with Acronis (I don’t like to repave machines – big waste of time).&lt;/p&gt;  &lt;p&gt;Here is a picture of my new desktop (1900 x 1200) from the Dell 24in monitor.&amp;#160; I have checked the following things I depend on daily and have ensured they still work:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Google Chrome&lt;/li&gt;    &lt;li&gt;Skype&lt;/li&gt;    &lt;li&gt;Visual Studio 2008 w/ Resharper (I did turn off UAC because it’s still annoying)&lt;/li&gt;    &lt;li&gt;Tethering Windows Mobile Smartphone through AT&amp;amp;T for mobile internet connection&lt;/li&gt;    &lt;li&gt;Google Desktop (search and app launching)&lt;/li&gt;    &lt;li&gt;Pidgin (IM)&lt;/li&gt;    &lt;li&gt;PortableApps&lt;/li&gt;    &lt;li&gt;TweetDeck&lt;/li&gt;    &lt;li&gt;&lt;a href="http://microsoft.com"&gt;Microsoft&lt;/a&gt; Office&lt;/li&gt;    &lt;li&gt;CCTray&lt;/li&gt;    &lt;li&gt;And all my diverse hardware&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What didn’t work was Syncing my smartphone.&amp;#160; I haven’t dug in, but that doesn’t work at present (Samsung BlackJack II with WM5).&lt;/p&gt;  &lt;p&gt;&lt;img style="margin: 5px 0px; display: inline" title="image" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/UpgradedtoWindows7RChowIkeptfromreinstal_E490/image_1bca3c1e-f623-4e25-af22-3ac3c695d5c7.png" width="648" height="405" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=3uZQAYdqTGs:KiFT9JqI_Hg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=3uZQAYdqTGs:KiFT9JqI_Hg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=3uZQAYdqTGs:KiFT9JqI_Hg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/3uZQAYdqTGs" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/upgraded-to-windows-7-rc-ndash-how-i-kept-from-reinstalling-everything-and-what-didn-rsquo-t-work/</feedburner:origLink></item><item><title>Come out today to Mangia Pizza for some great agile talk</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/HxZ41N20s_E/</link><pubDate>Thu, 02 Jul 2009 20:59:07 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/come-out-today-to-mangia-pizza-for-some-great-agile-talk/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>0</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;h6&gt;&lt;/h6&gt;  &lt;p&gt;Phone 349-2126&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" align="right" src="http://www.mangiapizza.com/images/uploads/mapimage_mesa2.gif" /&gt;8012 Mesa Drive&lt;/p&gt;  &lt;p&gt;Austin, TX&amp;#160; 78731&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Agile Austin is facilitating a weekly session where you can come and get your agile questions answered. . . or just hang out with other software professionals and exchange ideas.&amp;#160; I’ll be out today at Mangia Pizza at 6PM.&lt;/p&gt;  &lt;p&gt;You can see the &lt;a href="http://agileaustin.org"&gt;AgileAustin&lt;/a&gt;&amp;#160;&lt;a href="http://www.agileaustin.org/"&gt;announcement here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=HxZ41N20s_E:PJMuGy6Avu4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=HxZ41N20s_E:PJMuGy6Avu4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=HxZ41N20s_E:PJMuGy6Avu4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/HxZ41N20s_E" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/come-out-today-to-mangia-pizza-for-some-great-agile-talk/</feedburner:origLink></item><item><title>Running development from a RAM disk – options and products</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/PxK9ExqU8Nk/</link><pubDate>Tue, 30 Jun 2009 22:26:08 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/running-development-from-a-ram-disk-ndash-options-and-products/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>3</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;In my &lt;a href="http://jeffreypalermo.com/blog/speeding-up-the-build-ndash-ditch-the-ssd-and-go-for-the-ram-drive/"&gt;post about ditching the Solid State Drive in favor of the RAM disk&lt;/a&gt;, I mentioned the speed increases.&amp;#160; Taking away the IO bottleneck is significant, and it can let us turn our attention to other bottlenecks that remain.&amp;#160; Here, I am going to outline what I’m currently using, what I’ve tried, and some steps to get it all working.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Workstation specs&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If your Windows OS is already paging to disk because of a lack of RAM, then using a ram disk doesn’t make much sense.&amp;#160; You must have unused RAM.&amp;#160; I tried Vista SuperFetch for almost a year, and while it did fill up all available RAM, I still didn’t see the machine fly.&amp;#160; Allocating&amp;#160; a RAM disk with my surplus of RAM did make the machine move much quicker.&amp;#160; I’ve looked at SuperCache and SuperVolume from SuperSpeed, but those products are only offered for Windows XP.&amp;#160; They seem very promising because SuperCache does a delayed write on the entire boot drive and uses RAM as the primary IO resource.&amp;#160; &lt;/p&gt;  &lt;p&gt;My workstation (and that of all of my employees) is:&amp;#160; &lt;strong&gt;Dell Precision M4300 laptop (2.x GHz dual core proc, 8 GB RAM, Seagate 7200 hard drives)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I was able to get 4GB RAM sticks from memory-up.com for less than $160 each.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Products&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I tried out &lt;a href="http://www.superspeed.com/desktop/ramdisk.php"&gt;SuperSpeed RamDisk Plus&lt;/a&gt; as well as &lt;a href="http://www.dataram.com/products-and-services/ramdisk/"&gt;DataRam RAMDisk&lt;/a&gt;.&amp;#160; Both products can support the size of the RAM disk that I need (3GB).&amp;#160; Both products automatically persist the contents of the RAM disk to the hard drive upon shutdown and restart, so there is a seamless experience with both.&amp;#160; Because I’m using these in a laptop scenario, a sudden power outage is unlikely, and all the stored files are working copies of Subversion, where commits happen multiple times per day.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Decision&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ultimately, I’m currently running DataRam RAMDisk not because I see it as materially superior to SuperSpeed’s product, but because it gives me what I need for a lower investment.&amp;#160; RamDisk Plus gives me much more than I need; therefore, I would be paying for unneeded features.&amp;#160; I used both, and both are easy to use.&amp;#160; RamDisk Plus is about $100 for a Vista x64 license, and DataRam’s RAMDisk is free for the size I need, which is &amp;lt;= 4GB.&amp;#160; You have to pay for larger.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline; margin: 0px 10px 0px 0px" alt="Ramdisk Screenshot" src="http://www.dataram.com/images/page-images/ramdisk-screenshot-lowres.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;With DataRam RAMDisk, you can format it yourself, so that’s what I did by formatting it as NTFS with Disk Manager.&amp;#160; You can see that I’ve mapped a 3GB RAM disk to the R: drive.&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display: inline; margin: 5px 0px" height="138" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/RunningdevelopmentfromaRAMdiskoptionsand_88C1/image_5c916a04-18c2-4166-9938-37a894d613b2.png" width="610" /&gt;&lt;/p&gt;  &lt;p&gt;I have also mounted it inside the C:\ drive so that I can access it quickly from WINDOWS+R:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display: inline" height="268" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/RunningdevelopmentfromaRAMdiskoptionsand_88C1/image_54daf0da-67bf-474f-ae2b-83a3288367f7.png" width="493" /&gt;&lt;/p&gt;  &lt;p&gt;I did this through the Disk Manager’s mount points:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display: inline; margin: 5px 0px" height="327" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/RunningdevelopmentfromaRAMdiskoptionsand_88C1/image_3639413f-3f01-4e5e-9563-bfffb6fdb0bf.png" width="494" /&gt; &lt;/p&gt;  &lt;p&gt;My final step was to set SQL Server to use the RAM disk as its disk for newly-created databases.&amp;#160; Our line-of-business applications are IO intensive including database interaction, and the automated tests are especially so.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img title="image" style="display: inline; margin: 5px 0px" height="599" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/RunningdevelopmentfromaRAMdiskoptionsand_88C1/image_055347cf-27db-49d2-bbc7-64b5eb12d09c.png" width="669" /&gt; &lt;/p&gt;  &lt;p&gt;All-in-all, the setup is pretty simple regardless of which RAM disk product is used.&amp;#160; I love the speed improvement it has given the workstations.&amp;#160; Obviously running less stuff in an automated build will make it run faster, but there are some things that just MUST be run in a first-line build, and that build must remain fast.&amp;#160; Besides the build, even compilation and working inside Visual Studio is quicker because all of the files are in RAM.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=PxK9ExqU8Nk:MhhBTAiHUIg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=PxK9ExqU8Nk:MhhBTAiHUIg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=PxK9ExqU8Nk:MhhBTAiHUIg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/PxK9ExqU8Nk" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/running-development-from-a-ram-disk-ndash-options-and-products/</feedburner:origLink></item><item><title>Need certified ScrumMaster for a project immediately – send me a note</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/xeYDxhoU6dk/</link><pubDate>Tue, 23 Jun 2009 14:15:00 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/need-certified-scrummaster-for-a-project-immediately-ndash-send-me-a-note/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>2</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;&lt;strong&gt;I have a year-long contract for a capable &lt;/strong&gt;&lt;a href="http://www.mountaingoatsoftware.com/scrummaster"&gt;&lt;strong&gt;ScrumMaster&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&amp;nbsp; If you have been a programmer, that is a plus but not necessary.&amp;nbsp; This is for a government client of ours.&amp;nbsp; Send me a note using the &lt;/strong&gt;&lt;a href="http://jeffreypalermo.com/contact/"&gt;&lt;strong&gt;contact form&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; or respond to jobs [at} headspringsystems.com&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Austin, TX candidates only. &amp;nbsp; Will not pay for travel.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=xeYDxhoU6dk:sRue1mOpxz0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=xeYDxhoU6dk:sRue1mOpxz0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=xeYDxhoU6dk:sRue1mOpxz0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/xeYDxhoU6dk" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/need-certified-scrummaster-for-a-project-immediately-ndash-send-me-a-note/</feedburner:origLink></item><item><title>The ASP.NET MVC ActionController – The controllerless action, or actionless controller</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/yCfwNqlhIz0/</link><pubDate>Sat, 20 Jun 2009 04:14:01 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/the-asp-net-mvc-actioncontroller-ndash-the-controllerless-action-or-actionless-controller/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>19</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;There has been quite&amp;#160; a bit of discussion about how controllers are really namespaces trying to get out once you use the concept on a nontrivial application.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.persistall.com/Default.aspx"&gt;Brian Donahue’s&lt;/a&gt; &lt;a href="http://persistall.com/archive/2008/02/18/mvc-or-mva--or-what-do-controllers-do-anyway.aspx"&gt;post&lt;/a&gt; on &lt;a href="http://www.persistall.com/archive/2009/06/19/mvc---the-anti-controller-revolution-heats-up.aspx"&gt;The anti-controller revolution&lt;/a&gt; prompted me to do this little experiment.&amp;#160; He references some &lt;a href="http://twitter.com/jbogard/status/2210475775"&gt;twitter&lt;/a&gt; &lt;a href="http://twitter.com/jbogard/status/2193001518"&gt;posts&lt;/a&gt; by &lt;a href="http://www.lostechies.com/blogs/jimmy_bogard/default.aspx"&gt;Jimmy Bogard&lt;/a&gt;, one of my esteemed consultants at &lt;a href="http://headspringsystems.com"&gt;&lt;/a&gt;&lt;a href="http://www.headspringsystems.com/"&gt;Headspring Systems&lt;/a&gt;.&lt;/a&gt;&amp;#160; &lt;a href="http://www.lostechies.com/blogs/chad_myers/archive/2009/06/18/going-controller-less-in-mvc-the-way-fowler-meant-it.aspx"&gt;Chad Myers also has opined&lt;/a&gt; about the notion of more independent actions and has cited precedence.&lt;/p&gt;  &lt;p&gt;My interest in this space is purely practical.&amp;#160; I really don’t care how patterns are published.&amp;#160; I don’t care about “being true” to the MVC pattern or any other pattern.&amp;#160; I’m more interested in being effective with web applications on .Net.&amp;#160; After having experience with &lt;a href="http://mvccontrib.org"&gt;MvcContrib&lt;/a&gt;, &lt;a href="http://codecampserver.org"&gt;CodeCampServer&lt;/a&gt;, and a much larger ASP.NET MVC implementation (200+ screens), I have come to see how controllers end up searching for an identity.&amp;#160; What is a ProductController anyway?&amp;#160; That’s just about as specific as classes called ProductService, ProductManager, ProductUtility, etc.&amp;#160; &lt;/p&gt;  &lt;h2&gt;Overview&lt;/h2&gt;  &lt;p&gt;You can SVN checkout the following url to see my spike code:&amp;#160; &lt;a title="https://palermo.googlecode.com/svn/actioncontroller/trunk" href="https://palermo.googlecode.com/svn/actioncontroller/trunk"&gt;https://palermo.googlecode.com/svn/actioncontroller/trunk&lt;/a&gt;.&amp;#160; You can get it in &lt;a href="http://palermo.googlecode.com/files/ActionController.zip"&gt;zip file format here&lt;/a&gt;. (I repeat these links below)&lt;/p&gt;  &lt;p&gt;In the default ASP.NET MVC project template, there is a HomeController, and then there is an AccountController that hooks up the ASP.NET MembershipProvider.&amp;#160; The AccountController does registering, logging in/out, changing password, and it is WAY too big.&amp;#160; The AccountController lacks cohesion.&amp;#160; The AccountController has more than one reason to change.&amp;#160; Each of the actions seem like they are more cohesive.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;I’m going to narrate a before and an after of the ASP.NET MVC default project &lt;/strong&gt;as I refactored it into being a ActionController-based application.&amp;#160; The controller names were promoted to namespaces and the action names were promoted to controller names.&amp;#160; The requests for a GET and POST of the same url are handled by the same ActionController since the action name is the same.&amp;#160; There are two methods in the class; one that handles GET and one that handles POST.&amp;#160; Within the ActionController, the methods are named “execute” since the name of the action is in the class name.&amp;#160; View structure stayed the same.&amp;#160; Seems there isn’t much pain in the view structure.&lt;/p&gt;  &lt;h2&gt;Routes&lt;/h2&gt;  &lt;p&gt;Let’s look at the possible URLs in the default project:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;/ (GET) &lt;/li&gt;    &lt;li&gt;/Home/About (GET) &lt;/li&gt;    &lt;li&gt;/Account/LogOn (GET) &lt;/li&gt;    &lt;li&gt;/Account/LogOn (POST) &lt;/li&gt;    &lt;li&gt;/Account/Register (GET) &lt;/li&gt;    &lt;li&gt;/Account/Register (POST) &lt;/li&gt;    &lt;li&gt;/Account/ChangePassword (GET) &lt;/li&gt;    &lt;li&gt;/Account/ChangePassword (POST) &lt;/li&gt;    &lt;li&gt;/Account/ChangePasswordSuccess (GET) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Throughout my refactoring, the urls do not change.&amp;#160; The routes do not change.&amp;#160; The only thing that changes is that the controllers are broken up into multiple classes along action lines.&amp;#160; For instance, There are two LogOn actions.&amp;#160; One for the form rendering, and one to accept the post.&amp;#160; These two are cohesive together, but they are not cohesive when combined with register, like they are by default with the AccountController.&lt;/p&gt;  &lt;h2&gt;Before&lt;/h2&gt;  &lt;p&gt;&lt;img title="image" style="display: block; float: none; margin: 5px auto" height="402" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/The.NETMVCActionControllerThecontrollerl_1425B/image_66ca8685-ad37-45ff-a3ad-dc073c6cac56.png" width="235" /&gt;&amp;#160; Let’s start at the beginning.&amp;#160; To the top (MvcApplication2) is the default project with no modification.&amp;#160; You can check out the code yourself.&amp;#160; The HomeController is pretty easy to dissect, but the Account controller is responsible for 7 independent requests.&amp;#160; 5 too many, I think.&amp;#160; &lt;/p&gt;  &lt;h2&gt;After&lt;/h2&gt;  &lt;p&gt;&lt;img title="image" style="display: block; float: none; margin: 5px auto" height="522" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/The.NETMVCActionControllerThecontrollerl_1425B/image_7acc3d2a-3097-463e-92eb-7418bd4aaceb.png" width="263" /&gt;To the top(MvcApplication1), we have what the project ended up looking like after the refactoring.&lt;/p&gt;  &lt;h3&gt;You can see that the actions from the AccountController were promoted to be controllers.&amp;#160; &lt;/h3&gt;  &lt;p&gt;Let’s take a look at the LogOnController.&amp;#160; I have pushed the two Execute methods to the top for clarity.&amp;#160; With ActionControllers, the controller is only concerned about one action.&amp;#160; In this case, the GET pass of the action renders a form, and the POST pass of the action modifies some server state.&amp;#160; Here is the code:&lt;/p&gt;  &lt;h2&gt;Sample ActionController&lt;/h2&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; MvcApplication1.Controllers.Account&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; LogOnController : ActionController&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ActionResult Execute()&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; View();&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;        [AcceptVerbs(HttpVerbs.Post)]&lt;br /&gt;        [System.Diagnostics.CodeAnalysis.SuppressMessage(&lt;span style="color: #006080"&gt;&amp;quot;Microsoft.Design&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;CA1054:UriParametersShouldNotBeStrings&amp;quot;&lt;/span&gt;,&lt;br /&gt;            Justification = &lt;span style="color: #006080"&gt;&amp;quot;Needs to take same parameter type as Controller.Redirect()&amp;quot;&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ActionResult Execute(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; userName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; password, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; rememberMe, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; returnUrl)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!ValidateLogOn(userName, password))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; View();&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            FormsAuth.SignIn(userName, rememberMe);&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(returnUrl))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Redirect(returnUrl);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; RedirectToAction(&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; LogOnController()&lt;br /&gt;            : &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;// This constructor is not used by the MVC framework but is instead provided for ease&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;// of unit testing this type. See the comments at the end of this file for more&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;// information.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; LogOnController(IFormsAuthentication formsAuth, IMembershipService service)&lt;br /&gt;        {&lt;br /&gt;            FormsAuth = formsAuth ?? &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FormsAuthenticationService();&lt;br /&gt;            MembershipService = service ?? &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AccountMembershipService();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IFormsAuthentication FormsAuth&lt;br /&gt;        {&lt;br /&gt;            get;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; set;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IMembershipService MembershipService&lt;br /&gt;        {&lt;br /&gt;            get;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; set;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ValidateLogOn(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; userName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; password)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(userName))&lt;br /&gt;            {&lt;br /&gt;                ModelState.AddModelError(&lt;span style="color: #006080"&gt;&amp;quot;username&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;You must specify a username.&amp;quot;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(password))&lt;br /&gt;            {&lt;br /&gt;                ModelState.AddModelError(&lt;span style="color: #006080"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;You must specify a password.&amp;quot;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!MembershipService.ValidateUser(userName, password))&lt;br /&gt;            {&lt;br /&gt;                ModelState.AddModelError(&lt;span style="color: #006080"&gt;&amp;quot;_FORM&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;The username or password provided is incorrect.&amp;quot;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ModelState.IsValid;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;/pre&gt;

  &lt;br /&gt;What’s at the heart of this, you might think?&amp;#160; There are two things:&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;A Custom controller factory (to find the right ActionController) &lt;/li&gt;

  &lt;li&gt;A controller base class, “ActionController” &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Download&lt;/h2&gt;

&lt;h3&gt;I spiked out an implementation of the ActionController.&amp;#160; This is completely non-vetted in a real environment, but the sample project is available for download &lt;a href="http://palermo.googlecode.com/files/ActionController.zip"&gt;here&lt;/a&gt;. (&lt;a title="http://palermo.googlecode.com/files/ActionController.zip" href="http://palermo.googlecode.com/files/ActionController.zip"&gt;http://palermo.googlecode.com/files/ActionController.zip&lt;/a&gt;)&amp;#160; This includes an &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt; project with the ActionController class.&amp;#160; You can SVN co here:&amp;#160; &lt;a title="https://palermo.googlecode.com/svn/actioncontroller/trunk" href="https://palermo.googlecode.com/svn/actioncontroller/trunk"&gt;https://palermo.googlecode.com/svn/actioncontroller/trunk&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Please download the code and check it out.&amp;#160; What it ends up doing for the actions is groups them cohesively and then the concept of the “controller” becomes a namespace.&amp;#160; The controller factory needs work to be able to locate ActionControllers that are unique within the controller namespace but not unique throughout the project.&amp;#160; This is a rough first pass that I did in 30 minutes.&lt;/p&gt;

&lt;p&gt;I’m not sure if this is what I’ll commit to MvcContrib for more widespread consumption, but I (and my teams) are feeling a bit of pain with bloated controllers, so it’s worth considering.&amp;#160; What I like most about this approach is that the only thing that changed was the controllers.&amp;#160; The routes don’t change.&amp;#160; The view folder structure doesn’t change.&amp;#160; The Html helpers don’t change.&amp;#160; We merely refer to the concept of a controller as a namespace rather than a class.&amp;#160; We now refer to an action as a class instead of a method.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=yCfwNqlhIz0:v6fgur4FSZw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=yCfwNqlhIz0:v6fgur4FSZw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=yCfwNqlhIz0:v6fgur4FSZw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/yCfwNqlhIz0" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/the-asp-net-mvc-actioncontroller-ndash-the-controllerless-action-or-actionless-controller/</feedburner:origLink></item><item><title>Death of the professional speaker?  Will never happen</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/whg30cbfRgs/</link><pubDate>Fri, 19 Jun 2009 11:56:34 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/death-of-the-professional-speaker-will-never-happen/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>4</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;I was listening to &lt;a href="http://blogs.tedneward.com/"&gt;Ted Neward&lt;/a&gt; on &lt;a href="http://www.hanselman.com/blog/HanselminutesOn9InNorwayInsideTheSpeakersRoom.aspx"&gt;Hanselminutes from the NDC&lt;/a&gt;, and he mentions that local conferences are taking away from professional conferences like VSLive and DevConnections.&amp;#160;&amp;#160; His hypothesis is that if these professional conferences go away, then capable speakers will not have the incentive to go around teaching.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.scottbellware.com/"&gt;Scott Bellware&lt;/a&gt; aptly countered that the &lt;a href="http://sxsw.com/"&gt;South by Southwest conference&lt;/a&gt; has thousands of enthusiastic attendees and is getting stronger every year.&amp;#160; His notion is that the conference must be compelling.&lt;/p&gt;  &lt;p&gt;Whether you call it Capitalism or Darwinism, I agree with Scott.&amp;#160; It is up to the conference to offer a compelling experience.&amp;#160; The conference is selling a product, and the product has to have a value proposition.&amp;#160; If struggling conferences can’t provide a value proposition, then they will simply lose market share to other conferences that do.&lt;/p&gt;  &lt;p&gt;I don’t think death will ever come to the professional speaker.&amp;#160; The conference venues may change, but it will change as a reaction to changes in the market.&amp;#160; I became a professional speaker in 2007, and I am confident that I will always find compelling conference venues in which to participate.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=whg30cbfRgs:R_N4BZtWB2k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=whg30cbfRgs:R_N4BZtWB2k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=whg30cbfRgs:R_N4BZtWB2k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/whg30cbfRgs" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/death-of-the-professional-speaker-will-never-happen/</feedburner:origLink></item><item><title>Manning offers Alt.Net book series and 42% discount on them all</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/YBZiNyJymXM/</link><pubDate>Thu, 18 Jun 2009 16:28:29 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/manning-offers-alt-net-book-series-and-42-discount-on-them-all/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>5</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;Manning just sent out “alt42” as a discount code for the Alt.Net books until June 25th.&amp;#160; Along with my book, &lt;a href="http://www.asp.net/mvc/"&gt;&lt;a href="http://manning.com/palermo/"&gt;ASP.NET MVC in Action&lt;/a&gt;,&lt;/a&gt; you can use this discount code on others such as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://rs6.net/tn.jsp?et=1102614065988&amp;amp;s=149926&amp;amp;e=001CjgiT_R6BqH5FRLBzonUleh6ZJU69yEjZPeiRi2SWdHOHHjwMHZilkkmWEGPnUYJ4gOSv_BiBCGoPGqGk3rHCdl1VzCBUasv_1tv71-4Lgs1yqsPCF72ew=="&gt;Brownfield Application Development in .NET&lt;/a&gt; by Donald Belcham and Kyle Baley&lt;/li&gt;    &lt;li&gt;&lt;a href="http://rs6.net/tn.jsp?et=1102614065988&amp;amp;s=149926&amp;amp;e=001CjgiT_R6BqEFtpwgb0XxR32fvPnIYr1J6IegHoDQTtQVX2En_ZE0h54Pn-Wq0i058GSRzJ5t4U9ImFOJszjlJimedLDWc5FGHR8QTQgAyyokkXJUGpNBV5vVjZ2hkLJA"&gt;Building Domain Specific Languages in Boo&lt;/a&gt; by Oren Eini (Ayende Rahien)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://rs6.net/tn.jsp?et=1102614065988&amp;amp;s=149926&amp;amp;e=001CjgiT_R6BqFh9h4t77Hic3O3Bfqvejj3o_urCmeGRj9Zwfn2k5k9W0ee2hNhVHAcWsTTdVxcv_o4bZDrJSMeGW9sLyL7gzmoh9z1DLo2YVy4kPRT7RhtQiodAy0FfSOC"&gt;The Art of Unit Testing&lt;/a&gt; Roy Osherove&lt;/li&gt;    &lt;li&gt;&lt;a href="http://rs6.net/tn.jsp?et=1102614065988&amp;amp;s=149926&amp;amp;e=001CjgiT_R6BqHmtWXS0rN3LXk0Q3L-myjR5-9doLxchKo2mH8Pa7tZHgl-r4JXfCQTjJA03ruCIsKT1sHoECKeXi76XpDw9gEaBcDBYTxxKffV9nKY1PDEzFqNjb3QF94e"&gt;ASP.NET MVC in Action&lt;/a&gt; by &lt;a href="http://jeffreypalermo.com"&gt;Jeffrey Palermo&lt;/a&gt;, Ben Scheirman and Jimmy Bogard&lt;/li&gt;    &lt;li&gt;&lt;a href="http://rs6.net/tn.jsp?et=1102614065988&amp;amp;s=149926&amp;amp;e=001CjgiT_R6BqHR1PAaFZr9_RjAqabV3sgcupB-H2YZHEo08-zUO05WLuAIi2kTsbsukHhkGGAU8jf2aF86Tm3TaL_5vnJg9VxUZB2zvKUNCvI_m6-fhrl7weB6Ax-d6-AA"&gt;NHibernate in Action&lt;/a&gt; by Pierre Henri Kuaté, Tobin Harris, Christian Bauer, and Gavin King&lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=YBZiNyJymXM:vpbvS2FLCf0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=YBZiNyJymXM:vpbvS2FLCf0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=YBZiNyJymXM:vpbvS2FLCf0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/YBZiNyJymXM" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/manning-offers-alt-net-book-series-and-42-discount-on-them-all/</feedburner:origLink></item><item><title>Upgrade TortoiseSVN, switch shortcut key for OK</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/E2dFEzRAJGs/</link><pubDate>Thu, 18 Jun 2009 15:33:40 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/upgrade-tortoisesvn-switch-shortcut-key-for-ok/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>4</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;Since this caught me a little by surprise, it probably will catch someone else.&amp;#160; Here’s a tip:&amp;#160; The shortcut key for the “OK” button is:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CTRL+ENTER&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display: inline; margin: 5px 0px" height="354" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/UpgradeTortoiseSVNswitchshortcutkeyforOK_9483/image_fa0e8f85-8be2-4b67-90e6-87aed6e5cb0c.png" width="469" /&gt; &lt;/p&gt;  &lt;p&gt;When on the commit dialog, I often only use the keyboard.&amp;#160; I try to stay away from the mouse as much as possible.&amp;#160; I type the commit message, toggle ALT+A for selecting all files that were chanted (to get non-versioned files as well), and then I was so used to hitting ALT+O because the “O” in “OK” was a hot letter.&amp;#160; &lt;/p&gt;  &lt;p&gt;I upgraded to TortoiseSVN 1.6.2, and ALT+O didn’t work anymore.&amp;#160; It may have been in the release notes, who knows, but I found out, quite by accident that CTRL+ENTER keeps my fingers on the keyboard.&amp;#160; I’m sure one of you commenting will let me know that this is some old, universally-known truth, but it’s news to me.&amp;#160; In case it helps someone else, here it is. . . and here is the version of TortoiseSVN I’m on now.&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display: inline; margin: 5px 0px" height="548" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/UpgradeTortoiseSVNswitchshortcutkeyforOK_9483/image_891201e1-3717-4971-a941-5d9e27621dc0.png" width="543" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=E2dFEzRAJGs:hjofp_tJKgI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=E2dFEzRAJGs:hjofp_tJKgI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=E2dFEzRAJGs:hjofp_tJKgI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/E2dFEzRAJGs" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/upgrade-tortoisesvn-switch-shortcut-key-for-ok/</feedburner:origLink></item><item><title>Bytes by MSDN mini vidcasts available</title><link>http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/ZULVx__YJRM/</link><pubDate>Thu, 18 Jun 2009 03:41:11 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/bytes-by-msdn-mini-vidcasts-available/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>0</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;MSDN has started a mini video series called “&lt;a href="http://msdn.microsoft.com/en-us/bytes.aspx"&gt;Bytes by MSDN&lt;/a&gt;” and has the first video online.&amp;#160; They are pretty short and are perfect for playing on your smartphone, iphone, video ipod, or. . . . . . uh. . . zune.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; has the first interview.&amp;#160; If you subscribe to &lt;a href="http://services.social.microsoft.com/feeds/feed/BytesbyMSDN"&gt;the feed&lt;/a&gt;, you see my video come through on 27 August, 2009.&lt;/p&gt;  &lt;p&gt;Here is the schedule:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="prettyprint"&gt;&lt;strong&gt;Bytes by MSDN Schedule
&lt;/strong&gt;
June 11	Scott Hanselman
June 18	Billy Hollis
June 25	Kate Gregory
July 2	Richard Campbell
July 9	Stephen Forte &amp;amp; Clemens Vasters
July 16	Tim Huckaby &amp;amp; Michele Leroux Bustamente
July 23	Jim Wilt &amp;amp; Brian Noyes
July 30	Loke Uei Tan
Aug 6	Matt Hessinger
Aug 13	Don Box
Aug 20	Juval Lowy
Aug 27	Jeffrey Palermo
Sept 3	Tim Heuer &amp;amp; Out Takes&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=ZULVx__YJRM:EeyHmTxtwLY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jeffreypalermo.com/~ff/jeffreypalermo?a=ZULVx__YJRM:EeyHmTxtwLY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=ZULVx__YJRM:EeyHmTxtwLY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/ZULVx__YJRM" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/bytes-by-msdn-mini-vidcasts-available/</feedburner:origLink></item></channel></rss>
