Blog
So I bought an iPhone a month ago, and needless to say I'm very impressed by it. I knew since that day when I was spastically refreshing engadget as they posted Job's keynote, that this device was a game changer. Though my natural disdain for Apple's pretentious commercials swayed my opinion back to skeptic. "Yeah, I can check my email and surf the web on my Windows Mobile phone too, so WHAT?!" But I couldn't resist for long, and as usual I bought myself the thing that my wife was planning on buying me for Christmas.
I have to say that this is a revolutionary device. I know I'm late to the party on iPhone praise, but there are a couple interesting things I realized while I tried to find excuses to use it every hour of every day.
The first is a sort of reassurance I get through the similarities I see to Doodlekit. The design philosophies are very much the same, and it's good to see that such an opinionated device can be so widely accepted.
More importantly however, it's finally allow me to quantify why simple is better. Before I could sit down and explain examples of why simplicity is key, but it was never so clear cut.
Distraction
My old Windows Mobile device had a lot of features and applications, more than the iPhone. But here's the thing, I never used them. However I find myself using every single application on my iPhone. The problem with the WinMo phone is that I was distracted by choices. For example if I wanted to write down a note, I could create a Word document, Excel Spreadsheet, or one of the scribble pad notes. My mind would weigh the pros and cons, then I'd finally just decide to write it down on paper. On my iPhone I just have Notes, and I use them all the time now.
Cut the Unnecessary
I was kind of surprised that the iPhone didn't come with a Todo list. This seems like such an essential smartphone application. Yet I realized that wait a minute, I never used the Todo list on my old phone. My problem was that I would put things on my Todo list that were hard to remember, but I could never remember to look at my Todo list. I tried a few web based Todo lists, but ended up with a much better solution. Now when I need to remember to do something like get new tags for my car, I put it in my Calendar. This way I set a date and time that I need to do it and it reminds me that I need to do it. Not only that, but now I have a history of when I did things.
The iPhone engineers were able to step back and look at how people will really use this phone, and didn't dilute it with the unecessary 10%. So many software companies are afraid to think for their customers, when in the end, that's what the customers are paying for.
Simplicity gives way to fluid and natural actions by eliminating distractions and only focusing on what you really need. I couldn't put it into words like that before.
Yesterday TechCrunch did a writeup on Doodlekit. The article focused on how our advanced features set us apart from our competitors.
My only complaint was the misnomer that Doodlekit is late to the party. According to some of the comments, you don't actually exist until you've been posted on TC. The fact is that we started on DK almost 2 years ago, and did our first major release last year. Blah blah, I know this sounds like pathetic drivel, but hey, I needed to get it out there.
Of course it doesn't bother me too much, because I'll be laughing all the way to the bank! HA! I expected a lot of traffic, but I didn't expect that over 600 sites would be created since the article was posted. As the article rolled to the bottom of the TC homepage, it showed up on the del.icio.us home page.
This was also a good test of the server. Everything held up quite well.
This has been a fun 24 hours. I hope it continues.
Last Saturday we finally deployed the latest Doodlekit release. So far I'm really happy with how things are going. Our signups have already quintupled, and everything is running smooth as usual.
Here's what I'm excited about.
Free as in Beer
We now have a completely free Doodlekit plan that still has lots of great features like a Blog, Photo Album, and Content Pages. Hear that Railers? You can have a Ruby on Rails hosted Blog for free!
New Editor - XStandard
If you've done any research into online WYSIWYG editors, you should know that XStandard is the cream of the crop. It spits out completely W3C compliant HTML, and uses styles instead of fonts. Since it's a browser plugin, and doesn't use the browsers built in content editor, it's a lot more stable and predictable.
Not only that, but we made it a lot better. The editor is not only aware of what color theme you're using, but also what you're editing. So if I start editing a notes box on my sidebar, the width of the editable area will be the same, and the background color will match.
I also built out all the backend services, so when you're inserting an image, you can browse your Doodlekit Photo Albums, or upload directly from your computer. Sorry to ramble, but I'm really psyched about this.
Shopping Cart
In true DK style, the new Shopping Cart is really simple, yet slick as all hell. It takes just a few minutes to setup, and integrates directly with Paypal. Check out my demo.
Performance
Dude, you don't even know.....
I almost crapped my pants when I checked the logs and saw 200+ requests per second. Then I did crap my pants when I started up memcached, and saw 300+ requests per second. And that's per process across 4 processes. More on that to come...
For reasons I wont get into, I'm logging page hits to the database in doodlekit. The performance impact really hasn't been that bad, but I think it will start to show over time. I've been looking for some sort of fire-and-forget function for a long time. I thought about threads, message queues, or even a Ruby ESB. But I finally found a much simpler option.
Mysql has a DELAYED modifier for the INSERT function. Basically the client just sends the statement and returns right away. The statement goes into a queue, and will insert whenever Mysql decides to. If there are many statements at the same time, it will batch insert them. Obviously you would only want to use this in very specific circumstances. It's perfect for me since I don't rely on the record being there immediately.
It's very simple...
INSERT DELAYED INTO requests (ip, path, .....) VALUES ('127.0.0.1', '/home', ....)
I couldn't find any plugins to do this, and of course I'm to lazy to write my own. I just did a raw sql execute with the proper Sql Injection protection.
One important thing to mention is that the DELAYED modifier requires the MyISAM table engine, and rails uses InnoDB by default. You'll have to convert the table...
def self.up
execute("ALTER TABLE web_requests ENGINE=MyISAM")
end
And to top it all off, by default the type of Mysql storage engine you're using wont be copied to your test database when it does db:test:prepare. When you run a unit/functional test, rails will export your development database into the schema.rb file. It doesn't have the capacity to handle special options like engine types, so that's all lost. To get around this, simply use the sql schema export type.
Put this in environment.rb
config.active_record.schema_format = :sql
I did some benchmarking with INSERT DELAYED, and when inserting 1000 to 100,000 records, there's a 3 to 4 fold speed increase. Pretty snappy.
Lots going on in my world right now. Between finally accepting Assurant's offer, trying to get back into fixing up the house, and doodlekit, I've not got much time for blogging.
Speaking of doodlekit, we've got a big release in the works right now. Though we didn't plan for it to be a formal release, a lot of things sort of depend on others. There's lots of new stuff to be excited about, but I have three favorites.
1. Doodlekit will be Free! We've finally reached a point where we are able to support a totally free plan. It will be limited of course, but it still beats the pants off a lot of other tools.
2. Shopping Cart. The Advanced plan will have a super simple DK style shopping cart that hooks right into Paypal. I can't wait to show this one off.
3. New Editor. We've chosen XStandard as our new WYSIWYG tool. This is one of the greatest pieces of software I've ever landed my hands on. After the release I'll be talking more about this and the integration process.
Check out Heath's post for more details.
It's all going down late September, so be ready.



