Wednesday, July 30, 2008

The Search Engine That Could

The cool thing about the technology behind search engines like Google is that it is the source to find ANYTHING. Whether you want recipes, telephone numbers, latest news, or pictures of your favorite rock star, you can type it into a search engine and find the stuff you want. The technology is pretty complex, because you're not just looking for a phrase in a large text, sometimes you need to understand the semantics of the language to pick up on the key phrases or determine the relevancy of the sites you index. It's very hard to get it right. But when you do, you got a money maker on your hands.

Even though we use search engines for pretty much anything online, I think that search engines are not doing anywhere near enough what they could be. Here's what I mean. Search engines are natural and essential when you have a database, and you can market a search algorithm for almost anything.

If you have a database of people's information, you need a search engine to find people. If you have a database of clothes, you need a search engine to find the clothes you want. Amazon, iTunes, Netflix are all high profile web companies that would dissolve into chaos if their search algorithm went bad. And I would suggest that all such algorithms are connected in some way.

Suppose someone wrote on their blog analyzing the moral complexities in the relatively unknown comic Dodobirdman and it gets a lot of page links in the next few hours, getting on the front page of Digg the next day, naturally, when you are browsing for books and you type in birdman, it'll suggest Dodobirdman and automatically spit out the newest volume of the comic, as well as Dodobirdman backpacks, and of course the popular Dodoman key chains. While when the reverse happens, and a book gets rave reviews and becomes a bestseller, webpages that refer to the things related to the book online should get more attention.

So the first idea is that a search engine company should be a search engine company. Sure, website search engines are very different than Amazon's recommendation system or the Digg algorithm, but they are all related. Why should a company spend money to go make the hardware with enough computing power to analyze all of its data, including the staff required to maintain it, or write a svm multiple tree and constantly update it with the latest in machine language research, when they have the option of outsourcing it to a reliable company?

There are many ways of providing such a search engine service and it might be pretty tricky to find the right way. The content and all the "signals" (as google puts it) may be confidential information from the client, and the search algorithm would be the business secret of the service, but the algorithm needs the data to work and when you're optimizing something like that, you're bound to access a little bit of both. One way is to make servers with a collection of different search engine tools built-in, that you can put your data on, as well as getting it processed the way you want to. Even if the hardware isn't top-notch, if your software is unique, companies would buy them like hot cakes.

I can probably write more about the subject, but unless you're microsoft, yahoo, or google, you probably won't be interested, so let's move on to IDEA 2!!!

One of the problems with search engines is the trade-off between search engine effectiveness and privacy. You can find out all of the interests of a particular user, and recommend them everything they are interested in with high accuracy, but you would need training data that people don't really want big-name companies to be keeping in their database. If search engines now can already provide relevant results, imagine what they could do with your private data.

So idea 2 would be to create a client-side search engine the keeps track of things you buy, the searches you do, the kinds of website that you like that does not in any way reveal your information to anyone else. It will be your personalized search engine. When you encounter any kind of large collection, say search result from google or recommendations from buy.com, the local search engine would take those results and reorder the priorities depending on past behavior of the user. Of course, to protect the privacy of its user, it will have to non-discriminately download the information about the things it wants to look for, increasing the bandwidth in a world where bandwidth matters less and less to companies.

If people find what they want, they'll buy more things. So the development of this software (like a browser plug-in, or browser feature) can be a collaborative effort from major web companies that will give the sponsors an advantage of understanding the inner workings of the local search engine for optimization, while still giving the means for startups to take advantage of the local search with little investment.

If this program REALLY behaves itself, maybe it will also be able to expand to giving adword-like little popups when you aren't online at all. It could respond to the text that it sees you typing into your computer, or programs that you have running. If this idea evolves to this stage though, there are many other things you can do with the personal e-butler. It might become so good that you won't ever miss out on any of the Dodobirdman memorabilia, ever again! WOOT!

Monday, July 7, 2008

side view mirrors

Here's a quickee that's kinda related to the previous post.

In a car, you have a back-view mirror, and a rear-view mirror, and even with the 3 mirrors and windows on everyside, cars still have blindspots. Blindspots are dangerous.

If you have driven on mountain roads before, you should have seen some safety mirrors that show you what is around the corner. They are there so you can notice if there are any cars coming, but not necessarily to identify which kind of car it is. Those mirrors are not flat. They are convex so that you can see the widest range on the other side of the bend. So why are side-view mirrors flat?

