|
 Friday, June 13, 2008

GMail = Dog Slow

I've been using GMail since it first came out. I remember getting it and having TWO invites to send to friends. This is back when Gmail invites were going for $100.00 a pop.

Through the years its been a great service and I've love every single second of it. Its truly the best at keeping track of conversations, and this works wonders for insanely active groups like ALT.NET.

Over the last couple of months its seemed that Gmail has gotten progressively slower and slower. Through using Fiddler I was able to determine that larger chunks of JavaScript was coming down the wire. The amount of AJAX and DHTML going on behind the scenes brings Gmail to a crawl.

How to overcome it?

On the top right hand side of your page, click "Older Version".

image

This will load the UI without all the bells and whistles and its about 5 times as fast in regards to response times.

Unfortunately there is not an option in the preferences to make this stick. As soon as I log in, I immediately click "Older Version". Alternatively you can also switch to "Standard HTML View" at the bottom. But with this, you don't get any smooth AJAX. Its regular HTML page post backs.

#    Comments [0] |
 Monday, March 31, 2008

PhotoShop Express vs. Paint.NET

Almost daily, I use some sort of digital editing program. Over the years my top 5 tools for digital editing have been Paint.NET and Photoshop. I use both programs daily for editing screen shots, creating educational material/training manuals, and blog posts. I love Paint.NET simply for the fact that its VERY quick to load and performs easy tasks quite quickly. On my machine Paint.NET is up and running in under 5 seconds. Paint.NET helped get the easy tasks done, but when I wanted to perform true graphics manipulation and do some hardcore stuff, I'd fire up Photoshop. The one thing that always crossed my mind was why Adobe did not offer a "Photoshop Lite" type of program. Paint.NET has always been my "Photoshop Lite" since it was released. But, I still wondered why Adobe was missing out on this market.

Well, the other day Adobe released Photoshop Express. With my previous pondering finally answered, I HAD TO check out this product from Adobe. Could this be the "Photoshop Lite" I was hoping for?

My First False Assumption

My first initial impression upon reading the product SKU name "Photoshop Express" was that it was going to be a slimmed down version of Photoshop similar to Paint.NET that was installable. Having worked with Visual Studio for a very long time, I've become adjusted to recommending the "Express" SKU's to developers interested in .NET development. I'd recommend the Visual Studio Express SKU because it allowed them to get the feel for a good IDE (slimmed down on features of course) but they still got to use a lot of built in functionality, and it was FREE. That was the nice thing (note: if you're a student you can utilize the Dreamspark campaign to get a free version of Visual Studio Pro, and other products).

Was this the slimmed down version? No... not at all. Not only was this version not slimmed down, it wasn't even installable - its a pure browser based solution. I was thinking that maybe it was a "Click Once" app, nope. Not even close. This is purely a browser based solution. Ok, that's not too bad, then I started to use it...

My Second False Assumption

I believe a company of Adobe's caliber would be able to create a compelling graphics app that would be very responsive and effective - regardless of the platform (install or web). Anyone who has worked with any graphics program knows that they are memory hogs. Literally, they eat memory for breakfast, brunch, lunch and dinner (and some snacks between). They need to utilize a vast memory base to keep the program responsive - I like to say - if its a' swappin' it's a' doggin'. I had assumed that this program would be snappy like its big brother Photoshop. Nope. Not at all.

Since Photoshop Express is a web based hosted solution the images have to be uploaded to the server. The problem lies in the last four words of that sentence. Uploaded to the server. I don't know about you, but there is nothing snappy about loading up a 2MB file to a web site. Applying the filters are rudimentary, adjusting contrast, color balance and other tasks leave your image looking like you took a trip back to hippyville with too many pink elephants.

Conclusion

I had assumed I might be able to replace Paint.NET with Photoshop Express upon its initial release. Unfortunately Photoshop Express is insanely slow and the graphic manipulation tools that I need to accomplish my tasks are not what I need them to be. The lack of options are kind of a bummer and the responsiveness of the app is less than lackluster. But I'll say this... its a good attempt. Maybe version 2.x will be better.

How could Adobe get me to use the app? They could make it a Click-Once app. Make it a local installation. Follow the Visual Studio Express SKU model. Look at Paint.NET, It's worked great for them, why wouldn't it work for Adobe? I know they have a ginormous Apple following so they'd have to use a installation procedure that would work with MAC's as well as Windows. Possibly supporting two different models of the software is just too much for them at this point to foot the bill for a Free product and support. But, if they did go down the route of an installable Express type of app, I'd be all over it.

For the meantime I'll be sticking with Paint.NET. It's installable. Its a subset of Photoshop Features, and the real key is... ITS FAST. Any tool that I use MUST BE FAST. If its not, its gone.

 

Click thumbs for larger image

Screenshot of Paint.NET Screenshot of Photoshop Express
image image
#    Comments [2] |
 Sunday, March 30, 2008

I Can't Read Your Screen, Mr. Presenter

We've all been there, at the code camp/user group meeting/conference/etc where we CANNOT read the screen. Even though your code is projected onto a gigantic screen I cannot see you 10pt Courier Font, Mr Presenter, from 50 feet away in the back row. The audience faces contort and become scrunched up to the point of looking like the human version of a pug.

This is one of my biggest pet peeves during a presentation - the presenter may know the content like no other, but they don't have the skills to present their content properly. What's even more amazing is that that 9/10 presenters (in my personal experience) do not attempt to adjust the font on their screen to increase content readability. Aren't you trying to teach me something Mr. Presenter? I can't learn what I can't read. :\ As said before by many others, if you, as the presenter say "You know, you probably can't see this..." - you're right, and you're wasting my time. You've got a gazillion pixels on the screen, make them work for you. :P

What if the presenter bumps up the font to 18pt? That's all well and fine, and I can see the content, but I still have NO IDEA what the heck that 8pt menu font says, nor what menu you clicked on to get to that magical wizard that writes N-Layer architecture systems with a click of a button (sorry, got side tracked).

