Aviary Multimedia Web Apps

May 1st, 2008

A.viary.com is the home of an ornithologically-themed flock of web apps designed in part as really cool Rich Internet Applications with stunning feature sets (for a Rich Internet Application), and in part as serious design tools.  I just got my beta invite, which gave me access to Pheonix, their image editor, and Peacock, a novel pattern generator capable of some amazing things.

They’ve got a whole host of similarly-named products planned, including a video editor (although there already exist some impressive offerings, such as Jumpcut and Eyespot), audio editing, and a few interesting specialty ones.

I’ve got 4 3 invites left, so if anyone wants to give it a shot (and I urge you to do so) leave a comment and I’ll send you one.

Fuel another post

A Primer on Javascript Objects - JSON vs. Functions

April 25th, 2008

Modularity is one of the fundamental principles of good programming, and it’s something that is too-often overlooked in Javascript.  The problem is twofold - one part is that most people approach writing Javascript without a plan, and one part is that many people don’t know that there are better ways of doing things.

Advantages of Objects

The advantages of using objects are fairly numerous, but there are two that stand out. The first is that your set of functions is probably not the only one around that uses function names like “init.” The object notation makes this a non-issue, since each object defines a namespace. Another advantage is that you don’t have global variables floating around, for much the same reason.

The second advantage is a logical one; in some cases, it makes more sense to have objects doing the work, and it’s certainly easier for somebody reading your code to figure out what “randomQuoteGenerator.init()” does, as opposed to just “init()”. In the following example, you’ll see some of this.

A Contrived Demonstration

I’m going to demonstrate two different ways of creating Javascript “objects.”  One is based on JSON, the JavaScript Object Notation, and the other based on Javascript’s first-class functions.  As a demonstration, we’ll write an object representing a div that shows random quotes.  The object we will be creating will be defined as follows:

- A class variable called _target, which is a reference to a target <div> on the page
- A method called “update,” which updates the div with a random quote
- A method called “showAll,” which updates the div to show all the quotes.
- A method called “init,” which initializes the class variable to the target div.

A demonstration can be found here.

Functions as Objects

The functional method goes as such:

var object2def = function(){
	 this._target = null;
	 this.init = function(id){
		 this._target = document.getElementById(id);
	}

	 this.update = function(){
		index = Math.floor(Math.random()*quotes.length);
		 this._target.innerHTML = quotes[index];
	}

	 this.showAll = function(){
		quotestr = "";
		for(i=0;i<quotes.length;i++){
			quotestr += "<p>"+quotes[i]+"</p>";
		}
		 this._target.innerHTML = quotestr;
	}
}

var object2 = new object2def;

If you were comparing this to the regular, procedural method, the first thing you would notice is the addition of “this.” Variables declared with “this” are only accessible as properties of their parent entity - in this case, the object2def class/function/variable (in Javascript, it’s all 3). The rest of it is pretty straightforward: read from a predefined list of quotes, and output what was specified above.

Notice that at the very end I make a new instance of the object. This isn’t strictly necessary, it’s just done to demonstrate the ability to create new objects. You could put 20 quote generators on the page and create randomQuoteMachines 1 through 20, and have them each control a different id. Also note that I could dispense with the init function and put the id variable call in the outer function, thereby creating a constructor of sorts. Then I could just say “var object2 = new object2def(’bar’)” to make an object that updates the div “bar”.

JSON Method

The JSON method goes like this:

var object1 = {
	_target : null,
	init : function(id){
		this._target = document.getElementById(id);
	},

	update : function(){
		// An integer between 0 and the length of quotes - 1
		index = Math.floor(Math.random()*quotes.length);
		this._target.innerHTML = quotes[index];
	},

	showAll : function(){
		quotestr = "";
		for(i=0; i < quotes.length; i++){
			quotestr += "<p>"+quotes[i]+"</p>";
		}
		this._target.innerHTML = quotestr;
	}
}

This functions in exactly the same way as the other one. However, creating instances of it is an entirely different story, in that you can’t really; at least not without using something like Classy JSON.

A few gotchas to note about the JSON version are the commas after function declarations (except that last one), and the use of colons between name-value pairs. However, I think you’ll agree that, overall, the JSON version is somewhat cleaner, if less flexible.

If I’m creating something I know will only be used in one context, I tend to lean towards JSON, because I do like the cleanliness. However, if I’m creating something which I want to function more like an object and less like just a namespace, I’ll switch to the other method. It’s up to you which one you use, but I do recommend using something like this, as opposed to having function init(){} floating around gumming up the works.

Fuel another post

Victoria, BC Freelancers: Where’s the Co-Working?

April 24th, 2008

I know there must be more people than I freelancing in this town; I’ve been competing with you in the SERPs for the last year now.

How many people would have some interest in a co-working arrangement?  Is anyone already sharing office space?  Is there any office space available?

If you’ve stumbled across this page, either from the coworking wiki or in a random Google search, take a second to comment on your interest - even if it’s just “maybe one day a week, maybe”.  I think it would be good to gauge the interest in such a venture.

Fuel another post

Tasksy - What I Think I Know About Running a Web App

April 23rd, 2008

Tasksy, my (and Folk Art’s) time-tracking and invoicing product, has been a project of mine for the last while.  It grew out of a simple application I wrote when Toggl lost its charm.  I did enjoy the one-click timing and task creation, but I never did like toggl’s reporting; it always seemed like a pain to wring out what hours were spent when on which project for which client.

So how do I hope to make a success of it?

A Personal Touch

First and foremost, keeping my eyes on the 1000 True Fans principle is a key part.  It’s better to serve 1000 people well, very well, than to serve 100,000 people half-assedly, and far more likely, too. A support and discussion forum is a key bit of this, as is prompt email communication and using social networking tools, such as Twitter and Facebook. It also helps that I myself am a user, as well as a developer.

Manning the Phones

In the job I’m about to leave, I work at a reasonably successful former startup (they’ve been around since the dot-com days).  I’m mainly a developer here, but I also get called upon to answer phones, and something I hear an awful lot, considering the circumstances, is how appreciated it is for people to have access to consistent phone support even for entirely web-based endeavours (hint: very). I feel it’s important for people to be able to access support between the hours of 9 and 5 at the very least.

Keeping it Simple

The less an application tries to do, the less it can do wrong, and the better its focus is.  It’s also easier on the end-user, especially if your navigation makes it clear enough that no, there’s no way to do that.  Finally, it makes it much easier to maintain, which is a big plus in this situation.

All I need to do now is promote it.  With that in mind, why don’t you sign up for the beta?

Oh, and if you enjoyed all that, then you really must read  37 Signals’ book.

Fuel another post

Tasksy Beta Launched - Timekeeping and Invoicing for Freelancers

April 22nd, 2008

If you’re interested in easy invoicing for your freelancing racket, try out the beta of Folk Art Creative’s new product, Tasksy.  We’ll try to let as many people in as the current server space will allow.

Give it a go!   It’s designed to be as easy is invoicing can reasonably be.

Fuel another post

Ubuntu ready for the average user?

April 21st, 2008

Computer World just ran an article asking this very question — and responding with an emphatic yea.  I am less convinced, although I am an avid user myself.

Also, just so everyone’s aware, I’m comparing Ubuntu to Windows directly. Where Macs are concerned, I advocate them for anyone who cares to use one and who can afford it — neither of which applies to me particularly, although I’m awfully tempted to get a Macbook on account of music production software running so much better on Macs.

Anyhow, there are many types of users who can benefit from installing Ubuntu:

The Clueless

Group number 1 is the basic-to-clueless computer-user. A child, your grandma, anyone that’s going to be floundering a little bit regardless of their OS. This comes with the caveat that you, or someone above this tier of computer literacy, install the system for them.

