Open source

Catfish fun with script.aculo.us

Tags: 

Script.aculo.us is a wonderful library of Javascript functions for doing lots of buzzword-friendly snazzy effects. A recent schmancy JS trick is the catfish - a small, unintrusive advertisement that pops up at the bottom of the web page and can be closed without affecting the web page. Looking around I didn't see any existing code to do catfish effects with Script.aculo.us so I decided I'd have to fill the gap.

There are four parts to a catfish - the Javascript libraries (Script.aculo.us, which relies upon Prototype), a little bit of HTML structure on your page, some CSS and a single Javascript line. So lets get to it.

To do any of this fancy stuff you need both the Prototype and Script.aculo.us libraries on your site and then load them into the page as follows:

<script src="js/prototype/prototype.js" type="text/javascript"></script>
<script src="js/script.aculo.us/effects.js" type="text/javascript"></script>

Don't forget to change the paths to whatever is correct for your site.

The HTML below needs to be one of the last segments within your HTML, basically it needs to be the last code before the close-BODY tag, so that nothing else throws it off. There's also a link to hide the catfish, you don't want to upset your visitors!

<div id="footer_ad" style="display:none"> <div id="footer_close">[x] <a href="#" onclick="Effect.BlindUp('footer_ad', {duration:1})">close this</a></div>
Catfish is tasty!
</div>

You can put whatever fillings you like in there - nested divs, etc, basically eat your heart out.

The CSS part is pretty straight forward, basically we're setting the div to be locked to the bottom of the web browser window so it slides over the other content - this is a general trick that works great for e.g. shopping cart totals, menus, etc. I used some fairly ugly colors just to make it stand out during testing :-) And for those who don't know, this should either go in your page's CSS file or within a STYLE tag in your page's HEADer.

#footer_ad {
position: fixed;
bottom: 0px;
display: block;
width: 100%;
background-color: #b7948f;
color: #394a8c;
font-size: 24px;
padding: 10px 0 10px 0;
margin: 0;
left: 0;
border-top: 1px solid #9a5261;
}
#footer_close {
float: right;
width; 50px;
display: block;
font-size: 0.6em;
padding: 5px;
text-align: right;
font-size: 0.8em;
}

Last but not least is the Javascript code to make the screen pop up. The best location for this is your body tag's onload attribute, but you could embed it in the page if needed (within a SCRIPT block):

new Effect.BlindDown('footer_ad', {duration:2});

Put that altogether and you too can have some tasty catfish for your site.

There's one last thing, the way the above code works the catfish will keep popping up every time the page is loaded, its left up to an exercise for you on how you'd like to make the close link make the browser remember to hide it. One idea would be to have the onclick event execute a function on the server side to set a session variable that would indicate the visitor no longer wished to see the catfish, then in the presentation code only display the catfish if the visitor doesn't have this variable set; alternatively some Javascript could set a cookie, but I prefer to consolidate all client data in viewer sessions, so there's only one source for all of the relevant data.

Bon appetitè!

Why PHP is still an immature language

Tags: 

A thread came up on Slashdot today about the security problems of PHP and software written using it. Given that this is as much of a major problem today as it was five years ago when version 4 was released (that was supposed to start fixing the security problems), and given how bad most PHP code still is today, I added in my own $0.02:

From my experience the main cause of insecure PHP software is developers not turning the error validation to the highest during development, so when an unsuspecting user downloads the software little do they know that their system can and often is wide open to stupid bugs and security problems. When you leave error_reporting to the default setting you miss lots of important details, like array keys being passed as constants, variables being referenced before they're created (especially with arrays), incorrect return types, etc, etc, yet people wonder why their code is so buggy? I was installing vtiger, which is a pretty comprehensive CRM that has lots of potential to hit it big, the other night for a client and was slamming my had against the wall at the sheer number of stupid syntax bugs that were in the system.

How many programs out there tell you to turn on the old register_globals that everyone knew was a huge security problem?

How many programs tell you to turn down the error_reporting level to hide their development incompetence?

I was actually considering starting a movement to have the PHP community clean up their act, we'll see if its still needed after the dust settles from this.

Personally I think that with PHP 5 they should have stopped supporting deprecated coding practices, like accepting invalid variables and invalid array keys, so that this stupidity could finally stop.

That's why I don't do much with PHP anymore, a large portion of the open source projects that clients want you to "make work" are riddled with utterly stupid mistakes that you spend days if not weeks cleaning it up before you can actually start doing any work.

WP-Cache + password-protected pages = problems

Tags: 

I have discovered that, despite recommendations, it is not advised to use the Wordpress plugin WP-Cache if you use password-protected pages as it stops them working correctly. If you turn on WP-Cache and view a password protected page that you have not previously viewed it will cache a copy of the login page and never let any visitors access the content; if you view a page that you have previously viewed before enabling the cache it will cache the full page, letting everyone who views your site see the page. This is not a good way to work, so I recommend simply not enabling this plugin.

SVN+SSH problems on Mac OSX

Tags: 

I was trying to get SVN set up as a daemon on my OSX 10.4 (Tiger) machine when I started running into this error upon connection:

bash: line 1: svnserve: command not found
svn: Connection closed unexpectedly

Some searching later I really couldn't find anything that might have been causing the problem, other than the obvious notion that the path was not working correctly. A little fiddling later I discovered the problem - the ssh daemon was by default configured to not load any user environment files (which are used to set the command path, etc). To fix the problem I had to first enable the option PermitUserEnvironment and then restart the service:

sudo nano /etc/sshd_config

Search (control-w) for the string "PermitUser" then uncomment the line (remove the # sign) and change the the "no" to "yes". Then all I had to do was restart the ssh daemon and it was good to go:

sudo SystemStarter -v restart SSH

Et voila!

Gallery2Export tip - upgrade PHP!

Tags: 

At home I use the wonderful Gallery2Export plugin for Apple's iPhoto photo catalog program into a Gallery2-based online album. It has generally worked great, but yesterday when I was trying to upload Halloween pictures it stopped working. Some fiddling later, including going through the hassle of trying another plugin (iPhoto2Gallery, which also failed), I finally upgraded the website from PHP 4.4 to PHP 5.1, and... it magically started working! Hurray! I've no idea if that was the actual problem or if it was just sheer luck, but its working again and now I can get back to the fun of sharing pics with my family :-)

Pages

Subscribe to Open source