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?

Sunday, June 22, 2008

RPG's rock, are cool to throw at boys

RPG's have been around for a while. It's a really funny thing. You could hear "I've just used up my mana replenishing HP for my team, " and it would be so common, you wouldn't even know which game they were playing. However, 20 years ago, "mana" was the bread-like thing in the ark, and HP was a novelist that had a cool last name (Lovecraft for you lame-o's). Now almost every game have some kind of hp and some kinda mana and some kinda hp replenishing thing.

The idea I've got today isn't to eliminate the tradition and make a game without hp or experience or levels, which are great for a progressive interactive game, but just to change the environment a bit. Make RPG's for sports, or racing, or cooking. No, no, not like the way they do it now, an action game with some skills, and some stats for cars and players. Like a real RPG, with random encounters, items, HP's, and missions.

Look how cool it would work out. You "walk around" with your car on the world map, and randomly encounter 3 patrol cars. The first round, you were surprised and the three patrol cars bump you for 15 damage total. It's your turn, and you cast "turn into alley," the spell misses one patrol car, but causes the remainding two to crash into obstacles dealing 30 damage each and removing them from the chase. The last enemy casts "NOS," bumps into you from behind, and forces you to use your own NOS, minus 20 mana and 20 health for you. You use the item oil, and cause the enemy to slide on the slick pavement and crash into a parked car. Victory! You gain 70 gp and 100 exp and find "motor oil". You see, it'll work.

Okay, whatever... right? It's just the same ol' stuff, except some unimportant stuff are changed around. But with this, you can do a lotta cool things with an already accepted system. Developers wouldn't have to waste money on trying out different systems and testing it out to make sure it's fun then changing the whole thing when it isn't. They get to focus on the story and the graphics. You know how some people like to see cool car chases, but aren't nimble enough with their gaming thumbs to be good at racing games? Well, the random battles can be like a racing simulation, but controlled by an AI. Games are supposed to make people feel like they are a part of the action. Programmers can make that part of the action really cool, without making it too hard for players to enjoy it.

Also, with a new environment, the RPG genre would have more ways to innovate. Say you have a basketball rpg game, where positioning matters a lot. If you can make a rpg outta that, future sword-and-magic rpg games would be able to incorporate some positioning ideas in different ways than before.

If the Japanese can make season-long drama's about random stuff like cooking and hair-cutting and architecture, why are rpg's always in the same fantasy world? Here is a system that has withstood the trial of time, but kept away from its true potential. So equip your compiler, cast level 3 haste on your party, and make us a cool game!

Tuesday, June 17, 2008

desktop-like Desktops

I know it's hard to believe for young'ens, but most of you out there probably remember a time before all the computer terms. Remember the "information superhighway"? Or the first time you used "bookmarks". Now, what about "desktops"? like way back in windows 3.1... when you start windows by typing "win" do you remember first hearing about those?

Wasn't that an interesting way of introducing a new user interface? See this picture thing? It's just like your desktop, you can put stuff on it and it's where you can do your work. Except back in 3.1, computers weren't very impressive. The "desktop" was just a wallpaper image with files and shortcuts.

Fast forward fifteen years, to Windows Vista, Apple Leopard, Ubuntu H. The "desktop" works exactly the same way it did before -- namely, nothing. "Go to Desktop" actually means "clear off all these pesky windows." Oh, there are little things here and there, like the pretty windows effects, cool alt-tab animations, and apple has them cool things for show-offs to show off, but it's pretty much the same ol' useless desktop that you'll need to clear off every few months.

When I'm in the office, whether I'm busy filing papers or pretending to file papers with a stapler and some post-it notes, my desktop is always packed with stuff I need. Student records, telephone book, pens, blank sheets of paper, a sycophant made out of 7 staples on a sticky note, it's all there, right where I need them.

On Windows, when you are trying to be productive, you'll probably have word, email, online thesaurus, some classical music, and minesweeper all opened at the same time. You don't really want your aim on (at least not with sound), and probably want excel and pdf to be preloaded so checking some xls files won't take up 2 minutes each, and you ABSOLUTELY do not want windows update to restart your computer for any reason(unless you're really desperate for an excuse).

