Sunday, May 07, 2006

The problem with making things

The problem with making things is that:

The dreamer has the creative idea, but doesn't understand the theoretical principles to make it plausible. Nor do they care as much as they should.

The scientists understand the theoretical principles, but don't understand proper software architecture to retain it in the long run. Nor do they care as much as they should.

The programmers design functional and architectually maintainable software, but can't design a usable interface for everyday people. Nor do they care as much as they should.

The designers design an aesthetically pleasing interface, but they are not the ones that are going to be using it everyday. Nor do they care as much as they should.

The users of the product just want to accomplish their task at hand, but can't stop purchasing things that are hard to use. Nor do they care as much as they should.

The making of everyday objects has become specializations of specializations. Each aspect and stage of a product's birth requires specialized knowledges that are quite discreet from another. However, I still think that one should learn a bit about the process before and after:

Physists should learn good programming and creative imagination.
Programmers should learn complex math and usability design.
Designers should learn good programming and actually use their products.

Tuesday, May 02, 2006

Slingfeed 1.0 beta

Announcing Slingfeed(http://www.slingfeed.com) from 3cglabs. It's something we've been working on that allows you to read blogs and news from feeds all in one place, and you can 'sling' interesting articles to your friends. If you sign up and add my gmail address as a friend, I can sling you interesting articles that I read on my feeds.

Sunday, April 30, 2006

Yay for first link!

Deakialli DocuMental: "Por fin me he enterado del porqu�de las 43 cosas, y no 50, 100 o 1000."

Awesome! I got linked to. It's always cool to remember your firsts. This blog had me on a list of links about a post I wrote about the significance of the number 43. I signed up for technorati, and it's kinda cool. I knew about it before as a search engine, but never really as something that promoted your blog. I should have done it earlier.

Tuesday, April 25, 2006

Leaky Databases

In the programming world, programmers use to have to manage memory. When a programmer created an object in memory, he had to remember to destroy it. If the object was never deleted and the programmer lost the reference to the object, the memory location is effectively unusable for the life of the application. This is because the application can never allocate new objects in that location since it thinks it's already allocated, and the programmer cannot free that memory location because he lost the reference to the object.

Nowadays, there are high level languages that have a garbage collector--basically another running process that detects whether the application is using a particular part of memory or not, and deletes it. (Exception is that Lisp has been around since the 60's and had a garbage collector)

In databases, records in tables refer to other records in other tables. However, due to a misbehaving application, I can see a possibility for these references to be lost or overwritten. Also, common practice in databases is to mark something as deleted, but don't actually delete it.
Thus, you're left with records in the database that might not have any use whatsoever, but is still taking up space.

This is like a "database leak", analogous to a "memory leak." But to my knowledge, no one seems particularly concerned about it. This is probably because hard drive space is cheap and plentiful.

However, I expect that we'll eventually see embedded servers, where even small devices like your cell phone or your microwave can serve up web pages. The storage requirements for these platforms might require a more frugal management of database resources.

Anyone know of database garbage collectors?

Wednesday, April 19, 2006

Firefox has much to fear.

What I say might sound like blasphemy, but I've been pretty dissatisfied with Firefox with their last two releases. Ever since version 1.5, I've had to contend with a massive memory leak, and now, Firefox seems to freeze more often. While the memory leak could be solved with some quick hacks, Firefox seems less stable than it use to be.

I think the pundits are premature in saying that Firefox is an IE killer. If the developers of Firefox don't focus on basic stability and memory leaks so that their application is at least RUNNABLE, instead of just adding features, there's no doubt in my mind that Microsoft will pull through with their IE.

Microsoft has survived this long, mostly because they've made less stupid mistakes and never underestimated the competition.

Tuesday, April 18, 2006

Having something to touch

Despite all things that virtual provides, people still like the concrete, something to touch. Kinkos should offer a service that allows users to publish their blogs via dead-tree format.

I think with the advent of new materials that can change their shape and texture with electronic signals, it'll usher in an age of computing where you can make the virtual quite real and disposable.

Imagine a material that you can alter the shape of through electronic signals. Then, you can change the shape to a spoon, and then later change it to a fork--you can even change it to be a back scratcher. Although that's a very contrived and useless example, it illustrates reuse of physical objects in different functions, and even in different contexts.

Sunday, April 09, 2006

The Tube: Revolutionizing material transport

Wished everything just came and went from your house? Well, this post is about using a single real-life physical delivery system using a network of tubes. Think of the "Sucky" tubes in the movie, "Elf" that delivers post, sewage, water, etc.

If it really can be implemented, then it could be a fairly neat system. Especially potentials in online shopping--the warehouse would send your order automagically (not that it doesn't now).

But in order for this to be effective and "real-time", as the guy is imagining, very very difficult problems need to be solved, namely, how to route real things.

His comparison to IP is only half right. In IP, if there is contention at a router, packets are simply dropped. But you can cannot do that with post, water, and sewage. You'd have to develop some type of mechanical router. Not to be a naysayer, but the current delivery systems are 'good enough' and the barrier would be too high for something like this to see the light, unless there was a specialized niche problem that this system solved in the future.

Friday, March 24, 2006

Face tracking

I was really surprised when I saw this video of Logitech's Orbit MP webcam. It's about $100, and it has impressive face tracking algorithm. I knew that people were making headway in face tracking algorithms, but I didn't think it was this good.

There are now open source tool kits for augmented reality. However, they use a template black and white pattern as a reference platform. It is definitely possible to use people's faces as a tracking platform. Then, you can put statuses above people's heads, like their names. Or in a augmented reality game, their "hit points".

Friday, March 17, 2006

Incorrect predictions

One thing that really gets on my nerves is when people are dismissive.
"The wireless music box has no imaginable commercial value. Who would pay for a message sent to no one in particular?" -- Associates of David Sarnoff responding to the latter's call for investment in the radio in 1921.
Hindsight makes these predictions seems ridiculous, especially when taken out of context of the times and what was known as "common sense" or "what any educated person would know." Unfortunately, people have only have their own experiences and expertise to draw upon. The model and framework by which we can evaluate and make sense of something new is by what we know.
"Heavier-than-air flying machines are impossible." -- Lord Kelvin, British mathematician and physicist, president of the British Royal Society, 1895.
"X-rays will prove to be a hoax." -- Lord Kelvin, President of the Royal Society, 1883.
"There is nothing new to be discovered in physics now; All that remains is more and more precise measurement." -- Lord Kelvin, speaking to the British Association for the Advancement of Science, 1900.
"Radio has no future." -- Lord Kelvin, Scottish mathematician and physicist, former president of the Royal Society, 1897.
Lord Kelvin was a major contributor to physics and engineering. I mean, he has a unit of temperature named after him. It's just that he operated on the framework that he knew of. It's very very hard to jump out of what you know and start all over. But some people just don't event try.

"

Tuesday, March 14, 2006

Sketchup redos what's old

It seems like much of the time, when something old is well done already, someone comes along and makes it new. Sketchup, at a preliminary glance is what one would use instead of CAD. It allows you to build and create 3D objects fairly easily and intuitively, as if you were manipulating it in space with your hands.

It recently got aquired by Google. So speculation is amok as to what this means for Google's overall strategy. Personally, I think Google is big enough, like Microsoft, and Sun, to have their hands in everything. However, they seem to have a better track record than Sun so far when it comes to making their products work well as a thematic and cohesive whole.

The previous aquisitions that haven't yet made a showing on Googles' product lists are the things related to real-world computing. Things such as mobile socialization and traffic information haven't yet surfaced. In addition, a friend of mine was approached by Google for a job in haptics (force feedback in robotic surgery). When looking at their job listings briefly, they do also invest in bioengineering and chemical fields.

What will Google use SketchUp for? No one knows. But I know this: that the easier people can create information--whether it's written word, images, sounds, etc--the more that type of information is going to proliferate. If it's really easy to post entries to a blog, many blogs will spring up. If it's really easy to take photos, many photo sharing sites will spring up. If it's really easy to make 3D objects with SketchUp, the more object manufacturing sites will spring up. Thus positioned, Google can continue to offer services which filter and organize that information; and that will contribute to this advertising revenue. But now, it seems to be in the position to also encourage people to create that information.

Monday, March 13, 2006

Phone form factor

I'd been saying for two years now that phones should have its buttons up top and the screen below it, since most people cradle their phones in their palms. In order to type on a phone like the RAZR, you'd need to balance it in with your fingertips.

Finally, Wildseed has the first phone I've seen with this form factor. Admittingly, it looks a little bit odd, since it looks like it was bent quizzingly. But it should fit better from a usability point of view. Form over function!

Sunday, March 12, 2006

T-Mobile Free Wi-Fi Weekends, Awareness

T-Mobile Free Wi-Fi Weekends, Awareness

Free Wi-Fi for tmobile users on the weekends!

Friday, March 10, 2006

Matrix Photos in an Ikea Kitchen

IKEA | DREAM KITCHENS FOR EVERYONE is a flash site that uses Matrix-like action shots to introduce all angles of a kitchen to would-be buyers.

Not that I'm particularly interested in kitchens, but it does get me thinking about 3D photos. I think the way IKEA flash designers did it was that they had a studio with two or three dozen cameras set up in a semi-circle. And then they took an action shot all at once. Then, they use flash to stitch together the pictures so that it would look like you're traversing in space, while time is frozen.

I remember my dad buying a 4 lens camera a long time ago. If I'm not mistaken, it's a crude plenoptic camera. A real plenoptic camera has one lens, and has a microarray of lenses. Anyway, my dad's camera took four photographs at once, so that when you go to develop it, you can get an actual sense of depth in the pictures. Or rather, it looked like people cut 4 layers of photos together, and put it in a hologram of sorts. The film was expensive to develop, and I think we only had a couple developed.

However, with digital technology, I think it is wholly possible with just one lens. Given that a lens can change focus fast enough, you can generate images that have different depth images. I haven't read his paper, but that's what Ren Ng's Light Field Array camera seems to do. It can focus on different planes, AFTER you take the picture. There's also Ramesh Raskar's Line drawing camera. It uses four flashes and uses the shadows in the flashes to create line drawings and videos.

However, unlike matrix photos, there's seems to be no information captured by a CCD array about the backside of an object when you take a picture of it.

And yet, I wonder. The reason why we can see anything at all is because light is reflected off that object. Sometimes, light bounces off multiple objects before it reaches our eyes. And yet, we only have information about the last object that the light bounced off of. I don't know enough about optics (maybe it's time to learn), but could it be possible that the light that reaches our eyes/camera still has information about all objects it has bounced off of? Unless the object is a mirror, light will scatter off of the object, so we will probably get partial information. However, if we were able to collect a bunch of partial information from different sources, it might be possible to piece together the partial information for a cohesive picture of the backside of an object, not unlike how network coding pieces packets together at the sink.

So if light still carried information about an object after the object has scattered it, and if we can detect it, I'm guessing it's possible to take matrix photos from a single vantage point.

Monday, March 06, 2006

Internet Appliances

Interaction Ivrea: Gallery: Fluidtime

I've long thought that Laundry machines should be the first appliances to use the internet. I always forget that I have my clothes in the wash, and that I need to move them into the dryer. This was especially the case with living in the dorms. I wished my laundry machine would text message me when things were done. Now, I hear that there are people doing this (yay!), and that some college dorms have it.

What are some of the other things in the house that would be more useful with an internet connection? A toliet paper dispenser with an RSS feed and a toaster that can toast the weather on your bread are some that come to mind. If it moves in that direction, I imagine that either devices will get far too complicated, or that the design and use of everyday things will reign in the rampant featuritis that afficts those that make consumer electronics.

There are a couple things that have to happen before something like this is a reality. Home network is already cheap, but ethernet wiring in the house is not yet ubiquitous. Thanks to wireless routers, however, this will be a possibility, but will also raise the cost of these appliances.

Personal devices, such as cell phones, will have to have the ability to easily share meta information about its owner to these appliances. This will make it much more appealing for users to use internet appliances...it will be catered towards them.

Between perfection and performance

The psychology of learning:
"The people in the category perfection-oriented have a natural intellectual curiosity. They are constantly searching for better ways of doing things, new methods, new tools. They search for perfection, but they take pleasure in the search itself, knowing perfectly well that perfection can not be accomplished. To the people in this category, failure is a normal part of the strive for perfection. In fact, failure gives a deeper understanding of why a particular path was unsuccessful, making it possible to avoid similar paths in the future.
The people in the category performance-oriented on the contrary, do not at all strive for perfection. Instead they have a need to achieve performance immediately. Such performance leaves no time for intellectual curiosity. Instead, techniques already known to them must be applied to solve problems. To these people, failure is a disaster whose sole feature is to harm instant performance." [emphasis mine]
I have to admit, though I'd like to think that I'm the former, I recognize that, in my work, I am mostly the latter. I like building things because I like to see them work, rather than the procedure that gets me there. So when things aren't working, I'll get frustrated debugging, and just start stabbing randomly in the dark. Then a couple hours later, I'll figure it out, and proclaim that someone should "give me back my youth."

I've been trying to change my programming habits so that it's the former. I once lamented to IXM that I'm taking too much time getting going; to which he quipped, "Well, it's the learning curve. As long as you're learning something, it's ok." Rarely do people say something that make me feel better, but this one made sense.

However, there's another side to this. Sometimes, I will be the perfectionist, and go to degrees that I shouldn't, because the aspect of the work that I'm being a perfectionist at doesn't really matter in the visible short or long term. It only bothered me aesthetically. In this case, I have to remind myself to move on, or else I'll be shaving yaks soon.

Sunday, March 05, 2006

I made a table.


So this past week, I built a table, so I can solder on it. I thought about buying a $80 workbench, which would have been really nice, but I thought I could:
  1. Learn a little bit about furniture making.
  2. Learn the value of tables.
  3. Have the oppurtunity to make something.
  4. Try to save some money.
A table should be simple to build, right? What's the minimal traits of a table? This was was easy: A board with at least three legs. Of course, nothing is ever as simple as it looks, as the devil is always in the details. Since I was limited in my tool set--mostly hand tools, I had to make it as simple as possible. I went to Home Depot, and found out that they have pre-cut panels of wood. I chose a 2' x 4' x 0.75' pine/particle board for $15, built legs out of 2" x 2" x 28" of wood, and some top plates for $2.

The table is a little shaky, since I used my eye to judge the drilling of the hole for the metal dowels. But I think I can remedy that with some reinforcement. All in all, the raw materials only cost me under $30, and I'm pretty satisfied with it--as far as a soldering table goes. I had to spend more money to buy epoxy, a hacksaw, sandpaper, and two clamps, but I tend to think of it as and investment for future tool use. I already had a desk lamp, and a power strip, so you can see that I attached them to my table in the picture above. This is all I need for now, so there's no use to making it until I really need it.

I think it's important to take time to make your workspace comfortable and condusive to how you work. I tend to like everything all around me in a swivel chair, so I've built my office around that premise. I feel like too many people don't spend enough time thinking about how their workspace should be so that it can induce good work efficiency. So now, my workspace is more comfortable, and I have another place to work. Eventually, I'll have to get a real workbench with drawers and shelving. But for now, this will do. :)

Wednesday, March 01, 2006

Quantum-like effects on the Web

The article talks about how search engines affect the type of information that's out.
Google, for example, says its mission is "to organize the world's information and make it universally accessible and useful." The way that's written, one thinks perhaps of a satellite orbiting high above the earth, capturing all its information but interfering with nothing.

In fact, search engines are more like a TV camera crew let loose in the middle of a crowd of rowdy fans after a game. Seeing the camera, everyone acts boorishly and jostles to get in front. The act of observing something changes it.

Joel on Software had written a similar article four years ago about trying to manage software...by measuring it, you'll change it. In both cases, the change comes about if there is feedback, or meta-data available to the subjects. If the subjects know what the observations are, and how the observations will affect them, they will change their behavior. It is much like quantum particles on the surface; their behavior changes when they get observed in the two slit experiment.

I seem to remember a similar effect in psychology experiements, but I don't remember the name. In medicine, it's the well-known, but little understood, placebo effect. However, they seemed to have gotten around it by making the experiments double-blind, effectively cutting off feedback to the subject.

This seems to work if the subject does not need to know the results of the observation. However, if the observations are direct tools in use by the subject, I'm not sure if one would be able to disentangle them from each other.

Though it's by analogy, could the quantum weirdness be explained by a feedback mechanism? Could the underlying nature of physics be based on some type of meta-data that all particles have access to? I don't know enough about physics to know where to begin looking, but it certainly makes me curious if any physicist has looked into it.

Monday, February 27, 2006

Transmitting GUIs: When interfaces become data

While it might be old news to some of you, I just recently heard about XUL(pronounced Zuul), which apparently is what Mozilla's suite of applications, such as Firefox and Thunderbird, built their GUIs on. Most recently, an open source music player, Songbird, also uses XUL.

When I first started using Java's Swing, it seemed pretty simple. However, when working with web applications, I found it much easier to get a GUI up and running in HTML, CSS, and AJAX than it was with Java's Swing (However, some things are still hard in web apps that Swing does well). So I wondered if there could be a similar thing for desktop applications?

I guess that's what the people at Mozilla thought of too. What makes XUL interesting is that it employs an XML schema to define the GUI. And since it's still XML, you can embed other forms of XML in there, such as SVG and MathML. XML is usually used to describe data, but in XUL, it's used to describe a user interface.
There's no Data, only XUL
But on the converse, if it's expressible in XML, isn't the description of the GUI the data being represented?

Currently, we tend to think of the GUI as a cohesive part of the application. But that shouldn't be the case with XUL, since it's data. Then, you can certainly also send the GUI back and forth between applications. What use could this possibly have?

Well, for one, many programmers have long said that HTML was never meant to be used for applications. It was only meant to display hypertext. What we've done so far was use a lot of workarounds, to make it seem like it's an application. It could be entirely possible to have XUL servers, and not just HTTP servers. Upon looking it up, they have Remote XUL for that purpose. I imagine that with smaller and more powerful devices, the client-server model will still exist, but to the user what-is-a-server and what-is-a-client will become vanishingly small. Your mobile phone might be a server to a number of other future devices in the house.

Another idea is one about Walk-away GUIs. Say, you were looking at a map application of a place you're going to survey. With walk-away GUIs, you would be able to send a mobile version of the map application GUI to your mobile device to take with you out on the field.

Already, the web applications have small versions of themselves. Blogger has a "blog it!" mini control that lets you post things quickly. Del.icio.us has firefox extensions that lets you tag quickly. This could be sent to mobile devices, so that you can use it while you're out in the field, without high bandwidth (otherwise, you'd just run the application from the XUL server).

