Slicing in Photoshop and Fireworks
Last night, I put together a really quick screencast on exporting slices from Photoshop but decided this morning to put something together that I thought might be even more interesting: exporting slices from Photoshop and Fireworks. Over the years, I've been a fan of Fireworks and export any of my own work right from Fireworks but I've aso had to work with designers who use Photoshop. In order to...
Mail.app vs Entourage
It's been a few weeks since I've been on this lovely MacBook Pro. It's a fabulous little laptop. And probably one of the tasks I've spent the most time doing is sending and receiving email. Keep in mind, this is from the point of view of a die-hard Windows user of many years. I've been using Microsoft Outlook and had really gotten to like the most recent version in Office 2007. My default view in...
Alpha PNGs in Internet Explorer 6
That elephant in the room is losing some weight. The forever scorned IE6 has always had issues with alpha PNGs, those semi-transparent images of goodness. The market share of IE6 is surprisingly big, especially for more mainstream sites and web developers such as you and me are still left holding the bag to support them. Stoyan Stefanov, one of the people behind Smush.it, has posted the fifth ins...
Rounded Corners in Internet Explorer
You may remember my recent expirement with getting rounded corners in Internet Explorer to work with VML. I tried to come up with a way to mimic border-radius and to be able to implement simple rounded corners into a design. The first implementation I saw that tried to do this in a seamless way was Remiz of HTML Remix. The implementation uses an HTML control (ie: an htc file) that can be easily bo...
SidebarAds Expands
It has been over six months since launching SidebarAds and there have been recent changes. The past six months have been somewhat of a rollercoaster ride when it comes to the success of SidebarAds. Now seems as good a time as any to provide a status report. For those unfamiliar with my ongoing saga in online advertising, be sure to read the announcement post from June, along with my previous disc...
HTTP Monitoring with Charles
With Ajax applications, there's often a need to see what information is being transported back and forth. Am I sending what I'm supposed to? Am I getting back the right response? Most JavaScript developers have Firebug locked and loaded but its requirement to post data back to the server just to inspect the request isn't always a very pracitical solution. The information you get back may not alway...
Navicat for the Mac
I like desktop GUI interfaces for database administration. When I developed for MS SQL Server, I used to use the query tool that came bundled. Then I switched to working mostly with MySQL and have bounced around various apps including the query browser and migration tools provided by MySQL. Eventually I had settled on SQLYog as it had provided one key feature: the ability to edit a query result. I...
The New Switcheroo
I've been using a Microsoft operating system ever since I got a 386sx back in the day. First DOS, then any number of Windows iterations. From 95, to 2000, to XP. It's been a long streak that has finally come to an end. I have switched to a Mac as my primary machine. Why did it take so long? I jokingly say that I've harboured a grudge against Apple ever since they ditched the IIgs for the Mac. Tr...
The Ol' Switcheroo
You have an element and within that element you want an item to be clicked on and set as active. Then you want to click on another item and have it to be set as active. Maybe it's navigation, maybe it's tabs. This is a common pattern. So much so, that I've rewritten this code a few times but keep losing track of it. This is a jQuery plugin that does the ol' switcheroo and is very simple. When yo...
Sidebar Workshops
The Sidebar Creative crew are putting together a workshop! Come join us in Washington D.C. on November 12th as we step through the front-end development of an example project. We'll go from the design process through to implementation with plenty of take-home tricks along the way. This is an intermediate-level workshop targeted to those who already have some experience doing front-end developmen...
Using jQuery for Background Image Animations
After reading Dave Shea's article on CSS Sprites using jQuery to produce animation effects, I felt like playing around with things to see what could be done but accomplish it with a simpler HTML structure (no need for adding superfluous tags) and simpler code, too. Changing the position of the background image felt to be the best approach to creating the type of effect we're looking for (and I'm...
Book Review: CakePHP Application Development
CakePHP has been around for awhile with the final 1.2 just around the corner. Despite that, we hadn't seen any books come out focused on the framework. Thankfully, not one but two books came out recently including CakePHP Application Development by Packt Publishing. The folks at Packt were kind enough to send me a copy and it turned out to be a fairly quick read. It's 300 pages of good starting k...
Tiling Backgrounds in Internet Explorer
With tables becoming less popular, this particular problem doesn't crop up nearly as often anymore but for when those data tables could use a little spice, it'd be nice sometimes to be able to set an image on the table row. The problem is that Internet Explorer 6 and 7 have this little problem: the background image specified in the TR gets displayed as if set for each TD. In other words, a backgro...
A Web Developer's Personal Projects
It's interesting to note that many web developers go through a similar process over the course of their careers. One of those rights of passage is the building of a particular application type. Cutting your teeth on building a larger scale application (at least, larger than a contact form that emails somebody and larger than hacking up an install of WordPress) seems to inevitably involve developin...
The Shelf Life of a Web Site
In relation to some of the conversation surrounding the still prevalent Internet Explorer 6 and why it's still around, I am reminded of some of my past work. There is a CMS that I developed for a former employer back in 2002. It's been six years since then. It was sold to a handful of organizations of which I know at least one, and I suspect more, who still use it. Six years? That's a long tim...
Book Review: Practical Prototype and Script.aculo.us
In this next installment of Review Fridays, we have a new book from Apress titled, Practical Prototype and script.aculo.us by Andrew Dupont. Andrew is one of the core developers of the Prototype library. Prototype is the library that helped open up a new world of techniques for me and, likely, many other JavaScript developers with its Ruby-inspired approach. Prototype is automatically bundled wit...
Broken Promises
Over at The Register, Hakon Lie feels that Microsoft has broken their promise to ship Internet Explorer in standards mode. There are two issues at play here and I'm not sure either is really that big of a deal. Or rather more interesting, if you were Microsoft, what would you do? (Actually, better to think yourself not Microsoft since many are biased against them.) Intranets The dirty secre...
Service Review: W3 Markup
In an effort to force a more regular schedule of posts, this will be the first in an official series of review posts where I'll review books, products and services that I manage to get my hands on. Every Friday I'll try and post a new review. First up is W3 Markup. W3 Markup is an HTML slicing company that can take a Photoshop or Fireworks file and produce the HTML and CSS to go with it. I've use...
An Experiment in Rounded Corners
An idea had struck me this afternoon that there might be some technology deep in the depths of Internet Explorer that might unlock the secret to easy rounded corners. Unfortunately, my initial idea fell flat and I was left in the same place I was before. However, bouncing from idea to idea, I thought to try VML. VML is an XML-based approach that Microsoft came up with and proposed it to the W3C. A...
Don't bring me down
Designers have blogs for a number of reasons. Often they want to show off their portfolio, maybe to expound theory, or whatever tickles their fancy. But as designers are creationists, they often have the desire to recreate their vision for their web site. Take it all down and build it back up again! The other thing that designers often want is some noteriety. It's not about being some A-list web...
Multiple Validation as Behavior in CakePHP 1.2
After some inspiration from a recently published Bakery article, I decided to convert my multiple validation function into a Behavior. Even better, I've thrown it into my plugin collection to make it super easy to drop into any project. Using the new behavior is much like using the script as it was before. You can name the validation properties to include the action name and it'll automatically s...
Creating a Contact Form in CakePHP 1.2
Most contact forms take a name and feedback from a user and mail it off to the administrator but don't store any information in the database. This tutorial will show how to use CakePHP's models, even when no table is being used. CakePHP is great in that you set up a database table, define an empty class file for the Model and suddenly you're halfway there. The Form helper can automatically displa...
Multiple Validation Sets in CakePHP 1.2
In CakePHP, you define how your data should be validated by setting parameters on the validate property of your model. In version 1.2, there is an on option that can be set on a specific rule that, when set, is either create or update. This allows you to define different rules depending on the type of action being performed. That, in combination with the required and allowEmpty properties, give yo...
CakePHP Debug Styles
I just wanted to document this somewhere but whenever I work on a CakePHP project, there's always the debug info that sits at the bottom of the page. It's big and bulky and once I'm off the default CakePHP styles, it's usually pretty ugly. I've done various stylings but I finally took a moment to implement a really simple idea: Fixed position the table and then use hover styles to toggle the vis...
Easier Static Pages for CakePHP 1.2 Update
So it seems that the old code I had didn't work in debug mode, although on the current CakePHP 1.2 RC2, I'm not even sure it works at all. However, I decided to take some time to revisit the code. Last time, I simply hacked up the missingAction and missingController calls and it felt kludgy. It looked kludgy. This time I took a closer look at how the dispatch was being handled. Daniel Hofstetter...
Why Twitter Survives
...or why I think Mashable is wrong. Mashable has an interesting article that places Twitter's popularity purely on its simplicity. Even more bold, it believes that people haven't left Twitter because of its simplicity. Its competitors are simply too complex. I contend that Twitter has succeeded and continues to succeed because no other service matches its breadth of distribution. Avenues of ...
Don't Listen to the Hecklers
This is my response to James Bennett's post on the Designer vs Developer debate but I thought it worth sharing my view point here. So it’s high time we all got over our little internecine feuds and started acting like the professionals we claim to be. That means learning to work with with our colleagues, no matter where they fall on the spectrum of specialized industry knowledge. ...
@media 2008 Wrapup
I know it's been a couple weeks since @media but I did want to document my thoughts and, of course, point people to some resources. First of all, I thoroughly enjoyed the conference. It's certainly on a much smaller scale, probably closer to something like Web Directions North. What I'm finding is that the two track smaller conference seems to be a great size. It gives you plenty of content to ab...
Snogs
If there's ever a quintessential application to build when you first dive into a framework, it's the blog. That's what I did with Snook.ca when I first got into CakePHP. Then for a recent client project, also built using CakePHP, I was asked to integrate a blog. I took this opportunity to take a chunk of the code I used to build my own site and break it out into its own blog plugin: Snogs. Snog...
An Evolution of Advertising: SidebarAds
It's been over a year since I've last talked about adding advertising to my site. It has come time to provide an update and fill you in on how things are changing. Automation Once again, my biggest downfall was the lack of automation. Campaigns would end and I'd fail to do a followup. In one particularly awkward case, I double booked a spot because I had forgotten that an advertiser had prepaid....
Snape Basic
Sometimes inspiration strikes when you don't even expect it. While at the @media conference, I was discussing the benefits of Adobe AIR and when it might be advantageous to use it. Certainly not every site or web application requires a desktop component. Sites that have a level of stickiness — sites that you never close the window for...like Muxtape. *bing* goes the light bulb. Why not ma...
Socializing for the Freelancer
As a freelancer, especially working from home as I do, you might find yourself a little detached from the world. If not for my wife and kids, it might be entirely possible to go days without ever leaving the house and experiencing any in-person social interaction. However, even with family forcing me out into sunlight on a daily basis, I still find myself separated from a larger community. Here ...
Are Freelance Developers a Recipe for Poor Software?
I recently read the Fast Company article, They Write the Right Stuff, and instantly began thinking of my situation as a freelance developer and what that ultimately means to my clients. The article talks about NASA and the quality control that goes into the software that drives the shuttle. It's fascinating and impressive stuff. “Consider these stats : the last three versions of the p...
Project Management via Email
Hearing the news that Basecamp now supports the ability to reply to messages and comments via email reminded me of an idea for a project I had once. This was a few years ago now but, at the place I used to work, I tried to think of how most of the office worked with clients and with each other. A project would be set in the web-based project management app, people would get assigned to the proje...
No CSS Reset
When asked recently about using a CSS reset stylesheet, I readily admitted that I don't use them. I don't use them for my blog or for any project that I work on. Admitting such can raise an eyebrow or two. Reset stylesheets are definitely becoming commonplace — as you'd expect with companies like Yahoo and industry leaders like Eric Meyer actively using them. So, why haven't I jumped on b...
Adobe AIR Resources for the Ajax Developer
I've been doing a fair amount of writing and developing with Adobe AIR over the past few months and just thought I'd take a moment to wrap up some of the resources I've put together. These resources are mainly for the Ajax developer, since that's what I like to develop with. It doesn't get as much air time (pardon the pun) as using Flex or Flash. Christmas is in the AIR Written for 24ways.org la...
Frustrating Typos with JavaScript
Sometimes it's the small things that can frustrate you. A missing semi-colon, an extra comma. This afternoon, I ran into the invalid script type: <script type="text/javscript" src="example.js"></script> If you're more observant than I you'll notice that the second A is missing in javascript. Without a proper MIME type, browsers don't process the script leaving y...
PHP header can only be called once
I hate spending too much time just trying to solve one little problem. This was seriously one of those times. To give some background on what I was trying to do, I needed to have a user log into one system and have it automatically authenticate against another site on the same server. Your usual "single sign-on" functionality. The problem was, I didn't want to duplicate a lot of cod...
Sidebar Creative: State of the Union
An idea was spawned over two years ago to form a small collective of freelance developers to have the opportunity to work on larger projects. What's happened since then? A number of people have looked at the collective to see if the idea would work. Could you bring together four people, each living in different cities, and have a system that works? Client Work ... or not The original idea wa...
Building Findable Websites
Often times, the term SEO is mentioned in derogatory terms. With many of the poor techniques people use to garner site traffic, it's not hard to see why. However, Aaron Walter has recently finished a book entitled Building Findable Websites which casts a wide net on the concept of building a quality web site that goes well beyond just the mere topic of SEO. The concept of "findable websites&...
Content Overlay with CSS
Here's the problem: you have a container with some content in it like an image along with some initial descriptive text. Then, when users hover their mouse over the container, a hidden container is revealed to present additional information over top of the current information but in a way that retains content from the original container. This was essentially the problem presented to me by Anton P...
Review: PSD2HTML
I got the opportunity to try out the services of PSD2HTML. They're one of the larger design slicers around and was interested to see what I would get. Full disclosure: PSD2HTML advertises on this site and offered up their services in exchange for this review. I'm always hesitant to outsource work but luckily when it comes to HTML/CSS I've had one or two people that I can rely on. So I was a lit...
Maintaining your Personal Brand Online
This seems like a really subtle thing but it's something that I've tried to do and that is establish a personal brand and maintain it throughout all of my online activities. Maintaining a personal brand using your own name or alias can actually be easier than maintaining a corporate brand, especially when it comes to social networks or blog comments. Using a company name within blog comments or s...
Live Chat
Tomorrow (Wednesday) at 10:00am EST (15:00 GMT), I'll be on Ustream.tv to do a live chat, open to answer any questions that you might have. Just hop into the snookca channel. I've wanted to do the live chat thing for some time now and have debated between doing it in Campfire, using UStream and Y!Live. I've been hanging out on Y!Live from time to time but it has some issues to work out before I ...
Snoto Photo
In my tradition of coming up with application names that start with "sn", I introduce to you, Snoto Photo. Snoto Photo is a Flickr application built on Adobe AIR using Mootools. It loads up your latest photos, allowing you to view larger versions of them, do a slideshow, or load up the photos from any of your contacts. The goal of this is not to create a Flickr client that "does ...
Snitter for AIR 1.0
Unfortunately, I haven't had much time to work on Snitter the past few weeks but with the relase of Adobe AIR 1.0 today, I've pushed live a new version that'll work. Head on over and check it out if you haven't already. Snitter started out as a hobby project, done in my spare time, which has made it hard to respond to bug reports, feature requests, and other general help requests. It sucks as ple...
Using setTimeout to Solve DOMContentLoaded
Stuart Colville pondered the potential for using setTimeout to solve the DOMContentLoaded problem in browsers that don't support it, namely anything but Opera and Mozilla. His code is deceivingly simple: function DOMReady(f){ if (/(?!.*?compatible|.*?webkit)^mozilla|opera/i.test(navigator.userAgent)){ // Feeling dirty yet? document.addEventListener("DOMContentLoaded", f, false); }else...
CommandShift3
“CommandShift3 is like Hot or Not. Except, instead of clicking on hot babes, you click on hot websites.” A very straightforward concept and one that has definitely caught on with a bunch of people. One of the neat things they've done that I like, is the video you see when you submit your site. They've conveniently compiled a list of all the videos for your perusal. Ben Brown and Taylo...
How I built an effective blog comment spam blocker
Mention comment spam and most people, in particular those crazy WordPress users, mention Akismet. Great tool and I have nothing against it but I wanted to build my own, avoiding the external call to the Akismet service. What has been interesting to see, is just how effective it is. Turns out, my spammers are quite obvious. As you might see, I don't use CAPTCHAs and I don't use JavaScript detectio...
Easier Static Pages for CakePHP 1.2
This page is out of date. Please read the update. Traditionally in a CakePHP application, to do static pages you have two options: Use the built-in Pages controller and either have all static pages reside in /pages/pagename or set up custom routes. Set up an empty action in a controller. I didn't like either of those options. With Nate Abele's help, I wrote up a custom error class th...
WDN08: Working with Ajax Frameworks
As I mentioned in my recap, I was a little under the weather but despite that, I was really pleased with my own presentation. Timing was pretty good, if a little rushed at the end, and I felt like there was plenty of good information included. Lots of people came up to me afterwards said they enjoyed it, which made me feel even better. (If you didn't like it, don't be shy to let me know...or post ...
Web Directions North 2008 Recap
Web Directions North has wrapped up its second year and I think the lineup this year was even better than the last (and not because I was in it...I'm not that egotistical!). I was impressed by the presentations, especially Indi Young's Mental Models. For her session, I started somewhat disinterested but the more I listened, the more I became engaged. So much so, that now I want to buy her book o...
Password Protecting Admin Functions in CakePHP
I just wanted to document this for easy future reference but if you don't want to hook up a complex user adminstration with authorization components, you can simply specify that the admin path be password protected in either your .htaccess file or in your httpd.conf. Many thanks to Dragos. (This actually applies to password protecting any folder and not specific to CakePHP, I just happen to be u...
Review: Pro CSS and HTML Design Patterns
Michael Bowers takes an interesting approach with his book, Pro CSS and HTML Design Patterns, by having created what I'd consider an encyclopedia approach. A number of different layout and design patterns are presented with their HTML and CSS solutions. Because the book is very referential, it's unlikely that you'll pick it up and read it from beginning to end. It is, however, a great book to h...
Developing a jQuery Plugin
Sometimes we get it in our heads that a task is too complex that we just ignore doing it. That's been my mindset when thinking about developing a plugin for jQuery. I've always thought that some of the code I developed would make more sense as a plugin but I just didn't have time to figure it out. After finally pushing myself into learning about jQuery plugins, I was left saying, "That's it...
The Importance of Being HTML5
You'll have to excuse my reference to Oscar Wilde but I just learned something very interesting. But before I get into that, some background on HTML5. HTML5 reached Working Draft status at the W3C yesterday (although is dated today). Originally spec'd by the WHATWG, HTML5 is intended to replace HTML4, XHTML1 and DOM2 HTML specifications. There's plenty of new functionality being offered up, from ...
IE8 to include version targeting
I so called it. Back in December, I gave my predictions and on the list was version targeting using the meta element. I even said it'd be using http-equiv. Aaron Gustafson has an article on A List Apart entitled Beyond DOCTYPE that talks about a Internet Explorer's new approach to targeting rendering engines. Like a charset declaration, the X-UA-Compatible declaration can be declared using a me...
Contributing to InsideRIA
O'Reilly and Adobe have teamed up to develop a blog focused on Rich Internet Applications (RIA). It's aptly titled InsideRIA. RIA is a term that Macromedia came up with a few years ago to describe web-based applications with the power and features of a desktop application. We've certainly seen RIAs become very popular over the last few years and technologies like Adobe AIR continue to blur the l...
Microsoft's XMLHttpRequest ActiveX Objects
This is an excerpt from my book, Accelerated DOM Scripting available at Amazon and other fine retailers. Although it's only a small section of the book, it's one of my favourite pieces because it had always been a mystery to me. If you’ve scoured through any number of Ajax solutions, you might have noticed different XMLHttpRequest objects being referred to. Microsoft’s XML implemen...
GridIron Flow
GridIron Software is a local Ottawa company who's coming out with a pretty cool product. It's called Flow and it's essentially an application to track your workflow. I had a chance a couple months ago to get a sneak peek at what they were working on and I'm pretty sure I had a smile on my face the entire time they were showing me what it can do. It's impressive how unobtrusive it is. There's no ne...
Refresh Ottawa, finally
After announcing it 10 months ago, Derek Featherstone and I will finally kick off the first Refresh Ottawa. If you're unfamiliar with Refresh, it's "a community of designers and developers working to refresh the creative, technical, and professional culture of New Media endeavors in the Ottawa region." We'll be holding our inaugural event downstairs at the Clock Tower Brew Pub on Bank...
Evaluating the past year
Another new year is here and is customary by many at this time of year, I'm evaluating how things have changed from a year ago, what worked and what didn't. Personal Personally speaking, this turned out to be a fantastic year. My wife and I got to adopt again, this time from Kansas. We now have two healthy and happy boys and we couldn't be happier about it. I'd like to think we're done having ki...
TIPS, TRICKS & BOOKMARKS on WEB DEVELOPMENT
I'm Jonathan Snook and I write about web design and development. I 