Tuesday, March 31, 2009

An Idea: Pecognize, Recognize People

Write a web service that reads a picture and recognize the people in it.

The web service will retrieve the publicly available details from facebook, linkedIn and other social networks for the recognized people in the given picture. Then License it per query.
Assume you know nothing of recognition algorithms, and start fresh. Bring in your kids to help. They have great imagination power and they are not limited by your knowledge barriers.

I would call it "Pecognize" because it recognize People.
Enjoy!

Sunday, March 29, 2009

Bad ideas stick for a very long time

A kid asked his mother, "Mama? why are you cutting the meatloaf like that before you put it in the oven?" 


The mother didn't know the answer, but she've seen her own mother do that. The mother called her mother and asked her the same question. Her mother also didn't know, she said that her grandmother used to do that. So she called her grandmother:

"Ohh dear, I was cutting the meatloaf so I can fit the pieces in my small oven."


Another example

Screen Savers:
Screens were sensitive, when the user doesn't change the display for a long time, the screen get burned. Modern screens don't have this problem anymore, still screen savers are there.

The punch line is only when we dig for the real reasons, we can easily substitute the subject.


Think of a technology we still use because of some buried reasons?

Friday, March 27, 2009

"Coming Soon" might jeopardize your niche

People hate to wait. If you told them that your product will be launched soon or your website will be coming soon. It better be.

If your niche stretched more than soon, most of the people will leave you. Then it will be too late for your new website or your fancy features to bring them back to the game.

So don't notify everybody that your coming soon, unless you are.

That goes for under construction websites too.


Thursday, March 26, 2009

An Idea: Geographic File System (GeoFS)

A file system is a technique your operating system uses to organize the files in the hard disc.

Microsoft started the FAT (File Allocation Table), the idea was simple. A table describes the file and where its parts are located in the hard disc sectors.

Then it invented the NTFS (New Technology file system), WinFS (Windows File System) Making the windows files locate even faster and very appealing.


I want to propose a new file system. The (GeoFS) Geographic File System, this will support GeoUI (Geographical User Interface) idea.

