<?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>The Way I See It</title>
			<link>http://www.gobwash.com/index.cfm</link>
			<description>The site to get my mind working and my voice out there. Coldfusion, web development, video games, cooking, recipes, life and love.</description>
			<language>en-us</language>
			<pubDate>Sun, 20 May 2012 08:28:09 -0500</pubDate>
			<lastBuildDate>Wed, 25 Apr 2012 16:01:00 -0500</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>scott@gobwash.com</managingEditor>
			<webMaster>scott@gobwash.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>scott@gobwash.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			<item>
				<title>Just an idea</title>
				<link>http://www.gobwash.com/index.cfm/2012/4/25/Just-an-idea</link>
				<description>
				
				I have an &quot;out of the box&quot; idea for economic recovery:

Raise the tax rate on anyone making over $2 million a year to 30%. This is only a 2% increase over the current rate. Then make any person with income under $30K (for single filers, $50K for couples) pursuing a first college degree, with a 8 hours minimum class load, exempt from federal taxes.By making them exempt, instead of a &quot;tax rebate&quot; once a year, they would not be paying in from each check and would have more money on-hand to spend. These individuals would still be paying local city and state taxes where applicable, as well as social security.

I know, I know. The argument against it is that you would be taking from the &quot;rich&quot; and giving to the &quot;poor&quot;. But I disagree. Look at it as the country (or even those companies) making an investment in the future. All the studies show that, on average, college educated people make more money over the course of their lifetime than their less-educated brethren. They will make more money, so they will pay more in taxes in the future. In exchange for 4-5 years of not collecting taxes at 15% on low income you get an individual paying for 30+ years at 25% or higher for a higher overall income. That&apos;s a pretty good swap, if you ask me.

Not coincidentally is the effect on the immediate economy. There are about 20 million college students. If you leave a couple hundred dollars per month in their pockets they will spend it. They will buy goods and services and pay bills. Honestly, the small number of multimillionaires whose tax was increased are simply incapable of pouring that kind of spending back into the economy. The increased consumption will lead to more jobs and more money back into the pockets of the rich corporations.

Another benefit is a reduction in &quot;safety net&quot; benefits. Students with families on welfare and food stamps will need less of these benefits and will begin contributing more &quot;free market&quot; money into the economy instead of just recycling tax dollars.

Make working your way through college just a &lt;b&gt;little&lt;/b&gt; easier, put millions of dollars into the economy from people who are yearning to spend it and reduce the amount of social welfare spending from the government. That sounds like a winning idea to me.
				</description>
				
				<category>Public</category>
				
				<category>Politics</category>
				
				<pubDate>Wed, 25 Apr 2012 16:01:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/4/25/Just-an-idea</guid>
				
				
			</item>
			
			<item>
				<title>New favorite breakfast</title>
				<link>http://www.gobwash.com/index.cfm/2012/3/8/New-favorite-breakfast</link>
				<description>
				
				They say breakfast is the most important meal of the day. Still, I used to skip it regularly. Until I started making my ultimate breakfast sandwich. It&apos;s basically an egg mcmuffin, only healthier. It takes less than 5 minutes to make and I can even get it going and walk away for a couple of minutes without worrying.

What&apos;s in it:
English muffin, split and toasted
1 egg
1 slice Swiss cheese
2 slices Canadian bacon

How simple is this? Fry the egg over medium heat to your personal preference of wellness. I usually prefer my yolks firm. While the egg is frying, slip the Canadian bacon into the same pan to heat. When you are ready to flip your egg, flip the meat.

Assemble by placing 1 slice of Canadian bacon on the bottom of the English muffin. Place the cheese slice on top, then the egg, then the other bacon slice and finally the toasted top. By sandwiching (pun intended) the cheese between the warm bacon and egg, it should start to melt on its own.

This version is healthier than the McVersion because the ingredients are fresh and contain no fillers or by-products. But also Swiss cheese is a healthier alternative to processed American cheese. A leaner version could use a turkey-based alternative like turkey-bacon in place of the Canadian bacon. 

Here are a couple of alternative versions that would be just as delicious:
-instead of Canadian bacon, use regular bacon or sausage
-instead of a fried egg, use scrambled
-add veggies to the scrambled egg, like an omelet
-experiment with various cheeses

If you don&apos;t care about &quot;healthier&quot; double the meat and add a helping of Hollandaise sauce or gravy!

Whatever the variation, this breakfast will hit the spot. Oh, and the cost per sandwich is less than hitting the drive-thru.
				</description>
				
				<category>Public</category>
				
				<category>Recipes</category>
				
				<pubDate>Thu, 08 Mar 2012 11:26:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/3/8/New-favorite-breakfast</guid>
				
				
			</item>
			
			<item>
				<title>Beef Tips and Noodles</title>
				<link>http://www.gobwash.com/index.cfm/2012/2/4/Beef-Tips-and-Noodles</link>
				<description>
				
				Last night I cooked a delicious meal: Beef Tips and Noodles. It was so good, I have to write about it!My mom used to cook a roast in a pressure cooker and make a simple brown gravy and mix it with wide noodles. I used to purchase Hormel pre-cooked beef roast in gravy and mix it with said noodles. My method was much quicker, but not quite as tasty. Last night&apos;s recipe was a little impromptu but went like this:

&lt;h3&gt;Ingredients&lt;/h3&gt;
1 lb cubed stew beef
2 cups beef stock
1/2 cup water
3 tbsp all-purpose flour
1 tbsp worcestershire sauce
1 tbsp deli mustard
3-5 bay leaves
1 tsp finely chopped tarragon
3 tbsp vegetable oil
2 tbsp butter
6-8oz wide egg noodles
salt and pepper to taste

&lt;h3&gt;Beef&lt;/h3&gt;
Heat the vegetable oil in a deep, 12-inch pan over medium-high heat. Add the stew beef and brown, about 3 minutes each side. 

&lt;h3&gt;Sauce&lt;/h3&gt;
After the beef is fully browned pour out about half of any oil or juices still in the pan. If I had them, I would have added a 1/2 cup of diced portobello mushrooms and 1/4 cup of finely chopped white onion to the pan and cook them for a couple of minutes before continuing. 

Turn the heat to medium and, keeping the beef in the pan, add the butter. Allow the butter to melt and then add the flour. Stir the flour, beef and butter until the flour and butter have combined and begun to brown. Allow this mixture to cook for a minute, stirring to prevent burning.

Add the beef stock and water and stir until well blended with the butter/flour mixture (called a roux). Cover and cook over medium heat until boiling. Give it another stir  and continue boiling for about 5 minutes.

Stir again (lots of stirring in this recipe) and turn down the heat to medium-low. Now add the bay leaves, tarragon, mustard, worcestershire sauce, salt and pepper. Stir to incorporate these new ingredients. Your sauce should be smooth with a glossy, light brown color. Continue cooking for about 35 minutes, stirring every few minutes. The sauce will reduce down and become thicker. 

After the 35 minutes, begin cooking your noodles according to the directions on the package. By the time your noodles are cooked, your meat and sauce will have simmered for about an hour your beef should be tender and your sauce will be quite thick. Now would be a great time to sneak a taste and add more salt or pepper, if necessary.

Before you drain your noodles add about 1/3 cup of the pasta water to the beef and sauce, stir well. This starchy water will help the sauce adhere to the noodles. Now drain your noodles and add them into your pan with the beef and sauce. Stir the deliciousness around to cover all the noodles with the delicious sauce. Simmer for a couple of minutes to make sure all the flavors get a chance to incorporate and are at the same temperature.

Serve hot and enjoy.
				</description>
				
				<category>Public</category>
				
				<category>Recipes</category>
				
				<pubDate>Sat, 04 Feb 2012 16:31:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/2/4/Beef-Tips-and-Noodles</guid>
				
				
			</item>
			
			<item>
				<title>Why your site is slow</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/30/Why-your-site-is-slow</link>
				<description>
				
				As a web developer I want my projects to accomplish 2 things. I want to exceed the expectations of my client and provide the user with a good experience. A lot of developers get into the mindset of &quot;if it works, I&apos;m done&quot;. They don&apos;t take the opportunity to make sure the users are going to have a good experience. I don&apos;t blame them. It&apos;s tedious to test compatibility and boring to make sure your error catching gracefully handles issues that may arise. But, ironically, a slow load time can quickly ruin a users website experience. I break load-time into 2 categories: real and perceived. Real load-time is the actual time it takes all elements and scripting to be 100% loaded and ready. Perceived load-time is the wait-time a user experiences before they can start using a site. A &quot;fast&quot; site optimizes for the former, while exploiting the latter. So, here are 3 things techniques I use to affect page load-time without affecting my coding.&lt;h3&gt;(Image) Size Matters&lt;/h3&gt;
&quot;I&apos;m a developer, not a graphic designer!&quot; This may be true, but I&apos;m the one building the project. Therefore it is my responsibility to know about ALL facets of the project, including images. I can&apos;t draw a straight line, but I know the fundamentals of using images on the web. For me, the most important rule for graphics is: the smaller the better. Each byte the user has to download adds wait time to the user&apos;s experience. Users do not come to websites to wait. 

My friend &lt;a href=&quot;http://www.k-squareddesigns.com target=&quot;_blank&quot;&gt;Justin&lt;/a&gt;, a top-rate designer, explained to me one day that when he is working in Illustrator or Photoshop his raw files could be a GIGABYTE or more in file size. This explains why designers sometimes have no problem sending me images that are 200K. By comparison, it&apos;s tiny! But 200K takes time to download. If I could get that image down to 20K (still larger than I would ideally prefer) the download time is dropped considerably, as is the user&apos;s wait time. 

