Image Loader – A Multi-Image Preloader jQuery Plugin

Last weekend I started my first jQuery plugin. It was for a piece of javascript I had used once and was about to use again and it occurred to me that this is exactly what plugins are for. Last night I finished it and released it on the jQuery Plugin site. You can see my apply named Image Loader Plugin on jQuery’s Plugin site right now. But I still made my own official site for Image Loader on my own site.

The plugin itself is fairly simple. You give it an array and it will load your images for you. I needed this because I recently used the jQuery Cycle Plugin for a slideshow for a client. The site loaded 20 rather large images and having the user just sit there and see nothing just wasn’t going to do, so some sort of loading splash screen was needed while images were loaded. And that’s what Image Loader does.

I approached this as an exercise to see what writing a plugin was all about and as a chance to write something that’s open source and supported for more than myself, basically to push myself in new directions. All in all it was well worth the time. Here’s few things I took away from this:

1. Turning my own code into a plugin for more than just myself forced me to look at the whole approach I took. So much so that I quickly changed how the plugin worked. It was originally made to only work with the Cycle plugin. So much so that it called it for you and you passed the options for the Cycle plugin as an option of the Image Loader plugin.

Dumb idea. 0 Extensibility? What was I thinking?

As I started turning the code into a plugin this just didn’t make sense. Why force myself into only one path? What if I want to use this for something other than this one slideshow plugin.

Now you provide a callback function where you can launch your own function. Here’s how it works.

	$("#slideShow").imageLoader({
	   images: ['images/image1.jpg'
		  ,'images/image2.jpg'
		  ,'images/image3.jpg'
		  ,'images/image4.jpg'
		  ,'images/image5.jpg']
	}, function(){
	   $('#slideShow').cycle();
	});

I’m quite happy I noticed this. And I don’t think I would have if I didn’t take this from the approach that someone else might find this useful. Even if no one else does it’ll save me time in the future.

2. As always it takes more than just code to make something. Once I had my plugin at a point I felt was release worthy I then needed to do a few things:

  • Give it a name! One that isn’t taken already… (hopefully)
  • Setup a page on jQuery’s plugin page.
  • Make a support and example page.
  • Package the whole thing up into a release.
  • Make a Twitter post about it.
  • Make a Blog post about it.

Really the only required things were the 1st, 3rd and 4th. But if I was going to do them I may as well do this the right way.

The name isn’t very creative, but I just wanted something that said what it did and wasn’t taken. I renamed it twice.

The project setup on jQuery is pretty quick and painless. It’s also customizable enough where you could honestly use it as your entire site. But since this is something I wrote I wanted people to see where it came from. Thus my own site as well. Anyhow you can’t do an example on their site.

Packaging it up was easy, but still I wanted this to be done nice so:

  • Pick a license. (I went with MIT)
  • Make a Read Me file.
  • Run YUI Compressor to make a minify version.
  • Clean up the style sheet and javascript a bit more.

3. Deciding when I had something release worthy was interesting. I already have two other features I’d like to add. Really I could have added these, but then I wouldn’t have a released plugin right now. And I would rather release often honestly. It’s not like this is for the iPhone and I won’t be able to get a release through the app store quickly. So this was great practice to start “releasing early”. Maybe I’ll release 1.1 tonight and practice “release often”.

4. Finally, I have the code on my computer here at home. No source control at all. Something I’ve been wanting to stop myself from doing lately. So I’m going to give GitHub a shot. Something else I’ve been wanting to do lately.

Like I said, this started as just an exercise to see more about jQuery plugins. But really it turned into an exercise to look at how I write software, a quick practice on getting something out the door and introduced me to GitHub too.

Tags: , , ,

Great Article: A Little Less Conversation

The only magazine I subscribe to is Inc. Magazine. I’ve been subscribing to it for a bit over two years and for the measly $10 a year I pay I feel I get many returns on my investment. And no, I’m not being paid to post this.

In the last issue Joel Spolsky had an article called “A Little Less Conversation“. It’s up now on Inc’s site and I suggest everyone to read it. I enjoyed it so much I brought it to work to share. I was a bit nervous to do this, because I know I have the ability to side rail a meeting with a joke in no time flat. However, the article is good and really highlights something I think we all know, that the more people you have in a meeting (or keep connected) the less effective it is and shows how it can really slow things down.

But communications costs add up faster than you think, especially on larger teams. What used to work with three people in a garage all talking to one another about everything just doesn’t work when your head count reaches 10 or 20 people. Everybody who doesn’t need to be in that meeting is killing productivity. Everybody who doesn’t need to read that e-mail is distracted by it. At some point, overcommunicating just isn’t efficient.

(emphasis is mine)

Anyhow, I hope everyone reads it and looks at their own teams. The information may be obvious, and I’m sure many either have inherently felt this at work or already knew this information. But it’s good to look around as your team grows and keep this in mind.

New Link: Lessons Learned by Eric Reis

I’ve added a new link under my Art of Software category. It’s to Eric Ries’s Lessons Learned blog. It’s really a must read now in my mind. I’ve been reading through his past posts. A couple of gem’s worth reading are:

Anyhow, his blog is well worth the read. I found this site looking  for a way to more coherently explain what I mean by Bootstrapping a company. I’ve always meant to do it in an efficient manner, not just out-of-pocket. This led me to the first link above which really explains quite well the direction I’ve been wanting to follow in my own ventures.

Tags: ,

Hello from Windows 7 an OS with “iPhone Moments”

I’ve been using Windows 7 and Windows Server 2008 RS (modified to look almost identical to Windows 7) during the day for a few months now and I’ve been loving it. At home though I’ve been using Vista on my main computer, where I do most of my design work and I’ve been hating it.

It’s not that Vista was out right horrible. It was just kinda horrible. And any bit of horrible in a software product really is too much of it.  Seems obvious but it’s actually hard to get rid of horrible at times. It shouldn’t be, but whenever you have lots of people working on something you have lots of ideas. Things get fractured communication and development wise, let alone “vision”. It’s sad but true. Not inevitable mind you.

But I digress.

I like Windows 7. In fact I have to say I like it enough that I no longer really care about Mac OSX. Mac OSX is nice, it has a few quirks that I don’t care for (where’s the maximize window button!), but with how incomplete Vista was feeling and how old XP was feeling I was seriously looking to give it a shot.

Then Windows 7 came along, and for the first time since the beta of XP I actually cared about Windows. With 7 I’ve had many “iPhone Moments”. These are moments I’ve termed from my initial few months with my iPhone, when I’d think of something and try it and it just worked. Windows 7 has provided many of these. Something Vista never did.

It really comes down to “iPhone Moments” for me and many other users. To get what you expect but to deliver it in a new manner. When I started thinking about this and my waning interest in Mac OSX I started to realize half of the appeal of Apple was the entire package, not just the OS. This is what Apple really gets, and what Microsoft only seems to get with the XBox and its development tools. The package deal is what really matters, the entire user experience.

So in the end what I really want right now is Macbook Pro hardware with Windows 7. An OS that supports all the apps I use and love and has those great moments delivering me what I expect in a new manner.

Not So Great Moments in UI

The text says the operation is complete, the Finish button is now enabled, but the progress bar doesn’t agree.

The text says it's done, but the progress bar says otherwise.

Tags: ,

Things of Interest for December 21st, 2009

The Six Twitter Types by Guy Kawasaki.

I suppose I’m in the Newbie category heading toward the Maven category. I still haven’t found my exact niche for Twitter yet, but do like following others on it.

There Is No Page Fold via Signal vs Noise.

Not too long ago a coworker pointed me toward an article I wish I could find stating that the concept of “Above the Fold” was a moot point. That since users were now familiar with a scroll bar trying to push everything above the fold doesn’t matter for web design. I hope this continues to take off.

Startup Therapy: 10 Question to Ask Yourself Every Month by Jason on A Start Bear

These are great questions that every startup should be asking. To go with #2 and #3 I’d toss in “Why would someone go with somebody else?”. I think it’s good to look at who else is in the business you’re in and honestly ask yourself if you could do business with you or somebody else, what would make you pick them over you. If you’re really honest with yourself #3 would probably highlight this.

Is your Disaster Recovery Plan Complete?

There has been much talk lately about backups. Thankfully I have not had to face this too.

Since backups are on a lot of people’s minds lately, and more importantly as Joel restates it’s not really the backup that’s important, but the restore which is!

Do you have everything backed up you’ll need? Have you actually tried to restore from your backups lately?

Or how about this? Is your DR Plan actually up to date? Sure you just did a full restore of your DR Plan two months ago, but what’s changed since then? Optimally you should be updating your DR Plan whenever there are any system changes. But quite likely something was forgotten, that something won’t be pointed out till the next attempt to do a test restore or the real deal hits.

That’s why I suggest doing a review of your DR Plan monthly. I personally set a reminder for the last Monday of every month. I haven’t always been perfect in this. But I have noticed that when I do a scan through it that’s not related to a specific new update that I tend to flesh out the DR Plan more. So that after a few months not only do I have the basics in, but a lot of extra stuff that might be really helpful to standup the system should the proverbial shit hit the fan.

Asking Too Much of Customers

While out shopping today I made a small purchase at Sears for my youngest daughter. Upon arrival at the cash register I was bombarded with questions which quickly had me mentally checking out of the transaction. The beginning of the conversation started like this:

Customer Service Rep: Did you find everything sir?

Me: Yes thank you.

Customer Service Rep: Would you like a gift receipt?

Me: No that’s not necessary.

Customer Service Rep: Are you a member of “some sort of kid clothing shopping program”?

Me: No, no thanks.

Customer Service Rep: Would you like to signup for a Sears Mastercard?

Me: No.

Customer Service Rep: If approved you could receive $15 off this purchase. Are you sure?

Me: No thanks.

All of these questions came before my item was scanned into the register. Once my item was scanned:

Customer Service Rep: Would you like to donate a dollar to Home Town Hero’s?

Me: No thanks.

