PopBox Supports Links And Scripts In The Caption
Did you know you can place textual links in the pbCaption? This allows you to support things
like "Buy Now!" links and "Add To Cart" links directly in the caption of the image.
It's a bit tricky but works wonderfully. I've written up a sample and added it to the
FAQ.
E-Commerce Fee Calculator Update
I thought it was about time for an E-Commerce Calculator
update since the last check was July 25. Only a few things have changed in the last 3 months.
We saw the demise of two vendors: Digital Candle and Virtually Free. I'm not sure if they just went
out of business or were swallowed up by the Digital River juggernaut, but either way they're not
around anymore.
I don't think anyone will miss Digital Candle, as they didn't really stand out as good or bad and
there are plenty of others to choose, and I'm practically positive that no one will miss Virtually Free as
they were easily the most expensive of the group. Sayonara.
Other than that I did notice this sentence on the Plimus fees page:
If you can find an advertised rate better than ours we will match it or beat it!
I've heard good things about their service, so you might want to call them up and see if they'll
match Google's advertised rates (free). Tell them I sent you and I promise to publish the hate mail.
Frankly, I'd even be impressed if they'll match Google's advertised rates for 2008.
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:
- 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.
- 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
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.
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
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
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.
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
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...
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
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...
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!
|