I think that this, coupled with Human Area Networks, you can visually transfer the GUI from a desktop to a mobile device, much like in the future thriller, Minority Report, where Tom Cruise could move a picture onto a plate, which could be removed and transferred. While their application was to move a picture from machine to machine (inefficient), the idea makes far more sense for transfering GUIs between applications on different platforms.

I also see XUL as being an easy way to update and patch software out in the field, as well as being extensible beyond current GUIs. If there are future devices with a different dimension to their GUIs, XUL would be flexible enough to be backwards compatible, as well as being able to support current GUI innovations.

Currently, XUL is only used with the Mozilla applications. Will XUL catch on? I don't know. It might be impractical in cases where bandwidth was low.

Update:
There seems to be other problems with XUL.

Saturday, February 25, 2006

A host of poking will get the brain working

I had a deadline today, but decided to put it off a day, since I had an interest in looking several things up tonight.

I use to have no interest what-so-ever in compilers, but I started reading up on it due to a catalyst. Since I was an Electrical Engineer, I never took compilers in undergrad. And in grad school for Computer Science, I somehow avoided taking compilers. I read alot about what parsers and lexers were. I knew who Noam Chomsky was, but I didn't know that he was the first person to separate syntax and semantics.

So I found a free compiler tools site as well as a long article on compiler basics that I finished halfway. I talked to Ian Martins, in brief, and found out that commonly used tools for compiler creation were Lex & Yacc.
The asteroid to kill this dinosaur is still in orbit.
- Lex Manual Page