This is not just about the user either. From the server&apos;s perspective, a reduced file-size is less data it has to send &lt;i&gt;to each user&lt;/i&gt;. If you remove 180K from one image that savings is multiplied by each time the file gets requested and sent to a browser. This can by thousands or even millions of times over the life of that single image. Now consider that you may reduce the file-size of multiple images and imagine the reduced workload on your server! This simple change makes your pages load faster and frees up the server&apos;s overall bandwidth to allow it to handle more requests. This optimization addresses both the real and perceived load-time objectives!

There are several tools and sites that help in shrinking images down. One I like to use is &lt;a href=&quot;http://www.smush.it&quot; target=&quot;blank&quot;&gt;Yahoo&apos;s Smush.it&lt;/a&gt;. I provide it the URL of the image and it will not only shrink it for me but shows how much space I will be saving. 

&lt;h3&gt;Load Javascript Last&lt;/h3&gt;

I know, every tutorial and book shows that javascript should put in the HEAD tag. But think about this: generally speaking, javascript is useless without the elements on the rest of the page! If the page has not loaded, the javascript has nothing to interact with. So why does it need to come first? Because the browser processes HTML in a top-down manner, if javascript is placeed at the bottom of the page, the HTML elements will load &lt;strong&gt;and render&lt;/strong&gt; first. To the user, this means the page appears quicker. When the images and HTML are loaded, the user can begin to read the page and decide upon action. While in the background, the browser continues to process the page and load the javascript. This quick fix does not change the real load-time, but by manipulating the user&apos;s perception of how fast the page loads, the user has a more positive experience.

&lt;h3&gt;Really, Size Matters&lt;/h3&gt;

If shrinking the file-size of images reduces load-time, what if I could reduce other components as well? It turns out this can provide a sizable boost to both real and perceived load-times as well! Essentially I want to remove blank spaces and unnecessary markup from any javascript and css files being imported/included in a page. Remember, even a space affects the file-size. 

As with images, there are tools and websites you can use to shrink, or minify, your javascript and css. But one small change you can implement while writing these files that can add up to big savings is being mindful of semicolons. Know when semicolons are optional and omit them when possible. Once again, a small change can generate great savings to the server.

Going one step further, I can also remove unnecessary markup and spaces in my HTML to reduce the size of the page request as well. The browser does not need several blank lines between DIVs, it just makes it easier for a developer to read. I can realize a smaller footprint and faster processing by using minimal &quot;developer-centric&quot; text formatting.

These techniques are standard components of my development toolbox and can make the difference between a satisfied client and a happy client.
				</description>
				
				<category>Public</category>
				
				<category>Development</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Mon, 30 Jan 2012 16:18:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/30/Why-your-site-is-slow</guid>
				
				
			</item>
			
			<item>
				<title>Is real time processing really required?</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/18/Is-real-time-processing-really-required</link>
				<description>
				
				As processing power has increased, data caching has jumped to the forefront and user-demand for immediate response has grown, developers seem to have moved away from batch processing. But in a lot of situations, this can be a better approach than real-time processing.A few years ago I was tasked with building a piece of middleware to facilitate data exchange between 2 SQL Server-based systems. The main system was a &lt;a href=&quot;http://www.microsoft.com/en-us/dynamics/erp-nav-overview.aspx&quot; target=&quot;_blank&quot;&gt;Navision&lt;/a&gt; system that maintained the company&apos;s financials and inventory. The other was an &lt;a href=&quot;http://www.goindaba.com&quot; target=&quot;_blank&quot;&gt;Indaba&lt;/a&gt; installation which managed inventory for sale on 3rd party marketplaces, such as Amazon. Additionally, Indaba managed the actual orders placed on the marketplaces. So when an order was placed it came first to Indaba and Indaba double checked its inventory to make sure the order could be fulfilled. However, Navision was the system from which all order fulfillment took place; all the warehouse paperwork was generated in it and all shipping information was pulled from it.

The data flow went something like this: as new inventory was added into Navision, it was pushed into Indaba. As orders from the marketplaces came into Indaba they were checked for availability against Indaba&apos;s copy of the inventory and pushed into Navision. Both were seen as needing to be done in real-time.

Ignoring the complexity of the data in Navision (quantities are NEVER stored, always calculated) this sounds pretty simple, right? I thought so too. I jumped in and built a SQL &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms189799.aspx&quot; target=&quot;_blank&quot;&gt;trigger&lt;/a&gt; that pushed new inventory to Indaba each time a new item was added. On the flip side, I wanted to add a trigger in Indaba&apos;s database to push order information to Navision. This is when I ran into a problem.&lt;more/&gt;You see, Navision is looked at as a black box. It has its own programming language called C/SIDE that allows for development within its environment. Our Navision consultant explained that if I just pushed data into the sales order tables from the database side, it would by-pass all the checks and balances built into the code and in general be VERY bad. 