Gimme Da' Big Font's and ZoomIt Buddy!

Here's what I do when I'm giving a presentation...

  1. Use ZoomIt. I'm utterly baffled by how many presenters do not know about this tool. It's been around for quite awhile too! This tool allows you to zoom into a certain part of your screen with variable magnification. Once zoomed in, you can draw on your screen with multiple colors, write text on the screen and even change the color. You can also draw shapes as well (ellipse, rect, straight line). To view the options, double click the image ZoomIt  icon (shown here to the left).
    • How does it work? Simple, fire up the app. It will run in the background. When you hit the CTRL + 1 key combo, the screen is now magnified. Use your mouse to browse the the area where you want to display additional info.
    • I've created a simple screen cast, which is below. Click to watch. (there is no sound in this, it's just here to demonstrate what can be done).
    • ZoomItDemoThumbnail
  2. Create an Account that has Big Fonts. I prefer to set up an additional account on my machine that has all of my tools set up. I mean, everything has big fonts. From the command line to Visual Studio, to Notepad++. These are nice, big ol' fatty fonts. Trust me, its not pretty to look at, but for presentations it does well. You can adjust the font size of your machine by setting the font size in the control panel as seen below:
    • Note: This will REQUIRE a restart.
    • image
    • image
    • image

 

 

Next time you're presenting, don't forget the reason you're there - to present FOR AN AUDIENCE. Be kind to their eyes! Let them see what you're doing. Trust me, you'll get higher scores on your review sheets.

#    Comments [0] |
 Friday, March 28, 2008

Implicitly Typed Locals - R# V4

Recently Ilya Ryzhenkov posted a thread on the ReSharper blog. The article was about how R# 4.0 gives you a suggestion to use implicitly typed locals.

I've been running R# 4.0 nightly builds for a few weeks now and I've noticed these little buggers popping up all over the place.

Here's what it looks like:

image

 

Usually, I nearly agree with most of everything the R# team posts and even though sometimes I may disagree with something, I'll find the edge case where it does apply, so we're at a 99% agreement rate with them! Hell, you can't lie about it, R# seriously improves your productivity and it only keeps getting better.

Unfortunately, this is the one time I'm going to fully disagree with this post and actually the suggestion in R# - which is why I have disabled it. You can disable it  by going to the R# options:

image 

 

Why I Disagree

The post stated that "It induces better naming for local variables". I don't know about that. I can still call an apple an orange and call a orange a banana I want. Nothing forces me to do anything. The only thing I know at that point is that it's still an anonymous type. A name is that, just a name. Nothing forces developer x to write a good variable name. I still see Junior developers using wrong variable names. The only thing that's going to help here is a good code review process.

