September 27, 2010

API/SaaS Wrapper - Monday

First off a programming note. This post was late today because I ended up having to throw out several ideas for projects as they had already been done. The first ideas was to build an open source video trans-coding service and potentially build it directly in to SinMagick. Unfortunately it looks like Panda Stream has been offering an open source video trans-coding service for a few years now. The next idea was to solve the problem of the designated driver taking home a car load of inebriated friends. In which order should you drop them off to make the trip most efficient? Unfortunately this idea has already been worked on, you can find an iPhone app by Route4Me that does exactly what I described. The next ideas was to provide a way to use your iPhone's camera as a raw video device on desktop computers. But after a little bit of searching I stumbled on PocketCam. Frustrating!

The next idea was one that I've been kicking around for a while. Basically if you have a service like SinMagick for example. And you'd like to implement a freemium model you need to build out all sorts of different features to support it. Such as authentication, signup, throttling, logging, billing and a way to block unauthorized access. Building it directly into pre-existing code can be even more painful. There is already a company, Mashery, in this space however they target the premium space exclusively and don't offer an open source or shrink wrapped product. That's the market I hope to capture this week.

Project Summary: API/SaaS Wrapper for Web Services

Planned Features:
  • Authentication via OAuth
  • Developer Registration
  • Rate Limits
  • Reporting/Logging
  • Output Conversion JSON->XML
  • Multiple APIs
Monetization - Considering the following
  • Premium Feature Modules for things like Billing Support
  • Shrinkwrapped Product
  • OpenSource with EC2 private instances

September 26, 2010

Microcontroller - Sunday

Released! I had a blast this week working with these electronics projects. I'll definitely be doing more over the course of the next year. There's something strangely gratifying about lighting up a few LEDs on command or receiving input from a simple keypad. Especially when you have to wire them up and write the code yourself. Writing in C was like going back to my CSE 142 course at the University of Washington. Although no one is grading me this time and if I screw up I can catch components on fire. Check out the demos on youtube below. And contact me if you need a part list or wiring diagram and I'd be happy to provide one.

Demos
Lighting - http://www.youtube.com/watch?v=pI2g945pEy0
Big Red Button - http://www.youtube.com/watch?v=9tkcO66Bc8M
Meeting Calculator - http://www.youtube.com/watch?v=Xk0m1Xe7pKE

Source Code
http://github.com/pcorliss/Teensy-Projects

A few things that went better than expected

  • It was awesome to dig back in my electronics bin and pull out some of my crazy ideas for electronics projects. Then actually move forward on them, spend the time and complete them. Releasing anything is usually satisfying, but coming back to something I had previously set aside and finishing it up is redeeming.
  • Electronics projects seem unique to me in that you can get going pretty quickly and without a lot of effort. The equivalent of a hello world on a microcontroller might be reading switch input or lighting up an LED. But it doesn't take much more to wire up multiple LEDs and really start creating something pretty cool without investing a lot of time. Whereas with a lot of the frameworks and languages like Ruby and Python that I've been working on, hello world is easy, but as soon as you want to do something non-standard it's a monumental challenge to find the proper syntax and setup.

Challenges

  • My C is rusty. Thankfully I was able to glean enough from various internet forums to fill in the gaps left by my intro to programming course back in the Fall of 1999. Now I feel old.
  • I started programming back when your average consumer grade desktop machine had roughly a 400Mhz CPU to work with. Since then the bulk of my programming work has taken place on multi-core 2Ghz+ machines. The Teensy only runs at 16Mhz, and you can step it down further to save on power.  So using the Teensy chip where adding an extra instruction in your control loop can cause a noticeable flicker in your LEDs is quite a change of pace. 
  • All of the projects this week draw power over USB which is limited to 400 mA. This caused a few issues where it was possible I wouldn't be able to light as many LEDs simultaneously as I would have liked and required me to rely on techniques where LEDs were switched on and off quickly to conserve power.
  • You can see in the meeting calculator video that a lot of wire was used for wiring the 7-segment displays. Each one requires 8 wires for each segment (digit plus decimal point) and a 9th for 5V supply. It took about 3 hours to get the entire project wired up. Not including tweaking and finding small shorts or poor connections. And that was before I had even written the software to something as simple as display a digit or handle the matrix.

Features Missed

  • I didn't have an appropriate box to mount the projects in so I ended up using a bread board for all of them. Which means it's likely that these projects will never be standalone and we'll be stuck on the breadboard for the foreseeable future.
  • The chip socket I had doesn't actually work with my teensy 1.0. So I had to scrap using it on a circuit board. I ended up just using the breadboard instead.


September 23, 2010

Microcontroller - Thursday

I meant to post this yesterday when it was filmed but it slipped my mind. This is the first portion of this weeks project. Unfortunately I had intended to solder this on to a circuit board for a more permanent setup but the chip socket I had wouldn't accommodate the teensy's pins. I just got some more headers in the mail so I'll give those a try Friday or Saturday.