Since I respected this man&apos;s opinion, we set about finding a way around this. What we ended up doing was creating a method to process the orders in a batch. Once the orders were placed in Indaba, we weren&apos;t going to lose them. So we built staging tables in Navision that Indaba pushed the orders into. Then, on a schedule, Navision&apos;s internal code could process the data from those tables and generate the sales orders it needed. 

While it was imperative that Indaba maintain a real-time inventory copy, it was not necessary that the orders be brought into Navision in real-time. Batch processing was the answer.  In this age where developers believe a customer cannot even be bothered with a page refresh (hello AJAX) the idea that all processing should be done in real-time can cause problems. Keep batch processing in mind.
				</description>
				
				<category>Development</category>
				
				<category>SQL Server</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Wed, 18 Jan 2012 13:21:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/18/Is-real-time-processing-really-required</guid>
				
				
			</item>
			
			<item>
				<title>SQL Server Tuning: Stored Procedures vs Ad Hoc Queries</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/14/SQL-Server-Tuning-Stored-Procedures-vs-Ad-Hoc-Queries</link>
				<description>
				
				When I first started writing Coldfusion applications I was very naive about data and architecture. I can admit it. I did not use components and I wrote (and often re-wrote) queries in-line when needed. As my development matured and I began to more fully understand SQL Server as an independent platform I recognized my failures.After delving into some SQL tuning for &lt;a href=&quot;http://www.microsoft.com/en-us/dynamics/erp-nav-overview.aspx&quot; target=&quot;_blank&quot;&gt;Navision&lt;/a&gt;, a Microsoft CRM/ERP system my company ran I began to understand that SQL Server likes stored procedures and functions over ad hoc queries. I also saw how this could benefit my Coldfusion development. This time coincided with a more full understanding of CF Components to allow me to write a function once and reference that function, rather than copy/paste the same queries (or business intelligence for that matter) all over the place.&lt;more/&gt;

What I learned about SQL Server was this: when using stored procedures you can leverage internal caching that is not available from ad hoc queries.

Because stored procedures have a formalized list of parameters, SQL can cache the way it will run the procedure (aka the execution plan). When an ad hoc query is sent to the compiler, it must determine the data types of any parameters before proceeding. By making this step unnecessary and pulling the execution plan from memory the stored procedure requires less overall processing and executes faster.

By making a request in a more SQL Server-friendly way, the server rewards us with a faster result. If the result comes back faster, Coldfusion can do it&apos;s processing sooner and the client is rewarded with a faster response. If you take further advantage of SQL&apos;s ability to handle the data, by handling data manipulation or combining multiple queries into a single call, you lighten the load on your Coldfusion server and make it more efficient.
				</description>
				
				<category>Development</category>
				
				<category>SQL Server</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Sat, 14 Jan 2012 18:39:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/14/SQL-Server-Tuning-Stored-Procedures-vs-Ad-Hoc-Queries</guid>
				
				
			</item>
			
			<item>
				<title>Let Bartlet Be Bartlet</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/14/Let-Bartlet-Be-Bartlet</link>
				<description>
				
				My friends know I am a huge fan of the tv show The West Wing, hence the title of this post. As I was writing my post on using stored procedures, this one slapped me in the head and began forcing its way out. Too often developers think their language of choice is the end-all be-all of the development world. As a result they force it to do every necessary function when sometimes other tools, already readily available, can provide not only a better method, but can lead to exponential performance gains.As I continue to shape my development methodologies. I&apos;ve adopted the attitude of &quot;let the experts do what they are expert in&quot;. In other words, just because Coldfusion &lt;i&gt;can&lt;/i&gt; do something does not mean it &lt;i&gt;should&lt;i&gt; be the component to do it. SQL Server (or Oracle or mysql) is the master of the data I want to use. It knows how to store it and retrieve it and parse it. So whenever possible, I want SQL to handle as much pre-processing (and post-processing) of the data as possible and let Coldfusion handle the responsibility of interfacing with the user and processing requests. Additionally, I don&apos;t want to get invalid data from the server that then takes processing to correct before using.

For example, I had an instance where I needed to manipulate the pricing of inventory based on a client variable. Initially, this processing was being done by CF after SQL Server sent the inventory information back. While this certainly works, the concept of knowingly retrieving invalid data and then making it correct is &lt;strong&gt;never&lt;/strong&gt; a good idea. So I adjusted my stored procedure to accept 1 more parameter and modified the logic inside to do the price adjustment. This change maintains server responsibility and prevents Coldfusion from having to fix invalid/incomplete data.

Obviously that is a simple example that only leads to a small performance gain; maybe even negligible in the grand scheme. But what if I have a small set of data, say from a form submission, where some values cause a table update and other values must be inserted across multiple tables? Is it more effective to write the conditional logic and queries in coldfusion and then have the server make multiple requests to SQL to make it happen &lt;i&gt;or&lt;/i&gt; pass all the variables into a single stored procedure that encapsulates the logic and acts upon the locally stored data?

