Crazy Idea #2

Wednesday, December 29, 2004

For those who have never met me, let me give you a small window into my creative process.
I see the future as a combination of current technologies. My logic is simple. You build new technologies off of different seeds, and hope you come close to the core or the leaves of the tech-tree that results. (That's where the money is.) You either form the core, by controlling the growth, or form the leaves, thus servicing everyone outside of the tree. ($$$)

I start by taking an accounting of all the "Buzz-words" floating around, past, present, and future. All three types are important. While we don't talk about those legacy acronyms anymore, at their core are ideas that can ground your perspective. This is very similar to brainstorming, idea mapping, and those nifty one sentence pitch lines writers give producers. ("It's Knight Rider meets Lassy.")

Here's what came out of the idea machine: "Distributed" + "Website" + "Firefox". I was about to write a program to randomly join buzz words before I came up with this combination. Translation: A Firefox extension to combine the distributed ideas of Bittorrent and Freenet with standard websites. The purpose is to stop all those people bitching about their websites being inundated once their urls are published on Slashdot. For those needing further explanation, clarification, conglomeration, identification, justification, and enumeration, I will continue. (Don't get the joke? See Alice's Restaurant. Still don't get it? It was a bad joke to begin with. Consider yourself a good judge of humor.)

The idea is to use your internet browser's cache as a source for other surfers to draw from, instead of hammering the server with constant identical requests. Thus distributed the load currently required to publish a website over the number of people visiting and people who have previously visited.

Positive: It would be an immense boost to Mozilla when server operators and companies advocate the use of Firefox, instead of Internet Explorer, to reduce their network load and cost. Peer-2-Peer applications would be seen as having a positive application. And, in general, I would learn about Mozilla extensions and brush-up on my C++.

Negative: While the system would initially reduce server load, it would increase general network load and increase page loading time. Page updates would also have a propagation delay causing untimely, and incorrect, data. Dynamically generated pages would also fail to benefit from the bandwidth savings due to their transaction-based nature. Security minded individuals would be opposed to a server giving away their IP address, like free candy, to all who request a file. With a little data processing, it would be an even shorter jump to link users to webpages then with current systems.

Quote of Inspiration: "We choose to go to the moon. We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard, because that goal will serve to organize and measure the best of our energies and skills, because that challenge is one that we are willing to accept, one we are unwilling to postpone, and one which we intend to win, and the others, too." -President John F. Kennedy

Quote of Caution: "Paper lends itself well to fundamentally flawed ideas, such as Communism." -Unknown Author

Idea rank: 3 of 5

Life after ZoomFolder

Monday, December 13, 2004

I have now released ZoomFolder 1.0, my simple ZUI experiment. But, what do I do now?

I could buy some clothes. Clothes make the man, and all I have are T-Shirts. What does your wardrobe say about you?

I could work on my resume, and get a job. Getting a job would require nice clothes. Thus, this would be a three part task, resume, buy clothes, and then the jobs will roll in.

I could go back to school. A step that would require the GRE. While hardly insurmountable, it is still a hurdle. And what about all the busy work, all the exams, and homework? Could I still put up with them?

I could start-up another fantastic project A project management, a software bug reporting, or a peer-2-peer TV solution would be nice. I would also be nice to have all three. But what good are these projects if I can't sell them?

I think I may just flip a coin.

I also wonder why people advertise urgency on when bidding doesnot end for two weeks. I guess it's just not urgent enough to pay a professional coder.

Pad The Wonder Notepad

Monday, November 29, 2004

I have a fascination with HCI. It is an uneasy marriage of computer science and psychology. Some would go so far as saying it is streamlining the interface between two computers. I don't care about that. I want to make my applications better. I want the Six-million dollar man of applications.

I was reading some HCI articles and forums a little while back and came upon a repeated quandary. "Do we really need the Save button?" No one's arguments were very persuasive, but the idea held promise. So, I did what I always do. I tried it.

A notepad replacement designed without a user accessible save or open command.

When I started this project I only wanted to axe the Save command, but, upon further consideration, I noticed the Open command was equal in utility. Thus, it was open to the same question of importance.

Now for the big question. If you have no save command, when do you save? Saving to often, while supremely safe, wastes resources and accesses the disk irresponsibly. The scenario of a publisher saving a four MB document on every keystroke shows an extreme of this.

The traditional answer is to use a countdown timer. Every thirty seconds, one minute, or some user set time the application saves. Time-based saving is a good solution, proven by the relief you feel when you find MS Word saved your document for you before a program crash, but how do you determine a good time interval? If the interval is to long, the user loses everything they've typed since they last manually saved, which is usually everything. With a short interval you encounter the same argument for saving to often, wasting system resources and over-burdening hardware.

