what I learned over the years

Menu

Month: June 2007

“This place is a graveyard of hope – everyone here seems to be trying, and everyone seems to be advising – but nobody seems to be succeeding.” – Max Klein

I’ve started to read YCombo news less and less the last couple of months. Most of the articles are about getting funding, a stage which I’m not quite at yet. And I’ve noticed a lack of concentration on techs and markets at the fringes. To me, that’s where opportunities exist, and that’s what you have to pay attention to, even if it’s 5 years off.

Most everyone seems to think within the context of what was lately successful. “It’s a social network that you can post photos and tag them!”

Granted, it’s easier to think of things in terms of what has come before, as there’s maybe only seven original things under the sun. (I don’t know what the seven are, don’t ask me). But there are plenty of interesting things going on in research labs, Rubists, Erlangers, and with designers and media communication majors that make the impossible possible.

I think Joe Kraus has it right. He takes things from the land of the nerds and makes them accessible to lesser nerds.

Often times you don’t get to control what’s on the server. Slave or daemon gem required by backgroundrb might not be on your server. To get around that, I froze the gem in the vendors directory. (ie. unpack the gem)

Then in the backgroundrb script under your script directory, add the following right before require ‘backgroundrb_server’

This is a video where the desktop metaphor is taken literally for computers. You have move documents around on the desk as if they were real things, using a physics engine. While, neat, I don’t think it’s entirely the right way to go. This method is only good if you can see a preview of what the document is at a glance. Therefore, for something like photos, it makes sense. But for documents, you often can’t distinguish between documents just from a preview. So unless there is also a smooth zoomable interface, I don’t think it would be too useful for documents.

The only reason we sort or organize anything on our desk (or otherwise) is so that we can perform search later on. There is no need to sort if there is a default search box as an interface. Therefore, I think what would really be neat is if the documents sort themselves into rankings, or into groups based on what you typed in a floating search text field.

That said, I can see definitely see applications for this technology for augmented reality though. Being bombarded by virtual screens and documents would make anyone feel overwhelmed. Bumptop physics can help lower the information overload for future augmented reality interfaces.

I haven’t posted in a bit, because I’ve actually been productive. To lower productivity, I thought I’d post some fun. These are two flash games that have interesting use of spring modeling in the game. One is Double wires(not Double wives), where you can pretend you’re someone like spiderman. And A Walk in the Park features an interesting game mechanic, where you play a pooch and you lug around a guy in a wheelchair. You can use him as anchors to catch crackers underneath platforms.

As a result, both have pretty innovative game play. It use to be that if you were below a platform…well, kiss your 1UP goodbye. But not if you have sticky strings or you’re leashed to a guy in a wheelchair!

So this morning, I got an odd IM from a person I didn’t know saying to check out his/her WeeMee. It had no link. It might be from a camper I don’t remember, or more likely, some guerrilla marketing, and I played into their hand.

Regardless, I checked it out and played their Pogo for Panties! game. WeeMees are basically avatars that people (kids) can create, and attach them to their entire online presence, such as AIM, blogs, myspace, skype. The whole site is a social network, where one can create avatars, and play games on the site. Obviously, I’m not their target demographic, and I won’t spend that much time on there.

But I’ve been noticing a trend with avatar creation, that it’s getting easier and easier, and there’s certain demographics that are doing it. I’ve noticed there are avatars makers for Maplestory characters that are popping up on forums, as well as those Voki talking avatars.

For avatars to be worth creating, there has to be a world/context in which it fits that makes it worth showing. In second life or on forums, where interaction with others is the reason why they’re there, then yes. Avatar is a form of self-expression that others you’re interacting with will respond to. On blogs, not so much, since it’s what you write not what you look like, that are important on blogs. Same with wikis.

Perhaps there will be a new form of the web that allows avatars to run about in a ‘room’ where they can do things together, like play soccer or tag, or draw collaborative pieces. And to go from room to room, you simply go from page to page. In a web like that, there will be room for avatars.

Debugging is always hard, because you have to understand what’s going on. In this day and age of leaky abstractions, there’s just always more and more to know. This is why I think concepts are important. If you know concepts, you can more readily figure out details.

So I had a quizzing error last weekend that I was scratching my head over for about two days. This was mainly because I was getting the errors from backgroundrb. It would just hang with no exceptions reported. As it turns out, there’s a bug in Backgroundrb 0.2.1, the latest version.

Thanks to Mathais on the Backgroundrb mailing list, my problem was exactly as he describes. I monkey patched it and the backgroundrb server log started spewing errors out. It was about MySQL servers going away.