If the Coldfusion server&apos;s request responsibility it dropped from, say 3 insert queries, to 1 stored procedure call that is a 66% processing reduction each time that template (or component) is processed. Spread that across multiple simultaneous requests (maybe thousands) and you begin to really see the benefit. Of course, this also makes more resources available overall which benefits all threads on the Coldfusion server.

Imagine that, letting a more apt resource handle what it handles best when necessary, you get improved performance all around.
				</description>
				
				<category>Public</category>
				
				<category>Development</category>
				
				<category>SQL Server</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Sat, 14 Jan 2012 16:25:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/14/Let-Bartlet-Be-Bartlet</guid>
				
				
			</item>
			
			<item>
				<title>SQL Server Tuning: Using the Tuning Wizard</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/11/SQL-Tuning</link>
				<description>
				
				A post in a troubleshooting forum on &lt;a href=&quot;http://www.linkedin.com&quot; target=&quot;_blank&quot;&gt;Linked In&lt;/a&gt; got me thinking about query optimization. The original poster asked about identifying and solving deadlock situations. Many great responses preceded mine, but it got me thinking about how I troubleshoot these problems. So I thought I would write it up over a series of posts.Deadlocks are actually occurrences where two resources are waiting for each other to complete before continuing. While these do, indeed happen, most of the time people use the phrase to mean a long-running process is hogging one or more resources and preventing those resources from being utilized by other processes.

When the former occurs, I find the best approach to be finding a way to remove the reliance of the deadlocking resources. Removing the inter-dependence, the deadlock can no longer occur. 

But I want to focus on the latter situation as it is the more common. When your queries start taking longer and longer to run there are a few simple steps you can take to regain the speed you saw when you were testing as a single user.

It would be easy to say optimize your indexes and queries, but that&apos;s not so easy to do. My first step is to leverage SQL Server to tell me what is going on and what it thinks I should do to be more efficient. SQL Server has a nice feature called the SQL Server Profiler. This allows you to record what is happening and analyze it later. By generating a profile on your server you get to see every query or stored procedure that is accessed, when it occurred and how long it took to complete. Coupled with the SQL Server Database Tuning Wizard, SQL Server can do some heavy lifting and recommend some areas to start your tuning such as missing or unused indexes. 

One of the databases I administered was over 250GB and housed a couple thousand tables. There is no way I could go through each table and manually decide how to optimize the indexes. With the recommendations from the tuning wizard, I was able to concentrate on the bigger bang optimizations that should net immediate results. I was able to easily generate missing indexes and disable those that were not used. The best part was no guessing was involved. Because the tuning wizard&apos;s suggestions were based on real-world usage, gathered over several hours (at minimum), I knew that these indexes would have a positive impact.

I found that the tools offered by &lt;a href=&quot;http://www.idera.com&quot; target=&quot;_blank&quot;&gt;Idera&lt;/a&gt; were also very valuable. Idera&apos;s SQL Doctor is like a tuning wizard on steroids and helps get your SQL Server purring like a cheetah.

I will post further on this topic over the next few days; touching on areas such as  &quot;stored procedures vs ad hoc queries&quot; and &quot;is real-time processing required&quot;.
				</description>
				
				<category>Development</category>
				
				<category>SQL Server</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Wed, 11 Jan 2012 15:48:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/11/SQL-Tuning</guid>
				
				
			</item>
			
			<item>
				<title>Movie Review: The Girl with the Dragon Tattoo</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/4/Move-Review-The-Girl-with-the-Dragon-Tattoo</link>
				<description>
				
				Just got back from seeing The Girl with the Dragon Tattoo. I wanted to see it when it opened, but was a little busy with the holidays.I read and loved the books so going in I was hoping David Fincher would remain true to &lt;a href=&quot;http://en.wikipedia.org/wiki/Stieg_Larsson&quot; target=&quot;_blank&quot;&gt;Stieg Larsson&apos;s&lt;/a&gt; work. I was not disappointed.

The movie combined everything about the story with Fincher&apos;s no-pulled-punches style. I saw one review that claimed the movie as &quot;rapey&quot; and I understand where that comes from. However, as stomach-turning as those scenes may be, I was glad it was decided to stay true to the original work and include them.

The photography of the movie was beautifully gloomy and Trent Reznor&apos;s soundtrack  supported the movie without being intrusive. 

I&apos;m not one for &quot;spoilers&quot;, but I have to agree with Kevin Smith, the sound fx of the teeth skittering across the floor: brilliant (and kind skin-scrawling).

If you are looking for a good, serious movie with well-formed &quot;3D&quot; characters and a strong story go see this movie!

Plus, Goran Visnjic (Luca from ER) is in it. Where has he been all these years?