When you look in your sideview, you may want to tell what is passing by behind you, so it should be flat for most of its surface area. But if the edges of these mirrors are rounded, even though you can't really see too clearly what is there, you can notice if there is something in your blind spot. That can make a difference between being 10 seconds late to your destination and flattening a scooter.... that has a whole family on it.

Tuesday, July 1, 2008

Bird's eye view glasses

Skiing goggles are pretty cool. Since they have to block out the UV rays, the goggles have a lot of reflexive paint, so they come in all different kinds of colors. Yet even if the goggles were yellow, your eyes can adjust to the color, and after a few minutes, everything will look normal again. When you take them off, since your eyes had to compensate for the color, everything looks blue.

Despite how cool it is, people wearing glasses for the first time definitely should not go skiing, in fact, they are a bit dangerous even when they walk. That is because glasses not only refocus what they see, the skew their vision. If you're wearing glasses right now, just take a look at the rim of your glasses, and you will see that the refocused vision doesn't match up with your original vision. Yet your eyes can still adjust to them.

Back in the days when quake 2 was popular, some people would change their field of view to a much higher angle than normal. Even though targets become smaller, you get to see more of what is going on. With training, this becomes an advantage when you can frag opponents before they see you, and not vice-versa.

So, chances are likely that our visual system will be able to adjust if we make a helmet that feeds a 360 vision into our eyes. It can be done with cameras and monitors on your helmet. Birds typically have 300~340 field of vision, but they have little overlap in their vision, which reduces clarity and sense of 3D. So, ideally, there would still be a high overlapping region, but the other regions would be at a reduced scale, to increase peripheral vision. It might look weird if a guy walks around with a ball on his head. But for vehicles, such a helmet would increase reaction time.

Anyone could be trained to use the helmet, probably within a week. You might have to spend some time on hands-eye coordination, like playing catch a few other people, adjusting to the change in vision.

Then you won't have an excuse when you crash into a tree when you're skiiing.

Monday, June 30, 2008

The creation of a new catch phrase!

Aighty, for this one, we'll need everybody's participation. Today, you will witness the start of a new catch phrase! Move over Shakespeare, we are going to change the spoken English language! So here it is:

"When I was my age, ..."

Usage:

1. The current state of affairs: When I was my age, I was the coolest kid on the block.

2. A statement of the norm: When I was my age, people didn't steal other people's girlfriends.

3. A sarcastic response to a well known fact. When I was my age, a nickel only cost a nickel. (meaning: thank you, captain obvious)

As of right now - July 1, 2008, there are Google 17 entries for "when I was my age":

Let's see how long it will take for this phrase to catch on. 5 years? 10 years? The countdown will officially stop when it gets picked up by a writer for a movie or tv show. I want to hear people saying this EVERYWHERE!

So people! Get to it! Be a part of the history of the English language and say it to everyone you know!

Sunday, June 29, 2008

online videos

I love online videos, they're so cool. Except when I'm at home where the internet's ridiculously slow. Then they just become sooo not cool. They make you wait and wait and wait until you accidentally close firefox as you try to click the maximize button to enjoy the video, and when you finally find the page in the history, the video needs to be loaded again...

But... I dunno, even with fast internet, the online videos doesn't really stream well. I get bursts of download stuff, and then nothing for the next five minutes. So with the internet being so unreliable, is it okay if there's a "preload" button for each flash video? When I find a video I like, I open it in a new tab, start it up, then pause it, and then go on checking out other stuff until it's done loading. Do other people do that too? Well, I'm lazy. 4 actions are too much. why can't there be a html link with a GET entry to tell the flash to start loading the video? Then I'll be able to just ctrl- click on that link, and keep checking out the other cool videos, and go back to that when it's done loading.

I've been using veoh.com's veoh tv. It's pretty cool, it lets you preload the videos you wanna see, and you can put it in a playlist and watch all those videos together. GREAT IDEA! Well, now that you made internet videos into tv, why don't we go ALL the way? yes. Make the internet into a tv channel. uh huh. REVENGE OF THE COUCH POTATOES!

Here's how it'll work. First, go to the top blog aggregator.. whatever it is. Use RSS to figure out a schedule for the posts. Go download the text, and pipe it into your favorite text-to-speech software. Display the corresponding media according to how it was arranged in the post. There we go! blog-to-tv converter. Now, if someone has even more time on their hands, make the text-to-speech software also produce a video of someone saying it. Depending on the mood -- which you can find out by matching some keywords to the blog or the post. You can have your own news broadcast just by typing up an article, and uploading some pictures. On the client-side, we can make couch potatoes just like that. But if the content creator wants more control, there could be a css-like entry, except it will be for how to display the page in video.

Okay. But the magic of internet is that you can choose what you want to see. The HT in HTML is about how a web page connects to another. So, to make an tv service outta the internet, you can't do what tv does now with numbers as channels. Web content needs a different method of navigation. Opera had a feature that showed all the links in a webpage, but just listing them off would give too many links for it to be usable. Find all the important ones, or categorize the links according to their role in the webpage. Navigational links in the webpage should always be accessible. If a link shows up where the automated reader is reading, that should be easily accessible too. Search should be incorporated as well. It should allow you to easily search the key phrases in the text.

The internet is better than TV in every way possible. Media companies just need to figure out how to make it into a good consumer product. So GET OFF your lazy butts and make me a product, so we can go back to the good ol' days of sitting on the couch and being lazy butts!

Tuesday, June 24, 2008

Can you hear me now? No? Good!

Don't you just hate it when you go to church or class or meeting, and then your cell phone goes off, and then everyone looks at you weird, and then they start giving warnings to tell people to turn off their cell phones? YA awkward.... So here's one for whoever's trying to beat Apple's iphone.

Cell phone! you KNOW where I am. I personally don't mind at all (and I doubt many people care) if you snoop on my life a bit and find out where I go, listen in on the surrounding, GIVEN that you don't tell everyone and their moms, especially not the cell phone company CEO's mom. So help me by following these simple rules:

1. Check my schedule --
I scheduled an meeting with Mr. Mai P. Lowe in the afternoon at one. It's important. Go to silent automatically.

2. Check my location --
If I'm in a school building, in a classroom, and sitting in the front row seat, I want to make sure I don't miss a call from my buddy asking if I left for class yet. YA. Go to silent.

3. Check the surrounding --
The ambient noise is really quiet, only one voice is speaking with great emotional distress. Que the theme song for Naruto! WOOT! no. Go to silent.

4. Respond to signals --
Make a cross platform device that will signal cell phones to go silent, and make sure cell phones obey it! If the CEO's of cell phone companies won't cooperate, call bomb them while they're all at a meeting discussing why they don't need the device.

Use machine learning techniques and learn where the user wants the cell phone on silent -- like when he fumbles to get out his cell phone as soon as possible to turn it off. Of course, when you're trying to be smart, always show the user what you've learned so the user can change the setting manually in case you were wrong.

Here's another thing... I want my cell phone on vibrate because even though it has to be quiet, I would like to know if someone needs to find me for something important. So, first off, if I'm carrying the phone and didn't realize that it's been going off for a long time, it's okay, make a little beep.

Second, can we have a cell phone service for emergencies or really important calls? Like charge an extra cent per minute or something, but make sure that the ringer is on loud enough on the other end. When the automatic response comes up for the voicemail, add one more option for important calls. Of course, calls from Mr. Boss will always be important, especially when my alarm clock didn't go off in the morning. Make the ringing louder and louder until I respond. It'll save more than a few lives, it'll like save bad murder mystery novels that need non-responsive phones as a plot device.
(NOTE: if you like this idea, PLEASE REMEMBER to allow users to disable important calls from their obnoxious friends.)

Will you look at that! Right now my schedule says: sleep, my location: bed, so interweb, please go silent!

Monday, June 23, 2008

Goal Achievement Programming Language -prologue

Okok, this is going to be one that you'll get to see to more than vague ideas. Here's one that I'll be trying to really carry out. So if you have any suggestions, please lemme know, I'll try to put it into the project!

Programming. Did that scare you off? Well, it should. LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); How about now? Well, pretty much every program in windows needs that line. It will take you forever to figure out what each of those really mean, which you will need to do to for ANY kind of simple windows program. And, when you finally do know how to use each argument, CONGRATS! that was only the first line. you have 9,999 to go to make your tic-tac-toe game. WOOT!

Now you see why the biggest software company in the world have trouble making a new operating system? Yes, you can write "Hello World" in your favorite language. No, you won't be able to write a commercial program anytime soon.

There is a great book on programming, called "the Mythical Man-Month," and in it was an article about the hope of developing a silver bullet that will kill the werewolf that is programming. Programming projects look all innocent and friendly at first, but whenever the moon shines, they turn into creatures that will rip you from limb to limb.

Yet, why does it have to be so complicated? What is programming? "Programming is planning how to solve a problem. No matter what method is used -- pencil and paper, slide rule, adding machine, or computer -problem solving requires programming. Of course, how one programs depends on the device one uses in problem solving." (http://bytes.com) Okay, who knows how to explain how to cook something? What you explained is a plan to solve a problem. You know how to program. Who knows a winning strategy for tic-tac-toe? A strategy is a plan. You know how to program. Who has written a schedule for an assignment? That's a plan. You know how to program. Get the idea? You know how to program, no matter who you are.

So why is it so hard to program? Well, let's look back to the example.

... WndProc(...) is a function call. LRESULT is a "long" integer that saves information about how it ran. CALLBACK is to make this function callable by the windows kernel which you'll need to know about whatever happens in the OS.... etc, etc.

and what did you want to do?

Make a 3x3 board, click on the board, making either an "x" or an "o," and display "x wins" when there's a line of 3 x's.

So what is programming? Translation. To "program" your little sister to bake a cake, you have to first know what she can understand, and explain the recipe to her in her language -- "open up this case-y waysee, pour it into the bowl-y wolee, add water and mix-y wicksee". What makes it hard? There are too many details to understand for computers.

In our first example, "LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)." You need to know the structure of windows programs. You need to know how to set certain properties. You need to know LRESULT has typically been used for windows procedure return values, but can be #define'd as something else and give you weird error messages when you compile. The problem, the big problem is that how we think about windows isn't how the computer thinks of windows. So when you want to resize a window, you're clueless about what to tell the computer.

Now, some of it is necessary. You need to know that Windows calls each program and sends messages (like mouse-clicks) that you need to respond to. Others aren't. You shouldn't have to know memory management, stacks, scheduling algorithms. They are important, yes. Necessary, no. You should be able to tweak each aspect to work exactly the way you want it to, but you shouldn't HAVE to program the details everytime.

A programming language should allow you to describe the algorithm (how to do it), and a good one should allow you to not worry about anything else. When you're playing chess, you should focus on what pieces to move, and not how you're going to signal your arms and hands to move your pieces.

The solution? Program the algorithm, and not the process. That's it. There's your silver bullet.

Shuffle the cards, then deal out the cards.
-- This is an algorithm.

#include "Cards.h"
int main(void){
Cards myDeck;
shuffle(myDeck);
deal(myDeck);
return 0;
}
-- This is a process. It looks like an algorithm, but this is a totally different animal. It creates an object myDeck, then calls two functions on the object. To the compiler, the names mean nothing. Even though you want to create a set of new "Cards" named "myDeck," shuffle it, then deal it, the computer may understand it as create a nuclear bomb, set it, then detonate it in insert-favorite-city-here. It all depends on what you told the computer "Cards" are, and how to "shuffle," and how to "deal." You see? This is programming a process, it includes EVERY minute detail about how this program will run. Don't be fooled by the compiler, linker, or the included files/libraries. The entire process of register assignment, stack creation, memory allocation is included in this code. They are just hidden for readability.

Let's look at the algorithm again, because I kinda cheated. We didn't specify what "shuffle" and "deal" was. If they are function calls, we've just created another process. What you meant by "shuffle the cards" doesn't mean you do EXACTLY what you did last time you played poker, including scratching your itchy arms (calling some specific function), but "make the cards random", which is what shuffle means. Just as long as you got the cards random, it doesn't matter if you riffled the cards, pulled out a bunch and put it on the top, or played 52 card pickup, just as long as it is done. The algorithm actually means:

Get the cards randomized, then get the cards dealt.

This is goal achievement programming. Specify the sequence of goals to accomplish, and not the functions to call. Tell the computer the algorithm, and let it figure out the rest. Not too hard right?

There's a reason why "Artificial Intelligence" is a programming problem. Intelligence, regardless of its form, at its core, is programming. Anyone intelligent enough to speak could learn how to program IF you can make the computer understand you by only telling it the algorithm. "Open a new window, draw a 3x3 grid, make each box clickable." Your little sister can understand it, so why can't a computer?