From my experience with files, I care about these parameters:
  • I want to see files I usually work on (Last modified/view date/time) (Spider net)
  • I want to see how large the files are (I don't want to click to see that show me that instantly)
  • I want to remember where I placed my files
You may add to the list. And here is the idea.

In GeoFS I will try to remove the concept of folders. GeoFS supports files only (KISS keep it simple)

Lets see how this goes.
  • We will have a big white Sphere, lets call it the File Space.
  • You can pan and zoom to this sphere as in Google Earth exactly.
  • You can divide your File Space as many areas as you like and label them. Example here is the work area, here is the personal area.
  • You can move any files into any area.
  • Files appear as icons, text files have the text icon, video have the video files and so on.
  • Larger files appear as larger icon. So as I pan and zoom in the File Space sphere I can intuitively see which files are large in size and which files are relatively small.
  • Files that you use frequently or opened, will always show up at the files space surface without your need to zoom in.
  • As you zoom in, the older files will start to appear (with the date and time on the upper right of your File Space). You can reverse this view to show the older files first.
  • You will have one text box up to type a file name. This will show the searched files on the file space sphere as you type.
  • Newer files will have a shiny look, older files will start to get a spider net look. As they get older the spider net get thicker.
  • Finally you can have three modes,
Size Mode: Show me large files first and as you zoom I will get the smaller files (you may reverse this too)

View mode: Show me the files I viewed recently (at least today) and as I zoom I will get the older files.

Edit mode: Show me the files I edited recently (at least today) and as I zoom I will get the older files.

Now guys you may expand on or critic on this idea, I would love to hear you all.



Tuesday, March 24, 2009

Speech Recognition: Why everybody is heading north?







This has been a hot topic for a while, but I don't know why I didn't "yet" seen the best software of the speech recognition spreading.

My Mac has a built-in speech recognition it is good. But still most of the time it doesn't recognize my own voice.

Lets think out of the box. Forget we have current speech systems, forget the current algorithms, forget everything and start fresh. Lets reinvent this together.

When I talk to you in English you understand me. Sometimes you don't if my accent wasn't clear enough. However, eventually you will get it.I want to talk to my machine as if I am talking to a human. I don't want the machine to feel, I just want it to understand. Whether I told it to "Quit everything" or , "Close everything" or "quit all applications". Whether I or my mother said it. It should get it if the machine understands English.

If I learned a new word, say "petrified" in English from Roy. I will recognize the word "petrified" from anyone. I won't say, sorry I only know Roy's
version of "petrified".

Perhaps we shall start from the capturing process (the computer Ear). How do I know if the computer is capturing my voice correctly?


"Open the control panel", the machine should open it. That's it. No room for mistakes.It think the current systems were driven by the technology and lost in the bit-by-bit and the neural networks analysis. I know this feeling when you get lost in the code and your left brain take the lead. You can't be creative while at that mode.


So Why everybody is heading north? Is it because there is one way to do Speech Recognition?

Its all the same:
Huffman started compression, Winzip, Winrar, Powerachieve followed the same approach.

Someone started voice recoginition, wrote an algorithm, now everybody is treating it as a Bible and heading north. 



EDIT: Siri, Google Voice and others are all new technology that hits this field pretty hard. But not hard enough.

Do you like some cheese with that?

I had all these questions in mind when the Mcdonald's guy asked me, Do you like some cheese with that sir?

Do you like to find all photos of you in your machine?
Do you like your machine to execute everything by mere speech?
Do you like your machine to recognize the pictures of you or your friends and automatically pull their profile from facebook?
Do you like your machine to recognize porn pictures?
Do you like a website that finds a song by just singing or humming it to your machine?

Do you like an Operating System that can intuitively show you any option you want instantly?
Do you like to have a program to compress your 100 GB music collection to less than 1MB of size?
Do you like a social network that visuals all your friends and your friends of friends intuitively and help you connects faster?

Monday, March 23, 2009

Minimize If statments in your code

If you are a programmer you will know how much you hate to see them in your code or how much you hate yourself when you have to read a code stuffed with Ifs.

Someone attempted to save our life. He came and brought another form of If statement and called it Select, " aka Switch in C and Java". It did organize the code to an extent, but still the lines of code are not getting any shorter.

I will propose a way to minimize the number of Ifs in your code.

We use an If most of the time when we want to run a function based on a choice or an option. If this is your choice do this, if that is your choice do that.

Here is a typical ugly if statement.


Dim sChoice As String
'Select from a drop down list
sChoice = cmbOptions.Text
If sChoice = "Email" Then
Call doSendEmail()
ElseIf sChoice = "FAX"
Then
Call doSendFAX()
ElseIf sChoice = "SMS" Then
Call doSendSMS()
ElseIf sChoice = "MMS" Then
Call doSendMMS()
ElseIf sChoice = "Print" Then
Call doPrint()
Else
MsgBox("Invalid choice.")
End If


Create an Interface and call it IAction, write a sub call it Execute

Public Interface IAction
Sub Execute()
End Interface


Now create 6 Classes that implements IAction,

ActionEmail
ActionFAX
ActionSMS
ActionMMS
ActionPrint
ActionInvalid

In the execute method write the code for each one
I'll help you with first one

Public Class ActionEmail
Implements IAction

Public Sub Execute() Implements IAction.Execute
Call doSendEmail()
End Sub

End Class


Now go to your main code and write this inside of the if statements

Dim sChoice As String
Dim pAction As IAction
'Select from a drop down list
sChoice = cmbOptions.Text
pAction = CreateObject("YourProject.Action" & sChoice)
pAction.Execute()


That's the new code!

You have all your code separated into maintainable classes and very easily located. And Your main code is much easier to read.

Enjoy.

Sunday, March 22, 2009

An idea: "Geographic" User Interface (GEOUI)

No its not a spelling mistake, I meant Geographic not Graphic.

This post is an attempt to reinvent GUI, or at least enhance it.

Graphic User Interface (GUI) is a great invention, but with more and more options, forms get crowded, users get confused, options are hard to find. Cody illustrates more of this here.

I will propose the Geographic User Interface (GEOUI) as a Sphere. This Sphere represents your application or operating system. Divide this sphere into sections for categorization purposes. Place the most commonly used (basic) options as icons on the surface of the sphere. The user has the ability to zoom to the sphere by using the scroll. He can also pan by holding the left click and drag the sphere. This way he can navigate through the sections.

When the user zooms to the sphere, more options start to appear, you may place the advanced options here (The scale concept). So if he is looking for an option in the Control Panel he will pan to the control panel section and just scroll up to find his option. Easy and simple.

Double clicking the icon will open the option. Now here you can switch back to GUI or create some nice way to represent your forms in the Sphere. You may want to open another Sphere but this will consume more RAM. (Edit: I proposed a new file system to achieve this, Read here for more details Geographic File System GeoFS)

The implementation is easy. If Google Earth is an open source I would remove the earth and replaced it with a white sphere leaving the rest of the tools as is.

Now I am going to add my options as placemarks with regions to scale them up. The user may want to change the color of the sphere. Thats it, the GEOUI is ready.

I already mentioned a hint about this idea in the Golden Spoon application post. I wanted to elaborate it more here.

Wednesday, March 18, 2009

Research: The Human API (Human Enhancement)











This is some sort of Human Enhancement, Develop a device that could be attached to a human organ. This device will read the nerve signals passing through this organ.

The device should list all nerve signals received by this organ with details such as (Destination Cells, source, signal strength etc.)
Later, upgrade this device to be attached to the brain, this device can command the brain to send signals to a particular cell (perhaps you can develop a Cell Identifier using the gene or DNA) or a collection of cells. Then create an Application Programming Interface (API) that will interact with this device and publish the API for the public.

Now programmers can innovate, for instance they do something like this


Dim pCell as IBodyCell
Dim sCellID as String = "aj3lk28cfkfdjdh297hc2" 'Gene/DNA
pCell = deviceapi.getCellByID("aj3lk28cfkfdjdh297hc2")' itching signal, the person will feel itechy..
pCell.SendSignal(Low)
People can now write applications to do anything, for instance to cure Cancer.


Dim eCells as IEnumBodyCells
Dim pCell as IBodyCell
'This will return a collection of cells for hand
eCells = deviceapi.getCellsof("thumb")


For Each
pCell In eCells
If pCell.isAbnormal() Then
'Disable this cell from growing, avoid infecting the rest cells
pCell.DisableGrowth()
End if
Next


Its an idea. I don't have the knowledge about biology and that is great because it allows me to imagine. Biologists have more difficultly in imagination because they have a lot of knowledge and this knowledge installs rigid restrictions to imagination



If you liked this post you probably will like DeusEx Human Revolution game. It is all about how we can implant mechanics into our bodies to enhance it.




Apple Re-Invents the Keyboard

It might take time to catch on fire in the business world. But its there, lets wait and see.

The MacBook Wheel, Apple replaces the keyboard with one giant button.

I think it will be a very difficult transition. Some people will hate it. Some people will love it (I did).

But at least here are some guys who reinvented the keyboard for instance!!!!!

Reinventing the wheel is not something weird, its innovative. At least they tried, let us see what will happen.

Nokia Engineers VS IPhone Engineers

I would like to compare my wife's IPhone with my Nokia E71.

IPhone has one button only and it can do everything my 43~ buttons NokiaE71 can do.


I can almost hear the engineers chatting:

Nokia engineers: " Yes! excellent, HAHA, I liked this calendar button, its handy. AND the contacts button!!! I LOVED IT. Keep in mind guys the more buttons the better, our users want to see everything at their sight. (Sir, I was thinking if we can remove the back butto...) You want What??? Remove the back button?! Are you out of your mind? It worked for more than 20 years and now you wanna remove it!? (but sir..), I don't want to hear anything, You are fired!, "

IPhone engineers: " Remember guys we want to make a phone with only one button, KISS keep it simple, think out of the box. Don't let your diodes and transistors get the best of you OK?!!"


IPhone is an excellent "right brained" invention.
One button only, imagine.

I love Apple, I wish I could work there.

What if someone can make a TV with a one button remote control? If you watch Tom and Jerry you will notice this TV Remote control with one Red button. I wonder if someone can make something like this.

Tuesday, March 17, 2009

Having a goal is a pain

Before I launch my Ceed and the geShout ideas, I was feeling comfortable and relax and content.

Now, I am in a pain, real pain. I have this feeling everyday. "Quit and relax, you may want to enjoy a game or two in playstation? or sleep early? You are still young! OK, OK no problem don't quit but at least postpone! postpone the work to the next week or the week after that."

While I work in the geShout prototype I face a lot technical problems, (how to call a javascript function from PHP? for instance. ) then I continue to face other problems, I need to search and work. Its pain.

Yes this is a dip, I remind myself of that all the time, the other side of the dip is really fruitful. There must be a promising world.

If you don't have a goal, you can rest peacefully. If you have a goal you will feel the pain its normal, its beneficial, it pays.

Am sure it will pay...

I would like to rephrase the title,
Having a goal is a fruitful pain.



I will continue .. What about you? Will you start your goal? already started? or finished? It must felt so good when you finish.
Edit:
Yesterday I finished an important task in the geShout prototype, I rewarded myself with two hour relaxation with my favorite episodes.
It feel so good when you achieve something.

Monday, March 16, 2009

A period of time

If you won a prize at a competition, you will be happy. You will remain happy for a period of time then you will be normal.

If you lost a sum of 1000$ in the street (keeping in mind you are not a millionaire), you will be disturbed. You will remain disturbed for a period of time then you will be normal again.

If your neighbor's kid broke you car window, you will get angry. You will remain angry for a period of time then you will be normal.

If you listen to a classical music, your right brain will take the lead. You will remain in a creative and simple and romantic and strategic and out of the box mode for a period of time then you will be normal again.

If you spend 2 hours writing a C# program, then your left brain will get the lead. You will remain in a focused and analytical and hunger-for-detail mode for a period of time then you will be normal again.


Now compare all periods above. Some of them are great to make decisions at, some of them are really bad. Some of them rarely happens and when they happen we must use them to do something remarkable.

Is there a name for this period of time? If not choose one. Because I did.

Sunday, March 15, 2009

The Fish Story

I would like to share this really nice story that Garr Reynolds mentioned in his PresentationZen book.

When Vijay opened his store, he put up a sign that said: "We Sell Fresh Fish Here." His father stopped by and said that the word "We" suggests an emphasis on the seller rather than the customer, and is really not needed. So the sign was changed to "Fresh Fish Sold Here." His brother came by and suggested that the word "here" could be done away with—it was superfluous. Vijay agreed and changed the sign to "Fresh Fish Sold." Next, his sister came along and said the sign should just say "Fresh Fish." Clearly, it is being sold; what else could you be doing? Later, his neighbor stopped by to congratulate him. Then he mentioned that all passers-by could easily tell that the fish was really fresh. Mentioning the word fresh actually made it sound defensive as though there was room for doubt about the freshness. Now the sign just read: "FISH." As Vijay was walking back to his shop after a break he noticed that one could identify the fish from its smell from very far, at a distance from which one could barely read the sign. He knew there was no need for the word "FISH."


Focus on the core, remove the unnecessary. Be Simple. Yes, it hurts to remove the really cool items, but you have to if its not as important as the core of your message.

Saturday, March 14, 2009

Be Core ... then be Cool

When you prepare a presentation or develop an application or maintain a website design or write a report. You have a lot of thoughts in mind. You know a lot. You want to show others that you know a lot. So your presentation or your application or your website or your report get overwhelmed with your details.

Then, perhaps, you wonder why others suffer
when they use your work.


You like to show the cool stuff (I do, alas), fancy transitions, new controls, you say to yourself "YES, I won't leave any white space there (6) (6) (6) , fill everything, yes I'll put my logo here. No I don't want to say 'I prepared 10 items to enhance the database' I'll use new English words, hmmm right click ->synonym, yes exactly this is much better 'Below is a list of 10 items I have been compiling for the rest of last week for enhancing the database', much better."

Be Core. Be Simple and to the point. Have the guts to remove the unnecessary stuff (you know them). Believe me, I know it hurts, its not easy, these stuff are cool, but they are not core! they distract others.

Be core, first, then its OK to be cool.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. Antoine de Saint-Exupéry


The deaf frog technique: use it at the right goal

There were two frogs leaping around in a swamp. Suddenly they fell in a very deep slippery hole. All the frogs gathered around the hole, astonished by how deep the hole was. It was clear that the two frogs had no chance in getting out.

The Frogs advised them to wait, and if they were lucky a human might pick them out.
For five days no one has showed up, the frogs kept gathering around the hole everyday to see the two frogs.

At
the sixth day, the first frog decided to try to jump his way out. He kept trying, clinging to any thing but he never made it halfway, the rest of the frogs outside the hole kept telling him its impossible to exit and it is better to wait and there is no other way out.

Eventually
he gave up, sat on the corner of the hole, and died the next day.

The
second frog, seeing his friend, to everybody's astonishment he kept jumping trying to reach the surface, despite the discouragement of the rest of the frogs and all what they said to the first frog. He, surprisingly, made it by double jumping on a broken stick.

The rest of the frogs gathered around him surprised how did he made it and why he didn't listen to the them and gave up like the other frog? The frog nodded and explained by sign that he was deaf. Unlike the first frog, the second frog thought that the rest of the frogs were encouraging him to get out. That's why he kept on trying.

Sometimes, if you setup a decent goal. You have to ignore those who let you down and focus on those who energize you to reach your goal. Take the valid points and tips for yourself and throw the rest.

However,
that doesn't mean that you should never quit anything. No. You have to quit (or postpone) a lot of unimportant jobs and focus on your long-term goal. Learn how to win.

Thursday, March 12, 2009

The back of the Napkin

This book is what shifted me from pure IT mindset into business entrepreneur and marketing thinking.

Dan Roam lays out a very neat architecture (SQVID) for solving problems using pictures (simple drawings).

Sometimes we fail when we use complex graphics and 3D charts and hard statistics to make a point or to deliver an idea or solve a problem. By drawing one simple picture step by step you can deliver that idea or help solving a problem by eliminating the complexity behind it.

I recommend reading it.

Enjoy

An idea: A website like StumbleUpon! but for songs only







Create a website like StumbleUpon! but only for songs

You select your favorite type of songs, (i.e. Romantic, Classic, Rock, Pop). Then you stumble!, a random song from your favorite type (English or Arabic or Spanish etc.) will be directly played at your browser. This way you can listen to new favorite songs all the time.

There will be a link to download the song. There will also be a feature to Auto-Stumble (get me the next song after this song finishes).

You may upload songs from your machine or from a link. Don't worry your name will appear (uploaded by you) so people will see that you have added this. And then connect with you share things with you add you in facebook!

I think this will really connect people together.

Wednesday, March 11, 2009

The golden spoon application

I define the golden spoon application as the easiest and the simplest and the most seeming application to use.

I didn't yet seen an application like this. You have to click, click click, click click click, to achieve one task.

How many clicks you hear at your office in a single day?

Even I do this in the applications I write, its just in our nature as developers, (or maybe its the way Microsoft wants us to write programs with each release of a .NET framework).

I just place menus, sub menus, sub sub menu, Trees, Sub Nodes, Sub Sub Nodes, Sub Sub Sub Nodes. Lists, Sub Lists, Sub Sub Lists, Reports, Sub Reports, Sub Sub Reports.

Its just like I tell the user, click, click click, click click click! Yes just die lousy user.


Here is a quick comparison between some of the applications:

ESRI ArcMap

To Zoom in ArcMap

  1. Activate the Zoom tool by clicking on it.
  2. Click (and hold) on the Map and drag a Rectangle.
Google MapTo Zoom in Google Map

  1. Move the Navigation scroll up.
You will tell me that there are keyboard shortcuts to do so? Yes but the user doesn't know them nor see them.

Open System Preferences in Windows
  1. Go to Start
  2. Control Panel
  3. Click System
Open System Preferences in Mac
  1. Go to Apple
  2. About this machine.

I liked PragmaTech last post about the GUI Where he explains if GUI really make the applications easy to use or the DOS age was much better?

The problem with fewer clicks is that we have to place every single option in front of the user and that is yet another problem, users don't want to see everything. They get confused.

The Golden spoon application is a fantasy we want to reach. We want to reach this level where the user can just think of something and the application will feed it to him with a golden spoon.

Suggestion: The Spherical GUI
How about making an application interface like a sphere? place the options on that sphere, Simple and most used options are on the surface of the sphere. Advanced options are deep (require to zoom more into the sphere for them to appear)
The user will pan the sphere to look for options. When the user zooms to the sphere, advanced options start to appear (the concept of scaling).

This way we can squeeze huge number of options (very simple to search) in front of the users

Tuesday, March 10, 2009

Simple tool for Integrating ESRI ArcMap with Google Earth

Thought you would like this.

I wrote a simple VBA tool (really short) that integrate ArcMap with Google Earth.

Add whatever data you want in ArcMap and then activate the tool. The tool will open a new internet explorer page with a Google earth plug in.

Now just browse your data in ArcMap (Zoom, Pan etc). You will see that Google Earth will fly to the same location. (Doesn't work with schematics for sure)

Why this is useful? You don't need to overwhelm your ArcMap with satellite images, you have a live source of up-to-date data from Google Earth as you browse your network.


Download the code from here.
Watch the demo here.

NOTE THIS CODE IS OBSOLETE, I HAVE ENHANCED IT INTO A COOL TOOL CALLED ARC2GOOGLE, DOWNLOAD FROM HERE

Sunday, March 8, 2009

Idea a day: Idea in secret dies

For those who keep hiding their ideas for themselves.

For those who think that ideas must be kept and locked in
basements.


For those who can't escape this feeling that someone will steal their idea.

For those who think that people who share their idea are stupid.

You are wrong.

Keep you idea to yourself and it will die, share it, let it breath, and it will prove itself.

Idea-a-day.com is a great site that shares ideas. Publish an idea and people reads it. I'm already subscribed (thanks Seth). It feels really good to read those brilliant ideas!

The era of keeping everything top secret is over. I used to be like this. Share your idea let people feel it, build a prototype and send it for free.


From the Holy Quran:

اهم يقسمون رحمة ربك نحن قسمنا بينهم معيشتهم في الحياة الدنيا ورفعنا بعضهم فوق بعض درجات ليتخذ بعضهم بعضا سخريا ورحمت ربك خير مما يجمعون

"Is it they who apportion thy Lord's mercy? We have apportioned among them their livelihood in the life of the world, and raised some of them above others in rank that some of them may take labour from others; and the mercy of thy Lord is better than (the wealth) that they amass."

Saturday, March 7, 2009

Programming: Closed/Open principle

Sounds confusing but its not.
Actually it is a great strategy when you apply it while coding.

It goes like this: when you write a class to do a particular job. Keep in mind that you do not want anybody to make changes to this class. Hence it is closed for any modifications.

However you should allow other programmers to add new features or change the flow of the behavior by extending the class. So you give away your class as black box to programmers with documentation. Then they extend your class and add actions to its method. Hence it is opened for extension.

Here is an example of a core class (pseudo code) written to switch off all the lights at your house. It is installed and wired with all your house lights.

Public Class TurnOffLights

Public Sub TurnOff()

// Some Code
End Sub

End Class

Now you want to add some behavior to this class to prompt you before switching off the light! You cannot modify the class but you can extend (inherit) it.

So we'll write another class.

Public Class TurnOffLightPrompt Extends TurnOffLights

Public Sub Overrides TurnOff()

//I Don't know what code is written up there in the base class but I can add my own

if (MsgBox("Are you sure?",vbYesNo") == vbNo) Then Exit Sub
MyBase.TurnOff () //Call the original turnoff


End Sub

End Class

You may want to read Head First Design Patterns, it just makes you fall in love with Object Oriented.