|
 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] |
 Tuesday, May 06, 2008

Upgraded Personal Blog to DasBlog 2.x

I upgraded my personal blog site (where all this same content is cross posted) with DasBlog 2.0.7 in about 10 minutes flat. It was super easy. I spent the next 30 minutes verifying things worked still.

Update: Weird. Cross posting works fine. Something is has definitely gone awry.

Unfortunately I can't log in now, but I CAN log in from Windows Live Writer. I must have something mucked up in the web.config or security configuration. Gotta go figure that out this weekend. Until then, live writer it is.

#    Comments [0] |
 Monday, May 05, 2008

Software Development: Greeenfield vs. Brownfield

Jargon, slang, blah blah blah... So what's the difference between the two? Its quite simple actually, so lets dive right into it.

Greenfield Development

Greenfield Greenfield Development happens when you start a brand new project, as in, clean slate development. No legacy code lying around, no old development to maintain. You're starting afresh, from scratch, from a blank slate, with no restrictions on what you're doing (other than business rules of course).

The definition from the Wikipedia Entry states: "In software engineering jargon, a greenfield is a project which lacks any constraints imposed by prior work."

It's also described as "File --> New Project/Solution".

In my experience, a true Greenfield projects is quite rare in line of business applications. Almost always you have to interact with some legacy code at some point in time and perform integrations with that legacy code that impose limitations on your development.

Examples of Greenfield Development

  • Building a new E-commerce solution from the ground up
  • Implementing a new rules engine for your company from the ground up.
  • Rewriting an old app in a new language (maybe C++ to C#) but not utilizing any of the old code other than for business rule reference
  • A new startup wants application X Built. Application X has never been built before, therefore Application X is a greeenfield endeavor

 

Brownfield Development

Brownfield Brownfield Development happens when business decide to develop/improve upon an existing application infrastructure. As an upgrade is implemented into an existing solution, the development is said to be Brownfield.

The Manning "Brownfield Application Development in .NET" book defines Brownfield development as: "A Brownfield application is a project, or codebase, that was previously created and may be contaminated by poor practices, structure, and design but has the potential to be revived through comprehensive and directed refactoring."

I'm not sure if if completely agree with the definition above, but I do think its close. Brownfield Software Development is about working with previously created code. To me, it does not mean that the code is legacy, as the term "legacy code" has a completely different connotation as soon as you've read Feathers "Working Effectively with Legacy Code". I believe Brownfield development can occur on an excellent foundation of code. What if the application that we need to enhance has 90% code coverage? Does that mean that the code is poorly structured and hard to update, and contaminated? No, not at all. I'd argue that it doesn't have a contaminated structure with that much code coverage, but then again, it depends on the code and how it was architected.

Examples of Brownfield Development

  • Adding a new feature to software that was developed last year
  • Altering the functionality of the code to enhance the performance of an application
  • Upgrading the codebase to expand the working set of functionality across the board.

 

Conclusion

My experience in the field varies between Greenfield and Brownfield. I've spend 1/2 my career behind the desk at companies as an employee. I've spent the other 1/2 as a consultant. I've seen quite a few Greenfield projects, and I've seen even more Brownfield developments. As a standard employee at any company, I'd say that 50% of what I did was Greenfield (and I know that's not normal from talking to my colleagues), and 50% was Brownfield. From a consultant standpoint, I normally perform Greenfield development. But as of lately I've been on a Brownfield engagement that's spanned many months. I'd have to say at this point in time I'm doing about 70% Greenfield and 30% Brownfield as a consultant.

What's the norm? I can't say, I'm no governing source of this info, but from what I've seen in the field it looks like to be ~20% Greenfield and ~80 Brownfield.

Does it matter which type of development you're involved with? Yes and No. If you want to make great software, you can do that in both areas. If you want to run with the latest and greatest technology in the field, perhaps you should consult a little more. But in the end, what really matters is that you have passion for what you do regardless of the type of development you're doing.

#    Comments [1] |
 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, February 08, 2008

The FooTheory Community

I'm very happy to announce that I was recently invited to join the the Foo Theory community. This is something I'm very excited about as I respect the other Foo-Theorians that also post here. This does not mean that Ill stop posting on my regular blog - I will be cross posting all content to my personal blog as well. You can think of that site as a mirror to this site (or vice versa) from here on out.

 

Feeds To Add

While taking a look around Foo Theory be sure to check out two of my favorite blogs on this site:

Trust me, they're two of the smartest guys out there - be sure to add them to your feed catcher.

Look forward to some great content in the near future. :)

#    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] |
 Sunday, January 13, 2008

Works in Firefox, But Not in IE? (or vice versa) WTF!!!!

During my stint at McFarlane Toys and through many other consulting gigs I've had in my years I'm always running into CSS and style in web applications.

If you're a Windows developer be thankful because everything in WinForms pretty much renders virtually the same on the client. It's not that way in the web world.

 

Here's what I think of styling in the web world: "Welcome to the land of a 1000 faces, where the same face can have 10 different appearances."

 

Seriously, CSS is a huge P.I.T.A. and getting it right on IE, FireFox, Opera, Safari, etc is a hair losing experience.

So, I'm sharing this resource as one of my great saviors of CSS wisdom: The CSS Creator Forum

I've had many issues and they've all been solved simply by searching this forum.

I've never once even had to post a problem as I've been able to find the answer here.

Enjoy.

#    Comments [0] |
 Wednesday, January 02, 2008

About Me

About Me - Who are you and what have you done?

My name is Donn Felker. I work as a Senior Consultant for Statêra, a Microsoft Gold Certified Partner in Phoenix, Arizona. I’m an experienced Software Architect with over 8 years of professional experience in various markets that include – entertainment, health, retail, insurance, financial, and real estate. I write, present and consult on various topics ranging from architecture to agile practices to patterns and practices. I find that I really enjoy mentoring developers who have a passion to learn in a collaborative environment. I am also a part of the open source Tree Surgeon project which helps developers set up “scaffolding” for a new project in .NET, similar to Rails.

Have an idea or opinion you’d like to discuss? Let’s talk about it! I’m always open to learn something new from anyone who is willing to talk!

So what is my history?

Prior to my days at Statêra I worked for RVI Group, the world’s largest residual value insurance company in Stamford, CT. Previous to RVI Group, I worked for Televerde a market intelligence company located in Phoenix, Arizona. While at Televerde I was introduced to a wide array of development and infrastructure challenges that I had never encountered before and in doing so I was introduced into some of the same technologies that I use to this day. I honestly feel that my “ALT.NET” roots were germinated at Televerde. My time at Televerde has ended up being the most influential experience in my career. Before Televerde I worked for Todd McFarlane Productions for many years. I implemented many mission critical systems that still serve this company to this day. At Todd McFarlane’s company I was in charge of various projects ranging from audio production, video production, software engineering, graphic design and network infrastructure. Being involved with such a vast array of highly creative individuals (toy sculptors, comic book artists, designers, and Todd himself) and projects I have been able to supply highly successful solutions to many vertical markets in the entertainment industry. Previous to Todd McFarlane Productions I worked at Target Corporation as a Unix Tech/Developer, Team Trainer and Senior Technical Support Representative. Target was a great place to work mainly because the vast culture the company provided. The Target corporation always had someone who had experience with anything you could shake a stick at, and the best part was – they were always willing to mentor you along in your career.

Between the years of 2002 and 2006 I was the Principal Architect for my own consultancy – G9MEDIA. I specialized in working with entertainment industry clients and implemented many media related solutions. A sample of these clients include Atlantic Records, Dreamworks/Universal Records, AFI, Nitro Records, TMP Intl, and a few other small indie labels from around the country. I was one of the first to start implementing fully dynamic Flash solutions utilizing PHP and MySQL data stores. This was prior to the You Tube boom, so this technology was red hot, unfortunately I didn’t know the right people in the right places to make it big in that arena. Oh well!

Now for some things you probably don’t know about me...

- I hated computers until 1997. I couldn’t stand them. I didn’t even know how to turn one on. Then I was introduced into the internet. Hello internet addiction. I was originally introduced to the internet from a girlfriend I had at the time and two weeks later after I got paid I bought my first computer, a 333mhz Hewlett Packard machine. I surfed the web with AOL (don’t flame me, ... it was over 10 years ago, give me a break!). Ever since I sat in front of this first PC I haven’t stepped away from a computer.

- I’m originally from a very small town that is near the base of the Mt. Lassen Volcano in northern California. The name of the town is “Shingletown” (no, I’m not joking). The population when I left in 1997 was 1000 people. The town is moving up though, they even have a Shingletown website now. 1995 website anyone?!

- I’m a certified Motorcycle Mechanic. I attended MMI (now part of UTI). This is actually the reason I ended up in Arizona. The only two options at the time were Orlando, FL or Phoenix, AZ. I opted for Phoenix. When I graduated from MMI I realized I hated working on motorcycles and the pay was garbage. So I went back to school for a Software Engineering Degree.

- I was almost a stock broker at one point. Prior to jumping into the ship to technology I was about 1 week away from taking my Series 7 and Series 63 securities exams. After arguing with a millionaire over 27 cents on his statement for 4 hours and proving him wrong through the use of a basic calculator and elementary arithmetic many times, I realized this wasn’t the industry for me. The customers were just too much to handle for the rewards of the job. Some people love this industry, but it wasn’t for me. I needed more “puzzles” to solve and less non-existent fires to extinguish.

- I used to race Pro-Am motocross in California prior to attending MMI. I was sponsored by Suzuki and many other small companies around the California area. I broke bones and sprained many joints but I kept at it. One afternoon while at a practice session in Marysville Motocross park I came over a jump at over 45 MPH and crashed on the landing. I ended up breaking my leg so badly that I needed multiple surgeries to fix the problems (the leg works just fine now) – but at the time I decided to hang up my racing gear and call it quits. The riding was fun, but I figured I would enjoy walking and playing with my kids’ later in life rather than risking another accident of that magnitude. I still loved motorcycles which is the reason why I attended MMI.

- During my high school years I obtained certification in cabinet making. That’s right boys, I’ve got wicked skills with wood working tools. I’ve created and sold hundreds upon hundreds of Burl Wood Clocks. They look very similar to the clocks on this site. I haven’t created a clock in nearly 10 years, but still it’s something that was part of my life and might end up being a part later in life.

- I’m an avid Mountain Biker and gym rat. I competed in my first mountain bike event ever (a national event at that) - The NOVA National 2006 – and got second. I haven’t competed since but I still do mountain bike quite a bit when I have time. When I’m not mountain biking I go to the gym consistently to stay in shape.

That’s me past to present. Be sure to subscribe to the RSS feed to receive updates on the blog. Thanks for reading.

#    Comments [0] |
 Wednesday, November 14, 2007

Vitamin or Prescription?

As developers we're constantly inundated with requests like this ....

  • Can you add a button that does does ________
  • On this screen _________ I need to have a chart of ________ displaying data ...
  • I need a report that shows me _________
  • Can we add _______ to this page?
  • It shouldn't be too hard to add this, its just a field on the screen .... (then they explain what its supposed to do)...

(classic scope creep)

Prioritization

The order in which a developer prioritizes items in their "todo" list is often determined by the urgency placed on them by their direct managers (or higher ups). More often than not we find a high level executive or decision maker wants a feature implemented because they "think" it will add value to the product. Again, more often than not, the executives theory of how this feature is a viable request has no data to back it up. Therefore a feature is implemented with no verification that its a needed or requested feature. Please remember, this doesn't always fall upon the shoulders of the decision makers... as developers we're enamored with making things sparkly and shiny. If we think of a cool new "hot key" that we can add to our app, we'll do it, even though it might take four hours to implement, we're confident it will be the feature that saves the world.

Uhhhhh, Nope. Afraid not McFly.

 

What's the root of the issue?

We need to ask ourselves a simple question....

Question: Is this feature a vitamin or is it a prescription?

Before we can answer this... lets look at some simple definitions...

Vitamin - A supplement that helps you, its good for you, its nice to have, but its not required.

Prescription - Medicine that helps you. Its required, it helps you survive.

 

Answer: It depends. (the classic developer answer... well... it depends... :)   )

 

The Process of the Request

When an feature request comes in you need to ask (as well as the client who requested it) ...

Is this feature/request a Vitamin or a Prescription?

This is the same as asking...

Is this feature request a "nice to have" or a "requirement to survive"?

This is going to determine if the request is worth putting into the system immediately. If you have 10 tasks, ask this question ten times and  you might some up with something that looks like this:

(This mimics a fake Online Order Management system - for example purposes)

VitaminsPerscriptions

As you can see, we see that everything on the LEFT is a requirement for the system "requirement to survive" (prescription). Everything on the right is a "nice to have" (vitamin).

We may need graphs of data, but we don't need 3-d graphs. We may need Web Access to the Order Management System, but we don't need a Silverlight implementation to get this project to work. It would be "nice to have" a Silverlight implementation, but its not required.

Conclusion

The next time you're asked to implement a feature, ask yourself...

Is this a vitamin or a prescription? Then put it in that bucket. Then, once that's figured out, go into the prescription bucket and prioritize those upon business requirements. Then, when you've taken all of your prescriptions (all of those items are complete), ask yourself if the "vitamins" are going to add value to the project. if they are, then ask that question again (is this a vitamin or a prescription).

This ultimately comes down to an agile type of development process. We should only be implementing the things that add value and that are required for the app to serve its purpose. Most of the time a lot of these "Vitamins" will never make it into the system because its just not cost effective or necessary. Eventually some vitamins will make it into the system and sometimes its these Vitamins that make your system a step above the other systems, but this cannot be established until you've taken all of your prescriptions. If you're sick and bed-ridden, you can't take muscle vitamin supplements to get muscles big. You have to take the prescription to get well, then you can take the muscle supplements to get muscular.

Next time you get ready to implement a feature/request - ask yourself ...

Is this a Vitamin, or a Prescription?

#    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] |
 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. :)

I've been asked what blogs I read, podcasts I listen to and screencasts I watch. So here's a comprehensive list for ya'll. :)

Blogs (in no particular order)

Then at times I'll browse the MSDN Blogs. Also note, these are what I call my "essential" blogs. I read these daily. I have about 30 other blogs that I read if I have time.

 

Podcasts (in no particular Order)

Other Podcasts I listen to when I can

Screencasts/Virtual Labs (in no particular order)

Publications

#    Comments [1] |
 Friday, May 18, 2007

Wireless Rest Areas

During this last week I've been in the process of relocating back to the south west area of the United States. During the drive back to the south west area I noticed something I've never seen before. Wireless Internet at Rest Areas!!!

Apparently this has been up and running for some time now but I was unaware of it. I noticed it at first in Louisiana. While in Texas I really began to notice how it was advertised on the Rest Area Signs. A nice little Wireless symbol was present on the signs.

So, if you're in dire need of a wireless connection, be sure to Google for wireless rest areas in the state you're traveling in. I've looked around and noticed tons of states have this set up already. I'd post links to all of them, but I dont have time to post 50 links right now. :) Enjoy!

#    Comments [0] |
 Friday, March 02, 2007