Then, with my transaction now complete I was then asked:

Customer Service Rep: Would you like your receipt with your on in the bag?

Me: The bag is fine.

Customer Service Rep: Okay, also on the receipt is a web site I’m highlighting. It’s for a customer satisfaction survey about this transaction. If you do the survey you could win a $4,000 gift card.

The $4,000 was also highlighted.

Walking away from the register I stopped and made a note in my phone about playing 20 questions with the cashier. It occurred to me that in that deluge of questions were missed opportunities and over used opportunities.

Overused Opportunity 1 – Detract from the Sales Experience

The biggest over used opportunity to me is how many times do I have to say no to the in store credit card? I’m sure somewhere is a spreadsheet within Sears corporate management, or perhaps at Mastercard headquarters, that shows if you keep asking you will get 1 in 1,000 gullible customers to signup for the horrible deal they’re trying to sell. All to save $15 or to get some horrible piece of tchotchke. By getting the 1 in 1,000 customers they annoy 999 other customers asking the same question over and over.

Overused Opportunity 2 – Depersonalize the Sales Experience

Did I find everything? Yes, sometimes this question is helpful, but generally it feels like they are trying to maximize my purchase for them and not me. What happened to, “Hi, how has your day been?” or “What a lovely beard you’re growing sir!”. Well maybe not a comment about my new beard, but anything to make it not seem like yet another way for them to maximize the money coming out of my wallet.

Overused Opportunity 3 – Securing My Loyalty

Loyalty programs. I’m for them and against them. I like saving money, but often I don’t like the hassle. And sometimes they’re just poorly veiled attempts to garner more information out of me.

All of these overused opportunities simply lead to information overload and the customer checking out from the conversation while they simply try to purchase the goods YOU ALREADY SOLD THEM.

Overused Opportunity 5 – Trying to Sell Yet More “Stuff”, When You Already Sold Them Some!

Really, that’s what much of the above boils down to. And what is the cost of this?

Missed Opportunities

In the middle of the transaction what a quick blurb asking me if I would like to donate a dollar to Hometown Hero’s. I did a quick look around when the cashier asked this question. I didn’t see a single sign about what the program was, nor was I offered even a quick blurb about what it is. Later, further in the mall I saw a big sign about it and thought, gee, that’s a nice idea. In the cashiers defense the name is pretty descriptive.

But by this point I had been asked a bunch of questions with one of them being my biggest pet peeve (the credit card). I had checked out from the transaction, the only brain cells I was willing to put into the deal at this point were to make sure I was being charged correctly.

They missed the opportunity for me to care about my transaction. And that can be dangerous.

Are You Overusing Opportunities?

It’s often tempting to attempt to get as much information from a captive audience as you can. When they’re actually giving you money you know they’re interested in something you offer. Since they’re interested perhaps they’ll be interested in something else, that’s an opportunity to up sell. Or perhaps you’re desperately in need of information about some other area of your business, you can ask them then too!

But should you?

No. And especially no with online sales. The ability to mentally check out of a transaction online, or even stop the purchase altogether, is even easier than in the store. And in today’s information age, where when you call customer service and you’re always selected to answer a customer satisfaction survey, simply being happy that someone wants to exchange money for your services might be asking enough.

Because in the end, if your customer is happy there will be other opportunities. Opportunities you can make use of, but not overuse, and not cheapen your customers sales experience.

Tags: , ,

SQL Server Build Links

I’m always trying to find out what the latest build, cumulative update, hot-fix is available for SQL Server. Unfortunately the SQL Server TechCenter page never seems to stay up to date on what the latest Cumulative Update is. There are however support pages that do stay up to date. In the effort to help save you and me from having to search for the latest build, cumulative update, or hot-fix for SQL Server here are the links to the relevant support pages.

SQL Server 2008 SP1 Builds: http://support.microsoft.com/kb/970365/en-us

SQL Server 2008 Builds: http://support.microsoft.com/kb/956909/en-us

SQL Server 2005 SP3 Builds: http://support.microsoft.com/kb/960598

SQL Server 2005 SP2 Builds: http://support.microsoft.com/kb/937137

I don’t have any links for anything prior to 2005 SP2, if you’re not on SP2 though yet you really should be, it was a great service pack.

SQL Server 2000 SP4 Builds: http://support.microsoft.com/kb/894905

Tags: , ,

Followup: DBCC CHECKFILEGROUP Bug Fixed!

In November I was quite disappointed. The DBCC CHECKFILEGROUP bugI had come across in September had made it into the Cumulative Update 8 for SQL Server 2008, but not in the Cumulative Update 5 for SQL 2008 SP1 branch. Being that I prefer to keep up on the service packs I was out of luck. Apparently it had not passed quality control for the SP1 branch.

However, I was told at the time that it would be a forth coming commulative update in January. Not wanting to wait another two months I put forth my business need for it and now a Hotfix is available for it!

If you’ve been stuck without being able to do DBCC CHECKFILEGROUP’s I hope you go grab this and get back to having that warm feeling inside knowing your data files are in good shape.

Tags: