October 27, 2007   link

PopBox was recently mentioned in a few blogs that have a higher readership than mine, and from there it got stumbled, dugg, reddited and delicioused. Is that a word?

The point is that suddenly in the course of 24 hours PopBox went from 10-20 downloads a day to over 300 downloads a day. While I fully expect this to decrease again it has presented me with a much larger user base which means more support and more feature requests.

It also means more testing on more diverse systems under more unusual usage patterns. Thus the release of version 2.4 that includes one new feature and one bug fix:

  1. Added events that fire before the image is Popped or Reverted. Now if you have UI elements on the page (such as <select> drop-downs) that always render on top you can hide them prior to the image Popping and then make them visible again when the image Reverts.
  2. Fixed a sizing bug that occurred when multiple identical thumbnail images (with the same src value) each Popped to different large images.

If neither of these items affect your installation you don't need to update, but 2.4 is 100% backward compatible with 2.3.

I've also spent a little more time enhancing the Quick Start and FAQ page to better explain some of the features and how to accomplish common tasks. One of the biggest complaints that I read about on one of the blogs was that they wanted to use the "title" attribute instead of the "pbCaption" for the caption of the image.

Actually the fallback to title if pbCaption doesn't exist was built into the caption capability from it's initial release in version 2.1, but they're obviously having difficulty finding where it says that so I added it to the FAQ page. Check it out!

More fun stuff to come soon!


MS SQL Server Variables in Stored Procedures Have No Scope
October 24, 2007   link

I know what you're thinking - yes they do. But really they don't.

"GLOBAL" and "LOCAL" don't complete the picture. A globally scoped variable is accessible from a stored procedure that is called by the first, and a locally scoped variable is only accessible from within the same stored procedure. But that's really pretty inadequate.

Can you tell me what the final result of this script will be?

declare @str1 varchar(50)
set @str1 = 'This is a '
declare @strResults varchar(50)

while @str1 <> null begin
declare @str2 varchar(50)

if @str2 <> null
set @str1 = null

if @str2 = null
set @str2 = 'test.'

set @strResults = @str1 + @str2
end

select @strResults as [Results]

If you said 'This is a test.' then you didn't look very hard.

If you said there would be no result because it would never leave the while loop then you correctly understand scoping of variables as used in most modern languages today. But you'd still be wrong.

The correct answer is null.

If you're shaking your head you had the same reaction I did when debugging a production procedure a couple of weeks ago. The declare @str2 varchar(50) only runs the first time through the loop. The second time it already exists and retains its value of 'test.' so it sets @str1 to null which ends the loop.

Of course when you add null and 'test.' you get null.

Next time when you think about scoping variables in TSQL remember to declare your variables outside the loop or explicitly initialize them to the value you want instead of relying on them to be null. You'll be much happier with the results.


September 20, 2007   link

This is just a small release to fix a bug in the PopBar where it wouldn't display if the image id attribute wasn't set. If you set your id attribute on your images then you wouldn't have experienced this.

I did discover something interesting though that you may want to know about if you do dynamic image creation in javascript: the variable returned from document.body.getElementsByTagName("img"); is a true pointer and not a copy of the array.

Why does that matter? When I create the PopBars I'm iterating though this array and checking each image for the PopBar attributes and creating the PopBar magnifying images as an overlay on the original image. When those overlays are created where do you think they go? Right into the document.body.getElementsByTagName("img"); array!

So for every image that has a PopBar image another image gets added to the array. That's another image my loop is querying for PopBar attributes that don't exist. This is just inefficient so I've instead copied the original array and am now operating on just the copied pointers. As a result the PopBars get created faster and I'm happier - and so are your visitors.

I really am working on other stuff too - I promise! I've got an article coming out in the next couple of days with more to come shortly thereafter.


PopBox FAQ is Now Online
August 30, 2007   link

I finally got over multiple colds and being really swamped at my day job so I could write up the Frequently Asked Questions page for PopBox. It's got quite a few answers to questions I've received about the product.

If you don't see your answer there please feel free to email me and I'll do my best to respond in a timely manner.


E-Commerce Fee Calculator is Now Dynamic
July 25, 2007   link

Over the past month I've received email from Avangate and Plimus requesting that I make changes to the E-Commerce Fee Calculator to make it more dynamic.

Many vendors do indeed have different pricing structures and since the calculator is cross-linked now I've been getting a lot of traffic to it, so it seems only fair that I make it more accurate. So as of today you can get true accurate pricing from the calculator without having to go to the vendor web site to make sure the percentages fit for your product.

As an aside it's nice to know that those two vendors have their fingers on the pulse of the mISV community enough to find my meager web site. That alone makes them worth a look.


July 20, 2007   link

This release of PopBox is just a bug fix release that makes it far more stable on most browsers, especially FireFox/Mozilla. There were a couple of nasty bugs that I didn't catch because my pages were loading too quickly on my development box and I didn't have time to see the problems of random clicking prior to completely loading the page.

The biggest bug found was pointed out to me by Richie Hindle of Entrian Solutions where the image would display if clicked prior to the page completely loading, but then wouldn't if clicked again after the page finished loading. Now I'd call that a bug!

At least that only affected the 3-4 people out there using FireFox. <duck>Just kidding!</duck>

Big thanks to Richie for going so far as to even create a Flash video of the bug so I could really see what he was seeing. It made tracking the problem much easier. If he puts that same level of detail into his other work then I'd say his products and services are certainly worth a look.

Another FireFox/Mozilla bug was found and fixed where the wait image wouldn't display if the image was clicked prior to completely loading. I detailed this in yesterday's blog.

And in more wait image wierdness it wouldn't disappear if you tried to pop the image multiple times prior to it completely loading. That's fixed too.

You can always see the full revision history on the documentation page.

Thanks to all for the support and comments. I have gotten a question or two on my software experiment starting next week, but I'm not telling anything yet. You'll have to wait. :)


Existence is More Than Just True/False
July 19, 2007   link

I learned a valuable lesson this week while hunting down a tricky bug in PopBox, and I feel silly to have not known it already.

In script it's a common task to check an object to see if a property exists on it prior to trying to use that property. If you do any cross-browser work you know exactly what I'm talking about, but for those that might not I'll give you an example by showing you the line I used to check if an image was fully downloaded for display:

var isReady = (objToPop.readyState) ?
   (objToPop.readyState == "complete") :
   ((objToPop.complete) ? (objToPop.complete == true) : true);

For Internet Explorer an image tag has the "readyState" attribute that is set to "complete" when the image is fully downloaded, but Mozilla browsers, and other W3C standard-bearers, use the "complete" attribute.

Testing for existence is fairly simple between the browsers - you just see if the property exists with a simple check like
if (objToPop.readyState) { do something }

This is actually a shorthand way of writing
if (objToPop.readyState != 'undefined') { do something }

But there's a big problem with using the shorthand syntax in this instance on Mozilla browsers. While IE's "readyState" is a string, Mozilla's "complete" is a boolean. In the sample above Mozilla browsers would always return true.

The correct way of checking the image state (in longhand for clarity) would then become this:

var isReady = (typeof objToPop.readyState != 'undefined') ?
   (objToPop.readyState == "complete") :
   ((typeof objToPop.complete != 'undefined') ?
   (objToPop.complete == true) : true);

As you may have guessed I will be releasing another version of PopBox tomorrow with this bug fix included, so all you FireFox fans will finally get to see what the spinner wait icon looks like.

Sad to say, but there was an even larger bug in v2.1 that caused some really bizarre behavior with Mozilla browsers. But that one got fixed too and you should have a much more stable version tomorrow.

Thanks everyone for your feedback! I'm getting a lot of email and I appreciate your kind words. There have been a number of questions regarding functionality choices and tech support, so I will be putting up a FAQ page in the next couple of days also that should go a long way to answering your questions about PopBox.

I'm excited about starting my market/software experiment next week. Stay tuned...


July 16, 2007   link

I'm releasing PopBox 2.1 today. I've put in pretty much every requested feature plus a few I thought of myself and I can't think of what to do with it next. I suppose someone in the user community will come up with something.

It will be nice to get back to writing some articles and not-free software also. PopBox has been a fun project and a good learning experience, but I have a few other software projects that I want to release this year and they're all in a half-finished state. It will be nice to finish them too. Even so - if you have PopBox suggestions I am still open to hearing them.

Here's the list of new features in PopBox 2.1:

  • Added the ability to display a caption for your images. If it's too large to fit on one line it automatically renders with an expanding capability.
  • Added a "pbSrcNL" attribute to the <img> tag that allows for a different image to be used for the Popped image that is NOT preloaded. So if you'd rather the large image download when the user clicks this is the attribute to use.
  • Fixed the stylesheet to display custom cursors in FireFox also.

It may not look like much, but it took some thought to get the caption to work correctly and I didn't have much time during the week to work on it. A couple of bugs were fixed also - one of them fairly significant. You can see the full revision history on the documentation page.

Remember to send me the url where you're using PopBox! When I get enough of them I'll create a page with the list. That's free advertising for you and a nice customer testimonial for me. Win-win baby. Win-win.


FireFox and the Custom Cursor
July 12, 2007   link

I guess FireFox does support custom cursors. Hmmm.

In previous testing of PopBox I just couldn't seem to get the magnifying glass icons to work correctly in FireFox, so I assumed that it just wasn't supported, but the reality is that I was lulled to sleep by Microsoft's excellent documentation.

I mean that in a good way - generally speaking. One of my primary development resources for years has been the MSDN Library, where you can find information on any Windows API and most companion products as well. For example, let's say that I want to see what cursor styles are available for use on an <img> tag. I would fire up my copy of MSDN Library, click "Contents" and navigate right to it:

Web Development -> HTML and CSS -> SDK Documentation -> HTML and DHTML Reference -> Objects -> img -> Styles -> cursor

Among the list of cursors supported in IE is one called "hand," which is the same as the "pointer" cursor used by other browsers. But all the Microsoft examples use "hand" when "pointer" would be cross-browser compatible. I didn't catch that.

So defining my custom cursor class like below didn't work in FireFox. Even though it understood the url cursor it wouldn't render because it bombed on the hand cursor type:

/* incorrect values for cross-browser compatibility */
.PopBoxImageSmall
{
   border: none 0 white;
   cursor: url(http://www.c6software.com/images/magplus.cur), hand;
}

But adding the quotes around the Url (oops) and defining a secondary cursor that FireFox can understand (pointer) made the difference.

/* correct values for cross-browser compatibility */
.PopBoxImageSmall
{
   border: none 0 white;
   cursor: url("http://www.c6software.com/images/magplus.cur"), pointer;
}

I guess I should have figured that Microsoft would gear their documentation toward their own products.

All I can say is that I'll do my best not to fall asleep again. In the meantime, if you're using the default PopBox stylesheet classes you may want to modify the cursor properties.

Speaking of PopBox - I've got a new version with more features and a bug fix or two coming out either tomorrow or Monday, depending on how much time I have for testing. The stylesheet fixes will obviously be in there too...


June 28, 2007   link

PopBox 2.0 is finally here!

From the email I've received people really wanted that true thumbnail image capability so I'm happy to report that it's in there.

I won't repeat myself actually - everything that I said would be in there on Tuesday did make it in, so just scroll down to Tuesday's post if you want the list of new features, or go straight to the PopBox product page.

Slated for the next release is the ability to define a caption for the popped image. I have a couple of ideas and have received 1 or 2 from other PopBox users on how they'd like to see it implemented. If you have any ideas let me know!


PopBox 2.0 Coming This Week
June 26, 2007   link

This is just a heads up that PopBox 2.0 should be coming out in the next couple of days. It is feature complete and I am just doing some compatibility and regression testing prior to calling it done. The documentation is almost finished as well, so barring something unforeseen 2.0 should be out by Friday.

It's much easier to use and the most requested features are all in there. Here's a list of enhancements:

  • Allows for a different image to be used for the thumbnail and Popped image, with built in preload, caching and wait images.
  • No longer need to add the call to Revert to your image tag. It will be called automatically.
  • Added PopBar transparency, which allows you to overlay text on the thumbnail image also.
  • Allows you to display the RevertBar and PopBar above the image or overlaid on the image.

June 08, 2007   link

When I released PopBox a couple of weeks ago the community received it very well and it looks like I may have been able to help out a lot of people. That's great and in part what it's all about.

I did however receive a request for the same feature over and over, and that was for a small "X" or close box in the upper right hand corner of the Popped image to make it obvious to the user how to close it.

I resisted this feature request for days, thinking that no user could truly not figure out how to close an image. It seemed simple enough to me - you click it to open, you click it to close. Since PopBox also has the ability to automatically close the image when the mouse cursor leaves the image I figured I had all the bases covered.

Besides - adding the close box to the upper right corner of the image would be hard.

But the request kept coming in. So I did what any smart man in my position would do: I asked someone smarter - my wife.

Gentlemen, you should all be as lucky as I to have the wife I have. Only go find your own of course. She said to me, "So you don't want to do it because it would be hard?" That pretty much ended the conversation.

Not to be outdone I decided to make my close box the fanciest, most functional, slickest and classy close box I'd ever seen. It's a multi-element transparency with text and an image that really allows you to direct the user as well as being intuitive.

My wife's comment? "You think you're pretty fancy, doncha!" That's all I need.

You can check it out at the PopBox product page, and I've finished the documentation page as well.


Previous   Latest   All   Archive