Also, the preview for &lt;a href=&quot;http://www.imdb.com/rg/s/1/title/tt1336608/#lb-vi3948650009&quot; target=&quot;_blank&quot;&gt;Rock of Ages&lt;/a&gt;! This is definitely a MUST SEE for me, if for no other reason than the soundtrack!
				</description>
				
				<category>Movies</category>
				
				<category>Public</category>
				
				<pubDate>Wed, 04 Jan 2012 00:39:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/4/Move-Review-The-Girl-with-the-Dragon-Tattoo</guid>
				
				
			</item>
			
			<item>
				<title>IIS 7 Search Engine Optimization toolkit</title>
				<link>http://www.gobwash.com/index.cfm/2012/1/1/IIS-7-Search-Engine-Optimization-toolkit</link>
				<description>
				
				It has been a while since I have been excited about development. I hope that today signifies a change in that. I spent most of the day doing some freebie work for one of my clients. You see, I downloaded the &lt;a href=&quot;http://www.iis.net/download/seotoolkit&quot; target=&quot;_blank&quot;&gt;Search Engine Optimization Toolkit&lt;/a&gt; for IIS 7 today.If you haven&apos;t seen this, it is pretty nice. It will analyze a site on your IIS 7 server and gave you a look at where some issues may lie. For the site I was working on, it initially found 661 issues.  These issues ranged from missing HTML closing tags to missing files to bad SEO practices, like extremely long title/description tags.

The SEO toolkit also allowed me to generate a sitemap directly from the server, based on the links it gathered in the analysis. Of course, this is a one-time page that I will probably replace later with a CF-based one, but just that it could do that simply was nice.

But the real power, for me, came from the analysis. I can quickly find broken links (internally and externally) and find pages with duplicate title/description/keyword tags. There is also an option for &quot;Word Analysis&quot; to show the keyword weight on your pages.

Are there other non-server tools to do all this? Sure. But being able to run this in-depth analysis quickly from a single, FREE, tool is a nice alternative.
				</description>
				
				<category>Public</category>
				
				<category>Development</category>
				
				<category>IIS 7</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Sun, 01 Jan 2012 23:14:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2012/1/1/IIS-7-Search-Engine-Optimization-toolkit</guid>
				
				
			</item>
			
			<item>
				<title>CFImage - Decoder cannot decode input</title>
				<link>http://www.gobwash.com/index.cfm/2011/12/29/CFImage--Decoder-cannot-decode-input</link>
				<description>
				
				A while back I wrote a very quick photo gallery system for a client. Through a management console, they upload a photo and the server, utilizing CF8&apos;s CFIMAGE tag resizes the image to a web-safe size. Today I received an email from the client saying &quot;It tells me every time that the photos I am trying to add are too big&quot;. I knew I wasn&apos;t checking the file size and there was no way the client was trying to upload a photo of over 100MB (server-defined post data limit). So I got to debugging.The first file I uploaded was only 66K and it was uploaded and saved without a hitch. So I upped the ante. I tried a 7.4MB photo. This time I got an error: 
&quot;Decoder cannot decode input&quot;

I did a little Googling but after checking the first-page results didn&apos;t see a resolution. So I logged into the server and looked to see if the file actually completed uploading. Lo and behold, it did. But I noticed something. I don&apos;t even know why this stuck out to me, but it did. The filename was all uppercase. I manually changed the file extension to lowercase. When I reloaded the code to do the resizing on this image, it worked! Apparently cfimage has a problem with uppercase file extensions. 

To fix the issue I simply added the following code after the file has been saved.

&lt;code&gt;
&lt;cffile action=&quot;rename&quot; destination=&quot;#lcase(filename)#&quot; source=&quot;#filename#&quot;&gt;
&lt;/code&gt;

After some more searching, I found that there is a fix for this issue: &lt;a href=&quot;http://kb2.adobe.com/cps/520/cpsid_52021.html&quot; target=&quot;_blank&quot;&gt;Adobe CFImage Fix&lt;/a&gt;. In fact, I had applied this .jar update. However, there is ALSO a metadata-extractor file that must be replaced that was not updated on my system.

Even after updating, I think I&apos;ll just leave the renaming code in place.
				</description>
				
				<category>Public</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Thu, 29 Dec 2011 18:28:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2011/12/29/CFImage--Decoder-cannot-decode-input</guid>
				
				
			</item>
			
			<item>
				<title>New Years Resolutions</title>
				<link>http://www.gobwash.com/index.cfm/2011/12/29/New-Years-Resolutions</link>
				<description>
				
				It is that time of year. That time where, while still bloated from over-indulging on Christmas feasts, we reflect on how we have lived our lives and resolve to make changes in the coming year.Get back on &lt;a href=&quot;http://www.beachbody.com&quot; target=&quot;_blank&quot;&gt;P90X&lt;/a&gt;. - I did a full round of P90X last winter and dropped about 30 pounds. I enjoyed doing it and I loved the results. I was stronger, more fit overall and more confident. 

Find a job. - I&apos;ve spent the last 6 months on &quot;sabbatical&quot; after leaving my job of 6 years. It was a much needed reprieve and now it is time to attack the code again.

