<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>Brian Kotek: Inversion of Control - Personal</title>
			<link>http://www.briankotek.com/blog/index.cfm</link>
			<description>Brian Kotek on ColdFusion, Flex, AIR, Java, Groovy, Design Patterns, and Object-Oriented Programming</description>
			<language>en-us</language>
			<pubDate>Fri, 10 Sep 2010 01:36:05 -0700</pubDate>
			<lastBuildDate>Thu, 25 Feb 2010 09:30:00 -0700</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>brian428@briankotek.com</managingEditor>
			<webMaster>brian428@briankotek.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>brian428@briankotek.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>An Awesome Alternative to a Traditional Mouse</title>
				<link>http://www.briankotek.com/blog/index.cfm/2010/2/25/An-Awesome-Alternative-to-a-Traditional-Mouse</link>
				<description>
				
				Like most of you, I sit in front of a computer for a large part of my day. Over time, sitting and working on the computer has caused me varying physical issues, like back, wrist, and elbow pain. To alleviate this, I bought a desk with an adjustable height, an ergonomic keyboard, and an Aeron chair. These have helped greatly. But the one issue that kept coming back was wrist pain. I tried several types of mice, with varying shapes, but none of them dealt completely with the issue. For me, a big part of the discomfort in my hand and elbow came from constantly reaching over for the mouse, as well as gripping it. It might sound silly to some, but when you do this thousands of times, it adds up!

Then, about six months ago, I found a blurb about the &lt;a href=&quot;http://ergo.contourdesign.com/products/product-detail.aspx?id=50&quot; target=&quot;_blank&quot;&gt;RollerMouse Free&lt;/a&gt; on some tech site. Having used it daily for a while, I can say that this mouse is an excellent option to a traditional mouse.

The RollerMouse sits directly under your keyboard, just past the space bar. To control the cursor, you roll a bar up, down, and side to side. It sounds bizarre, but it works very nicely and was easy to get used to. The bar moves very smoothly, and is very accurate. You can easily move it with your thumbs, and you barely have to move your hands off the keyboard, or you can use your fingertips. Either way, it&apos;s far better than reaching over for a normal mouse.

I still keep a regular mouse as well, but I use it pretty infrequently (except for gaming!). This odd new RollerMouse is the workhorse now. I just wanted to mention this device in case anyone else has similar problems and was frustrated trying to solve them. I was uncertain about how this thing would work out, but it really does work well. There&apos;s a video at the product web site which shows how it works in more detail, if you&apos;re interested to see it in action.
				
				</description>
				
				
				<category>Development</category>
				
				<category>Computers</category>
				
				<category>Personal</category>
				
				<pubDate>Thu, 25 Feb 2010 09:30:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2010/2/25/An-Awesome-Alternative-to-a-Traditional-Mouse</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>A Fond Farewell to Alagad</title>
				<link>http://www.briankotek.com/blog/index.cfm/2010/1/11/A-Fond-Farewell-to-Alagad</link>
				<description>
				
				This is just a quick personal announcement: In the next few weeks, I&apos;ll be leaving &lt;a href=&quot;http://www.alagad.com/&quot; target=&quot;_blank&quot;&gt;Alagad&lt;/a&gt; to take a position at &lt;a href=&quot;http://www.boozallen.com/&quot; target=&quot;_blank&quot;&gt;Booz Allen Hamilton&lt;/a&gt;.

I admit that this causes a mixture of emotions for me. On the one hand, Alagad was a great place to work and I&apos;m sad to be leaving. Doug Hughes is a friend and an excellent company owner, and the team at Alagad are a very talented bunch, on top of being all-around nice people. I&apos;ll miss working with them. I&apos;m sure we&apos;ll still chat, email, and talk over beers at conferences, but I know it won&apos;t be quite the same.

On the other hand, the opportunity at BAH was really just too good to pass up. It&apos;s a very prestigious organization, and is ranked as one of the best companies to work for in the world. That alone is very compelling. But on a more personal level, I&apos;ll once again be working alongside Joe Rinehart. I worked with Joe when we were at Broadchoice (and before that as well), and we got along great and worked very well together. Often, when switching companies, it can be a little scary because one doesn&apos;t really know what to expect. So it&apos;s nice to be able to have great expectations based on past experience!

So, while sad to be leaving the great folks at Alagad, I&apos;m very excited to be working with Joe again and tackling a different set of problems at BAH. To Doug, Scott, Jeff, and all the others at Alagad, thanks for the good times, hard work, and friendly parting insults. ;-)

And just a quick addition, even though Booz Allen is headquartered in the DC area, I&apos;ll be staying in Raleigh.
				
				</description>
				
				
				<category>Personal</category>
				
				<pubDate>Mon, 11 Jan 2010 17:04:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2010/1/11/A-Fond-Farewell-to-Alagad</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Upgrading from Vista to Windows 7 (And How to Deal with Warnings about iTunes)</title>
				<link>http://www.briankotek.com/blog/index.cfm/2009/10/23/Upgrading-from-Vista-to-Windows-7-And-How-to-Deal-with-Warnings-about-iTunes</link>
				<description>
				
				Last night I crossed my fingers and upgraded my Vista Professional workstation to Windows 7 Ultimate. I have multiple backups, including Mozy, Windows Backup every night, and a Windows Complete PC Backup (essentially a disk image) every week. As a result, I was very confident that even if all hell broke loose I could restore things quickly. Happily, the upgrade went smoothly and Windows 7 is running great. All of my programs and settings were migrated perfectly.

The upgrade compatibility analysis at the beginning highlighted two potential problems that I dealt with. First, I run two ATI Radeon 4850 video cards to power my three monitors for work, but I enable CrossfireX when gaming, which disables the two outer monitors and puts all the GPU power into the center screen. Windows 7 warned me that my ATI drivers might be a problem after the upgrade. So I simply uninstalled the existing ATI drivers, ran the upgrade, and the installed the Windows 7 64-bit ATI Catalyst drivers after the upgrade. Everything works fine.

The other item flagged was iTunes. I did some research, and it turns out that Apple appears to be using an older and/or unsigned GEAR driver in iTunes. This has to do with CD/DVD recording/burning. I&apos;m not sure why they would do this, but there is an updated driver available &lt;a href=&quot;http://www.gearsoftware.com/support/drivers.php&quot; target=&quot;_blank&quot;&gt;at the GEAR Software site&lt;/a&gt;. I installed that update and then proceeded with the Windows upgrade, and everything works fine after the update finishes. So if you&apos;re getting this warning and want to be sure it won&apos;t mess anything up afterwards, I&apos;d install the updated driver.

