Redundancy, Performance and Geo-Optimization with S3 and CDNs

Disclaimer: This is a theory, I haven’t tried this out (anyone at EdgeCast want to confirm/give me a free account to try it out? 🙂 )

I was looking at ways to store large volumes of user-uploaded resources (images) in a web environment tonight and had a bit of an epiphany. I had defaulted to Amazon’s S3 web service as the storage platform, since I’ve worked with it before and love the idea of an “unlimited”, fully-redundant storage device. The main problem with S3 however, is that it’s got less than stellar performance as far as latency and geographically-optimized delivery. That, and the bandwidth is relatively expensive.

So — what happens if you combine S3 with a Content Delivery Network of some sort? (more…)

Apple MacBook Pro Dead Battery Problem

If you’re having a problem where your MacBook Pro seems to randomly shut down when you’re running from battery, then you may have hit some dead cells and lowered the capacity of your battery. I had this problem a few months ago and got to chat to one of the Apple Geniuses (Geni-i?) about it. The problem manifested itself by just shutting down my laptop before it gave me a low power warning or anything at all. The way to tell if you have the same problem as me is:

  1. Click the Apple Menu
  2. Click “About This Mac”
  3. Click “More Info”
  4. Select “Power” in the left pane
  5. Under “Battery Information” look for “Full Charge Capacity (mAh)

Apparently this number should be up over 5000 on a healthy battery. When mine died, that number was around 3000 from memory. Currently mine is at 5440. If your battery has a low full charge capacity, then it’s likely it failed, and if you take it back to Apple they will (hopefully, as they did for me) replace it with a brand new one, free of charge.

Hope that helps someone.

Making Internet Explorer Behave Like a Real Browser

Recently I’ve been doing a lot of cross-browser work (IE 6 + 7, FF and Safari required to function similarly, unfortunately), and I’ve narrowed down my list of hacks/tricks to make Internet Explorer be able to actually render standards-compliant HTML in a manner remotely befitting a modern browser. Here are my list of “go-to” hacks which seem to fix at least 90% of rendering, layout and positioning issues in IE(6|7).

(more…)

Customizing WordPress 2.5’s Admin Panel

While I was poking around in a pre-release version of WordPress 2.5 (which has been slightly delayed for actual release), I found out that the Admin panel (everything under /wp-admin/) is now pretty easily customizable through CSS.

Basically what they’ve done is extracted all the color-based information from the admin CSS files, and put them into pluggable files called “Admin Color Schemes”. The cool bit is that it looks really easy to add your own! It looks like the Admin Color Scheme is one of the last (core) stylesheets loaded into a page as well, which means you’re really not limited to only changing the colors.