After reading about why MySQL goes away at all, I figured out that one needs to check MySQL’s interactive_timeout setting. The database will drop the connection to it from the client (in this case, the web app), if there has been no activity for at least that amount of time. By default, it is set to four hours. On the server I put the app on, however, it is set to 10 minutes.

There were a couple solutions to this. One could be, as I posted before, to retry the connection. The other is a setting that I found in Rails.

ActiveRecord::Base.verification_timeout = 570

I put this in the environment.rb file under config to keep the connection to the database alive. I set the timeout to be under the interactive_timeout, so that Rails will keep telling the MySQL server that it’s still around.

I don’t know if this is exactly a good idea, since on a shared server, that means everyone will be holding on to connections they’re not using. I’m not sure what the performance implications are for a long standing connection is, if there is any. But for now, it seems like it’s working.

Jeff Bezos, the guy that came up with Amazon, is probably on spot with how it’s the beginning of the innovation on the Internet. But if history is any indication, people that come after this won’t be remembered until a new paradigm or market is built on top of the Internet.

I can’t exactly imagine what’s possible with the rising technologies. Human-centered interfaces (or the complete disappearance of interfaces), tools that predict your behavior using AI techniques, an emerging theory of the brain, nanotechnology for intelligent materials, materials that change shape, programming genetic materials of living cells, personal fabrication, wireless power, open source hardware, social management agents, and instant information anywhere in the world at any time.

Sometimes, when I look at what I’m working on, it gets me a little depressed to see how rudimentary (by today’s standards) is. But I get excited when I see where it is going, and how it carries the future with it.

I never really ever find too many occasion to use ‘ensure’. It’s a Ruby keyword that you can use for blocks of code that ensures, no matter what happens, exceptions or not, the code will be run when the block is finished. And then a quickie that I found in the rails core:

It does something simple, just silences the warnings for a particular block of code. On first glance, I would have just written it without the ‘ensure’. However, that won’t work for yielded blocks that call return or if exceptions are thrown in it, I think. This way, no matter what happens in the block, it will always restore the state that it changed.

When deploying on a shared host, often times, you won’t be able to sudo anything. I was originally thinking that I had to override the cleanup task in cappy, but a quick look in google found: Avoiding the SUDO police with Capistrano. You can simply “set :use_sudo, false” in your deploy.rb. Tip!

Microsoft recently announced their surface computing platform. It’s where you get to manipulate objects with your hand on a screen. I think after Minority Report, everyone wanted something where you could manipulate virtual objects. Since there, there’s been a realization of that. But few of us had the imagination/drive/ability to actually do something about it.

I had seen simple demonstrations of this type of interface at malls, where a projector and a camera would use occlusion to calculate interactions with the objects. But it was kinda like having a stub to manipulate objects–you couldn’t pick them up and manipulate it. Microsoft’s surface computer seems to have done away with that, and added a sense of interaction between real objects and the virtual ones in the surface of the desktop–so one can load photos, simply by dragging the photo ‘into’ the camera.

As for multitouch sensing aspect of surface computing, it’s not the first. The idea has been around since the 80’s, if not earlier. However, the first demonstration that permeated the web was Jeff Han’s demo at TED. Multitouch-sensors weren’t available commerically, so you’d have to be able to build your own. According to Jeff in the talk, he said it was low cost and scalable. It makes me suspect that many EEs could have built it. But we didn’t.

“People that love software want to build their own hardware.” – Alan Kay

I use to think that this quote was only applicable in the days when software was much closer in abstraction to hardware; when people were writing in assembler and C. Nowadays, the only people that seem to do that are embedded programmers, and having done embedded programming for sensor networks, I can say it’s not half as fun as web or application programming. Having to manage memory, or build your own malloc wasn’t fun, to say the least. It was kinda having to time the spark plugs in your engine to go, instead of just pushing on the gas pedal.

However, I’ve taken a new view to the quote. When I think about all software, they all process information in some way. The input has to come from somewhere, and the output has to go somewhere to realize the bits in some form. However, the inputs are limited by what humans are willing to enter, and more importantly in this post, what kinds of hardware that will collect this data.

I can’t wait until clothes keep track of themselves and match themselves. Technically, it’s possible now to write the software, but one would have to enter the information by hand so that the computer can do the tracking and matching. But if there was hardware for clothes to serve this information, then it expands the space of information for software to operate on.

In this light, I can see where the quote is applicable. To expand the reach of software to access information that is only currently available in the physical world, you’ll have to be willing to build hardware.