Overall, Windows 7 is very nice. It looks better than Vista and has many new features like the taskbar, improved Explorer interface, better window management, etc. I&apos;d been using Vista for about 10 months and unlike most people I never had any real issues with it, it worked just fine with no crashes or problems. Even so, the new Windows is definitely an improvement as things seem snappier, and the enhancements are welcome. So as long as your backups are up-to-date and you look over any upgrade warnings carefully, I&apos;d definitely recommend installing it. Hopefully this entry might help others who see these types of warnings, especially the iTunes one.
				
				</description>
				
				
				<category>Computers</category>
				
				<category>General</category>
				
				<category>Personal</category>
				
				<pubDate>Fri, 23 Oct 2009 11:43:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2009/10/23/Upgrading-from-Vista-to-Windows-7-And-How-to-Deal-with-Warnings-about-iTunes</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Final Prep for CFUnited!</title>
				<link>http://www.briankotek.com/blog/index.cfm/2009/8/10/Final-Prep-for-CFUnited</link>
				<description>
				
				It&apos;s been a while since I&apos;ve blogged, as you might guess I&apos;ve been really busy. I do plan to dive back into blogging again after the conference, both here and at the &lt;a href=&quot;http://www.alagad.com/go/blog&quot; target=&quot;_blank&quot;&gt;Alagad blog&lt;/a&gt;. But right now my focus is on wrapping up some tasks so that my time at &lt;a href=&quot;http://cfunited.com/2009/&quot; target=&quot;_blank&quot;&gt;CFUnited&lt;/a&gt; is used to it&apos;s full potential!

I&apos;m presenting on Friday on Introduction to Object-Oriented Modeling and Design. I&apos;ve tweaked the presentation a bit since I gave it last, based partly on the &lt;a href=&quot;http://www.briankotek.com/blog/index.cfm/2009/7/14/ColdFusion-and-OOP--Match-Made-in-Heaven-or-Long-Road-to-Hell&quot;&gt;podcast&lt;/a&gt; that Hal, Ben Nadel and I did a few weeks ago. If you&apos;re interested in what helps make &quot;good&quot; OO design, I hope the presentation will be helpful. Again, let me point out that the presentation isn&apos;t an introduction to OO, I&apos;m assuming attendees already understand what a class is, what an object is, etc. This presentation is talking about OO at a more general level, in terms of how sets of objects actually work together.

My tentative schedule for the conference is attached to this entry, so if you&apos;d like to chat about OO, CF, Flex, Groovy, or just about anything else, feel free to catch up with me. I&apos;ll also most likely be a regular at any evening gatherings at the hotel bar. ;-)

Anyway, I hope to see you this week in DC! Until then!
				
				</description>
				
				
				<category>ColdFusion</category>
				
				<category>OOP CF</category>
				
				<category>Conferences</category>
				
				<category>Presentations</category>
				
				<category>Personal</category>
				
				<pubDate>Mon, 10 Aug 2009 13:07:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2009/8/10/Final-Prep-for-CFUnited</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>A Slightly Late CF.Objective() Review</title>
				<link>http://www.briankotek.com/blog/index.cfm/2009/5/20/A-Slightly-Late-CFObjective-Review</link>
				<description>
				
				I&apos;m a bit late with this, but better late than never! In my defense, the last few weeks have been pretty crazy with the conference arriving and joining &lt;a href=&quot;http://www.alagad.com/&quot; target=&quot;_blank&quot;&gt;Alagad&lt;/a&gt;. I&apos;ll be posting to the Alagad Team Blog going forward as well, but I&apos;ll do my best to keep that focused on interesting things learned on work projects, and keep my personal blog for covering my own thoughts, personal code experiments, and updates to my RIAForge projects.

With that said, let&apos;s talk CF.Objective(). Overall, the conference was excellent, which wasn&apos;t really surprising all! :-) The networking and hallway/dinner/bar discussions were always insightful. I got to see a number of friends whom I unfortunately only catch up with at conferences, like &lt;a href=&quot;http://cdscott.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Chris Scott&lt;/a&gt;, &lt;a href=&quot;http://www.pbell.com/&quot; target=&quot;_blank&quot;&gt;Peter Bell&lt;/a&gt;, &lt;a href=&quot;http://www.barneyb.com/barneyblog/&quot; target=&quot;_blank&quot;&gt;Barney Boisvert&lt;/a&gt;, and &lt;a href=&quot;http://www.compoundtheory.com/&quot; target=&quot;_blank&quot;&gt;Mark Mandel&lt;/a&gt;. It&apos;s one thing to have email and IM chats, but quite another to be able to bounce ideas around over beers for 3 hours!

I attended several good sessions, like the Mate Framework (even though I&apos;m a Swiz fan, Mate is pretty sweet), ColdBox, and Test Driven Development. Unfortunately, I missed the opening keynote in place of sleeping in, since my flight was delayed and I didn&apos;t get in until about 3 am and I was speaking at 10 am.

Speaking of...speaking, I did give two presentations, one on OO Modeling and Design, and one on Open-Source Enterprise Java and CF. I thought both went pretty well, though I had more time to prepare for the OO talk. I finished a bit early on the Java talk, but the Q&amp;A session was full of interesting discussion, so all in all I think it was good. If you did see me speak, PLEASE fill out the session survey forms: &lt;a href=&quot;http://www.surveymonkey.com/s.aspx?sm=SQ5VDArvCzLA9rUT5MMQfA_3d_3d&quot; target=&quot;_blank&quot;&gt;OO Modeling and Design&lt;/a&gt; and &lt;a href=&quot;http://www.surveymonkey.com/s.aspx?sm=Jf9OEKurAicWxF6pzCnePA_3d_3d&quot; target=&quot;_blank&quot;&gt;Open-Source Enterprise Java and CF&lt;/a&gt;. I really do read what people have to say and try to use it to improve my future presentations!

Anyway, next stop should be CFUnited! Hopefully I&apos;ll see many of the same folks there, as well as some friends who couldn&apos;t make it to Minneapolis, and any new folks who&apos;d like to talk (if it&apos;s geeky, just about anything goes!)
				
				</description>
				
				
				<category>Conferences</category>
				
				<category>Personal</category>
				
				<pubDate>Wed, 20 May 2009 22:25:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2009/5/20/A-Slightly-Late-CFObjective-Review</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Is the ColdFusion Community&apos;s Generosity Encouraging Laziness?</title>
				<link>http://www.briankotek.com/blog/index.cfm/2009/3/27/Is-the-ColdFusion-Communitys-Generosity-Encouraging-Laziness</link>
				<description>
				
				I&apos;ve been using ColdFusion for a long time. When I started back in late 1997, I was a very novice programmer. There wasn&apos;t much in the way of mailing lists, online forums, or books. There was no Google, and there were no blogs. As a result, I developed what I&apos;d consider a pretty self-reliant nature on the subject of programming. I had to read the documentation, experiment, and try things out. And doing this, I was able to solve my problems.

I am a member of a number of public discussion forums and mailing lists, and have been for many years. I moderate several forums and lists. Over the years, I&apos;ve tried to help others by answering questions or pointing them in the right direction to solve their problems. I&apos;d like to hope that I&apos;ve helped save some people some of the pain and time that I had to go through when I was learning ColdFusion.