Haha. But these two tools generate parsers in C. Are there Ruby equivalents? Of course. It's called Racc. Since Ruby was written in Japan, and has large adoption over there, a number of libraries have documentation written in Japanese. Who would have thought that reading some Japanese would come in handy?

I also made a stop at looking at what Rinda was, though documentation is sparse on the web. Rinda is the Ruby implementation of Linda, which is something used for distributed computing.

Perusing around these topics, I stumbled upon an O'Reilly article on Asterisk & Rails. Asterisk is apparently an open source VoIP implementation. That's pretty interesting, especially since you can tie it into Rails with RAGI. I think the possibilities for this are exciting, though I fear that people will blow it out of proportion and turn it into a bandwagon of sorts.



In the article, they had this picture, and I found it interesting that there is an overlap between IM and VoIP. Related, they are. I wonder how the traditional telephony and cable are going to try to block this? I honestly hope they don't succeed. I had heard of Gizmo before, downloaded their software, but didn't really have anyone to dial, so I removed it. But thinking about it now, and open protocols, I wondered if there was a Jabber implementation in Ruby. There were two, but one was more active, being XMPP4R.

I find that Digg or /. might not always have the news I'm looking for, although it comes through once in a while. The best leads I have are by following topics and often times from blogs, in footnotes.