For someone brand new to it, Ubuntu may actually be easier than Windows. The graphical repository system and “Add Programs” menu, the latter of which is basically a dumbed-down version of the former, make it fairly easy to add and remove software. This is certainly easier than finding the right program online, downloading the .exe, and then going through the setup pages.

These are also the folks who are likely to click on a link to install FREE! new smileys, in which case they will enjoy the benefits of having some user/root separation, and not ending up bogged down with malware.

The Cheap

Let me start by saying that this is my group.  It’s not that I’m too cheap to buy Vista, it’s that I’m too cheap to to buy a computer that will run Vista happily.  I love the fact the Ubuntu runs on any machine made in the last 5 years or so.  Often, older is even better, since the drivers have already been written.  Switch to Xubuntu and you can go even further back.  After that you get into even more specialized small-distribution territory - a land where even I am not cash-poor enough to venture.

Oh yeah, and you might as well lump Grandma in here, too.  She’ll prefer having a computer that will be good for a decade without changing up the hardware.

The Nerdier-than-thou

Alright, this is sort of me too.  I’m an advanced computer user, but somehow I couldn’t consider myself such without learning Linux.  I’m happy to say it’s been a solid year, and I’ve emerged a convert.  Us too-computer-savvy nerd types, who can overcome the technical problems associated with switching, and think Beryl is totally sweet, are in clear Linux territory. Not much needs to be said of us.

Who SHOULDN’T use Linux

The vast majority of computer users, however, are the third type: the kind who have been using Windows for years without caring what’s going under the hood, and are happy paying Norton to keep their computer safe, and Valve to provide them with games. There’s no reason for my dad, for instance, to start using Linux, except possibly so I can set the root password to something he doesn’t know so he won’t call me up to help him fix the wireless internet because he suddenly got on some weird security kick and installed a bunch of software that proceeded to mess everything up.

Maybe “shouldn’t” is the wrong word.  “Won’t” might be better.  If Windows is working perfectly well thank-you-very-much, they’ll be hard to convince, especially when you tell them that, no, Word won’t run on Ubuntu.  OpenOffice.org will, and indeed has a lot going for it, but  you might as well save your protestations, because it’s just not the same.

ANYHOW

I love Ubuntu. I use it at work, with Beryl and all those delights, and I make my Vista-using boss jealous. I’m so used to GIMP and Inkscape that I can’t even use Photoshop or Illustrator. I enjoy having the freedom to install whatever package I want without thinking about it, or to open a command-line to copy a bunch of files because it’s faster, or to watch my windows burn down when I close them. But for most of the populous, switching just isn’t worth it. The solution is to get Ubuntu for your kids and grandma, so that in ten or twenty years you’ll have a bunch of Linux users for whom switching to Windows just isn’t worth the effort.

Fuel another post

What Happened In Peidmont? Viral Marketing Killed Everyone.

April 19th, 2008

What happened in Piedmont?  It’s a viral marketing campaign set up by A&E to promote their remake of “The Andromeda Strain.”  There, I just saved you 5 minutes of browsing.


I’m getting sick of these stupid viral campaigns.  I appreciate the effort, but I find it somewhat patronizing, and more than a little irritating.

Come to think of it, so is regular advertising.  So, carry on, I guess.  I’ll just get back on the internet, where the advertising is more easily ignored.

Oh yes, and I am well aware that it’s spelled “Piedmont”.  I misspelled it in an attempt to save the percentage of people who will certainly make the mistake while googling.

Fuel another post

Jangomail’s Reverse Spam

April 16th, 2008

So I signed up for Eyespot the other day, just to try it out. Eyespot is an online video editor, and it’s really spiffy (although I like Jumpcut a bit more). But, online video editing is not what this post is about; rather, this is about how a legitimate email newsletter from Eyespot, in an ironic twist, managed to disguise itself as spam so well that it took a bit of detective work indeed to discover that it wasn’t so.