I also received some small push button switches, which I'll have to integrate to provide more preset lighting options.

September 20, 2010

Microcontroller - Monday

About a year ago I purchased a Teensyduino to try my hand at some low level hardware projects. I managed to get a RGB LED to fade in and out of various colors and write a small daemon to pass keyboard commands over the serial interface. All the building blocks necessary to build some nice mood lamps and put it on my bookshelf. Or perhaps create a big-red-button switch so I could fire off deployments. I bought some more parts periodically but never finished the projects up. Well, now is the time. Because these are all relatively small I'm going to lump them in to the same week. There's a good chance I'll be cursing my ambitiousness on Sunday.

Equipment and tools:
  • Breadboard
  • Teensy 1.0 (16KB Flash, 512B RAM) & Teensy++ 1.0 (64K Flash, 4K RAM)
  • Keypads
  • 7 segment LED displays
  • RGB LEDs
  • Big Red Button & Switches
  • IKEA spice jars with glass beads
  • Plenty of wire, resistors and solder
Project Summary:
  • Build a pleasant light display for the bookshelves
  • Build a missile command launch system with keypad, safety switch and big red button. Perfect for deployments.
  • Build a meeting clock to display the escalating cost of a meeting

Big Red Button Keypad
7 Segment Displays Teensy & Teensy++

September 18, 2010

Friend Boost - Saturday

Released! I need to do a little more testing to ensure email delivery works. But overall it's ready to go and be used. The concept is simple, you login with your facebook credentials, you're presented with a list of your friends. You select how often you'd like to contact them and optionally opt-in to the email reminder service. It's small, simple and I hope useful to the folks out there like myself that can't stay in touch with friends.

Go manage those relationships!
http://booster.50projects.com/

A few things that went better than expected
  • Heroku has a freemium business model. The free plan, which I'm using, allows a single concurrent HTTP connection and a 5Mb database. If you're looking for more than one concurrent connection the prices jump up significantly. I imagine I'll switch to a Linode instance as soon as I get enough traffic to warrant it.
  • SendGrid provides a decent SMTP host and they also have a freemium model. The free plan includes 200 emails per day. After that the prices are quite reasonable.
Challenges
  • As mentioned on Friday, I'm not terribly happy with the design but I do think my design and layout skills are slowly improving.
  • Scope decreased dramatically early on as I realized no one wanted to click a hundred boxes every week to signify whether they had been in touch with someone.
  • Perhaps I just need to work with more frameworks but starting from scratch with rails is a pain if you don't know where you're going. Rails does so much behind the scenes that it feels like an uphill battle as soon as I want to go beyond the basic scaffolding.
Features Missed
  • Unfortunately Facebook doesn't allow you to send private messages to users. So I had to implement an email service instead of something internal to facebook. Not terribly but I would have liked to avoid collecting emails and then setting up SendGrid.
  • Facebook also doesn't allow you to collect phone number information. Which means any sort of VOIP integration wasn't an option.

September 17, 2010

Friend Boost - Friday

One of the issues I keep running into with consumer facing web apps is my lack of experience in design and layout. Developing a compelling and following that up with the styling to make it look like the mockup I've created on paper provides endless challenges. This week I decided to spend as much time as possible developing the backend and core components (ie. Struggling with Ruby on Rails) and leave styling to the very end. I've still got a little more work to do on the back end and some configuration prior to release but I did the styling today. You can see the before and after pictures below.

I'm slowly getting more comfortable with CSS and layout. But compared to some of my peers my work appears fairly amateurish. Hopefully I can refine these skills further over the next 44 weeks.

Pre-Styling Post-Styling

Faces and names obscured to protect the innocent.

September 13, 2010

Friend Boost - Monday

Lets start off by saying I'm horrible at maintaining friendships. According to facebook I have 95 friends, of these I haven't seen most of them in more than 6 months. I reach out occasionally via instant messenger or facebook. But I rarely call folks out of the blue and I'm not likely to respond to a voicemail or text message. So what's a guy like me supposed to do? This is where I need a CRM for my friends. Most of the tools in the space (Gist, Etacts, Rapportive) are geared towards businesses trying to manage their twitter and facebook accounts or sales people trying to stay in touch with professional contacts. None seem to manage the day to day aspects of trying to stay in touch with your friends. Or at least I haven't found any during my research. Look for some early facebook integration prototypes by mid-week.

Project Summary: Build a webapp using Ruby on Rails to help manage social relationships.

Planned Features:
  • Facebook Graph Integration
  • Reminders to contact folks
  • Integration with Twilio, CloudVox or GoogleVoice
Monetization:
  • Google AdSense

September 10, 2010

Rails, Video, and embeds! Oh My! - Friday

Unfortunately I've decided to discontinue work on this week's project. It looks like I didn't do enough research in the early stages (Monday morning) and decided to build a feature that already exists as part of YouTube. I totally botched the research portion and as such missed a major feature of the very service I was trying to build on to.

Fail early and fail often is the mantra I've heard before. It's not something I like to embrace. Ideally I like to scope something out adequately, work my butt off, meet the goals I or others have set for myself, and release it. It may not be a winner and may not make a million dollars. But at the very least I can look at it, and say, "I did that. That represents X amount of hours of me hacking away at a keyboard."

Part of the allure of 50projects was that I would hedge my bets. No one project would be my focus for a period of time. Instead I'd get to dance around and try out all of the neat technologies and hone my skills. Conversely the thing that scared that pants off of me was the idea of 50 opportunities to fail miserably (and publicly). The odds are that many of the projects are going to fail. This just happens to be the first. I can accept that some of my projects may not get used in a real world scenario. I can accept that I won't see $1 from many if not all of them. I just have difficulty swallowing the fact that some are going to end up being nothing more than a learning experience.

As far as learning experiences go. I messed around with Ruby on Rails and pulled some content out of YouTube's Data API. Nothing revolutionary but hopefully it will allow me to build up future projects a little bit faster.

Next week, I'll be starting early on the research to make sure this sort of thing doesn't happen in the future (or at least not as often).

September 08, 2010

Rails, Video, and embeds! Oh My! - Wednesday

I seem to be Perpetually falling behind, even on the small projects. In the meantime here's a demo of some of the basic functionality behind queuing up multiple youtube videos. Use the left and right arrows to skip back or forwards. Or just wait for the adorable corgi to go off screen and you'll move on auto-magically to the next video.

http://50proj-public.s3.amazonaws.com/youQueue/youtube_embed.html

September 06, 2010

Rails, Video, and embeds! Oh My! - Monday

This week I'll be going back to ruby and devleoping a rails application. Primarily so that I'm not not totally lost when I attend Windy City Rails on Saturday. I'll also be targeting a much smaller scope than last week. But with greater emphasis on bells and whistles that are conceived of during development. Potentially this will also lay some of the groundwork for another project down the line involving consumer video.

Project Summary: Build a webapp using Ruby on Rails to enable strings of videos to play continuously without interruption.

Planned Features:
  • YouTube Integration
  • Generate Embed Codes
  • Short URL generator
  • Bells and Whistles
Monetization:
  • Google AdSense
If There's Time:
  • Integration with other video services
  • Video Aggregator

September 05, 2010

Celebrity Freebie List - Sunday

Released! An update for you folks mid-week would have been good. But there was so much work to do and so little to show that I kept putting it off until I had a reasonable demo. Next time I'll make sure to post a mid-week update with at least some screen shots of Eclipse so you don't think I've been slacking off. The first version went live last night and I fixed a few minor bugs with usability this morning. To be successful I need you folks out there to help me by using it yourselves. You'll help me out even more by sharing your list on twitter and facebook.

Go have fun!
http://celebrity.50projects.com/

A few things that went better than expected
  • Google App Engine is free up until a certain threshold. The limitations are worth it if you're willing to limit yourself to GQL and Java or Python.
  • Google App Engine has some great getting started documents and an eclipse plugin that makes a lot of this pretty easy. I wish they had more than just the one tutorial but I was able to get where I needed to go by reading the documentation.
  • As I developed the app I kept adding additional features to my todo list. By Saturday I was feeling pretty good that the app not only did what I originally planned by exceeded my initial expectations.
Challenges
  • Internet Explorer is an "insulting abortion of FAIL" according to a friend of mine who I occasionally turn to for technical questions. I've got to say that I agree with him. I spent roughly 25% of the week dealing with IE specific javascript and styling issues.
  • Google Query Language, they say you get what you pay for. The query language has some quirks that make doing anything database heavy very difficult. For example say I want all of the db entries for celebrities where their name starts with "Ann" sorted by rank. A MySQL statement would look like this. "SELECT * FROM Celebs WHERE name LIKE 'ann%' ORDER BY rank;". Unfortunately GQL doesn't have a like operator. So it becomes this "SELECT * FROM Celebs WHERE name >= 'ann' && name < 'anm';". Also you can't sort by a field that isn't used in an inequality operator and you can't have more than one field used with an inequality operator. Which means we can't order by rank. Not a big deal, it just means extra code to sort it yourself.
  • I had a lot of issues putting together a design that I thought looked good. I lack the CSS and layout skills necessary to even rip off other designs out there. Hopefully this becomes less of an issue over the next few months as I work on more web apps.
Features Missed
  • A Facebook App was purposefully omitted since it didn't make sense and didn't integrate into facebook. I might expand the app later and turn the list into something more collaborative as a follow up project.
  • Google AdSense requires you enter in your URL to signup. Which I didn't have until I released the app last night. I've put in a request for review and should hopefully get approved Tuesday or Wednesday.