I'm excited about a couple ideas brewing in my head, but I'll just need to write them down and push them in the back of my head, and come back to them later.

"Facets of Ruby" Brown Bag

I gave a Brown Bag presentation yesterday to the software developers of the Johns Hopkins University Applied Physics Lab. It was good to pour over the lesser known features of Ruby, and though I know more now, I couldn't answer a lot of the basic questions that were asked. A lot of the discussion was on dynamic typing.

Here are some of the answers to questions I couldn't answer right there and then.

Which module is "times" iterator in?

I had the example:

3.times do
print "ho! "
end
# it prints out "ho! ho! ho!"


Since everything in Ruby is an object, the number "3" is also an object, and therefore has methods. "times" is a method in the module Integer. After looking at the source code for "times" (written in C), I stand corrected, it does NOT use "each". Only classes that mixin the module Enumerable will use 'each'. It takes 3 as an argument (hidden to rubyists), and then yields to the block(printing 'ho!' in this case) in a for loop from 1 to 3.

Why would you ever want to add methods at runtime?

I completely forgot that Rails does this as part of it's "magic." Let's say, for example, you have a table called "songs" that has attributes, "id", "title", "artist", and "duration". Normally, you can use a find() method to find all songs by Eric Clapton in the "songs" table:

Song.find(:all, :conditions => ["artist = ?", "Eric Clapton"])