Pretty much the entire message body is available at http://shootmixshare.blogspot.com/2008/04/build-your-own-site-w-eyespot.html, which is a decent warning sign in itself. There were a few noteworthy differences, however.

Bizarro Spam

In a world where hot black snow falls up, spam would look like the email I recieved from eyespot; completely legitimate info with what seems like deliberate touches to make it look like spam, to me and to gmail alike. First off, all the links were rewritten. Here’s an example:

http://x.jngo1.net/y.z?l=http%3A%2F%2Feyespot.com%2Fmixables%2FThieveryCorporation&e=1055&j=103500431

The domain of that link, x.jngo1.net, is a huge red flag. At this point, I was fairly convinced it was some sort of phishing attempt, and I was gearing up to write an angry email to eyespot for handing over my email address. However, since I am young and foolhardy and also using a Linux machine, I went ahead and clicked it anyway - and it brought me to the Eyespot site.

I looked all around for evidence of foul play, but nothing came up. So I did a whois in jngo1.net, and a company called Silicomm.com came up. Curious, I went to their site, and was presented with a link to Jangomail.com. Jangomail? That sequence of consonants and an ‘o’ sounds familiar. And sure enough, jangomail.com is a newsletter app that is apparently used by Eyespot to send highly ignored newsletters. Evidently the url rewriting is nothing more nefarious than some tracking code.

So what did we learn?

We learned that GMail registers weird urls as spam, or is possibly blocking this jangomail domain for non-Eyespot-related spams, or is blocking all mail with recieved-from jangomail.com headers (mine was magellen@jangomail.com). It’s hard to blame jangomail.com for this. They seem to be a legitimate company, and having worked for a company that does email newsletters I can tell you that it’s not easy to keep your domains off the blacklist, or to keep your users legitimate. x.jngo1.net is probably just something they though was obscure enough that google wouldn’t block it.

What could Eyespot learn from this? Maybe tracking your clicks isn’t worth your emails getting dumped in the bin. As for Jangomail, I have no real advice; better, more profit-motivated minds than mine have wrestled with this problem before. However, maybe they could take a trick or two from Freshview’s Campaign Monitor, they seem to be doing ok. In fact, I know one Matthew Patterson from Freshview has stumbled across this blog before in his technorati-fuelled meanderings, so maybe he has some insight on this. To comment on. Because I’m actually really curious now.

Fuel another post

Stupid Google Trick #872: “(company name) sucks”

April 14th, 2008

Here’s a powerful way you can harness the infinite whining potential of the internet and turn it into something useful. When you’re faced with a major purchase, questionable job offer, or any other interaction with some google-able entity, just go to your friendly neighbourhood search engine and enter the name of the company you want to check up on, followed by ” sucks.”

Booking a flight?  Test each of your options for carriers in turn, and pick the one with the least vitriolic pages that come up.  Be sure to read the comments on blog posts as well, there might be some sort of refutation.

Whether you’re buying a laptop, applying for a job, trying to find somewhere to vacation, or just want to hear something negative, “Company name sucks” is like having a friend that you keep at arms-length, because every time you talk to him he’s complaining at length about how bad Royale paper towels are compared to Bounty — except you never have to talk to him to gain his surly wisdom.

Fuel another post

Sproutwire - New product from Shane & Peter

April 11th, 2008

Sproutwire is a small-business aggregator which has just escaped from the clutches of a prolonged beta.  It puts up about 2-3 high-quality business-related articles daily, all of which are good reads for anyone with entrepreneurial aspirations of any size.

Yes, they have a feed, and they even do daily email newsletters if you’re not the feed type.   It’s really pretty, check it out.

In other news, freshly into beta we find Aviary’s web app suite, which is frankly amazing.  More on that later.

Fuel another post