A second solution is to derive a save-point from the language itself. "Separation characters" are built into most languages. The punctuation characters could be used in English applications. In normal word processing situations the punctuation characters would be ideal, because they are numerous in documents and, yet, not so numerous as to over-burden the hardware. But, the extreme cases must be considered if you are removing the user's ability to manually save, such as lists or the lack of a punctuation character in the document. (I admit this is a very rare case.)

Also, the saving method needs to be tweaked to only save differences, and compensate for the write buffer size for efficiency.

My solution is to combine both and add major window events, such as minimize and close, into the saving strategy.

The open command is taken care of by Windows, but causes one problem. If the user wants to jot something down they need to create a document first. This might force users to organize their documents or just create more excess documents. Since the latter is more likely, I created a default save file. A centralized text file for all the unorganized, untitled, and unrelated notes. There is potential for abuse, but it's inclusion is worth more in terms of user convenience.

That was easy. Now, why isn't everyone doing it?

Teaching Computer Science

Thursday, October 28, 2004

I helped a Geology major with a computer science project the other day. It was a very taxing, and yet eye-opening experience. From my prospective computer science is natural. The demand for structure parallels literature and engineering. And yet English majors and Engineering majors, not to mention Geology majors, can't program computers.

First, and foremost, I can assure you of the existence of willing students. Many equate this with Bigfoot and Nessie, but I have seen them. (My friend even has a blurry photo of one.)
The more plausible explanation is the difference in perspective between professors and students. Most professors have ten, or more, years in the field of computer science. They think in code. They dream in code. And, quite logically, they teach in code. There exists almost a mutual dependency between a programming language and the abstract consepts it is used to express. A circular bridge if you will.

A picture is worth a thousand words. So why don't we use more pictures to teach abstract concepts? Formalized software engineering methods are real and use simple symbols such as clouds, squares, circles, diamonds, letters, numbers, and arrows to explain absolutely everything. They could be used to teach the concepts of computer science instead of computer languages. New students would gain a "Big Picture" perspective over what the program is doing compared to a line by line code example. Similar to concept mapping.

How to solve a problem is a problem still waiting to be solved. I asked the girl what would be the general process of averaging up the grades entered by the user. She did not have an answer. Schools are supposed to teach this from day one. In the end, I just did her project for her.

I wonder if this could be applied to other forms of language. I can see it now, "Learn French via UML".

Google Desktop Search Reveals Security Apathy

Wednesday, October 20, 2004

In an article dated yesterday, PCWorld cast Google Desktop Search as the invader stealing and copying secure information. (Does Google Desktop Search pose a risk?) Is that the real question we should be asking? Halt your pondering. The answer is no. Google only finds what is there. The question should be, "Why is all this private data there?"

Good security is hard. Hard to use. Hard to implement. And hard to sell to email-using grandmas. This explains the prevailing attitude of "If they don't know where it is, they can't find it". This, easy to implement, type of security is called "Security by Obscurity" and has been proven as secure as having no security at all. If your secure web-based bank transactions are available via GDS, blame your web-browser for saving it, or yourself, in some circumstances, for not turning on a security feature.

GDS has not created a problem. It has revealed one.


Sunday, October 10, 2004

I can't believe I lived this long without knowing Regular Expressions. Note to all computer people: Learn Regular Expressions! It's one of the most useful tools you will ever find.

What is in a name?

Thursday, September 30, 2004

Have you ever used iterative problem solving? If you don't know the term, you just did.Iterative problem solving is an amazing process to breakdown unknowns into known chunks and repeatedly connect them with known chunks to understand and solve the initial unknown.

Here's an example:
What does a "trash can" do?
A Can is a known object. Cans are usually metal objects, similar to bowls, with a lid.
Bowls are objects made to contain items. Like plates with the edges turned up.
Plates are... and so on.
Trash is also a known idea. Trash is a term which denotes another object as undesirable.
So, a "trash can" contains or holds undesirable objects. Simple.

What about a "Firefox", what does it do?
The software industry is notorious for marketing geniuses obsessed with cleaver and abstract software names. (Nero, Trillian, ABC, Fiddler, etc.) Names that seem independent from the function of the tool they are hawking. And I say tool because that is what software is. Software is written to help facilitate other actions. Nothing more.

Naming software is very important. Sales depend on your choice.
A simple, but effective, way to gauge the quality of a name is to look at it from the point-of-views of different levels of users. Does the name communicate the purpose of your tool to different levels of users?