It would also be nice to have friendly timer that reminds you of lunch breaks and when you get off work and when your boss is in a meeting. You'll also want to access all the latest documents without searching through each subfolder in "my documents."

Yet, this is only if you're at work. If you bring your computer back home, you don't want to look at all the files that you almost finished at work or any of your TODO lists. It just needs to open up the walkthough for mass effect and start the game.

So, to design a desktop-like Desktop, the experience has to be about productivity -- what does a user need to do their work? How does an operating system help the user to get stuff done? We have the machinery, just gotta put it together. Why did people care about tabbed browsing? It's the SAME EXACT thing as having multiple windows opened, except that you can actually read the words on the toolbar when you open more than five webpages. Organize the desktop programmers!

First off, programs. Each program needs to have different session information. Look at unix. Boot up, and it'll automatically load the programs you had when you shut it off. That's great, but let's have more of that. Give users the ability to save the session and come back to it later. I'm opening up wikipedia, dictionary.com, google, work gmail on firefox, and I'm gonna have a sleepy music playlist on winamp for work. At home, I want to have ebay, personal gmail, amazon.com opened on firefox, and some cool music playlist on winamp. If your program have sessions, let the user save them.

Second, workspace. Don't have just one, have many. Look at how cool compiz fusion is. Linux/unix have had them around for ages. But it's not just a cool, geeky feature, it helps the user organize the programs that are running. Which also means each workspace should have its own session information. Place the time widget on the workspace for work, and don't put it on the workspace for play, and remember it the next time I get on those workspaces. Make it easy for the user to change between different workspaces. In fact, forget about "creating a new workspace" and "closing this workspace". Do it automatically. When the user leaves the workspace for a set period of time or need the resources for something else, set that workspace to standby. Save sessions, autosave documents, copy the memory to the disc and free the memory.

Third, files. Each workspace should remember the files that have changed when it's opened. If the os doesn't want to do it, save enough information someplace and let other programs suggest the files you'll be interested in. Have I ever told anyone how much I hate organizing my desktop? URG! common, stuff I put on there from 8:00~4:00 are for work, and stuff after are for play. If I only accessed the file once ever (like an installation file), it probably doesn't need to waste space on my cluttered desktop. It's common sense, people! Now, of course files needs to be saved somewhere so that you can find it from your file directory. But is it really necessary to have the desktop to only contain files in the c:\documents and settings\username\desktop ? Having a video in the background, and do a little google magic to find out what programs I wanna run and what files I want to use, okay?

Speaking of which, here's a little tangrant on files -- WHY ARE THERE SO MANY FILES!!!!???? Out of the 5 gazillion files I have on my hd, I created 50, regularly use 70, want to keep 90, and what are all the other 5 gazillion minus 210 files doing there? They're just waiting for me to mistakenly delete them and destroy my computer. Yahyah, I know what you're thinking, you need those files to run windows, and it's the data file for such and such program, and you need the dll's to be separate files so other programs can use it, blah blah. WHO cares!!?? The user only wants to know what it is and what to do with it. Windows has the right idea when it hides system files, but what about other program's "system files"? Use metadata and organize the filesystem, which programs uses which files, which ones are supposedly user accessible, and which aren't. Unless they are 1337 programmers, users probably won't be changing any binary files, so don't let the user or other programs change binary files with any program without a sudo. It's user permission for programs. File x belongs to program y, other programs may read x, but only program y can change the file. Linux/unix uses home directories to separate user stuff from system stuff. But what if I want to see which files WoW has accessed, or I suspect a program is infected? Permissions / easily accessed log files will go a long way.

We use computers everyday but with the way we have to bend over backwards to get the simplest stuff to work the way we want it, it's like computers are using us. Here are just a few of my ideas to make the desktop better. So... Anyone up to the task?

Post-it art

Post-it-to-the-staple people!!

A good day at the office


A bad day at the office

HAR HAR HAR


Why I am forced to make more ...