Archive for the ‘30days’ category

Introducing Widget Bakery

June 28, 2008

After 8 very productive hours with my designer today, I have a bit to show.  We worked at his house and, in between random banter with his wife and eating some very nice Japanese-style pizza, he banged away at the design of the page and default widget behavior and I got to work on some heavy duty Rails/Javascript magic.  Sadly he is much better at design than I am at web programming, so I did not progress quite as far, but things are looking up.

So the project name, which I haven’t mentioned to anybody yet, is Widget Bakery.  I’d encourage you to go open that up in another window — there is a full design for the front page posted, less much of the content.  As should be obvious, everything is heavily in development so don’t expect you’ll see any of the verbiage or design work stay there permanently, but I thought I would get the ball rolling so that people didn’t think I had completely abandoned the Sprint.

On the functionality front, I’m afraid that because Widget Bakery’s fundamental behavior involves being responsible for content on 3rd party websites, I really can’t show you anything useful this early in development.  Database schema and whatnot are still in a state of flux and anything which I post, and which you might subsequently post to your blog, could suddenly break.

Plus I would really, really hate if one of my widgets actually became popular before I had, oh, put indexes on the table ids or turned on caching… almost melted my poor laptop today during testing.  Word to the wise, kiddies: despite it being so obviously necessary you’d expect them to do it for you, Rails will not automatically slap database indexes on your id columns, and then you get to do full table scans every time you pull in linked objects.  Gotcha!

So in lieu of live functionality I give you this screenshot of a widget which does actually function:

Sample Widget

As you can see I sort of have my work cut out for me on the CSS front, to get that footer text working properly.  You can’t see all the “fun” I had playing with iFrames, Javascript, and the DOM model to be able to inject that sucker into (just about) any page on the Internet and have that plus button bring up a Lightbox in the middle of their page to give instructions on how to embed the widget.  There still needs to be quite a bit more tuning done there — if you don’t hit the “close” button for the Lightbox at the moment there is no way to cancel out of it, which is quite unfriendly to the user.  (I’d like to get back the old “click anywhere to dismiss” Lightbox functionality, which is going to require further DOM spelunking.)

The RSS parsing, though, is done.  It needs to have error handling and some caching added, but after that I’ll have one widget ready of the baker’s dozen I hope to launch with.  Unfortunately, at the moment actually making that widget requires access to the server console and typing things like

@widget.version.latest.options[:rss_url] = “http://www.example.com/rss”

I’m going to have to get that functioning in a nice, easy to use GUI.  And then repeat or reuse that GUI for each type of widget, while making their internal differences fairly transparent to the user.  Lots of work to do, no time to do it — time to shake and bake!

Bad News and Bad News and Good News

June 21, 2008

A situation that has been really stressing me out recently has resolved itself.  Sadly, it did not resolve itself to my benefit, but it is no longer hanging in the air, which means I can get on with life.  Unfortunately, as I’m looking at the remaining days on the calendar, it looks impossible to recover the time I lost these last two weeks worrying about it, so I’m likely not going to have a saleable application at the end of 30 days.  Ahh well.  I’ll throw myself into the work again from tomorrow, and continue supporting the rest of y’all, with the new goal to have something to show in public by the 1st and then do the actual release sometime after that. 

I would happily launch with a half-finished app that doesn’t even have billing integrated, but the nature of widgets is that they exist on third party sites, and half-finished could very well mean that widgets break on third party sites, which is just not good behavior.

Eight Amazingly Productive Hours

June 14, 2008

Keith and I just put in a full day’s work on the program.  It is shaping up nicely — well, the design at any rate.  I spent most of the day fighting old, outdated versions of Capistrano and Deprec to let me get Rails to a deployable state from my Vista workstation to my shiny new 512 MB Slicehost slice.  I expect that I’m going to really, really need the extra memory to have enough MemCaching and Mongrels available to serve all the requests, since many of them will be originating off-site and the entire point of the system is to help people go viral.  (Hopefully not TOO viral…)

I also found some wonderful OSS to integrate in with my planned features today.  More news on that later, as I think some of them will not hit the shipping window, and I only want to show off stuff that will, for the moment.

My rough sketch of the implementation agenda:

  1. Skeletal widget implementation (i.e. what I have for BCC, except generic)
  2. Widget rototype including the Lightbox implementation
  3. Widget creation workflow
  4. Widget maintenance page
  5. Account creation
  6. Account/user management
  7. Billing (ugh — not even decided on a payment processor)
  8. Admin backend
  9. Stats tracking, graphs, and all that jazz
  10. Emails
  11. Periodic tasks
  12. Home-rolled Analytics

Day 13: Early Proof of Concept

June 13, 2008

Finally I got a chance to do some programming!  I have worked the kinks out of my incredibly edibly basic early proof of concept of the widget functionality and have incorporated it into the live Bingo Card Creator site. 

You can see the distribution of the proof-of-concept widget at my most popular bingo cards page and the actual widget itself displayed on my stripped-down mock-up page.  Before you click there, let me warn you: it is boring as all heck.  I would like to say that is because I wanted cross-website compatibility, but mainly it is because I am not meeting Keith (my good friend and the CSS guy who will be assisting me a bit this month) until tomorrow and, independently, I have the artistic ability of paint.  Not MSPaint, no, just paint.

I also took out the embedded viral distribution for the proof of concept because a) its late and b) I’m lazy.

Hopefully this shows off why a small businessman would want to pay for this functionality.  Imagine that spread over a few dozen teacher blogs — it propagates itself, for no marginal cost whatsoever, spreads the content I spent so much time and money creating, and gets me new visitors and eventually customers at a bare fraction of the cost of CPC advertising… all the while allowing me to deepen my relationship with my core followers by giving them free stuff that they like.  That is a win-win-win. 

Now if I can just generalize it and make it possible to do without a few hours of Rails programming, I can start printing money hats.  Small, modest money hats to start with. 

Tech Time Got Eaten

June 8, 2008

Sadly, I did not get my prototype done today.  There were a few reasons — the most glaring is that my limited stock of willingness to debug code on a Sunday was eaten by getting an archaic VBulletin moved from its previous location to one of my VPSes, as a favor to my college buddies.  Nice update interface, very user friendly — a pity about it taking 400 clickthroughs to complete installation (I kept track). 

Still, its done and now the server is hardened so that we don’t get owned by every exploit on the Internet.  I wanted to cry when I saw its previous state — using an outdated PHP and MySql running as root, naturally, with a four letter password the same as the name of the previous site owner.  Sigh.  Suffice it to say I got a lot of use out of rand() today.

On a note at least semi-related to uISVs: I continue to be amazed by how awesome it is to have a VPS over shared hosting, provided that you have some skill in Linux administration.  If you do, totally amazing — I got to hack together that forum without disrupting either of the blogs running on the same machine and I can host them all with admirable performance for $20 a month.  Then I use a second VPS with the same company (Slicehost) to run Bingo Card Creator.  I’m probably going to get a third one to host this project and, if my expectations are correct, it may need to be a little bigger than the 256 MB $20 a month variety…  Hopefully much bigger…  First Prayer of Computer Programmers with Business Sense: Please Lord, send me scaleability issues.

30 Day Sprint: Houston We Have a Prototype

June 7, 2008

I’ve been sadly neglecting my blogging duties (long week) but thanks to some Javascript magic inspired by Lightbox I have managed to solve one of the key challenges for the widget itself, namely, how to make them trivially viral.  The key was finding Lightbox Gone Wild, which is like the standard Lightbox used by Bingo Card Creator for displaying screenshots, except it allows arbitrary HTML content in the lightbox. 

I love it when other people do my work for me.

Anyhow, this lets me include a little unobtrusive link on every widget to tell you about it and get the widget source code, which will display the code inline on the target page, both encouraging folks with sites to not be annoyed by the widgets (since I am not siphoning off their viewers) and encouraging spread of the widgets (because you don’t have to drop what you’re doing to learn about the widget). 

As mentioned, I have a prototype — essentially, its the Javascript front-end to generic widget display and virality.  Unfortunately, at the moment, I don’t have the back end ready, which makes the front end difficult to show.  So here is one of my tasks for the weekend: I can trivially get a back end working specific to Bingo Card Creator, which will allow me to code up a Top Bingo Cards widget. and show folks all the spiffy interface goodness with perfectly servicable widget code.  My hope is to have that up in the next two days, suitable for production use by blogging teachers and bingo enthusiasts everywhere.  (Plus, score, it will start driving business value for me even without having the widget creator website up.)

Then I get back to work writing the web application that allows user friendly creation of widgets without having to do the backend in Rails yourself.  I’ll also need all the ancillary stuff — account management, billing, homebrewed analytics to supplement Google Analytics and Clicky (no point in being viral if you can’t tell how viral you are), scaleability, marketing copy, a blog and some evergreen articles to start it off, yadda yadda yadda.

I’m going to be very busy this weekend but I’m loving it.

Convenient List of 30 Dayers

June 4, 2008

Mike W has banged up a nice chart summarizing who is doing what for the 30 Day Sprint.  Check out the bottom of his blog post.  (I love it when people do things I was meaning to get to… less time typing means more time…. typing.)

On the agenda for tonight: BSG episode, set up local Rails environment, develop first proof-of-concept widget.  (It will read an RSS feed and display the last five articles in a list.  Got to start somewhere…)  I’m also aiming to get to bed a little earlier than usual because I’m tuckered out like crazy for some reason.