Lately I&apos;ve been seeing a disturbing trend: a rapidly increasing number of what I will call &quot;lazy questioners&quot;. Sure, some of these folks have always been around. But in the last six to twelve months it seems like the number of these people has been making a rapid upturn.

On the one hand, this might be good news: it seems to indicate that more new people are coming into the community. I think that&apos;s great. However, what I don&apos;t think is great is their approach to asking questions.

If you are also a member of one or more forums or mailing lists, have you also noticed the increasing number of questions like these?

&lt;ul&gt;&lt;li&gt;How do I invoke a trigger from ColdFusion?&lt;/li&gt;
&lt;li&gt;Why doesn&apos;t this work: &amp;lt;cfif IsDefined(&quot;#url.id#&quot;)&amp;gt;...&lt;/li&gt;
&lt;li&gt;Why does my if block always run: &amp;lt;cfparam name=&quot;url.id&quot; default=&quot;0&quot; /&amp;gt; &amp;lt;cfif IsDefined(&apos;url.id&apos;)&amp;gt;...&lt;/li&gt;
&lt;li&gt;How do I zip something in ColdFusion?&lt;/li&gt;
&lt;li&gt;What is wrong with my query? [paste SQL]&lt;/li&gt;
&lt;li&gt;This doesn&apos;t work please help me. [paste 300 lines of code]&lt;/li&gt;
&lt;li&gt;Why doesn&apos;t this work? #XMLParse( [string with invalid xml characters in it] )#&lt;/li&gt;
&lt;li&gt;Will this work? [paste code]
&lt;/li&gt;&lt;/ul&gt;

The list really goes on and on, these are just a few of the ones I recall seeing recently. If you&apos;re asking yourself &quot;what&apos;s wrong with those questions?&quot;, I&apos;ll tell you: either they&apos;re horribly presented questions or they could be solved in 30 seconds just by doing a Google search or actually looking at the documentation.

So what&apos;s the problem? The next response is probably &quot;just ignore the question if you don&apos;t have anything nice to say.&quot; That&apos;s a valid response. And it would work, provided that everyone else also followed it. But they don&apos;t. When questions like these come up (daily at this point), at least one good-natured person decides to try and help. They politely provide a useful answer. Which is admirable. I often do this myself. But after thinking about the overall situation, I&apos;ve come to the conclusion that it&apos;s actually a harmful choice. Here are some of the reasons why:

First, all this does is encourage the questioner&apos;s laziness. In fact, it encourages laziness for anyone asking a question. Why would someone bother to find an answer on their own when they see they can just ask someone else and know they&apos;ll get an answer?

It also means the person probably hasn&apos;t really learned much. They certainly haven&apos;t learned how to find the solution to a similar problem when (not if) they encounter one. The old adage &quot;Give a man a fish, feed him for a day. Teach a man to fish, feed him for a lifetime.&quot; has never been more applicable. Answering a lazy question almost guarantees more lazy questions in the future. The questioner is banking on the generosity of others, and allowing them to shift the time and effort onto a bunch of other people. And, unfortunately, it works.

Which leads directly into the next negative result, which is an overall decrease in the usefulness of the list or forum. Lazy questions decrease the signal to noise ratio of a resource. They take time and attention away from valid and well presented questions. And it&apos;s not just the initial answer. Often, when a lazy question is answered, it triggers a long exchange where the questioner says &quot;that still doesn&apos;t work&quot; or &quot;what about this variation&quot;. In response, the kind folks answering keep feeding into it, many times offering additional information that the questioner would have discovered themselves if they had put even minimal effort into solving their problem through Google or the documentation.

In essence, I think the ColdFusion community is too forgiving of lazy questions. I might get flak for saying this, but it&apos;s true: we&apos;re too nice when it comes to this issue.

Now to be clear, I&apos;m not saying we should be mean, or that we should stop answering questions. We should absolutely keep answering questions. I certainly will keep trying to help people. But anyone asking a question should understand that there is a certain minimum level of effort that should be met before you ask. To me, the minimum level of effort is:

&lt;ul&gt;&lt;li&gt;Have you actually tried to run the code? What was the result?&lt;/li&gt;
&lt;li&gt;If there is an error, be able to provide the exact error to the best of your ability&lt;/li&gt;
&lt;li&gt;Have you read the documentation?&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;Have you searched Google?&lt;/li&gt;
&lt;li&gt;Have you searched the past threads/messages?&lt;/li&gt;
&lt;li&gt;If the problem is SQL-related, have you run the query directly against the database, outside of CF?&lt;/li&gt;
&lt;li&gt;If you plan to paste code, have you eliminated all extraneous code and limited the code to only what is involved in the problem?&lt;/li&gt;
&lt;li&gt;Have you attempted minimal debugging with cfdump, cfabort, or cftrace?
&lt;/li&gt;&lt;/ul&gt;

This is not a lot to ask. In fact, this should be done out of common sense and common courtesy. If someone chooses not to meet this minimum level of effort, they should be met with a terse, blunt response, and NOT the answer to their question. There is a much more general and lengthy resource on this subject at &lt;a href=&quot;http://www.catb.org/~esr/faqs/smart-questions.html&quot; target=&quot;_blank&quot;&gt;the Smart Questions FAQ&lt;/a&gt;.

Here are a few situations where I say the questioner&apos;s laziness should be called out:

&lt;ul&gt;&lt;li&gt;The answer could be found by simply reading the documentation on the tag or function, and it is obvious that they have not&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;The answer could be found with a 30 second Google search&lt;/li&gt;
&lt;li&gt;The questioner is asking an advanced question on a complex subject when it is clear they have limited understanding of the subject or what they&apos;re even asking about, and they&apos;re expecting a free class on the subject (i.e. &quot;I don&apos;t know much SQL, but how do I write this complicated query&quot;)&lt;/li&gt;
&lt;li&gt;The questioner is asking if something will work when they haven&apos;t even tried to run it&lt;/li&gt;
&lt;li&gt;The questioner is asking others to write their code for them&lt;/li&gt;
&lt;li&gt;The questioner is pasting huge amounts of code and expecting others to sift through it
&lt;/li&gt;&lt;/ul&gt;

In many other communities, lazy questions are met with harsh responses that range from &quot;RTFM&quot; to &quot;JFGI&quot; to derisive abuse. I&apos;m not asking the community to go down that road. I love the fact that for the most part, the CF community is a very open and encouraging place. I just think that a small but growning number of people are taking advantage of that generous spirit. It&apos;s time to impose some minimal expectations on those who would ask for our time and assistance.

I&apos;m expecting this to trigger some interesting feedback (hopefully nothing too rough, but if you disagree and can point out some flaw with my logic here, by all means go for it). What do folks think about this issue, and what is the best way to deal with it?
				
				</description>
				
				
				<category>Development</category>
				
				<category>ColdFusion</category>
				
				<category>General</category>
				
				<category>Personal</category>
				
				<pubDate>Fri, 27 Mar 2009 15:10:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2009/3/27/Is-the-ColdFusion-Communitys-Generosity-Encouraging-Laziness</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Taking the &quot;Object Calisthenics&quot; Challenge</title>
				<link>http://www.briankotek.com/blog/index.cfm/2009/2/11/Taking-the-Object-Calisthenics-Challenge</link>
				<description>
				
				In &lt;a href=&quot;http://www.amazon.com/ThoughtWorks-Anthology-Technology-Innovation-Programmers/dp/193435614X&quot; target=&quot;_blank&quot;&gt;The ThoughtWorks Anthology&lt;/a&gt; there is a chapter called &quot;Object Calisthenics&quot;. This section lays out a challenge to help push your understanding of object-oriented programming concepts. I decided to take this challenge by building a little Flex application, and I&apos;ve been quite surprised by its effect. It really &lt;strong&gt;does&lt;/strong&gt; make you think very deeply about what OOP means and how it affects the way you program.

In essence, the challenge is to write a non-trivial (about 1000 lines) program of your choosing that does not violate a set of 9 rules. The rules are very draconian, and they aren&apos;t advocating that you actually write all of your software this way (though obeying them in most cases probably would be a good thing). But the goal of the exercise is to really expose any lingering influence of procedural coding and force you to come to terms with them. While I chose to do this in Flex and ActionScript (since that is what I am currently learning in depth), I think some of these would probably need a bit of tweaking in a ColdFusion implementation, but most of it would still apply. Here are the rules:

&lt;ol&gt;
&lt;li&gt;One level of indentation per method. If you need more than one level in from the start of the method body, create another method and call it. So one level of a loop or if statement is ok, but any deeper and you need to break it out into its own method.&lt;/li&gt;
&lt;li&gt;Don&apos;t use the ELSE keyword. This one is tough. We&apos;re very used to using if/else or switch/case. But good OO designs rely on polymorphism in place of conditional logic.&lt;/li&gt;
&lt;li&gt;Wrap all primitives and Strings. That means instead of var zipCode : String, you need var zipCode : ZipCode, and instead of var age : int, you need var age : Age. The idea is to ensure that everything is an object, that the purpose of everything is self-evident from it&apos;s type, and that behavior related to that object has somewhere to go.&lt;/li&gt;
&lt;li&gt;Use first class collections. This means you can&apos;t have var cartItems : ArrayList, but instead have var cartItems : CartItems. This means that behavior related to the collection has a place to live, and that the collection should contain no other instance variables.&lt;/li&gt;
&lt;li&gt;One dot per line. This is meant to enforce the Law of Demeter. So this would be a no-no: invoice.lineItems.getLineItem(4). Although this discourages method-chaining in cases where a method returns the same object (a la JQuery), that isn&apos;t what this rule is trying to do. It&apos;s trying to stop you from reaching across class boundaries and digging into the guts of other objects.&lt;/li&gt;
&lt;li&gt;Don&apos;t abbreviate anything. This is meant to enforce clarity, as well as identify duplication or misplaced responsibilities. If you&apos;re typing mergeUserPreferencesFromDatabaseAndCookies() too often, something is probably wrong, both in terms of what the method is doing and how many things are coupled to it.&lt;/li&gt;
&lt;li&gt;Keep entities small. No class over 50 lines, and no package over 10 files.&lt;/li&gt;
&lt;li&gt;No classes with more than two instance variables. This is meant to ruthlessly enforce the single responsibility principle for objects. If you need more instance variables, break them into composed objects.&lt;/li&gt;
&lt;li&gt;No getter, setter, and property calls to other objects. This mandates the principle to &quot;Tell, don&apos;t ask&quot; and enforces strong encapsulation boundaries.&lt;/li&gt;
&lt;/ol&gt;

I chose to write a program that generates a game of 10 pin bowling, and then scores it. And wow, writing code to score a game of bowling was actually a lot harder than I initially thought, even without the above rules. But I&apos;m just about done with it and when I am I&apos;ll post it here in case anyone wants to take a look at it.

But before I post it, I thought I would ask if anyone else is interested in giving this a shot? Would anyone be up for trying this (with a bowling score card or any other idea you like), sending them to me, and having me post them (anonymously if people prefer) and start a blog discussion about them? I think it would be quite educational to see how different people approach these rules to solve problems, and I&apos;m sure everyone involved would benefit. Any takers?
				
				</description>
				
				
				<category>Development</category>
				
				<category>Design Patterns</category>
				
				<category>OOP CF</category>
				
				<category>Personal</category>
				
				<pubDate>Wed, 11 Feb 2009 08:26:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2009/2/11/Taking-the-Object-Calisthenics-Challenge</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>A Personal Request: Consider a Donation to Help Joe Rinehart&apos;s Wife, Dale</title>
				<link>http://www.briankotek.com/blog/index.cfm/2009/1/16/A-Personal-Request-Consider-a-Donation-to-Help-Joe-Rineharts-Wife-Dale</link>
				<description>
				
				This will probably be appearing on a number of blogs today, but it looks like this is the first post about it. As some of you may or may not know, my coworker Joe Rinehart&apos;s wife Dale was diagnosed with Multiple Sclerosis just before Christmas. A group of community members, including myself, have taken it upon ourselves to set up a donation pool to try and offer a little assistance to the Rineharts in this difficult time and offset the large and ongoing medical expenses associated with this illness.

Just to be clear: Joe has nothing to do with this and hasn&apos;t asked anyone for help. That&apos;s just not the kind of guy he is. We felt that, as a valued friend and community member, we would contribute to a small fund to help him out. We thought it was the least we could do. While doing this, it seemed obvious to put the word out to the community in case anyone else was likeminded.

I won&apos;t make this long and preachy. Joe&apos;s helped a lot of people over the years, and Model-Glue is being used by a huge number of people. So if you know Joe, or have benefited from his efforts, please consider making a donation. If you&apos;d like to join us in helping, we&apos;ve set up a simple page at &lt;a href=&quot;http://www.helpsupportjoeanddale.com/&quot; target=&quot;_blank&quot;&gt;http://www.helpsupportjoeanddale.com/&lt;/a&gt;.

The Paypal account that gets the donations is my own, so you&apos;ll see my user name (brian428) on the Paypal page. Rest assured that all donations will be transferred directly to Joe. No shenanigans here. Just an attempt to help out a friend. I know times are tough right now for a lot of folks, but thanks in advance for anything you feel you can contribute.

Respectfully,

Brian
				
				</description>
				
				
				<category>Personal</category>
				
				<pubDate>Fri, 16 Jan 2009 09:28:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2009/1/16/A-Personal-Request-Consider-a-Donation-to-Help-Joe-Rineharts-Wife-Dale</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Preemptive New Year&apos;s Resolution: Back to Blogging!</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/12/30/Preemptive-New-Years-Resolution-Back-to-Blogging</link>
				<description>
				
				As anyone who has frequented my blog in the past is probably aware, I haven&apos;t been doing much blogging lately. Work at &lt;a href=&quot;http://www.broadchoice.com&quot; target=&quot;_blank&quot;&gt;Broadchoice&lt;/a&gt; has continued to be very intense, and what little time I have away from code has been spent slaughtering zombies in Left 4 Dead! On top of this, I haven&apos;t been doing much work with ColdFusion lately, as all of my effort has been directed into learning and coding in Flex, AIR, and Groovy. So I&apos;ve actually been a bit uncertain about what I have to say that anyone else might care about.

I&apos;ve decided that my blogging slackness has to change! So I&apos;m hereby laying out a preemptive New Year&apos;s Resolution that I will be back to blogging more in 2009.

The focus here will likely expand to include entries on learning and using AIR, Flex, and Groovy since that&apos;s been the core of what I&apos;ve been doing for the last several months. I&apos;d also like to talk about some more general topics that apply regardless of language: things like object-oriented programming, test-driven development, refactoring, and application design. I realize that many folks out there haven&apos;t yet taken the plunge into Flex or AIR, so I&apos;ll try to keep those topics loose and ensure that any underlying themes are (hopefully!) useful to both RIA and non-RIA developers. With AIR and Flex rapidly gaining traction, I think 2009 will see a large number of ColdFusion developers at least looking seriously at these technologies and learning them, if not using them on full-blown applications.

ColdFusion 9 is also coming and will most likely be released some time in 2009, and hopefully earlier rather than later! When I can, I want to start writing about some of the new features that have been announced for the next release, including Hibernate support, AIR integration, and language enhancements. I think that some of these may trigger fairly fundamental changes in how CF apps are built and maintained, and I have no doubt that there will be an avalanche of blog posts and discussion forum threads on these topics once Adobe pulls the curtain back.

Do these sound like topics folks in the CF blogosphere would be interested in reading about? Am I missing anything that folks might want to hear about that I haven&apos;t mentioned? If so, please comment and let me know.

In the meantime, I&apos;m already working on a few new posts in tandem and will get them ready for publication shortly. Thanks for sticking with me through the slow period! I hope everyone has had a good holiday so far, and has a great New Years.
				
				</description>
				
				
				<category>Development</category>
				
				<category>ColdFusion</category>
				
				<category>General</category>
				
				<category>Flex</category>
				
				<category>Personal</category>
				
				<pubDate>Tue, 30 Dec 2008 14:19:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/12/30/Preemptive-New-Years-Resolution-Back-to-Blogging</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Broadchoice Workspace Released!</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/11/14/Broadchoice-Workspace-Released</link>
				<description>
				
				I&apos;m happy to say that the &lt;a href=&quot;http://www.broadchoice.com/what_is_workspace/&quot; target=&quot;_blank&quot;&gt;Broadchoice Workspace&lt;/a&gt; application has gone gold! If you haven&apos;t already given it a look, please download it and let us know what you think. If you don&apos;t already have Adobe AIR installed, the installer should set that up for you as well.

On a personal level, we built this application in an incredibly short time, and my hat is off to our entire team. Many long days and late nights were poured into this effort, and I hope that shows in the final product. Working with Joe, Ray, Sean, and the numerous others who helped put this together has been incredibly rewarding.

And even though we&apos;re all breathing a sigh of relief at making it to this point, we&apos;re not anywhere near finished. We plan to keep adding new features and incorporating user suggestions, so in many ways this is just the beginning. (Yes, sorry, that was clich&#xe9;, but it&apos;s true!) Thanks also go out to our beta testers for all their great feedback. I hope everyone finds Workspace to be a useful and promising new collaboration tool.
				
				</description>
				
				
				<category>Development</category>
				
				<category>Broadchoice</category>
				
				<category>Personal</category>
				
				<pubDate>Fri, 14 Nov 2008 16:31:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/11/14/Broadchoice-Workspace-Released</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>How Seriously Do You Take Ergonomics?</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/9/9/How-Seriously-Do-You-Take-Ergonomics</link>
				<description>
				
				Working at a computer all day (and all night in many cases) means putting your body through something that it really wasn&apos;t designed for. As I do this longer, I find myself spending more time (and money) setting up my workspace for maximum comfort and ergonomics. I&apos;m curious to know if most people do the same? Or do folks just use whatever chair/keyboard/mouse they are given or have floating around? It might also be interesting to see if this view changes from younger developers to older ones!

I was lucky enough to get a broken Aeron chair that I had repaired and it works good as new. But if I hadn&apos;t gotten one to repair, I would have bought one. Yes, they are expensive at $800. But my opinion on this is not to skimp on my chair. I sit in this thing for 10 or more hours a day. It damn well better be comfortable!

I use a &lt;a href=&quot;http://www.kinesis-ergo.com/max-spec.htm&quot; target=&quot;_blank&quot;&gt;Kenesis Maxim keyboard&lt;/a&gt; which lets you adjust it to your heart&apos;s content in multiple directions. I like it because it drops the number pad on the side, which I rarely use and always had to reach over to get to my mouse. Typing numbers is a bit harder, but not having to go that extra distance 1000 times a day really makes it worth it!

Going further, I use a &lt;a href=&quot;http://www.zerotensionmouse.com/&quot; target=&quot;_blank&quot;&gt;Zero Tension mouse&lt;/a&gt; which helped me a lot. People don&apos;t realize that when they use a normal mouse, the bones in their forearm actually have to cross and form an X from the elbow to the wrist. It was really starting to bother me but this helped a lot, plus you can actually rest your hand on it which means you aren&apos;t subconsciously having to &quot;hold up&quot; your hand over the mouse. Yes it&apos;s kind of goofy looking and takes a day or two to get used to, but it has really made a difference in the occasional pain I was feeling in my wrist and arm.

And lastly, these &lt;a href=&quot;http://www.armazingarms.com/&quot; target=&quot;_blank&quot;&gt; armrest pads &lt;/a&gt;helped my poor elbows. I was having some pain in the tip of my elbow from it pointing into the armrest, and these helped a lot. It seems like this should never happen (elbow hurting from hitting an armrest?!), but after 10 hours a day for years, believe me. It does.

OK, that&apos;s my rundown. What do folks think? Do you use anything similar? Or do you think I&apos;m crazy for spending so much money on my work setup? I work at home so while no one buys me anything, I have the freedom to set it up as I wish. For any folks who work in offices, does your company set you up right? If not, have you considered springing for some things yourself and just bringing them in? After all, it&apos;s your body, whether you work at home or in an office!
				
				</description>
				
				
				<category>Development</category>
				
				<category>Personal</category>
				
				<pubDate>Tue, 09 Sep 2008 10:05:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/9/9/How-Seriously-Do-You-Take-Ergonomics</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Two Weeks at Broadchoice (A Brain Dump Wrapped in a Blog Entry)</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/8/25/Two-Weeks-at-Broadchoice-A-Brain-Dump-Wrapped-in-a-Blog-Entry</link>
				<description>
				
				I have to apologize for not blogging here lately. As you might imagine, my first few weeks at Broadchoice have been utterly packed with learning and coding. You know that scene in The Matrix, where Neo lays down in a chair and has the cable plugged into his brain socket? 

Neo: Ju-Jitsu? I&apos;m going to learn Ju-Jitsu?&lt;br/&gt;
(Tank pushes a button. Neo convulses in the chair, then gasps for air.)&lt;br/&gt;
Tank: Hey Mikey, I think he likes it. How about some more?&lt;br/&gt;
Neo: Hell yes. Hell yes.

That pretty much describes it! I thought I might take a moment to run through some of the things I&apos;ve been up to.

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://groovy.codehaus.org/&quot; target=&quot;_blank&quot;&gt;Groovy&lt;/a&gt;: To be blunt, Groovy is the bomb. I had dabbled with it a bit after this year&apos;s CF.Objective() conference, but really diving into it opens up a whole new world of wickedness. It&apos;s very easy to learn, especially if you have some experience with Java. The great part about it is that the learning curve is essentially flat. Anything that you aren&apos;t sure how to do best in Groovy you can just write in straight-up Java. As you learn more, you can go back and tweak things to use the Groovy idioms.&lt;/li&gt;

Closures really change the way you will look at coding forever. Groovlets are a great alternative to the full-blown servlet syntax. And the ability to mix and match strong typing with dynamic typing wherever you want to is incredibly powerful. It makes me wonder if there is a way they could adopt something similar in ColdFusion. You can type things where you want to, if you want full code completion in Eclipse for example, but you can leave typing out when you need more dynamic behavior.

The only problem I&apos;ve run into so far is, I believe, &lt;a href=&quot;http://jira.codehaus.org/browse/GROOVY-2980&quot; target=&quot;_blank&quot;&gt;a bug in the Eclipse plugin under Eclipse 3.4&lt;/a&gt;. I had a hard time getting my Groovy classes to automatically compile. I was having to select the Groovy files individually and choose &quot;Compile Groovy Class&quot;. I believe the problem arises when you have a certain combination of real Java classes mixed with Groovy classes, and the two depend on each other. For example, a Groovy class that depends on a Java Interface, but the Java Interface references a Groovy class. I think the compiler can&apos;t figure out which to deal with first. I ended up writing a short ANT build file that will trigger two compilation sweeps and that forces things to compile in an order that works around the dependency.

Even with that minor headache (the Eclipse plugin is still very much a work in progress), Groovy as a language is very, very slick. And if necessary I can always look at IntelliJ, since that IDE has much more mature Groovy support built into it.

&lt;li&gt;&lt;a href=&quot;http://testng.org/doc/&quot; target=&quot;_blank&quot;&gt;TestNG&lt;/a&gt;: One more great thing about Groovy is that it has JUnit built right into it. You can just write a JUnit test and it will work, with no extra work or imports necessary. However, TestNG brings some extra goodies to the table that made it worth looking at. One big one is the ability to use annotations to declare dependencies between tests, so that one will run only if another one already passed. This can be pretty helpful to avoid having to write big individual test methods just to test that, say, a file uploaded and then could be downloaded successfully. With TestNG, you can say &quot;only run the download test if the upload test runs first and passed&quot;. It offers more as well, but that was enough to make it worth trying.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.springframework.org/&quot; target=&quot;_blank&quot;&gt;Spring&lt;/a&gt;: I&apos;m a committer on the ColdSpring project and have been using it for a really long time. Of course, it&apos;s based on Java&apos;s Spring framework, which is like an 800 pound gorilla compared to the subset of features that exists in ColdSpring. And having used ColdSpring extensively makes moving to Spring feel very easy. Just as with CF, I really can&apos;t imagine using Java without using Spring to help manage dependencies. On top of that it has killer support for things like database transactions, security, and more. Groovy makes the AOP features in Spring less of a huge win because it is so easy to attach runtime behavior to Groovy objects, but I&apos;m still learning about that and even so, I&apos;m sure there are limitations to what it lets you do or how easily it lets you manage things across large numbers of objects.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.hibernate.org/&quot; target=&quot;_blank&quot;&gt;Hibernate&lt;/a&gt;: I&apos;ve only scratched the surface of what Hibernate brings to the table, mainly because what I&apos;ve been creating didn&apos;t involve a lot of actual database interaction yet, but Hibernate looks to be an insanely powerful ORM. I&apos;m very familiar with Transfer and Reactor, and Hibernate takes a different slant on many things. But many of its features are also quite familiar, such as HQL to define bits of custom SQL just like TQL does for Transfer. I think part of the power comes from how all of these pieces layer together like puzzle pieces, with Spring being able to integrate with Hibernate, and Hibernate being able to integrate with Flex/AIR through DPHibernate. Each piece kind of layers on top of and enhances the pieces around it. Which probably makes learning it more difficult since they start to merge into one big blob of knowledge, but also makes them more useful when used together.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.jboss.org/jbossas/&quot; target=&quot;_blank&quot;&gt;JBoss&lt;/a&gt;: One of the things I never really got into was full-blown J2EE web development. And one of the reasons was always what a pain in the ass it was to configure and deploy J2EE web applications. I swear, they either want to make this as complicated as possible, or they want to make it so only people already familiar with J2EE can ever figure it out. This is one spot where ColdFusion just spoils the hell out of us. You just &quot;turn on CF&quot;, put files into the web root, and run them. The Java folks really need to simplify this whole side of the process because it remains a major stumbling block. However, we were using JBoss to deploy our Groovy code for web usage, and that meant I had to bite the bullet and figure it out.

After much pain and cursing, I believe I am finally over the hump. Eclipse does has some nice capabilities that let you configure a J2EE runtime like JBoss and then deploy your web application to a running JBoss server instance from right inside Eclipse, so that helps somewhat. Don&apos;t get me wrong, it&apos;s still way more difficult than it should be in my opinion. But its nice to see some light at the end of this tunnel and finally have at least a partial grasp on how this actually works.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/&quot; target=&quot;_blank&quot;&gt;BlazeDS&lt;/a&gt;: Blaze is one of those things that I kept hearing people talk about but never really understood. It lets us do Flash Remoting? Don&apos;t we already have that in CF? Yes. Don&apos;t we already have LiveCycle Data Services too? Yes. So what&apos;s the point of Blaze? Well, Blaze gives Java developers that same power, with some other benefits and some other restrictions. It isn&apos;t limited to one CPU like the &quot;light&quot; version of LCDS that we get with CF8. It offers messaging, which is a very powerful technique to get real time information flowing between your Flex and AIR clients. And it &lt;a href=&quot;http://www.adobe.com/devnet/livecycle/articles/blazeds_spring.html&quot; target=&quot;_blank&quot;&gt;integrates directly with Spring&lt;/a&gt;, so you can define remoting endpoints that point at Spring-managed beans. Very slick!&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Message_Service&quot; target=&quot;_blank&quot;&gt;JMS&lt;/a&gt;: JMS is another one of those things that I&apos;ve heard a lot about and understood in a basic way what it was, but hadn&apos;t every really used directly. Thanks to Joe (what DOESN&apos;T this guy know?!), we have our system set up to allow our Groovy model to dispatch generic JMS messages. Because JMS is generic, this is a really powerful thing. It means that anything that can listen for JMS broadcasts (which, when using Java and a J2EE application is basically anything) and respond. For now, Joe set it up to allow these JMS broadcasts to feed into Blaze, which in turn broadcasts them out to any AIR or Flex clients using the Blaze messaging capability. So right off the bat that is great, we can push messages out to Flex/AIR from our Java model without the Java model knowing anything about Flex or AIR. But this goes much deeper since it means that anything that can interact with JMS can also be notified. So other parts of the Java model, or even completely separate applications or servers, can be notified in this way without any dependencies existing between them.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.adobe.com/products/air/&quot; target=&quot;_blank&quot;&gt;AIR&lt;/a&gt;: I had build some applications in Flex but hadn&apos;t really tried out AIR yet beyond a few demos or &quot;hello world&quot; applications. Well, AIR is really nice. And at a basic level, building an AIR app is really just building a Flex app and wrapping the application with a different XML tag. So starting off with it is dead simple. However, it opens up all sorts of very cool capabilities by allowing interaction with the native operating system and the native file system. And of course, the ability to work offline and then sync data once the user goes back online is a feature that we&apos;re looking at very closely. Working with files is also very simple, including uploading and downloading files. AIR 1.1 just came out so I&apos;m already looking at what that release brings to the table.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/swizframework/&quot; target=&quot;_blank&quot;&gt;Swiz&lt;/a&gt;: Last but not least, I&apos;m very happy to finally have the chance to kick Swiz around. In case you don&apos;t know, Swiz is a Flex framework developed by Chris Scott, who also is a huge part of the ColdSpring effort. Having worked with the beast that is Cairngorm, using Swiz is like a breath of fresh air. Again, knowing full well the benefits of IoC from ColdSpring and Spring, it&apos;s very easy to see how Swiz makes Flex development soooo much easier for the same reasons. One of the biggest problems I always had with Flex apps was just getting the pieces to be able to talk to each other in a way that didn&apos;t cause a ton of coupling. With Swiz, there is no need for a ModelLocator and no need for tons of dependencies where one component creates a child and passes a bunch of information into it, and the child creates another child, etc. Swiz uses annotations in your ActionScript to autowire the entire system automatically. So everything is very loosely coupled and you can avoid a ton of the boilerplate code that most other Flex frameworks push on you just to let your application function.&lt;/li&gt; 
&lt;/ul&gt;

So it&apos;s been a very busy few weeks for me, but also an amazing few weeks. And there&apos;s no slowdown in sight, we&apos;re continuing to ramp all of these up in preparation for building some pretty amazing things. We can&apos;t talk about the end result yet, but don&apos;t worry, we will. ;-)  Until then, if anyone has comments or pointers on any of these, please fire away with comments!
				
				</description>
				
				
				<category>Development</category>
				
				<category>ColdFusion</category>
				
				<category>Flex</category>
				
				<category>Broadchoice</category>
				
				<category>Personal</category>
				
				<pubDate>Mon, 25 Aug 2008 11:13:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/8/25/Two-Weeks-at-Broadchoice-A-Brain-Dump-Wrapped-in-a-Blog-Entry</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>My Take on Mac vs. PC</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/8/13/My-Take-on-Mac-vs-PC</link>
				<description>
				
				At Broadchoice, everyone uses a Mac. Except me. In fact, it seems like just about everyone in the programming world is jumping onto the Mac bandwagon. Which is fine, I say use whatever you think works best for you. However, that&apos;s usually not good enough. When I tell someone I work on an XP box, the floodgates of hate open! Well, not really HATE, but people sure are happy to let you know what they think of Windows and why Macs are so utterly superior. And I&apos;ve got to tell you, it makes me feel like this:

&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;/blog/images/mac_vs_pc.jpg&quot; /&gt;&lt;/div&gt;

It can be downright depressing being a &quot;poor PC guy&quot;! It might be blasphemy in this day and age, but I &lt;strong&gt;like&lt;/strong&gt; my PC. It runs just fine. It never crashes. I&apos;ve got everything set up on it just how I want it, and I&apos;m talking about a lot of stuff: games, development tools, servers (ColdFusion, JBoss, etc.), databases, and all the rest. I don&apos;t really want to have to go through all that effort again just to say I&apos;m working off a Mac. Plus, not to brag, but my PC is a monster. 500 GB RAID 0, 4 GB RAM, 4 GHz dual-core Athlon 64, dual GeForce 8600&apos;s. And for display:

&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;/blog/images/pc_workstation.jpg&quot; /&gt;&lt;/div&gt;

Yes, that is &lt;strong&gt;three&lt;/strong&gt; 19 inch LCDs. And I use them all, all of the time. I know the Mac has Spaces but its not the same thing. I can actually see everything instead of having to switch to different spaces. I know that I am completely spoiled by this setup but it results in very high productivity for me.

Now compare that to the admittedly very nice Macbook Pro that Broadchoice set me up with:

&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;/blog/images/macbook.jpg&quot; /&gt;&lt;/div&gt;

Yes, it&apos;s very nice. Yes, I like OS X. I have nothing &lt;strong&gt;against&lt;/strong&gt; Macs, it&apos;s just not my preference. I have this set up with my basic tools and applications. I use it when I&apos;m traveling or presenting, or whenever I&apos;m not at my desk. But surely it wouldn&apos;t surprise anyone that I would prefer to work on my very well-appointed PC workstation than on this 15&quot; Macbook.

So please Mac folks, stop giving people the third degree just because they are actually fine working on a PC! I get it, you love your Macs. But seriously, the attitude is starting to go from enthusiastic to arrogant and overbearing.

So I&apos;ll open the floodgates to see what the Mac folks have to say, as well as to see if there are any other PC users who feel like they are supposed to be ashamed of daring to use a Windows-based system.
				
				</description>
				
				
				<category>Development</category>
				
				<category>Computers</category>
				
				<category>General</category>
				
				<category>Personal</category>
				
				<pubDate>Wed, 13 Aug 2008 12:17:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/8/13/My-Take-on-Mac-vs-PC</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Brian Kotek Joins Broadchoice, Inc.</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/8/4/Brian-Kotek-Joins-Broadchoice-Inc</link>
				<description>
				
				I&apos;m honored and very happy to announce that I&apos;ve accepted a position at &lt;a href=&quot;http://www.broadchoice.com/&quot; target=&quot;_blank&quot;&gt;Broadchoice, Inc.&lt;/a&gt; as a Systems Architect. I&apos;ll be working alongside &lt;a href=&quot;http://www.coldfusionjedi.com/&quot; target=&quot;_blank&quot;&gt;Ray Camden&lt;/a&gt;, &lt;a href=&quot;http://www.corfield.org/&quot; target=&quot;_blank&quot;&gt;Sean Corfield&lt;/a&gt;, &lt;a href=&quot;http://www.firemoss.com&quot; target=&quot;_blank&quot;&gt;Joe Rinehart&lt;/a&gt;, and &lt;a href=&quot;http://www.aboutnico.be/&quot; target=&quot;_blank&quot;&gt;Nicholas Lierman&lt;/a&gt;, which is going to be an amazing experience. A big part of the decision to join is that the company looks great and has some very interesting projects in the works. But the bigger part may be the unshakable belief that this team is going to create some of the best software ever written!

I had the luck to work with Joe for several months this year, and it probably comes as no surprise to anyone that he&apos;s both brilliant and stunningly nice. I&apos;ve also known Sean for a number of years, through Fusebox, Conferences, and mailing lists. As Chief System Architect I&apos;ll be reporting to him. Ray I&apos;ve known casually but havne&apos;t interacted with a great deal, and Nicholas I know only through his reputaion in the world of analytics. I&apos;m looking forward to getting to know them and working with them to build some amazing applications.

In light of the new direction in my life and career, I&apos;ve put together a new look for my blog, and renamed it as &quot;Inversion of Control&quot;. I&apos;ll be continuing to post here, as well as at the upcoming Broadchoice team blog. My work on my RIAForge projects and in support of ColdSpring and Transfer will also continue. One of the great things about Broadchoice is their understanding that letting us blog, present at conferences, and work on open source projects is not only good for us, but also for the ColdFusion community and for Broadchoice.

As you can probably tell, I&apos;m very excited. I can&apos;t wait to see what kind of great stuff our group is going to create!
				
				</description>
				
				
				<category>ColdFusion</category>
				
				<category>Broadchoice</category>
				
				<category>Personal</category>
				
				<pubDate>Mon, 04 Aug 2008 10:01:00 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/8/4/Brian-Kotek-Joins-Broadchoice-Inc</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Review of the Amazon Kindle Wireless Reading Device</title>
				<link>http://www.briankotek.com/blog/index.cfm/2008/5/21/Review-of-the-Amazon-Kindle-Wireless-Reading-Device</link>
				<description>
				
				&lt;div style=&apos;&apos;&gt;I recently bought an &lt;a href=&quot;http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA&quot; target=&quot;_blank&quot;&gt;Amazon Kindle&lt;/a&gt; and thought I would share my thoughts on it. Before someone drops $400 on something, they usually want to know if it&apos;s worth it.&lt;br /&gt;&lt;br /&gt;Overall, the Kindle is amazing. The text is completely clear and readable. I quickly forget that I am looking at a screen at all. The technology draws no power to keep text on the screen, it only uses juice to refresh the screen. There is no &quot;burn in&quot;: if you put it down and pick it up two weeks later, you&apos;re still fine, and it used no power to keep the screen that way the whole time.&lt;br /&gt;&lt;br /&gt;The device uses Sprint&apos;s EVDO 3G network to connect to Amazon and let you download the books that you buy. They download in under 30 seconds. The device has enough memory to store a ridiculous number of books, and if you want to drop $20 for a 4 Gb SD card, you basically go to unlimited storage space.&lt;br /&gt;&lt;br /&gt;The books are generally 30-50% less than the printed versions. For about $100 so far, I have the entire H.P. Lovecraft library (of course), 1984, The Singularity is Near, Patterns of Enterprise Application Architecture, Implementation Patterns, Agile Java Development with Spring, Hibernate and Eclipse, and more. &lt;br /&gt;&lt;br /&gt;Further, you can email yourself documents to a special Kindle email address for automatic conversion and downloading to your Kindle. The address only accepts mail for addresses you specify to avoid any spam. The conversion costs 10 cents, and it even works with PDFs, though the PDF conversion is still labeled &quot;experimental&quot; and the results are not perfect. Even so, I emailed the entire Flex 3 Developers Guide, the Flex 3 ActionScript Guide, and other big PDFs to myself and now have a vast set of things to read at any time.&lt;br /&gt;&lt;br /&gt;The real hidden power of the Kindle, though, is it&apos;s built-in cellular connection. In addition to letting you get to the Amazon Kindle store, it includes a basic web browser. You can see where this is going already. Because you don&apos;t pay for any of your wireless usage (it is just included with the cost of the device) and don&apos;t have any sort of account with Sprint, this high-speed internet access is really, really kick ass. The browser works best for text-based sites, so hitting things that are optimized for cell phones is preferred. You can go to any site you want, but the layout can be screwy for &quot;wide&quot; sites with complex layout or graphics.&lt;br /&gt;&lt;br /&gt;Even still, this opens up a gigantic range of options. I&apos;ve been using Google Mobile, including Google Reader for all my RSS and blog needs, GMail, Wikipedia, Google Maps, and more. They all work very well, which basically makes the Kindle a free portable internet reader as well. And this is arguably as big a deal as the Kindle&apos;s book reading capabilities. Between the net access, PDF reading, and Kindle bookstore, I have an unlimited store of interesting things to read, any time, anywhere.&lt;br /&gt;&lt;br /&gt;The device is easy to use. It is very light. Which makes reading tech books that are normally big and bulky much nicer. You can change font sizes any time. It has a built-in search which lets you search for anything across your whole library. And it has inline lookup against dictionaries and Wikipedia if you&apos;re reading something and want a definition or more information on something.&lt;br /&gt;&lt;br /&gt;If there are any drawback to the Kindle, it is with the design of it. First, it&apos;s not very cool looking. This was not made by Apple. I mean, it&apos;s not horribly ugly, it&apos;s just meh. The other issue is that it will take you a few minutes to get used to holding it. The sides of the device have &quot;next page&quot; and &quot;previous page&quot; buttons to let you &quot;turn pages&quot;, which means you have to be careful about how you hold it to avoid accidentally turning the page. Clearly, this is a pretty minor deal, since you will quickly figure this out, and if you do flip the page you can just go back again. It just means figuring out how to hold the Kindle comfortably will take you a minute or two. Yes, these are about the only two &quot;drawbacks&quot; I could come up with.&lt;br /&gt;&lt;br /&gt;Overall I&apos;d recommend this thing to any serious reader. $400 sounds like a lot, and I guess it is, but it is a pretty amazing piece of technology, and when you factor in the unlimited 3G net access the price quickly becomes a lot more justifiable. Since anyone reading this blog is probably already a pretty hard core reader, just set aside some money and buy one. I&apos;d wager you&apos;ll love it too.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;/div&gt;
				
				</description>
				
				
				<category>Computers</category>
				
				<category>Book Reviews</category>
				
				<category>Personal</category>
				
				<pubDate>Wed, 21 May 2008 11:10:37 -0700</pubDate>
				<guid>http://www.briankotek.com/blog/index.cfm/2008/5/21/Review-of-the-Amazon-Kindle-Wireless-Reading-Device</guid>
				
				
			</item>
			
		 	
			</channel></rss>