The post then goes into to say that it "It induces a better API". Again, I don't agree. How can this induce a better API? I feel that letting the compiler choose which types it is returning has its validity in certain cases, but not inside of your entire system. It brings back the horror days of VB's "Variant" (and yes, I'm aware that var is not Variant and I know the differences - but have you seen an old system where EVERYTHING was a variant? Oh my jeebus, save me now). Just because I'm letting the compiler do the work doesn't mean that I should have "good variable names" to help me distinguish what I'm working with.

This the one that sent me over the top... "It removes code noise". *insert sound of game show buzzer* Yeah... um... I'd have to say that's complete non-sense (in my opinion). Over use of the var keyword is going to add code noise and is definitely a smell to me. If I open up a class and see everything as "var" type, I'm going to cringe. The readability of this code has diminished to a point where its now costing me more money to maintain and read the code than it is if I were to use a strongly typed variables when I could. Even the MSDN states:

Overuse of var can make source code less readable for others. It is recommended to use var only when it is necessary, that is, when the variable will be used to store an anonymous type or a collection of anonymous types. [Source]

The last one is almost not worth putting into the post... "it doesn't require a using directive". Wait a minute... I bought ReSharper so I could be more productive... hitting ALT + ENTER to add the directive isn't a bad thing. Who cares if another directive is up there, that's what its used for, to tell the compiler what blocks of code look into during compilation.

Conclusion

This is not a bash on the ReSharper guys, not at all, but an explanation of why I disagree completely with this post. Heck, I agree with most everything on that blog (most of the time) and I'll never speak up about it. I'm a huge ReSharper fan and I will continue to use it and proclaim its greatness, but while reading this post I noticed a smell immediately. While using var has its uses, I think it can be abused.

The saying goes... "When all you have is a hammer, everything looks like a nail."  Lets not use var as our hammer. Its a special tool for special cases. We don't use ice axes for steak knives do we (even though that would be very manly and barbaric - and hell, kind of fun), so we shouldn't use var for unintended uses.

#    Comments [0] |
 Monday, January 14, 2008

Usability - Don't Make Me Think/Remember...

When we were first introduced to the computer it was to help us solve problems not create them. Your mother bought a computer so she could get things done quicker. She bought it because it had all these cool features that could "Remember things for you". We build software to help solve problems, to remove some of the more mundane things in life to make life simpler. Computers are supposed to make things easier, they are not supposed to take my time to answer stupid questions.

Each day goes by that I still find major issues with User Interface development of major web sites. There is SO MUCH information available for free on the Internet that major companies still make no attempt to help the user.

What am I complaining about?

When I visit a web site I want it to do things for me. Provide a service. The following sites provide services, but all fail miserably in regards to basic usability and irritating steps of action.

 


FAILING

www.ups.com, www.dhl.com, www.fedex.com, www.honeywell.com - All of these sites suffer from the same problem. They make me think. Why in the hell cant you figure out what country I'm in? There are ways to do this all over the net. Yet these companies cannot figure it out? I mean, come on... companies like Honeywell who have TONS of engineers on staff cannot figure this simple crap out?

My Beef: Don't ask me where I'm from, when you already know. That's like asking me my name when I'm wearing a name tag.

 

www.myuhc.com (doctor locator) - This thing... oh man, it makes me want to scream. The problem is ... if you log into your account, you can "locate a doctor", yet when you get prompted to enter search criteria you get asked what your plan is. HMO, PPO, PPO PLUS, BLAH BLAH BLAH, like 15 choices. They all look the same to me. That means I have to pull out my wallet each time, find my card, search the small print just so I can answer this question. BUT WAIT.... I LOGGED IN, DID'NT I??!?! That means, the web site should already know what plan I'm part of.

My Beef: Don't ask me what my plan is if you already know. Again, its like asking me my name when I'm wearing a name tag.

 


SUCCEDING

Outlook Web Mail, Gmail - These apps have it down. When I type in an email address and send an email to a contact, these applications save it for next time. The next time I attempt to send an email and start typing a few letters the app helps me find the person I'm looking for. Either by first name, last name or email address.

 

Google.com/Live.com/ask.com - All of these provide great suggestion techniques (such as explained below). Google does really well in this area. Tim Ferriss said that while in Germany (or somewhere Europe) he typed Google.com and got Google.de (Germany's Google). At the top of the site it had a small icon that said something to the nature of "Looking for the US Site? Click here." So it helped the 95% case of actual German users, but maybe the other 5% actually wanted the US Google (note: the %'s are just made up, but you get what I'm saying).

 

Pandora - The music discovery channel. If you like "Wu Tang Clan" and you would like to find artists that are similar to them Pandoras Music Genome Project will help. It helps by finding music similar to your tastes through over 400 attributes. But the real nice thing about the interface is how easy to use it is. If I typed in "Wyclef Jon" the system will return a question to the user "Did you mean 'Wyclef Jean'". Well of course I did, but maybe my friend always said "Wyclef Jon" so I thought it was "Jon". But hey, the user interface helped me find what I wanted to find. It didn't make me think. If helped me find what I wanted to find through assisting me with my spelling.

 


TIPS TO IMPROVE YOUR SITES USABILITY

- Don't make the user re-enter information you already have. (name, address, etc, - basic info)

- Use the Auto-Complete type of control as much as possible. - This helps users when typing in free text. If you're asking them to type in an address into a geographical website, try to assist them with possible solutions. Not everyone can spell Minneapolis correctly the first time. :)

- If you are an international site, FIGURE OUT WHAT COUNTRY THE USER IS FROM and give them that country.

- Catch all the errors. I MEAN ALL OF THEM. I should never see a MySQL Error, a YSOD or anything like that. Give me something telling me that something went wrong and I should check back later.

 

In the end, its all about user experience. Make it easy.

 

The only problem is ... is very hard to make something simple. :)

#    Comments [2] |
 Friday, November 30, 2007

Weird Error after VS2005 Crash & The K.I.S.S. Principle

Argh! Nearly an hour wasted,

I was building a source tree today for a new TFS installation and in the middle of my workday VS2005 decided to puke on the screen. It straight up died, froze, hung, whatever you want to call it, it was gone and it wasn't coming back. I was forced to kill the process after taking a 10 minute break and seeing it still hung.

Prior to the crash, the solution built fine. The solution had 32 projects in it and everything was running smoothly. After the crash I restarted VS2005 and then re-built the solution. VS2005 BARFs on a file.

The error I get is something like this:

"metadata file could not be opened (... file path ..) -- file is corrupt"

 

Huh? So I try moving references, adding them, deleting them, changing namespaces, changing dll names, everything.

I then try to open up the DLL in Reflector and I get the gem:

"File is not a portable executable. DOS header does not contain 'MZ' signature"

 

What? This solution just build 5 minutes ago, I didn't change anything except a crash.

Well, apparently when the crash happened, that particular project GOT HOSED, BAD. Who knows how, who knows why, but it did. I took a back up copy, replaced it on top of that project and rebuilt the solution and like magic it starts working again.

So, if this happens to you, just drop the project get another copy, then re-add it and hopefully it works. I hate giving these types of answers, but unless I go digging into the root cause of the crash (would could take forever in a project like VS2005) I wont know what exactly caused it. CRAPPY MAN, CRAPPY.

Moral of the story: This takes it back to the "K.I.S.S." principle. I spent nearly an hour trying to fix this problem by tracking it down and moving things around, troubleshooting, etc. I should have just tried the "replace" first and I would have saved an hour.

So, Next time...

Keep it simple, stupid.

#    Comments [0] |
 Monday, November 12, 2007

MODI - The Lightweight DOM Inspector Bookmarklet

There are a ton of HTML DOM inspectors out there. I mean, a lot of them. They're helpful as hell when you're in a pinch and you can't figure out what the DOM is doing. I've used all kinds, from FireFox add on's to IE gadgets, to custom ones... But for the last couple of years I seem to have stuck with one that just seems to work for all of my needs. Its the Slayer Office Mouse Over DOM Inspector - MODI. Its simple, clean and very lightweight.

How It Works

Here's what you do... go to this page: MODI Help Page

Right click on the "Bookmark this link for MODIv2". This screen shot is in FireFox. Internet Explorer will warn you that its not safe to book mark these type of items, but just click Ok because this one is safe.

modi1

 

Then go visit a web site where you want to view the DOM. For example: www.codeplex.com. Once at the site, click your book marks and click the MODI book mark as shown below:

modi2

You will now see the Mouse Over Dom Inspector action. Move your mouse around and you'll see the parent elements, the classes each element inherits, etc. It will look something like this: (click for larger image)

modi3

The text that is circled in red is the element that we are inspecting. The details of that element are present in the MODI box (blue box). Move your mouse around the screen and you will see that MODI gives you the information about the DOM element that your mouse is currently over.

If MODI is over the element you're interested in inspecting, just click and drag the top of it and you can put it anywhere on the screen.

 

Conclusion

The best part about this DOM inspector is that I don't have to install it on anything on my machine. If I'm on a clients machine or on a server - using the browser - and I need to inspect the DOM, I can hit the MODI web page and then run the bookmark and I'm off into the DOM.

Simple, yet effective.

#    Comments [1] |
 Wednesday, October 17, 2007

A Geek's Checkbook Register

balancing Ok, that's it... time for a confession... I hate balancing my checkbook. I mean, I REALLY HATE it. I avoid it like the plague. Ever since I've started making decent money in software development I've only balanced my checkbook on a semi-regular basis. Maybe twice a month. Unfortunately this doesn't cut it these days when you're trying to plan out huge vacations and income and, whatever, you get the point. I need to balance my checkbook. Plain and simple.

I used to be a checkbook-balancing-fiend. I'd make a purchase, I'd mark the receipt, I'd store the receipt, I'd get home, I'd log it into the register, recalculate available balance, blah blah blah. BORING.

 

THE PROBLEM 

Ya see, my problem with balancing a checkbook is that its too time consuming. It's not a process that I've really automated just yet. As a software developer I'm enamored with figuring out ways to automate all repetitive processes. I get bored quickly, and honestly, I believe, that like myself - programmers are lazy.

So that's my problem. I'm lazy, I don't want to write another line in my checkbook register, I don't need to, blah blah blah. But I do. I need to keep my records straight.

 

POSSIBLE SOLUTIONS

The Good Ol' Paper Register: Nahhhhh-son, we've already covered this. I can't stand it. Nope. Ain't gonna happen.

Current Finance Applications: I've went down the Quicken/MS Money/QuickBooks bricked paved road before and honestly, its too complicated. I still have to save my receipts, enter them into a register, and then reconcile it with my bank account once the transactions clear the bank account. Its a royal pain in the ass if you ask me.

 

THE NEED/THE WANT/THE REQUIREMENT

I want something simple.  That's all, nothing more, nothing less. I want something simple, yet easy.

And I found it...

 

THE SOLUTION

clearcheckbook While surfing the web, looking for personal finance applications I ran across Clear Check Book.

 

What is it? Clear Check Book is a FREE check book balancing system that allows you to manage your financial accounts. Right now I'm using it to manage my checkbook but in the future I'll put other accounts in there. You can manage Checking, Savings, Credit, 401k, you name it, you can manage it.

How Does It Work? Transactions are added through a web interface or a mechanism called "checkbot" (which I'll cover in detail in a few seconds). Your balance is automatically calculated. You can specify which category the withdrawl/deposit is for and also review some basic reports on your data.

Therefore you can see that last month you spent $671.31 on restaurants alone (time to cut back on the Margaritas hombre!). You get the point.

Reconciling AKA Jiving - Clear Check Book has something known as "Jiving" your statement. What this means is that you'll match your transactions with your cleared bank transactions. Since you can access your bank online you can do this as soon as you'd like or just batch your tasks to save time like I do. So, once you have found the $5.76 purchase from Starbucks on yoru bank, and you you've already entered it into Clear Check Book, you can now know that the transaction "jives" with what you see at your bank. Therefore, if you have something in Clear Check Book, that is no "Jived" you will know it has not cleared your bank. You know something is Jived once you see a green check mark next to it. See this screen shot for an example.

CheckBot - This, right here, is what sold me on this service. Without CheckBot, this service would be another fart in the wind. CheckBot is a tool that you can use to balance your checkbook through the use of SMS/Text Messages or Instant Messages.  By sending a simple text message you can log an entry in your checkbook register.

For example...

Tonight I went to Target and I had to get a few things. I sent a message to CheckBot that looks like this:

clearcheckbook: w 10.49 ck m Target

Now, when I log into my ClearCheckBook.com account, I will have a withdrawl (w) for the amount of 10.40, in my checking account (ck), in the Misc Items (m) category from Target.

I can also make deposits, transfer money, request your current balance, get help and more...

 

THE SIMPLICITY

The Key here is that I can now make a purchase, send a text message, and my checkbook is ALWAYS balanced. Once a week I log in, and "jive" my accounts with my actual bank statement. I've been doing this for a few weeks now and I ABSOLUTELY LOVE IT. My accounts have been DEAD on, penny for penny, day in, day out.

I've also taught my wife how to use this service. Now we both make purchases out of our joint account, and she updates the account and I update the account.

This right here, is what makes it worthwhile for me. Its SUPER SIMPLE. We're programmers, so lets check out the basic workflow.

- Go to store > Buy some stuff > Send Text Message To Checkbot with withdrawl > Check book is balanced

 

SECURITY

This is a big concern for a lot of people. But here's the deal. I've spoken to the team at Clear Check Book just because I knew people would be concerned when I wrote this post.

1. Your account only accepts messages from approved phone numbers/AIM/ICQ.

But what about SMS Spoofing? All data is going to be sent back to your phone number. So if someone spoofs a message (as you) to request the balance, its going to get sent to your phone, not theirs. If someone tries to perform a withdrawl/deposit/transfer, they have to know your account codes. These are completely configurable. So they'd have to know your account codes too (such as "ck" above - which is a simple example), which you can make as cryptic as you want. So at this point you're pretty much safe from someone trying get info on your account.

2. What about account number's?

Clear Checkbook does not keep any account numbers, even their import process does not keep the account numbers. They also advise to not keep your account numbers up there. Give your accounts names, such as "Joint Checking" or "Donn's IRA", etc.

 

CLOSING

In closing, this service WILL simplify your life in regards to check book balancing. Check it out.

And NO, I did not get paid for this... I really think this service is soo good that I had to blog about it.

#    Comments [4] |
 Friday, October 12, 2007

The Ergonomic Consultant

I'm not going to lie, I get hassled, made fun of, laughed at and pointed at. Yes, I'm that guy that carries his keyboard with him when he shows up to a new client. Yes, I'm the "booger-eater" that sits in the corner with his special keyboard. Yes, I will hunt down an old small box in your back room to use for a monitor stand. Yes, yes, yes, I'm THAT guy.

I'm also the guy who will never complain about back pain, neck pain, wrist cramps, sore hands, or numb fingers even though I'm using a laptop all the time. Yes, I'm the guy who is a ergonomic freak.

Being a consultant can be tough at times. You come in as the software ninja (a term I stole from BoodHoo) to save the day with you're "infinite wisdom" (riiiiiighhhht...) and skill. You're forced to sit in the "old dirty cube where Mort used to fart all day long". You're given OLD chairs, and very limited space. A lot of the time you're forced to sit in areas where you'll share a desk with a few other developers, giving you elbow room only. Heck, one time the company I work for had myself and a fellow consultant at a client location doing some work for them. We got placed into the location known as the "Shack". SERIOUSLY.

shack01aAt first, I was very skeptical... my thoughts were "Ok, where is this 'shack' located?" Does it have A/C? (I'm in Phoenix, land of the blazing sun), and "can we even get on the network?" Well, I was introduced to the shack.

The picture to the left, is almost exactly what the "Shack" looked like. It was just a tad bit bigger, maybe another 100 sq ft.

The funny thing was, it WAS the best seat in the entire company. No one bothered you, the A/C was freezing cold, and it was QUIET so you could get your work done. But still, we had sub-par chairs, laptops, single monitors (laptop monitor) and that's about it.

So, in order to make sure my career lasts longer than 5 years because of Carpel Tunnel or some other complications I decided to come up with a few things that can make a consultants life a lot healthier in regards to ergonomics.

Recently Jeff Atwood covered some great ergonomic info on his blog. I was already up to par on all the stuff he covered because I've been concerned with ergonomics since I've started my "insta-just-add-cheesburger-big-butt-chubby-stomach-chicken-gobbler-desk-job" career as a software developer. I've wanted to make sure my career didn't hurt me, physically. He even goes over how others have experienced pain and agony from coding all day/night. (Damn those 12 hour JOLT binges).

I digress, I've compiled a list of MUST haves when working at a client location.

  1. The Microsoft Natural Ergonomic 4000 Keyboard
    1. I bring one with me everywhere I go. I have one at home and one for the road. I think Jean-Paul Boodhoo does the same thing too. I WILL NOT use any other ergo keyboard ever. If Microsoft stopped making these like they did years back, I'll have to resort to the ways of Jeff Atwood of buying them off ebay. For real man. For real.
  2. A good WIRED optical mouse with an easy to use back/forward button combo.
    1. I've been going commando for years, and god does it feel good. I rarely use the mouse, but when I do, I LOVE these buttons. I use a Logitech MX 310. It's nothing fancy and it works. No cordless crap. I hate when batteries go out, or are about to go out. It kills my productivity.
  3. A Laptop Raiser.
    1. This can be a box, a couple of books, anything. This usually stays at the client location at the desk I'm working at. This  helps keep the monitor directly in front of you at eye level. Looking down all day can kill your neck/back. So this helps with that. See Jeff's post on where your eye level should be. This will help you judge height. It's different for everyone, so don't think that 3 Microsoft Press Books that work for you will work for Joe Developer too.
  4. A Decent Chair.
    1. This is the HARDEST commodity to fill for a consultant. We normally get stuck with a crappy chair. I've even been at client locations where I had metal folding chairs as my main seat. So, sometimes it takes a bit of creativity to win in this area. My advice is to ask for a nice chair, that works 80% of the time. The other 20%, you're going to have to get creative. Bring in a pillow, create back support with a jacket, make sure you can at least raise your seat to create the 90 degree bend. If worse comes to worse, sit in their conference room. (Or get there early and steal a conference room chair and roll it over to your desk in the smelly corner - but you didn't hear that from me). :)
  5. An extra monitor.
    1. Getting this is much harder than finding a decent chair. If you can though, get that dual monitor set  up, use your laptop as monitor 1 and the spare as monitor 2. Instant productivity booster.

 

Its not much, but these few things can help your body immensely. Being a consultant myself, I've had to live and learn the ways of working in the worst of conditions. Don't get me wrong, at times you'll get clients that set you up with an $800 custom chair, a dual/triple monitor set up and a machine that could smoke a cigar faster than you're uncle gomez, BUT.... those are few and far between.

So, save your body, save your mind, save your time, and save your sanity. :) Just get comfortable, regardless of the cost.

#    Comments [1] |
 Saturday, October 06, 2007

A Sandbox/Test Server Is a Sandbox For A Reason

That's right. Read it again. sandbox

"A Sandbox Server Is a Sandbox For A Reason." Now, read it again, and again, and again. MEMORIZE IT.

What is a Test/Sandbox Environment?

A test/sandbox environment is a testing playground for the developer/user (in the context of this conversation, its developer). Its an exact copy of the production environment, but does not affect anything in production. It allows the developer to test code before it goes into production. This allows the developer to find errors before they actually cost the company any money. Test/Sandbox environments are an integral part of software development and service providers. They make sure that the quality of the product released is top notch (of course this is assuming proper testing is taking place).

This is nothing new, its not rocket science. Everyone tests before they ship a product (well, anyone with a brain does at least).

When you're working with a service provider you expect them to have a test/sandbox environment that matches there production environment. Tons of service providers have these test servers, here's a few:

  • Google AdWords Preview Tool - Lets you preview searches using Google so you can preview your ad before it goes live.
    • Benefit - You don't get penalized for impressions or clicks. No money is spend, no money is transferred.
  • Google Checkout Test Server - Allows you to post test transactions.
    • Benefits: You can test without being charged or have actual money transferred.
  • PayPal SandBox - Lets you test your Pay Pal transactions.
    • Benefits - You can test without being charged or have actual money transferred.
  • Amazon Mechanical Turk SandBox - Allows the users to test their applications and HITS.
    • Benefits - You don't loose money nor put up a HIT that could be worked on. (You pay for HITS). No money is transferred.
  • Amazon Flexible Payments Service (FPS) - Allows you to test the payment systems you set up.
    • Benefit - Money is not actually transferred.
  • SalesForce Sandbox - Allows developers to post test transactions to the Salesforce Service.
    • Benefits - Eliminates costly development mistakes. Helps save on testing, therefore eliminating money being transferred for a development task.
  • Virtual Machines (Virtual PC, VMWare) - The big daddy of them all. Test your entire environment before you put it into production.
    • Benefits - Eliminate HUGE costs associated with lack of testing/deployment scenarios.

 

These sandbox environments share a common goal - THE GOAL OF ELIMINATING COSTLY MISTAKES

How? Simple. If developers are given a test environment, they can test their code without worrying about messing up production environments. If these services involve money, its VERY IMPORTANT that the said service has a test environment.

A real life story...

Recently I was working on a side project that involved a service provider (none of the listed above) and I found their test server to be quite useful. I could post transactions to it, and do all the testing I needed to. A few weeks later the production site changed, yet the test server remained the same. Not only is this irresponsible as a service provider, its a risk that the service provider puts on themselves. They have now put themselves in a position where the service might now work, and some users might abandon the product. Upon asking the service provider when the test environment would be updated to mimic the production environment I got this response (edited to make sense in this context):

"There's really no point in having an exact copy of production since it's only really designed for practicing entering form data. Our live environment changes daily (along with other criteria) and, other than changes to form validation or form fields, these changes are never reflected in the test environment (which is also why there are some different types in the test environment that don't exist in the live environment)."

dangerHuh? What!?! Lets go over a snippet of this... the first part really makes my jaw drop.

"There's really no point in having an exact copy of production since it's only really designed for practicing entering form data."

Whoa, DANGER, WRONG WAY, TURN BACK, for real... for real. Ok, well, the last time I checked when you have a test environment - its a test/sandbox environment for a reason: It mimics the production environment to allow the developer to perform tests without affecting anything in production. So why is there no point? If its not the exact same thing, then how am I to be sure its going to work the same. That's right, I WONT KNOW.

Unfortunately this service provider has not updated their test server to this day. It's a service that I need to use, but I will openly admit, I think its a bad business decision on their end. I've had to perform all kinds of trickery to validate my code does what is supposed to do, but still, I'm only 65% sure its right. Which sucks, no test server, no way to test everything.

This is a lesson that all service providers and developers should note...

A broken test environment is like having no test environment at all.

Just imagine, if you can't compile your code, you can't ship your code. So, if you cant test your code properly, how can you be sure its doing the right thing? You cant.

Service providers: Make sure you  have a valid test environment that mimics production, EXACTLY.

Developers: Demand a test environment. Ruthlessly test your code. Unit test to hell. Functional test your code like hell.

#    Comments [0] |
 Monday, July 09, 2007

ASP.NET Projects Take Forever To Load in Internet Explorer

I recently had a problem that plagued me the last couple of weeks.

Problem: When I pressed F5 or CTRL + F5 or even "View in Browser" from Visual Studio (in an ASP.NET project) Internet Explorer would load. If I had any breakpoints set, the debugger would break, and then I could continue after debugging (or, if I didn't debug the project would continue to load as normal -- in Internet Explorer). Once the project continued to load in Internet Explorer (IE), IE would HANG.

I'm not talking a 5-10 second load. I'm talking 2-3 minutes!! After the initial load, the application would load as expected. I could hit refresh, everything and it would load as expected. Unfortunately this isn't a feasible solution when I need to debug on a normal basis and I cannot be waiting 2-3 minutes for the debugger to start.

The weird about this is... if I opened IE and went to ANY WEBSITE the site would load instantly. The problem was only with ASP.NET projects, making me thing it had to do with the local cassini web server.

Resolution: After some reading, I came to the conclusion that it could be related to a proxy server. I took a look, NOPE, no proxy server here. So then I started poking around with the system. There were no event logs for anything relating browser or .NET issues. I could not find anything related to this issue, other than a couple people having the SAME exact problem.

On a fluke I decided to hit F5, and then while the enormous load time was taking place I started FireFox. I copied the URL from IE (which looked something like: http://localhost:49696/default.aspx) and then posted it into the address bar of FireFox and hit Enter. To my amazement, the page loaded immediately. But  IE was still hanging, and waiting.

After changing some settings in the Internet Options panel of IE I decided to reset IE's settings (see below).

After resetting everything, everything started working again. I'm not sure what setting had started this behavior, but I do know that something in my Internet Settings got changed. Over the next week I'm going to attempt to recreate the issue, and if I'm able to, I'll post the solution here.

But if you're having this same problem, reset your settings in IE!

#    Comments [2] |
 Wednesday, June 20, 2007

.NET Scaffolding

Jeremy D. Miller has a great post on keeping source code where it belongs. The thought process behind this is that code should be where YOU would assume it would be. If its data access code, it should be in a project/namespace that is something like Data Access or DAL or Data or something that represents the lower layer of the architecture. If its the business rules/tasks the files should be in a project called Business Rules, or BLL, or Tasks, or something similar. It makes sense, just think about this -- if you walk into a business and are given a project that was created by another developer and you're getting a ADO.NET Exception, you'd expect to find the code Data Access code in a Data Access layer, NOT in the code behind. I should not have to hunt down where you put your data access code.

We're talking about basic separation of concerns. The thing is, many developers lack these concepts because they're under the assumption of "I can write this the correct way, and it will take me 2 weeks, or I can do it quickly and it will take me 2 days." This may not matter when the application is running for a few months, but when you are asked to change the data provider from SQL Server to Oracle, or remove the web service calls and replace them with RPC calls, you're going to find yourself in a world of hurt because you didn't set everything up correctly. At this point they have amounted a large amount of Technical Debt.

He also noted that a large number of people were now using Ruby On Rails (RoR) as their development platform and I won't deny that I also believe that Ruby/Rails is huge right now. Tons of shops are running RoR and even Martin Fowler said on Hansel Minutes that ThoughtWorks was doing about 40% (or more) of their business with Ruby. The key point Jeremy brought up is that "RoR forces web developers into a bit of a straight jacket, but that's a good thing in a way." I completely agree. RoR enforces a consistent source code tree layout which allows for developers to easily find there way around a project. "Developer A" can create a project with RoR and then "Developer B" can come along and take a look at it and be familiar with the code layout and structure. The RoR community has agreed that this is the basic way to organize a project and it seems to be working for them.

So what about .NET? Enter Tree Surgeon. Right now, its a stand alone application, but in its near future it should be implemented as a template in Visual Studio 2005/2008. So what is it? It's a application that will create that straight jacket that Jeremy spoke of. It gives the developer a basic set up of layers, unit tests, code coverage and build script. It builds the entire source code directory and allows you to build on top of it. The source code layout follows a white paper written by Mike Roberts. I've been using it for quite awhile and I'm one of the developers on the project. I recently updated the source to allow creation of Visual Studio 2005 projects. Please note, this is only on the source and has not been reflected on the production release. Download the source, run it and then choose a application name, and generate the project source directory tree. Open the solution file and your application is ready to go.

The best part is that its easy to integrate existing projects into this format. I've done it quite a few times to allow for easy integration into my clients CI environment.

If you have any requests for Tree Surgeon, please visit the Issue Tracker page and submit and issue.

Enjoy!

#    Comments [0] |
 Thursday, June 07, 2007

Teamprise Explorer Client vs. Visual Studio Team Explorer

Over the weekend I had the time to work with Teamprise Explorer and Visual Studio Team Explorer while working on an open source project that I'm a part of. This was the first time I've worked with Teamprise explorer and Visual Studio Team Explorer. Since Codeplex houses its source on Team Foundation Server (TFS) I was required to use one of these options. This is a little look into my experience.

First off let me start by saying that I'm a Subversion junkie. I keep all of my own personal source code in Subversion and I've helped many clients implement Subversion in my time. I'm an avid user of TortoiseSVN because of its ease of use within Windows Explorer. Working with TFS was very similar to that of Subversion but the terminology was different and in my opinion Teamprise was a little more difficult to use. I originally wanted to use the Visual Studio Plug-in but I didn't want to wait for the 246 MB file to download so I could install a plug-in. :\ Therefore, I went with Teamprise first. They will give you a free license to work with Codeplex if you're working on a project, so that was a win/win for me.

Teamprise Explorer Client will allow you to connect to a Team Foundation Server to access source code (its user interface reminds of me of WinCvs quite a bit, yet  a lot more polished than that of WinCvs). The only problem that I had with Teamprise is that when I went needed to edit the code I had to "Checkout for Edit". If I did this on the entire directory tree such as my "src" directory it would log everything in edit mode. Therefore, when I went to upload the changes the entire source tree was being uploaded. NO BUENO. I know that on average I like to see what I've edited (yes, I'm used to TortoiseSVN) in some type of explorer window. This didn't happen on Teamprise (maybe there is a way to see if a file has changed other than the Pending Changes window, if so, someone please let me know). In the end, I got frustrated, ended up clicking some button on Teamprise explorer and overwrote all my changes somehow. THAT SUCKS. I got frustrated and decided to download the plug-in and start working that way.

Visual Studio Team Explorer Plug-in was great. Its interface reminded me of the old days when I use to personally use Source Safe 6.0. The icons were similar and it was familiar ground. I think we may have a winner. After making my changes again I was able to easily see what changed through simple icon's changing colors and I checked everything in really easily. It was very seamless. The only downside to Visual Studio Team Explorer is the install process. First you have download an IMG file, then download an install an IMG extractor and then open the IMG, then install. Only then did I get the full Visual Studio Integration. Very nice.

One downside that I see is that the Express SKU's don't allow plug-ins so this kind of sucks for those guys. How can you have an open source hosting site that doesn't allow its users to easily get the source. Don't get me wrong, they can use Teamprise but they have to know there is a learning curve with that. I didn't have the patience for it this time around.

There is hope on the horizon though...

TortoiseSVN

CodePlex will be offering TortoiseSVN Support to Team Foundation Server. Therefore you will be able to use a tool such as TortoiseSVN to access Team Foundation Server. Supposedly this is to be released on or around June 18th of this month. In a nutshell there will be a bridge built between SVN Commands and TFS commands. I would assume this is a good place for the Adapter pattern to be put to work.

Hopefully this comes to fruition, I can see a lot of people possibly moving their projects to CodePlex if that's the case.

#    Comments [1] |
 Sunday, May 27, 2007

Live Maps Send to Mobile

I'm an avid user of mapping software. I use it daily. Until last week my favorite was Google Maps. It was simple, quick and had an intuitive interface. All that has changed now. My new favorite is Live Maps.

Google Maps vs Live Maps

I use Google Maps on my cell phone daily, that is, until I found Live Search for Mobile. This works great if your cell/pda is either Windows compatible or runs the Java client. I run a BlackBerry 7105t from T-Mobile, so it works great for me. Now I'm using Live Search on my cell instead. Its much quicker and I like the interface better. Although I have had a problem, intermittently, that says its base location must have a zoomlevel in [1,19]. I'm still looking into that problem. But other than that, it works great.

Mobile Mapping and Client Requirements

For me, Live Maps and Google Maps (mobile) this is perfect. I'm never lost, but I've also been known to be the guy who never gets lost simply because I have a good sense of direction. This is good for me, but for people who cant remember their way around town, this application is light from above. Its a life saver.

BUT... the stipulation is that you have a cell/pda that is capable of running a Java Client. Alas, my wife has a Sidekick III and it does not run the Java Client at all. (Note: You can install the Java Client if you register as a developer on Dangers Developer Site). But lets get real... not everyone is going to do that.

So... enter live maps.

Lets say you're sitting at home and your wife calls you and says "Honey, I'm lost, here's the address of where I am, how do I get to 3101 Central Ave in Phoenix, AZ?". You could then pull up maps.live.com and plug in the address (this is assuming she's lost in Peoria, AZ). Then click on the "Send" link... then click on "Send link to mobile".

After you click on that, you will enter a phone number (mobile number that accepts text messages). The phone will be sent a text message from Live Maps that contains a link that will open a mobile webbrowser. The browser will open a site that contains a mobile version of the directions. (Note: This requires that you have a web browser enabled, and data plan, on your mobile device).

And... PRESTO.. you have driving directions on a phone that doesnt have the Java Client installed. The wife gets to her destination safely.

Enjoy!

#    Comments [0] |
 Friday, May 25, 2007

Complexity and Staying Up To Speed

Every single one of use that are involved in Software Development have come to the point where we feel overwhelmed with the speed in which the software industry is advancing. This is completely normal! We all have to understand that software development as an industry is in its infancy. For example, architects have been around for hundreds and hundreds of years, a lot of physics concepts have been tested over the last few hundred years. Many other professions have been tried and tested over very long periods of time. Software on the other hand is relatively new. It’s arguable that the majority of software development has taken place in the last 30 years.  Since our day to day lives depend on software we are now seeing a very complex environment blossoming in front of us. No longer are static HTML pages the norm. We now have complex mission critical interconnected systems delivering dynamic pages to thousands of users per second. Dealing with the technology behind these systems has become very complex and we’re (the software engineers/architects/developers) required to understand it. 

 

 

Knowledge Expectations

The average developer is required to know “everything” about programming. If your boss comes to you and says:

 

I just went to a seminar on ______ and it looks like the future of software development. We need to implement it starting today...

 

They then expect that you know everything about the said technology. Unfortunately this is not normally the case. We work on projects for any length of time, and then move to a new project. Rarely do companies push their employees to stay up to date on new technology on the company dime. The amount of technology that we’re required to know is beyond the capabilities of any of us. There is not enough time in the day to be an expert in everything. So, no, you’re not alone! Everyone in software development feels overwhelmed.

 

There is no way that we can all be experts on the entire .NET Framework,  WCF, WF, WPF, Silverlight, SQL Server, PowerShell, Orcas, etc. You might need to know C#, VB.NET, C++, SQL, PowerShell, Ruby, Python, and the list goes on. It’s just too much for anyone.

 

I once heard an analogy that describes this situation perfectly. You need to build a cabinet at home, so you go to Home Depot to get the materials.  The Developer is you, the home owner, and the technology framework is Home Depot . You can walk in and decide that you can build the cabinet however you feel fit to do so. You can build it with wood, plastic, metal, with screws, nails, or glue. These are the classes and frameworks. You can also buy it pre-built; this could be a third party solution. You can also know that there are right/wrong ways to do something, these are Patterns/Anti-Patterns.

 

 In the end, you could build your cabinet a 1000 different ways. Software is the same. The options are endless and at times we’re required to use many technologies to solve a problem. Sometimes the options each technology offer overlap another technology somewhat. When this happens it becomes difficult to figure out what technology to use.

 

 

Segregation of Duties

As mentioned above, we’re required to know everything about everything in the programming field.

 

Developers are a lot like how doctors were 60+ years ago. Back then doctors took care of everything. If you were sick, they fixed your cold. If your eyes checked out, he checked them out. If you broke your arm, he took care of it. They took care of everything. Right now, that’s what developers are. We are the general practitioners in regards to development. If a problem comes up we are expected to know how to fix it. We are the experts in the computer field and our bosses expect that we know how to fix it. Doctors were the same. If we were sick/broken they were expected to fix it, and they did.

 

Nowadays doctors have specialties. We have neurologists, cardiologists, optometrists, and the list could go on for two pages. The only common ground is that each doctor has a foundation of classes which eventually led into their specialty. In my opinion, this is where software development is heading. We already have SharePoint developers, CRM Developers, Web Developers, Windows Developers. The base developer knows their language and concepts. Each specialty developer has much more training in their respective area.  This is where we’re going to end up.

 

Unfortunately this isn’t the case in 100% of business environments. A lot of developers wear a lot of shoes and that adds to the confusion. A lot of developers “know a little about a lot”.  This is probably the majority of us.

 

 

Staying Up To Speed

 

Since us developers have soo much to choose from and so many things to learn I often I get asked how I stay up to speed on all of the new technologies that are abreast. Here is the best advice I can give.

 

  1. Pick a technology (or a couple of them) and stick to them.
  2. Subscribe to some great blogs.
  3. Listen To Podcasts
  4. Watch Screen casts.
  5. Read technology related magazines

 

Example of my four picks

  1. I’ve decided to side with .NET 2.0/3.0/3.5, PowerShell, SQL Server, MOSS, and some other technologies for fun. 
  2. These are the Blogs that I read
  3. These are the Podcasts I listen to
  4. These are the Screencasts I watch
  5. These are the publications I read

 

Luckily, my commute provides a lot of time to listen to many podcasts. I have free time late at night and early in the morning to watch the screencasts. The magazines are always good to leave lying around the house or at work for break-time reading.

 

Conclusion

As said by Scott Hanselman (and many others – myself included), software development is not a 8-5 job. It’s something that must be a full time part of your life because if its not, you’ll never stay up to speed with what’s going on in the world around you. Then once everything has passed you by you will be wondering how you can catch up. If you want to go to work at 8am, then leave at 5pm and not have to think about programming thereafter ... I’m sorry to say, this profession is not for you. If you love technology like me, then this is the job for you. The key is, you have to have passion for what you do, and if you don't you'll never enjoy it. J

 

 

 

kick it on DotNetKicks.com
#    Comments [2] |
 Thursday, May 24, 2007

Blogs, Podcasts and Screencasts

UPDATE: I added the publications I also read at the bottom. :