JavaScript Design Patterns by Addy Osmani
“Design patterns can be traced back to the early work of a civil engineer named Christopher Alexander. He would often write publications about his experience in solving design issues and how they related to buildings and towns. One day, it occurred to Alexander that when used time and time again, certain design constructs lead to a desired optimal effect.” –via Essential JavaScript Design Patterns For Beginners.
seyDoggy.com Gets a New Look
[
](http://seydoggy.com/ “seyDoggy systems . theme . code . design”)It’s finally done… I think. After spending more then a year at it, I think I have finally consolidated all of the web properties and blogs that I’ve wanted to for quite some time.
Probably the most notable changes are to [seyDoggy.com](http://seydoggy.com/ “seyDoggy systems . theme . code . design”). It’s no longer a portfolio site for past work since we don’t actually do client work anymore. It’s now just a calling card, if you will, or a hub I guess.
Also, the seyDoggy blog has been moved over to this blog. All of the original posts have been maintained so all the posts on RapidWeaver tips, AppleScripting, browser hacking, etc, are still available.
And last but not least, I’ve brought the [Merrifield Photography](http://merrifield-photography.com/ “Merrifield Photography”) blog over here as well. There are some pretty old stuff in there that I didn’t want to let die.
So there we are… my web-life is a little tidier, a little cleaner, a lot simpler. Now I just need to give the layout here a little tender loving care.
[tags]seydoggy,web,design,blog[/tags]
3 Quick AppleScripts to Save You Time
AppleScript is an automation solution that allows you to handle tasks quickly and efficiently without a lot of thought or effort on your part. This can be repetitive *things* you may want to take care of in short order or this might simply be *stuff* you want to do from anywhere regardless of what app you are in. Whatever the case, AppleScript can usually be employed for such tasks.
I enjoy solving process streamlining needs on my own with AppleScript and I am not one to keep good things to myself so here are just 3 little scripts I would like to share. You might have a use for them and they might just make your day easier.
## Toggle apps on or off ##
If you’re like me you might have one or two apps that do all that you need them to just by turning them on or off. So why leave them running in the background all the time? Two apps that I can think of in my list are [Nocturne][btn] and [Isolator][wmi]. I use them from time to time but not often enough to keep them in the menu bar permanently. Activating their features requires me to select their icon from the menu bar and selecting the option that toggles their behavior on or off. Or if you just leave their behavior toggled on then quit and restart the app, it has the exact same effect. Quitting the app turns the feature off (obviously) and starting the app turns the feature on…
Sounds like a job for AppleScript:
– replace “YourAppName” with your app
set yourApp to “YourAppName”
– leave the rest to us
if appIsRunning(yourApp) then
tell application yourApp to quit
else
tell application yourApp to activate
end if
on appIsRunning(appName)
tell application “System Events” to ¬
(name of processes) contains appName
end appIsRunning
By changing the name of “YourAppName” to the app you want to toggle on or off and then setting yourself a keyboard shortcut for the script, you can then activate the app and it’s only desired feature with a stroke of the keys.
### Download ###
Get your fresh copy of “[On-Off_AppToggle][ooat]” from CodeCollector.net
[btn]: http://code.google.com/p/blacktree-nocturne/ “blacktree-nocturne – Project Hosting on Google Code”
[wmi]: http://willmore.eu/software/isolator/ “Isolator”
[ooat]: http://www.codecollector.net/view/CD71C6B3-F52E-4040-AF95-2BE9F9668827 “Code Collector – View Snippet”
## Simple Web Search ##
Do you remember when a query to a search engine was a simple string that looked like `http://www.google.com/search?q=this%20or%20that`? Now-a-days search strings tend to include all sorts of information like the source of the search, encoding, language, client, OS… and ends up like and unreadable bunch of garbage like this `http://www.google.com/search?source=qsb-mac&oe=UTF-8&hl=en&q=this%20or%20that&client=qsb-mac&ie=UTF-8`. I for one don’t need every one of my queries to be counted so I wrote a simple script to pose that basic string once again. For your own purposes you can change the search engine and browser to suit your needs.
set userQuery to text returned of ¬
(display dialog “Google search:” ¬
default answer “” buttons {“Cancel”, “OK”} ¬
default button 2)
set httpArray to ¬
{“http://”, “www.”, “.com”, “.ca”, “.net”, “.org”, “.info”, “.us”}
set httpBool to false
repeat with httpAny in httpArray
if userQuery contains httpAny then
set httpBool to true
exit repeat
end if
end repeat
if httpBool then
tell application “Safari” to open location userQuery
else
tell application “Safari” to open location ¬
“http://www.google.com/search?q=” & userQuery
end if
tell application “Safari” to activate
When you launch this script you just enter your search query and press return.
### Edits ###
**r4 10-29-09 09:43** – It would be handy if you could use this script to open known urls to, so I’ve edited the script to do so in a basic manner. It’s not perfect yet as I need to write some regular expressions to really detect proper TLDs and such. But it will do for now. So, perform a query and Safari will open that query in as a Google search. Or, enter a URL and Safari will directly open that website.
### Download ###
Get your fresh copy of “[Google_Search][gs]” from CodeCollector.net
[gs]: http://www.codecollector.net/view/969C4A3D-C59F-400C-94D5-A26B4DE2DB20 “Code Collector – View Snippet”
## Launch apps by task ##
My days, weeks and even months can often be broken into many different tasks. I wear a lot of hats as a small business owner. One day I might be providing support for the RapidWeaver themes I make and the next day I will be knee deep in code making the latest greatest product. One minute I am social networking and the next I am designing something shiny.
Each of these tasks involves a unique set of apps to be open which can make changing gears a time consuming — if not confusing — process.
To address this I wrote a script that launches (or quits) a particular set of apps based on the task I need to do. For example:
* If I am busy with support, I want to launch:
* Mailplane
* Safari
* TextMate
* If I am networking I will use:
* Safari
* Adium
* LimeChat
* Mailplane
* TweetDeck
* If I am designing I want:
* DigitalColor Meter
* LittleSnapper
* Photoshop
* Or if I am developing a new theme:
* RapidWeaver
* Safari
* TextMate
* MAMP
And so on… As mentioned, I can use the script to either launch these sets of apps or quit them and I can do so with a single keyboard-shortcut. This saves a lot of time and helps keep the clutter to a minimum. You can fill in your own task sets and your own apps to suit.
– define the sorts of tasks you wish to activate multiple apps for
set taskArray to {“Surfing”, “Media”, “Designing”}
set taskName to ¬
{choose from list taskArray with prompt ¬
“Pick your process:”} ¬
as string
set toDoArray to {“Launch apps”, “Quit apps”}
set toDoResult to ¬
{choose from list toDoArray with prompt ¬
“Would you like to launch or quit these applications?”} ¬
as string
if taskName is equal to “Surfing” then
– define the apps you would like to open/close
set appArray to ¬
{“Safari”, “LittleSnapper”, “Mail”}
runTrue(appArray,toDoResult)
else if taskName is “Media” then
– define the apps you would like to open/close
set appArray to ¬
{“iTunes”, “Last.fm”, “DVD Player”}
runTrue(appArray,toDoResult)
else if taskName is “Designing” then
– define the apps you would like to open/close
set appArray to ¬
{“Adobe Photoshop CS3″, “DigitalColor Meter”, “LittleSnapper”}
runTrue(appArray,toDoResult)
else
display dialog ¬
“Something is wrong! Please check your array values.”
end if
– runTrue function
on runTrue(appArray,toDoResult)
repeat with appName in appArray
if toDoResult is “Launch apps” then
tell application appName to activate
else if toDoResult is “Quit apps” then
tell application appName to quit
else
display dialog “Houston, we have a problem!”
end if
end repeat
end runTrue
### Download ###
Get your fresh copy of “[LaunchTaskApps][lta]” from CodeCollector.net
[lta]: http://www.codecollector.net/view/7882/LaunchTaskApps “Code Collector – View Snippet”
## Go play ##
I hope you can make use of these scripts in your own daily workflow. I know I would be lost without them. Do have any scripts of your own you want to share? Feel free to comment and let me know.
[tags]applescript,app toggle,launch task apps, google search[/tags]
Scripting LittleSnapper… Slight Return
Less then a week after writing [*this*][sls] AppleScript — which launches [LittleSnapper][ls] and snaps the website currently in view in Safari — the boys at Realmac Software come out with [*this bookmarklet*][bml] that does exactly the same thing, only with a mouse-click instead of a hot-key combination… unless you’re me.
I loath the mouse and if I can avoid ever using it I will go to great lengths to make sure my hands stay firmly atop my keyboard. Perhaps you’re the same way, so for kicks I turned Realmac Software’s bookmarklet into an executable AppleScript that I can assign a hot-key to.
## What’s a bookmarklet? ##
First you have to understand what a bookmarklet does. A bookmarklet is nothing more then a bit of javascript (in many cases) that when clicked performs a basic task. It’s like a mini application… like an applet… in fact, it *is* an applet, hence the name “bookmark”-”let”. In the case of the LittleSnapper bookmarklet, clicking the bookmark (or URL) tells your browser (in javascript) to change the URL in the address bar from `http://example.com` to `littlesnapper://snap/http://example.com`. You’re just adding `littlesnapper://snap/` to the front of any URL! You can actually do this yourself, provided you have LittleSnapper. Try going your favorite website, click the address field, type `littlesnapper://snap/` in front of the URL and hit return… ta-da!
## Make one-click easier? ##
So let’s go back to actually using the bookmarklet… you have to click on it and that’s no fun. It’s time to turn it into AppleScript!
The bookmarklet, if you look at it in your bookmarks folder, looks like this:
javascript:location.href=’littlesnapper://snap/’+location.href;
The quick and dirty way to turn this into an executable AppleScript would be to use Safari’s built in `do JavaScript` method, like this:
tell application “Safari”
do JavaScript “location.href=’littlesnapper://snap/’\n
+location.href;” in document 1
end tell
But that would leave you pretty much locked into using the script with Safari when using hot-keys, while *clicking* the bookmarklet will work in any browser. So `do JavaScript` is too limiting.
Since we only need to pass in the string `littlesnapper://snap/` before the URL, why not just write a method that does that:
tell application “Safari”
set currentURL to URL of front document
open location “littlesnapper://snap/” & currentURL
end tell
This works, but if you want to apply it to all other browsers — Opera, Camino, Firefox, etc — you have a lot of work ahead of you as you discover the various degrees of scriptability each app has. To grab the URL in some of these apps you have to jump through hoops:
* in safari it’s `URL of front document`
* for Firefox `«class curl» of window 1` will sometimes work
* Camino is `URL of browser window 1` and so on…
Some apps need to use System Events to access them, others don’t. And then try and tell each one that you want to `open location`, again with or without System Events… it turns into argument soup very quickly.
A good rule of thumb when trying to script anything is to simplify the number of tasks you assign to any given process. In this case, for each browser I am trying to do two things; get the current URL and then open a new, modified URL.
## LittleSnapper is a browser too! ##
Then it got me thinking — LittleSnapper uses webkit as it’s rendering engine and therefor it should share a lot of the same scripting dictionary that Safari uses. So I thought I would test something out; I attempted to `open location “littlesnapper://snap…` with LittleSnapper itself:
set currentURL to “http://www.google.ca”
tell application “LittleSnapper”
open location “littlesnapper://snap/” & currentURL
end tell
Viola! Without opening a “browser”, I just snapped a web shot of Google.ca, right in LittleSnapper. This now cuts the workload of running unique scripts for each browser in half since I can now tell LittleSnapper to open the URL… once I have it.
## Scripting a common thread ##
So now to get the URL from the browser — any browser — without making a code spaghetti like this mess:
if application “Firefox”is running then
tell application “Firefox”
set currentURL to «class curl» of window 1
end tell
else if application “Safari”is running then
tell application “Safari”
set currentURL to URL of front document
end tell
else if application “Opera”is running then
tell application “Opera”
set props to GetWindowInfo of window 1
set currentURL to item 1 of props
end tell
else if application “Camino”is running then
tell application “Camino”
set currentURL to URL of window 1
end tell
end if
There has to be a better way… and there is. Here comes System Events to the rescue with a couple of keystroke executions like so:
tell application “System Events”
– highlight address field with ⌘L
keystroke “l” using {command down}
– copy to clipboard with ⌘C
keystroke “c” using {command down}
end tell
This will allow us to access any browser the same way, with global hot-keys as executed by AppleScript.
Now we just need to talk to those browsers to find out which one is in use. We can do this with an if statement, like this:
if application “Safari” is running then
tell application “System Events”
keystroke “l” using {command down}
keystroke “c” using {command down}
end tell
end if
But with four or more browsers this would be a bit much.
## The full deal ##
So let’s make an array out of our favorite browsers, run that array through a loop, mash in our System Event keystrokes, and finish it all off with a variable passed into LittleSnapper and this is what we get:
– let’s define our array
set appArray to {“Safari”, “Firefox”, “Opera”, “Camino”}
– then run that array through a loop
repeat with appName in appArray
if application appName is running then
tell application appName to activate
tell application “System Events”
keystroke “l” using {command down}
keystroke “c” using {command down}
end tell
delay 0.5
– make a variable from the clipboard
set currentURL to the clipboard
end if
end repeat
– pass that variable in to LittleSnapper
tell application “LittleSnapper”
activate
open location “littlesnapper://snap/” & currentURL
end tell
Is this overkill to get a hot-key combo that does what a bookmarklet does in one click? Depends on who you ask I guess. I think it’s a pretty good solution in fact. Now instead of copying a bookmarklet to the toolbar of every browser I use, I have a script that I can assign a global hot-key to (via [FastScripts][fs] or some such tool) and use it across any browser I set in my array.
Yes, I am *that* much of a geek.
## Download ##
[Get it fresh from CodeCollector.net][ccdn2]
[tags]applescript,littlesnapper,realmac,software,safari,firefox,opera,camino,browser,bookmarklet,hot-key[/tags]
[sls]: http://www.seydoggy.com/2009/09/30/scripting-littlesnapper/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”
[ls]: http://www.realmacsoftware.com/littlesnapper/ “LittleSnapper – Screenshot and Website Capture for Mac OS X Leopard”
[bml]: http://www.realmacsoftware.com/blog/index_files/littlesnapper-bookmarklet.php “Realmac Software Blog – RapidWeaver and LittleSnapper News”
[fs]: http://www.red-sweater.com/fastscripts/ “FastScripts”
[ccdn2]: http://www.codecollector.net/view/E8CE65D6-67B3-45DF-A3E5-745F9616F1B3 “Download from CodeCollector.net”
iMac G3 Web Server – Part 1
Recently an old iMac G3 of mine made it back home after a lengthy stint at the in-laws (introducing them to computers a few years back). My initial thoughts were to take her to the great recycling depot in the sky, but then I got to thinking. “What could a web designer/developer use a seriously underpowered G3 chip be useful for?”
And you all chant in unison… a web server!
So this is just a document of the stuff I went through to get from point **a** to point **b**. It’s not so much instructional, but if you wish to follow along, by all means, have at it.
## Serve with Mac OS X… maybe not. ##
So I got to fiddling around with this old bubble of a machine and thought initially that I would just try to use the services provided in the Mac OS (the iMac was running 10.4 at the time). This proved to be so painfully slow that I decided to dig up an old copy of OS X 10.2 (it was called Jaguar back then, in case you forgot) and install it. While this was a tad faster, those services that *were* installed were sorely out of date.
Since it was clear that I was going to have to get into the command line to install MySQL and update and configure the PHP that was there, and since the the whole desktop environment was going to be redundant by the time this thing goes into service… why use the Mac OS at all?
## When in Freeville, do as [Linus](http://en.wikipedia.org/wiki/Linus_Torvalds “Linus Torvalds – Wikipedia, the free encyclopedia”) does ##
That’s when I decided that [Ubuntu Server](http://www.ubuntu.com/products/whatIsubuntu/serveredition “Ubuntu Server Edition | Ubuntu”) was the way to go. There are a ton of worthy Linux distro’s out there but I decided to go with Ubuntu because their PowerPC ports are pretty much up to date with with the core development. I could have used Debian but trying to track down the latest stable PowerPC build was like trying to finding a hot date at a Star Trek convention.
I just so happened to have an Ubuntu Server 8.1 iso laying around, so just as a proof of concept, before tying up anymore of Ubuntu’s precious bandwidth, I tried the install out to be sure that all would work on the old PPC box. And it did.
## Fast forward to the Jaunty Jackalope ##
So I got my hands on the latest stable build of Ubuntu Server for PowerPC, [Ubuntu 9.04](http://www.ubuntu.com/ “Ubuntu Home Page | Ubuntu”) (which can be [downloaded here](http://cdimage.ubuntu.com/ports/releases/9.04/release/ “Ubuntu 9.04 (Jaunty Jackalope)”)) and got to work.
The install was pretty straight forward, I just followed the steps as each prompt appeared. All in all it took about an hour on the old beast. One helpful hint: it seems the install will fail repeatedly if you don’t have the machine connected to the internet. I just ended up plugging in to the spare ethernet port of my Mac Pro, but I am assuming any connection would do.
## I have a package for you ##
I wasn’t really sure what packages I was going to need in the end, so I installed most, if not all of them. But at the very least I knew I was going to need a LAMP stack *, ssh and possibly DNS (though unlikely that I would bother to set it up). If you plan to make your own server you might as well take the time to research the options since installing and configuring them at install will save you the hassle later.
## Bong! ##
Once the install was done I was prompted to reboot. So I did. If your a total nerd like me you’ll get excited to hear that familiar Mac “Bong!” yet moments later get nothing but a black screen, white text and a login prompt… I can almost hear echos of [Joshua (WOPR)](http://en.wikipedia.org/wiki/WOPR “WOPR – Wikipedia, the free encyclopedia”) in his computerized voice asking me, “Would you like to play a game?”
With everything done right in the install I was prompted with**:
`ubuntu login: `
I entered my username, in my case “adam”, and hit return:
`ubuntu login: adam`
Entered my password, •••••••••••, and hit return:
`password: `
Up pops a bunch of info like last login, software details, load and memory usage etc… and the all important command prompt:
`adam@ubuntu:~$ `
## The _root_ of the solution ##
Here is where I am about to do a no-no… if I ever planned to run this machine in the DMZ (beyond the safety of my internal network and out side my router) I would NEVER do this. However, I want to have pure, unadulterated, God-like power over this machine and I do not want to sudo (“superuser do”) it every step of the way.
Those of you familiar with Ubuntu know that they disable root login by default. But this cripples what various apps can do in various directories over ssh — namely ExpanDrive, MacFusion, various FTP clients and from what I can tell some TextMate bundles (though I probably have them configured wrong) — and I don’t want to always have my head stuck in the terminal.
So, to enable root login I had to set a root password (since the install never prompted me for a root password). This is done with:
`adam@ubuntu:~$ sudo passwd root`
I then entered my own password for adam@ubuntu, •••••••••••:
`[sudo] password for adam: `
And the the new root password twice:
`Enter new UNIX password: `
`Retype new UNIX password: `
And success:
`passwd: password updated successfully`
Now I am able to switch to root:
`adam@ubuntu:~$ sudo su root`
And after entering the password I just created I am now presented with:
`root@ubuntu:~# `
Now with that out of the way I can proceed with causing some real damage…
## More to come ##
In following posts I will talk about my ssh setup, configuring apache and working with my in my new server environment.
## Notes: ##
- * LAMP stands for Linux-Apache-MySQL-PHP/Perl/Python and is a generic acronym for a stack of applications that provide the kind of web services need to run web applications and dynamic web content.
- ** I set my server name up to the default “ubuntu”. Yours may read different.
[tags]server,linux,ubuntu,imac,g3,terminal,root[/tags]
MacFusion – Snow Leopard Fix
I’ve been playing around with ssh while I configure my Ubuntu Server (more details about that soon) and figured I would get my head out of the terminal for a bit. So I downloaded [ExpanDrive](http://www.expandrive.com/ “ExpanDrive for Windows: Ridiculously simple SFTP drive access on your PC”) again (used it a [while back](http://www.seydoggy.com/2008/03/10/expandrive-expands-my-horizons/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”)) only to discover that it’s since been upgraded… a paid upgrade… and my old serial no longer applies. I wasn’t enamoured with “mounting” remote servers as hfs volumes enough to pay for this app a second time so I decide to move on to the free alternative; [MacFUSE](http://code.google.com/p/macfuse/ “macfuse – Project Hosting on Google Code”) + [MacFusion](http://www.macfusionapp.org/ “Macfusion: The world in your Finder”).
The only hiccup I encountered was that MacFusion didn’t seem all that happy about launching an ssh connection under Mac OS X 10.6 Snow Leopard. I could connect with no issues in terminal but not in MacFusion. A quick visit to the [MacFusion Google Group](http://groups.google.com/group/macfusion-devel “MacFusion-devel | Google Groups”) revealed [this temporary solution](http://rackerhacker.com/2009/08/28/fix-macfusion-on-snow-leopard/ “Fix MacFusion on Snow Leopard | Racker Hacker”), which is basically:
1. quite MacFusion
2. set up MacFUSE to get betas (under System Preferences)
3. and remove this file in Terminal:
rm /Applications/Macfusion.app/Contents/PlugIns/sshfs.mfplugin/Contents/Resources/sshnodelay.so
To get the nitty-gritty, please read the full post at [Racker Hacker](http://rackerhacker.com/2009/08/28/fix-macfusion-on-snow-leopard/ “Fix MacFusion on Snow Leopard | Racker Hacker”).
[tags]snow leopard,mac osx,terminal,ssh,server,macfuse,macfusion[/tags]
What is success?
At the last [Waterloo Region Web Design & Technology Group][1] I attended I had the opportunity to talk to a lot of people who were waiting patiently to ask me the same thing, “How did you start your own company?”
I don’t know whether I started seyDoggy in any traditional sense or not, but it seems my answers didn’t completely satisfy most people who asked. The process seemed too safe perhaps, or too long. I’m not really sure. But the common thread I could see each time I was asked, which seemed to be what they were really getting at was, “How long did it take you to become successful?”
So for weeks now I have been thinking about both questions and how, or if they are even related. I’ve decided the two do not belong on the same line of sight. Since I am no authority on the right or wrong way to start a business (I’ve really only started one and it seems I did it right), then I will address the other question here, “How long did it take you to become successful?”
First, let’s define success as *the accomplishment of an aim or purpose*. I think that’s where many young people are getting it wrong today. They think *success* is getting rich. If that is your aim then I suppose getting rich would accomplish that but that’s not what success is to me.
For me, my professional successes as they pertain to this company, have come in stages. For starters, I wanted to *start* a serious company that would some day be my sole source of income. I wanted to be able to make as much, if not more then I was at the day job. I called it my *5 year plan*.
That was in the summer of 2005. By September of 2005, seyDoggy was a registered company and by November of 2006 I was no longer on anyones payroll. The *5 year plan* was truncated to a little over 1 year… that was a success to me.
But I had more aims that evolved as the company grew. I wanted to make a living doing what *I* wanted to do, not what *clients* wanted me to do. I wanted to have a product based company, not a service based company. This was my *next 5 year plan*. Within the next two years, however, I was able to realize that goal as well. I was able to limit or eliminate all client based contracts, consulting contracts and service contracts and focus solely on the RapidWeaver theme distribution devision of seyDoggy. Again, for me, that was another success.
And how about the bigger picture? That all encompassing notion of success? That question, “Are you successful?”
That depends on what *you* consider successful I suppose. I am able to fulfill the needs of the family, pay the mortgage and the bills, pay my taxes, pay my contractors/employees, entertain and buy the little extras. We, as a family, don’t want for anything. But those are just the financial gains, a measure of which I have little use for. What’s more important to me, and perhaps what you could aim for as a measure of your own success, are the financial freedoms that I have earned with my company.
Here are my top 10 measures of my own success:
1. I attend my daughters school assemblies in the middle of the afternoon.
2. I take my children to their doctors appointments.
3. I take the Fridays off that my wife doesn’t work.
4. I take a few weeks worth of holidays and still make money.
5. I go for an hour walk every morning and I am never late for work.
6. I can take lunch at 10 am, 12 pm or 2 pm (or take lunch at 10 am *and* 12 pm *and* 2 pm).
7. I can take a sick day and not call in.
8. I stay home with the kids when they get sick.
9. I can take 20 minutes out of the day to play a video game and call it professional development.
10. I haven’t worked a weekend in over 3 years.
But do I stop here? Absolutely not. I want to be able to travel more, work less and hire more people. I keep making new goals, new levels of success to achieve and I have no intention of ever stopping. And maybe that is how I should have answered the first question, “How did you start your own company?”
I kept redefining my own measure of success. I kept setting higher goals and greater aims. I kept myself honest and my company genuine. I had a focal point for the company and at the end of the day, if I was happy with what I was doing then I was successful.
How about you? What do you consider to be success?
[tags]business, company, success, start-up[/tags]
[1]: http://webdesign.meetup.com/472/
Flickr Quietly Backpedals out of Their PR Blunder
When is an apology *not* an apology? When it comes in the form of a sheepish form letter and omits any explanation as to what went wrong. Late last week flickr/Yahoo! and Rogers seemingly dissolved a long standing relationship that gave Rogers Internet subscribers a free flickr Pro account for as long as they remained Rogers subscribers. Why this agreement is no more is a little unclear as the only source of the news came from [flickr.com](http://www.flickr.com/ “Welcome to Flickr – Photo Sharing”) when I logged into my account and was presented with an AJAXIAN notification bubble informing me that my free Pro account would cease to be free and/or Pro by July 1, 2009. This information was additionally corroborated by my account FAQ page to which this notification directed me.
I have to admit I am fond of flickr and enjoy the service so I opted to renew then and there for another 2 years of service. Upon verbalizing my dismay to these recent events on [Twitter](http://twitter.com/seyDoggy “Twitter: What are you doing?”) I quickly learned that no all Rogers subscribers were reporting the same experience. Some were being told their accounts would expire on November 1st **2011**, nearly a full 2 years and 4 months ***after*** the date which was originally given to me.
So I went back to check my account, and there is was, the same notification bubble now displaying November 2011, ***not*** July 2009! Oh the FAQ still said 2009, but the notice now said 2011. So armed with these discrepancies (and the screen shots to prove them) I sent flickr/Yahoo! a scathing support query:
> This morning I get a notice from you (not Rogers) that my Flickr pro account that I enjoy as a Rogers customer will [no] longer be pro after July 1, 2009. This was confirmed but not elaborated on in the FAQ. After feeling I had no other choice I paid for the renewal. Shortly thereafter, and after hearing contradictory reports on the internet, I noticed the new warning that now says November 1, 2011. However the FAQ still says July 1, 2009.
> This is a fairly sizable blunder on your part and I think it was handled very unprofessionally. As a company who is one of the corner stones on the internet I would expect that you of all companies would know not to publish anything to the net before making sure you’ve got it all right down to the letter.
> I want my money back (or my in progress transaction canceled) if indeed my pro account is still valid until November 1, 2011. I expect a response of confirmation of action.
> Thank you.
> Adam Merrifield
To which I got the ineffectual and less then sympathetic response (pay close attention to the fourth paragraph about FAQ and discrepancies):
> Hello,
> Thank you for contacting Yahoo! Billing.
> I understand that you are contacting us to request a refund for your Flickr Pro account that you recently purchased.
> Any changes to your Flickr account pertaining to your Yahoo! Hi-Speed service package with Rogers are set to take place due to changes made by Rogers. Please contact Rogers regarding further details of this change.
> As per the FAQ found on Flickr.com, the Flickr Pro account included with your Rogers Yahoo! Hi-Speed service will change to a free Flickr account on July 1, 2009. There is not other information from Yahoo! that would support a November 1, [2011] date. I understand that this situation may be frustrating and apologize for the inconvenience.
> Unfortunately, as stated on the order page there are no refunds on pro accounts. If an account has been closed before the pro term is up it cannot be transferred to another account and the unused portion is non-refundable.
> Thank you again for contacting Yahoo! Billing. If we can provide you with any further information, please reply to this email.
> Regards,
> Unnamed Female Support Personnel
> Yahoo! Billing
This just infuriated me! I proceeded to make a spectacle of them and myself by posting about there response [in as many places as I could](http://www.seydoggy.com/2009/05/19/complete-flickr-fail/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”). I sent them a short and to the point letter and supporting screen shot:
> Uhhh… you work there right? And you can’t see what EVERYONE ELSE ON THE INTERNET SEES? See attached and don’t insult the intelligence of your users. Thanks.
> Adam Merrifield

I guess this sent the message in the tone required to get some action on the matter for today I got what I assume to be the last and finalizing letter in response to this whole fiasco:
> Hello Adam,
> Thank you for contacting Yahoo! Billing.
> I understand you have contacted us regarding your Flickr Pro service on your Yahoo! ID: [email protected]
> After reviewing your account we have issued you a full refund for your Flickr order from 05/15/2009 for $47.99. Please allow 7 – 10 business days for the credit to post to your credit card.
> To view your billing history, please visit:
> https://billing.yahoo.com/
> and sign in to your account. Once you’ve signed in, you will be able to view all billing details regarding this Yahoo! account.
> We apologize for any inconvenience this issue has caused you.
> Thank you again for contacting Yahoo! Billing. If we can provide you with any further information, please reply to this email.
> Regards,
> Unnamed Male Support Personnel
> Yahoo! Customer Care
What is the moral of the story? Don’t take it lying down! $50 is still $50 and I shouldn’t have to pay it because of a Yahoo! PR blunder and neither should you. Did you get burned by this? Does anyone know what the hell is going on yet? The notification still says November 2011 while the FAQ insists it’s July 2009. Will my account go dead in July? Who knows? We’ll fight that battle when the time comes.
[tags]flickr, Yahoo!, Rogers, internet[/tags]
The Little Know Clipboard App That Can
One thing the Mac OS has repeatedly failed at is a native clip board, one where more then the most recent item is available to you. This has been an ongoing concern of mine for quite some time and I have always been on the lookout for a solution… a good solution.
Back in the spring of 2007 I wrote about [iClip as one possible solution](http://www.seydoggy.com/2007/03/28/copy-and-paste-and-copy-and-paste/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”) and in fact my dependency on it around that time became so great that I was using it to store passwords, code snippets, oft used text, etc… All was great until one day, the database became corrupted. Yes, iClip was complex enough that is was storing all my clipboard data, snippets and what not, in a database. _Eeeeek!_
My next _notable_ shift in clipboard management was QuickSilver, [for which](http://www.seydoggy.com/2008/02/01/web-search-with-quicksilver-the-definitive-how-to/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”) [I have](http://www.seydoggy.com/2008/01/30/quicksilver-as-a-file-launcher/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”) [written numerous](http://www.seydoggy.com/2007/12/03/convert-icons-revisited/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”) [articles](http://www.seydoggy.com/2007/03/30/quicksilverhttp/ “seyDoggy Web and Graphic Design – seyDoggy weblog – my thoughts on the web and the mac”). For everything that I used iClip for I was able to use QuickSilvers “Shelf” and “Clipboard History”. It was a brilliant setup and had them show/hide off the edge of the screen with a couple hot-keys. Then came the inevitable fall of QuickSilver. I can’t afford to keep monkeying around with sub-alpha builds of various branches so after my nearly three year dependency on QuickSilver I had to finally give it up.
The hole that was left was quickly filled with apps that I already use on a daily basis, like [Code Collector Pro](http://www.mcubedsw.com/software/codecollectorpro “M Cubed Software – Code Collector Pro”) which bore the brunt of my oft used text snippets and auto complete tasks. But I was still left without a good solution for clip board history. So off on a mad search I went, review countless apps that varied in complexity and price range, until I came upon a small, simple, unobtrusive app that does one thing; buffers your clipboard history. [Jumpcut](http://jumpcut.sourceforge.net/ “Jumpcut: Minimalist Clipboard Buffering for OS X”) is a simple, open source (and free) clip board history manager that allows you easy access to your clipboard history with a few simple key strokes.
Jumpcut allows you to set up the size of your buffer size (up to 99 clips), hot keys, bezel behaviour, app behaviour and that’s about it. It doesn’t get any simpler to use or set up. I have been using this little app heavily on a daily basis since February and never once has it failed me. No hang ups, it’s never lost my history, it’s never crashed or caused anything else to crash. It’s lightweight, responsive and just an overall pleasure to use.
_This_ is the app that ought to be a part of Mac OS X.
[tags]mac,osx,clip board,history,paste,copy,app[/tags]
A better way to CMS with RapidWeaver
There are some tools that come along and everyone just sighs, “How did we ever get along without this?”
Stacks from [YourHead Software](http://www.yourhead.com/ “YourHead Software”) is one of those tools that made RapidWeaver more complete then we ever knew it needed to be. What makes Stacks so amazing is that it *is* what ever it *needs* to be to *whoever* needs it. So far it’s been a power layout tool of endless shapes and sizes, an ExtraContent device, and RSS scraper, a Twitter badge, a media player… and now, thanks to Joe Workman, a CMS.
A Content Management System (CMS) allows clients to edit their content after their web design/development staff has published the site. So far there have been only a handful of attempts to bring CMS to the RapidWeaver platform; WebYep and PlusKit’s @gdoc(()) implementation. The former requires site licensing and the latter rely’s on Google ever changing Google Docs API.
Now there is a [CushyCMS](http://www.cushycms.com/ “Free and simple CMS » CushyCMS”)(free) implementation built into a Stacks Library item (or Stacks plugin) available from [Joe Workman](http://www.joeworkman.net/products/ “Joe Workman | CushyCMS Stacks Plug-in for Rapidweaver”). By simple dragging a CushyCMS stack onto your stacks page, anything you drop into that CushyCMS stack will be editable on the client side.
Brilliant!
[tags]CushyCMS, Stacks, YourHead Software, RapidWeaver[/tags]