Live happy. - One of the issues I confronted in the last 12 months was &quot;living to work&quot;. I was putting in 60-70 hours a week, was on-call 24/7, and even got phone calls when I was out of town on personal days. I don&apos;t want to go back to that. I want to &quot;work to live&quot;. My father is a workaholic, so I don&apos;t foresee a change in my work ethic. I just see a change in how I take care of myself.

Be better. - Be a better son, brother, uncle, boyfriend, friend, developer, boss(?), employee, citizen, student of life. I like to think I am a good person, but everyone can always be better.

Laugh daily. - This is not something I need to change. I believe that laughing just once a day can make your view of the day SO much better.

Cook deliciousness. - Since I&apos;ve started cooking supper nightly for Ashley I have re-discovered my love of cooking. When I am gainfully employed again, I don&apos;t want to let this slip into the background.

Save and invest. - Because I quit my job, I was not eligible to collect unemployment. I&apos;ve been living on my savings/investments. It was only recently that I began to understand the need for saving and now I can&apos;t even express how glad I was to have that safety net for myself. I want to make sure to save and invest more in the next year.

Spend more time outside. - I spent quite a bit of time this past year indoors. I want to spend more time outside, even if it is just lying in a hammock.

There it is, my list of resolutions for 2012.
				</description>
				
				<category>Public</category>
				
				<pubDate>Thu, 29 Dec 2011 01:01:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2011/12/29/New-Years-Resolutions</guid>
				
				
			</item>
			
			<item>
				<title>Simple Ham and Potato Casserole</title>
				<link>http://www.gobwash.com/index.cfm/2011/12/26/Simple-Ham-and-Potato-Casserole</link>
				<description>
				
				Yesterday&apos;s Christmas feast included, among other things, a huge &lt;a href=&quot;http://www.cliftyfarm.com&quot; target=&quot;_blank&quot;&gt;Clifty Farm&lt;/a&gt; country ham (prepared by my mom). After serving about 20 people for supper (2 people&apos;s snacking while it was sliced) and 3 more for breakfast there was still at least 3 pounds left. Before I made the drive home I made sure to snag a plateful to bring with me. I just used a small portion of it to make a very delicious ham and potato casserole.

Here&apos;s how I made it!Ingredients (for 2-3 servings):
 ham, about 1 cup, but it&apos;s HAM, so feel free to add more!
 2 potatoes, about 1 cup
 1/4 - 1/2 cup white onion
 1 1/2 cups milk
 3 tablespoons all-purpose flour
 1/3 cup butter
 2/3 cup cheese, I used a 4-cheese blend, but a mild Cheddar would be great
 salt and pepper to taste
 parsley (optional)

Prep:
 Preheat oven to 350 degrees.
 Wash and peel the potatoes then slice thinly. 
 Finely dice the onion.
 tear the ham into small pieces. I tear rather than slice for texture.
 finely chop the parsley

Cook:
 In saucepan, melt the butter over medium heat. After the butter has melted completely, add the flour and stir to combine the flour and butter until the mixture is smooth. While stirring, slowly pour in the milk. Allow this to heat up to not quite boiling over medium heat. 

While the sauce is doing it&apos;s thing, go ahead and dump your potatoes, ham and diced onion into a 1 quart casserole dish. Go ahead and add some salt and pepper as well. 

When the sauce has heated up, remove the saucepan from the heat and stir in the cheese a little at a time. When all the cheese has been added and has melted into a smooth, delicious cheese sauce pour it into the casserole dish. Carefully stir the casserole to spread the cheese sauce all around then place in the preheated oven.

Cook, uncovered for 35-40 minutes. If your potatoes are sliced on the thicker side, they may take longer to cook all the way through. 

Personally, I like mine to have a nice browning on the top. If, when cooked through, the casserole lacks this, I just turn on the broiler. You just have to make sure to keep a VERY close eye as this will literally only take moments to give you the desired coloring. 

Allow the casserole to cool for a couple of minutes. This also allows the sauce to thicken a little. Before serving, sprinkle parsley over the top. If I had some, I would have crumbled some crispy bacon over the top as well.

This recipe is rife for upgrades! I can easily imagine this with celery, peas, or carrots added. You could even swap the ham for turkey!

Sorry, no pictures. We were too hungry and it looked too good!
				</description>
				
				<category>Public</category>
				
				<category>Recipes</category>
				
				<pubDate>Mon, 26 Dec 2011 20:58:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2011/12/26/Simple-Ham-and-Potato-Casserole</guid>
				
				
			</item>
			
			<item>
				<title>Best Xmas Gift</title>
				<link>http://www.gobwash.com/index.cfm/2011/12/25/Best-Xmas-Gift</link>
				<description>
				
				My cousin Wesley gave me the best gift this year!