However, rails will also dynamically add methods, based on the attributes of the table:

Song.find_by_title("Bell Bottom Blues")
Song.find_by_artist("Eric Clapton")
Song.find_by_duration(253).


When you query the database for a record, Rails will create a data object with those attributes available as methods on the fly. This way, there is no configuration or mapping between the databse and your data model objects.

How does Ruby go about deciding which method to execute for ambiguous method names?

From the pickaxe book:
"Ruby looks first in the immediate class of an object, then in the mixins included into that class, and then in superclasses and their mixins. If a class has multiple modules mixed in, the last one included is searched first."

In trying it out with test code, you can only use the scope resolution operator to distinguish between two methods with the same name in two different modules if the method in the Modules were declared static.

What is the type of an object when you mix modules into it?

Let's say I have two modules, "Bar" and "Yak", and a class "Foo" that mixes "Bar", but not "Yak". Using the kind_of? method:

f = Foo.new
f.kind_of? Foo # => true
f.kind_of? Bar # => true
f.kind_of? Yak # => false


So yes, an object instanciated will also be a type of modules that you mixed in.

If I really wanted type checking, what could I do?

You can use the reflection methods, such as kind_of?() or instance_of?(). But since what you're really interested in is if the object will fail on a call that you make, it might be better to to call responds_to?(), to see if the object responds to a particular method.

The pickaxe book warns that you should do type checking if you really have a good reason for it. Otherwise, it's more code to maintain, and has less flexibility in future enhancements.