Scenario 1) I don't use computers. So, I don't care what you nerds are cooking up to produce your porn. (This guy usually doesn't matter, but he maybe connected to people who do use software.)
Scenario 2) I am an average computer user and I don't know what it is. Using iterative problem solving, to break down the unknown name, it reveals XML and Spy. I don't know what xml is and I can't break it down any further, but it's a TLA so it must be a computer term. Since I've seen James Bond, I know what a spy does. So, my conclusion is XMLSpy goes out and spies on other people's xml, and maybe if I get the professional version it will sabotage those evil-doers using xml. Because, by the iterative process, xml is evil and must monitored, controlled, and stopped at all cost.
Scenario 3) I am a computer tech trained to help other users and I don't know what it is. Again, I break it down into XML and Spy. I know what xml is, but I have no idea what it is used for. So, I don't see a reason to have to spy on it. But, if the paycheck says it's important to spy on xml they must have their reasons.
Scenario 4) I am a developer and I don't know what it is. I break it down into XML and Spy. I use xml, and understand why it needs to be protected, and I've heard, or used, programs that "spy" on computer usage. Thus, my conclusion would be this piece of software monitors the use and modification of a company's xml data.
Scenario 5) I know the product and must spend a good chunk of time explaining, to someone else, how XMLSpy does not spy or your xml data.

In 5 out of 5 scenarios the name XMLSpy is ineffective in communicating the purpose of the software. Even if you are targeting developers and known users (Scenario 4 and 5), the lower levels serve a disseminating role. I found winamp through a football player. (You can't fight the six degrees of separation.)
Additionally, a good name should follow these rules for broader marketing reasons:

Bad Examples:
Acrobat Pro
Aimster, Madster, Sigster, Sexter, NeoNapster, Grokster, and Napster
Alcohol 120%
BlackIce (This one is running right now, and I know it's important, but for the life of me I can't remember what it does.)
The whole Macromedia line minus Freehand (

Take a moment and read over those names. Can you figure out what any of them do without running them first? Without someone out right telling you what each one does?

This is why I like to say, "Name Everything Like A Kitchen Appliance". It toasts things, so it's a Toaster. It mixes stuff, so it's a Mixer. Use iterative problem solving on "Dish Washer" and you get exactly what the tool does. No ambiguity. The name might not be trendy, and may sound funny, but the user will know exactly what your product does before he or she buys it. And that means higher sales and free user experience points.

So, what is in a name? Your future.

Eliminating Manifest Files

Friday, September 24, 2004

If you have done anything with .Net and Windows XP you know the burden of the .Manifest file. Visual Styles support is essential for a professional looking application. But a manifest is nothing more than a text file filled with XML. An application's dependence on a manifest file creates a weak point in your application. Loss of this file will change how the program looks and reacts to the user. But, ninety-nine percent of the time I'm just irked because it's there when it shouldn't have to be. Why have two files to do the job of one?

Thankfully Visual Studio .Net 2003 gave developers a shortcut, allowing for the enabling of Visual Styles through the Application object. (C# example: Application.EnableVisualStyles();) This covers all the controls you use, but leaves out a few things. For starters, XP icons in listviews. The only way to get an icon to showup, in a listview, is to use a manifest file. There is absolutely no way around it. (I'm still not sure why MS decided not to support embedding of manifests in the VS IDE. It seems so logical.)

But there is a solution. You can inject a manifest file into an existing .Net executable. Now the world can be free of married manifest files. Long live the single EXE files with visual styles support. Thank you Acoustic, whoever you are.

The Quest For Completion

Monday, September 20, 2004

My name is Jared and I suffer from Leonardo Da Vinci Syndrome. (Now where are the free drinks?) You might ask how this could be. I completed High School and College like many people. Sounds like I completed something doesn't it. In reality you just wait long enough and school throws you out with a piece of paper. I'm not quite sure why you hear about so many dropouts. Perhaps they only see the expectations and not the reality. Back to my point.

Half-completed projects and unfinished designs are everywhere. (I can no longer make out my desktop wallpaper because of all the icons.) This is a problem no employer will look kindly upon. So, I have designed a personalized solution.

Note: This solution will not work for everyone. "Leonardo Da Vinci
Syndrome" is a psychological issue whose solution must be tailored to the person and
problem, to build on his or her personal strengths. If your issue was not
completing sex, programming may not be your answer.

My solution is simple. I will take my inspiration from the one thing I can consistently finish, video games. It's ingenious how a video game can pit one man versus an entire planet of identical monsters and have you still wanting to play after 10 mins. By breaking down a large task into smaller levels or tasks with finite completion points, anyone can conquer the world. (Actually, this is a proven technique for problem solving, but, like all things, it requires laborious practice.)

Step One
Major Goal: Complete Projects.
Programming projects lend themselves to my talents, interests, and future job, so I will choose programming projects.

Step Two
Arbitrary Breakdown: 5 military style ranks, right out of a game, consisting of 2 projects each.
I use five ranks instead of ten for the same reasons different pricing levels increase profits.

Step Three
Start Programming.

My first success was the program I use to track my progress. Boy was I wrong when I laughed at myself.

Private Jared

The Beginning

Saturday, September 18, 2004

In classic Red Dwarf I will begin this weblog with the destruction of my old weblog.