So how do you do it? Here we go:

  1. Download this plugin: WP Admin Color Schemer 1.0
  2. Install and enable the plugin, which will look for CSS files inside its own “/schemes/” directory (/wp-content/plugins/wp-admin-color-schemer/schemes/*.css).
  3. Create your own CSS file and drop it in that directory. The filename of the CSS file should be a lower-case, letters/numbers only, dash-separated version of the name of the scheme. For example, a scheme called “Billy’s Amazing Scheme” would be in a file named “billy-s-amazing-scheme.css” (replace everything that isn’t a letter or a number with a dash, but only ever have a single dash at a time). Make sure the first line looks like this (with “My Admin Scheme” being the name you want to give your scheme, and each hex value representing one of the main colors used in your CSS palette. This must be the first line of the CSS file, be commented out as below, and must contain commas, but the spaces are optional):
/* My Admin Scheme, #000000, #111111, #222222, #333333 */

Once you’ve done that, go to your profile page within the Admin Panel, and you’ll see your new scheme and should be able to easily select it. When you hit the Update button, your Admin Panel should take on the new colors immediately.

If you’d like to use one of the built-in Admin Color Schemes as a starting point, then they live at /wp-admin/css/colors-classic.css and colors-fresh.css.

Now you can easily style your Admin Panel to match the rest of your site (and hopefully Theme authors out there will start packaging Admin Color Schemes to match their Themes).

Idea: Daily eBook Delivery

I just thought of an interesting delivery mechanism that could help people actually get through an eBook (or any longer electronic text for that matter). Basically the idea would be that rather than throwing the whole book at someone and leaving it up to them to read it, you would deliver it piece by piece so that they only had to consume small chunks at a time. There are 2 ways that I’m thinking this could work; email and RSS.

For either delivery mechanism, the user would go to the site, purchase a book, then select their options for how and when they’d like it delivered. Some of the important bits would be:

  1. Delivery Schedule: Daily? Weekdays only? at 8am? at 8pm?
  2. Amount per Delivery: 1 page? 500 words? 1 chapter?
  3. Format: Full text in email/RSS? Link to current location in online version, with their “quota” highlighted somehow?

Once you have those options configured, you’d get your periodic email (or feed, via a customized URL that would point to your specific delivery configuration) containing the current portion to read, and you would want some options in each payload I think:

  • Give me more next time
  • Give me less next time
  • Give me more right now
  • Put my deliveries on hold

This probably isn’t a business, but it’s a feature that would be pretty cool for existing eBook retailers to offer. I’d be happy to make it for someone if they want it 🙂

UPDATE: DailyLit

MyBabyOurBaby Clone Request

Apparently we’re doing something right, because there are already people who want to copy our site! I found this listing on ScriptLance by doing a search for us to see if we were showing up in Google. What really surprises me is how low some of the bids are — trust me, it took a lot longer than 14 days to make!

I suppose imitation is the greatest form of flattery right? So we should take this as a compliment?

Stanso: Simple TAgged Note Storage Online

Background/Motivation

In amongst some work that I’ve been doing recently, and looking at my own work habits and trends, I realized that something super-useful to have would be a very accessible “microcontent storage system” where you would be able to store small snippets of information, tag them, have them fully-indexed and searchable using a simple, slick interface. Basically, I’m seeing this as del.icio.us, with more space for storing text, and no requirement for a link.

General Idea

So I see this as a series of “items”, stored with a note/body item of some sort, which would normally be text. In addition to that, you’d have an optional title and link/URL. You’d have a list of tags/keywords, and perhaps allow for arbitrary meta-data. I like the idea of the meta-data because it makes the system simple, yes extensible in ways that simple tags don’t provide (easily).

The UI would probably be largely based around search (a la Google), and would provide a list of items recently added as the default result-set. When searching, we’d probably use AJAX to make it “live search” to aid progressive discovery. I’d like to be able to save a search as well, and have that available as a navigation item of some sort (e.g. All items tagged “work” and “urgent” but note “done”). Adding an item should be a matter of clicking a link, then typing a few items and hitting a button. You’d also want a bookmarklet to be available so you could do this from anywhere. Perhaps even a Firefox plugin a la the del.icio.us one.

I’d also want RSS feeds available, specifically “recent items added” and “all items tagged x”.

Privacy controls, the ability to share items (or tags) and some other things like that would come down the line. I’d specifically like to be able to invite people to access my stream, and grant them the ability to see only items tagged with certain tags.

From here, we would also want a robust API so that we could plug the system in as the storage/backend behind any number of other apps. I see the use of POST to create new items, GET being able to retrieve a simple XML description of an item, PUT updating existing ones, and DELETE removing one. Standard REST stuff. The interesting thing here is that there’s no real reason why you couldn’t do it all with namespaced RSS (2.0) or Atom. I think that’d be a good approach because the basic structure is there, you just need to add some meta-data options which is no real problem.

The API is where the real fun lies – this could be the Twitter of… everything else. I see it as a generalized micro-content publishing system. Two immediate things that I think would be fun to plug on top of it (perhaps as paid services?) would be an email reader and an RSS reader. Basically these 2 systems would periodically check email/RSS feeds, then parse new items, tag them (using existing tags or some style of content analysis) and then POST the new item to your Stanso stream. It’d be interesting to see your email, notes, RSS feeds and potentially other things all mixed in together, tagged using a common scheme etc. Who knows where it could go? This could be a todo list, an email client, a news reader, a blogging platform, a status system, a bookmark repository, a password storage tool, a file manager, or all sorts of other things.

Technology Options

Obviously this could be built very simply using something like Scuttle (del.icio.us clone), or just from scratch using the normal LAMP stack (or RoR, or whatever). Another option I’ve been pondering is Amazon Web Services. Of particular interest are SimpleDB (still in beta, waiting on the list…) and potentially S3.

SimpleDB allows you to store a very loosely-structured set of data around a “record” in a fast-lookup, easily-queryable environment. Seems perfect for the task. It could handle arbitrary meta-data per item if you wanted, and could handle unlimited tags per item easily as well. I think S3 could be an interesting addition if you added the ability to upload a file (with tags etc), which was sidelined into S3, then automatically linked (via the URL field in an item) into your Stanso stream.

Another possibility would be to use something like WordPress to build this, since it actually handles a lot of elements of the system already (post title, body, tags, meta-data, the general blogging/posting flow). Having worked with WordPress a lot in the last 6 months though, I’d have to think that it was overkill for this, and provides a lot of other (wasted) functionality that provides more overhead than is worth adopting. Probably taking something like Scuttle and modifying it would be a best bet for a prototype at least. If building on AWS then you’d have to get pretty custom.

Possible Implementations/Features

  • Simple note storage — you post small notes and snippets to remind you of things, or to hang on to passwords etc so you can find them later.
  • Feed reader — feeds come in, are tagged and added to your stream, you navigate by tag or by “recentness”.
  • Email client — email is pulled in and automatically tagged based on content analysis, sender details, etc. Being able to add your own tags would be awesome.
  • Todo list — post items that you need to do, tagging them as “not done” perhaps. When they are done, you remove that tag (or just delete the item).
  • Micro-blogging — post small updates on what you’re doing, what you’re thinking etc, then publish it out from the system via the “recent” RSS feed
  • Bookmark storage — as per del.icio.us, minus all the social stuff.
  • File manager — with file uploads going to S3, and meta stored in Stanso, you could store things in any “structure” (via tags) you wanted.

The cool thing is that you could actually do a number of these (if not all) at once, since you would have the ability to segment out your storage/retrieval of items based on tags as well.

Of course, after I started writing all of this, I realized it was just a slimmed down version of HTFS… so yes, I really should be building that system 🙂

MyBabyOurBaby is officially live!

As you may know, I’ve been working on a project for a while now, which has finally gone live, with open registrations. That project is My Baby Our Baby.

The idea of the site is to give parents and families a secure place online where they can compile a journal of memories for their children. We’re focusing primarily on photos right now, but hope to include video and audio as we progress. Here’s a couple of the things that I think make MyBaby unique or worth a look:

  • Unlimited uploads (backed by Amazon S3)
  • You choose to have your book open to the public (for reading), or completely invite-only.
  • Once they join your book via invitation, other people can add their own photos and stories to your book as well
  • We have some really beautiful book themes (and more coming) care of Ray Hernandez/Stoodio
  • We’ve created a forum on the site as well to allow people to interact across books (anyone who’s a member can post) and ask each other questions etc.
  • You can try it out for free!

Right now, people get 3 weeks to try it out for free, after that, if they like it, it’s $8 a month to continue using the service. This covers you for as much as you (and all the members of your book) want to upload. You can pay for more than a month at a time and get a discount as well. We’re trying out a slightly different method of payment where subscriptions aren’t actually available in a traditional set-your-details-and-forget way. What we’re doing is allowing anyone who’s a member of the book to contribute by paying for as much (or as little) as they like. We’re hoping that rather than the parent having to pay every month, other people in the family will chip in and cover the cost of keeping the book running if they see value in it.

Ray and I are really excited now that it’s live, and very nervous to see where it goes. We’ve spent a lot of time working on this and refining things, so it’s great to finally have some other people using it.

Now for the real work — keeping it up and running and constantly improving it for our new users!

What is Web 2.0?

My brother recently emailed me with the relatively simple question, “what exactly is Web 2.0?” I know a lot of other people out there have taken a stab at defining the damn thing, but I thought I’d take a shot as well. Here’s what I replied with:

It’s kind of a “catch-all” expression for a lot of the things that are going on online now. It generally refers to things like blogs and wikis and sites where the user is actually doing all the work (thus the common term “User-Generated Content” or UCG).

Just to confuse things, a lot of people have started referring to a specific design style and set of technologies as being “Web 2.0” as well. This tends to include:

  • anything mobile
  • anything including mapping/geo
  • AJAX (a JavaScript technique to avoid page-refreshes and make things more responsive)
  • widgets (which are a whole other confusing mess of their own)
  • anything that uses RSS/Atom feeds

So yeah… it’s not easy to give a simple one-line answer, because it’s kinda all of those things and more. Some people argue that it’s a “revolution” of the way the web works, because “Web 1.0” was all about companies or bigger groups publishing information online, whereas 2.0 is more about “the little guy” out there (users) controlling and publishing their own content (think YouTube, Flickr, etc). To me, it’s actually just an evolution though, a logical progression that just took a while because we had to figure out and refine the technologies to allow things to be easy enough for everyone to be involved.

That’s my take on it anyway 🙂

FeedBlendr Rocking Along

I haven’t posted actively here about it, but FeedBlendr is the first of a series of “feed power-tools” that I’m developing and will eventually tie together. There is a version live and actively being used already, and I’ve just put out a beta version for testing with some major upgrades to the core feed engine. People are really loving this sort of thing, and I’ve got some great plans for more additions to the family soon.

Keep an eye out for more here and also over at the Blendr Blog.