&lt;img src=&quot;http://www.gobwash.com/images/WP_0000671.jpg&quot; /&gt;
				</description>
				
				<category>Public</category>
				
				<pubDate>Sun, 25 Dec 2011 21:36:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2011/12/25/Best-Xmas-Gift</guid>
				
				
			</item>
			
			<item>
				<title>Exclude your IP in BlogCFC view count</title>
				<link>http://www.gobwash.com/index.cfm/2011/12/23/Exclude-your-IP-in-BlogCFC-view-count</link>
				<description>
				
				One of the things I think is cool about BlogCFC is that &quot;out of the box&quot; it tracks article views and shows that count in the administration panel. But I was bummed that each time I viewed the page it got counted. I figured it would be no big deal to add an IP Exclusion list and just not add those views. Then I noticed something peculiar. As I write this, I have no delusions about how many people are reading my words. So why did it seem that those views were going up by 2 when I viewed them?I decided to go ahead and look at the code and put in some user-info gathering. Before I dove into the code, I created a table that stores IP, User Agent (browser), HTTP_Referrer, the internal blog ID and a date/time stamp. I know Google Analytics can track this for me, but so is more direct and if I want to change things later, I can.  Data repository created, I started walking through the code. From the beginning, I knew the code had to be in or called from one of 3 files: application.cfm, index.cfm, or blog.cfc. So I started with index.cfm. It wouldn&apos;t make sense to be in application.cfm and I know the layout module is called from the index.cfm. 

It took just a minute to find what I was looking for: 
&lt;code&gt;
&lt;cfset application.blog.logView(url.entry)&gt;
&lt;/code&gt;
This confirmed that the actual code I needed was indeed in blog.cfc. I opened that file and searched for &quot;logView&quot;. Wow! Simple, straightforward update statement. 
&lt;code&gt;
update	tblblogentries
set		views = views + 1 
where	id = &lt;cfqueryparam maxlength=&quot;35&quot; cfsqltype=&quot;CF_SQL_VARCHAR&quot; value=&quot;#arguments.entryid#&quot;&gt;
&lt;/code&gt; 

I quickly added a new cfquery to insert my user-information values into my awaiting table. The logView function receives the article ID as a parameter and everything else I want exists in the CGI scope. I&apos;m thinking this is so easy!  Before I get to filter my home IP out, I want to test my new feature. I save the code, open my SQL Server Management Studio and query the tables to establish a baseline so I can make sure everything is updating as it is supposed to. Since I am SO popular right now, I see what the views are for one of my articles and note that the new logging table is empty. Then I load an the article. My brilliant words appear on screen, as before. I refresh my query results and become confused. The information was logged but the number of views went up 3 and the user-info showed 3 entries. The first I recognized as my IP address, starting with &apos;74.&apos;. But the other 2 entries were from 67.207.150.147. That IP is not the IP of my machine nor of the server. And weirder, the user_agent is blank where the one from my machine showed a valid agent.

I tried clicking a new article and got the same result from the same IP.  I spent a couple of hours walking line-by-line through things and not seeing &lt;strong&gt;any way&lt;/strong&gt; that this was possible. I did a reverse IP lookup, but as I expected, it came back as owned by a major hosting service. After taking a break I thought about looking for domains that traced back to that IP. That&apos;s when the big break in this mystery came. 

Thanks to &lt;a target=&quot;_blank&quot; href=&quot;http://www.yougetsignal.com/tools/web-sites-on-web-server&quot;&gt;www.yougetsignal.com/tools/web-sites-on-web-server&lt;/a&gt; I found out that 2 domains use that IP address. The first was moourl.com. So I searched the BlogCFC source code and viola! MooUrl is included as a service checked for Tweetbacks!   Each time an article loads it checks for tweetbacks and I guess MooUrl does a reverse lookup for verification. I figure I can live with it so I removed MooUrl from the Tweetback service list. This immediately stopped the additional views and the additional IP entries.  Now to get back to what I originally wanted: excluding my home IP Address! In blog.cfc I added the following line to the init function. Of course, even though I removed MooUrl, I also excluded that IP from logging here. 
&lt;code&gt;
&lt;cfset instance.excludeipfromviewcount=&quot;72.XXX.XXX.XXX,67.207.150.147&quot;&gt; &lt;/code&gt;   I then added this code before the insert query in the logView function. If the user&apos;s IP address is found in my exclude list, don&apos;t log it, no matter what.
&lt;code&gt;
        &lt;cfif findnocase(cgi.REMOTE_ADDR,instance.ExcludeIPfromViewCount)&gt;
        	&lt;cfreturn&gt;
        &lt;/cfif&gt;	
&lt;/code&gt; 

Now if I view my own article from my home PC, the view count does not increase. I also can see some real-time analytics. Still left to finalize this enhancement is a section in the admin panel to manage that exclusion list. But that can wait for now.
				</description>
				
				<category>Public</category>
				
				<category>BlogCFC</category>
				
				<category>Coldfusion</category>
				
				<pubDate>Fri, 23 Dec 2011 05:10:00 -0500</pubDate>
				<guid>http://www.gobwash.com/index.cfm/2011/12/23/Exclude-your-IP-in-BlogCFC-view-count</guid>
				
				
			</item>
			</channel></rss>
