<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13124756</id><updated>2011-12-14T19:08:00.718-08:00</updated><title type='text'>No Pink</title><subtitle type='html'>Exploring technology and ideas for software.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13124756.post-7641998437926615123</id><published>2008-01-23T09:40:00.000-08:00</published><updated>2008-01-23T09:43:27.866-08:00</updated><title type='text'>*sigh*</title><content type='html'>Today I received an email written by my manager's manager's manager from my manager's manager's manager's manager's secretary on behalf of my manager's manager's manager's manager.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I love being 7th on the totem pole and one of 19,000 employees.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-7641998437926615123?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/7641998437926615123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=7641998437926615123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/7641998437926615123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/7641998437926615123'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2008/01/sigh.html' title='*sigh*'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-1413525842316072511</id><published>2008-01-06T00:13:00.000-08:00</published><updated>2008-01-06T00:20:07.990-08:00</updated><title type='text'>kebr</title><content type='html'>I love my Lenovo Thinkpad t61p keyboard (identical to the t60 series keyboard) . I was trying out keybr.com at work using a &lt;a href="http://www.keyovation.com/pc-64-2-goldtouch-adjustable-keyboard-black.aspx"&gt;Goldtouch Adjustable Keyboard&lt;/a&gt; and I hit 45 WPM max - horrible. Now at home, using my Thinkpad, i hit 103 WPM.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Goldtouch is a good ergonomic keyboard. However, I type 2.3 times faster on my laptop. So if the laptop is less than 2.3x less "ergonomically correct" than the Goldtouch, isn't it a net ergonomic win?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-1413525842316072511?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/1413525842316072511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=1413525842316072511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/1413525842316072511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/1413525842316072511'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2008/01/kebr.html' title='kebr'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-3439098530411289710</id><published>2007-12-27T16:38:00.000-08:00</published><updated>2007-12-27T17:17:55.967-08:00</updated><title type='text'>Rules for my company</title><content type='html'>I will most certainly start a company one day. As a result of my experiences working at other companies,  the following is the constitution I will implement. It will change over time, mostly as a result of additions.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The company shall behave ethically&lt;/li&gt;&lt;ol&gt;&lt;li&gt;No fucking around here. No cost/benefit analysis.&lt;/li&gt;&lt;li&gt;This is the highest policy. This policy shall override any policy with which it is in conflict.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;The company shall not adopt any policy unless violation of the policy warrants immediate termination.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;This will avoid fluff policies that no one cares about.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;The company shall not have an HR department&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Instead the company will have an Office of Morale that is responsible for ensuring all employees are satisfied and productive.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;The company shall obey the law&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Particularly labor laws.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;The company shall fully disclose the complete compensation package of every employee to every other employee.&lt;/li&gt;&lt;li&gt;In addition to an open door policy, the company shall have anonymous submission boxes for every manager. Such submission shall be free from repercussions, regardless of content.&lt;/li&gt;&lt;li&gt;The company shall strive for the flattest hierarchy possible.&lt;/li&gt;&lt;li&gt;Decision making authority shall be pushed as far down the hierarchy as possible.&lt;/li&gt;&lt;li&gt;The company shall not schedule holidays in such a manner that it force employees to spend vacation time to pad the holiday.&lt;/li&gt;&lt;li&gt;If an employee elects to not participate in a benefit paid for in whole or in part by the company, the company shall pay the companys portion of the expense directly to the employee.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;This covers things like health insurance and 401k matches.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-3439098530411289710?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/3439098530411289710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=3439098530411289710' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/3439098530411289710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/3439098530411289710'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2007/12/rules-for-my-company.html' title='Rules for my company'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-4189632810925749851</id><published>2007-03-04T15:55:00.000-08:00</published><updated>2007-03-04T16:36:45.971-08:00</updated><title type='text'>A use for Google's I'm feeling lucky</title><content type='html'>Firefox is an awesome browser. And I suspect a lot of people don't know about one of it's most useful features: keyword based bookmarks. Why are they useful? Lets see&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A simple example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets say you really like google reader. You could setup a keyword like "r" associated with a bookmark to google reader. Once you do that, if you ever type "r" in the address bar, you will be taken there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A more exciting example:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This one is usually build into firefox&lt;br /&gt;&lt;br /&gt;In the address bar type "google food", and your browser will search google for food.&lt;br /&gt;&lt;br /&gt;I prefer this method because I hate it when a browser automatically searches for something from the address bar. If the address I entered is not valid, I want to know its not valid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Still more exciting example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;I have the following keywords setup in my firefox:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;g - search google - in the address bar i can type "g food"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;m - search google maps - example: "m san jose, ca to palo alto, ca" will bring back google map's directions. Or "m chinese food near Morgan Hill, CA"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;a - search answers.com - I use this one to lookup word definitions all the time. "a exculpate" to find the definition for exculpate.&lt;/li&gt;&lt;li&gt;w - search wikipedia using google - wikipedia's search engine sucks. It doesnt have any of the useful features of google (like spelling correction). "w chinese food"&lt;/li&gt;&lt;li&gt;wl - search wikipedia using google's I'm Feeling Lucky - "wl chinese food" takes me straight to wikipedia's Chinese Cuisine page. As you can see, google's search is smart enough to turn "food" into "cuisine".&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;THE REAL POWER&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;You might be saying "BUT Abtin, I just use firefox's google search box. Why would I want to use your stupid method?" Because the real power of my method comes to light when you combine it with the keyboard shortcut alt+d.&lt;br /&gt;&lt;br /&gt;Alt+d selects the entire contents of the address bar. So if you press it, then type something, what you type replaces what is in the address bar.&lt;br /&gt;&lt;br /&gt;So lets say I am on a page reading about polar bears. If I want info from wikipedia about polar bears, all I do is press alt+d, type "wl polar bears", and voila, I am on the wikipedia page about polar bears.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So How Do I Setup these shortcuts?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Here we go&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open Firefox&lt;/li&gt;&lt;li&gt;Open the Bookmarks menu&lt;/li&gt;&lt;li&gt;Select Organize Bookmarks&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HEXD_sPjHms/Retlx4AwRuI/AAAAAAAAABI/vjs80WliZAQ/s1600-h/01.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_HEXD_sPjHms/Retlx4AwRuI/AAAAAAAAABI/vjs80WliZAQ/s320/01.PNG" alt="" id="BLOGGER_PHOTO_ID_5038232515667576546" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Click on "New  Bookmark" on the toolbar.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HEXD_sPjHms/Retl4oAwRvI/AAAAAAAAABQ/tlpAebFMf-o/s1600-h/02.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_HEXD_sPjHms/Retl4oAwRvI/AAAAAAAAABQ/tlpAebFMf-o/s320/02.PNG" alt="" id="BLOGGER_PHOTO_ID_5038232631631693554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Under name, enter "Google Quicksearch"&lt;/li&gt;&lt;li&gt;Under location, enter "http://www.google.com/search?q=%s"&lt;/li&gt;&lt;li&gt;Under keyword, enter "g"&lt;/li&gt;&lt;li&gt;you can leave description blank&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;leave "Load this bookmark in the sidebar" unchecked.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HEXD_sPjHms/RetmBoAwRwI/AAAAAAAAABY/XT74Urrtrmg/s1600-h/03.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_HEXD_sPjHms/RetmBoAwRwI/AAAAAAAAABY/XT74Urrtrmg/s320/03.PNG" alt="" id="BLOGGER_PHOTO_ID_5038232786250516226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thats it! Now you can type "g chinese food" to search google for chinese food.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Other useful searches&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Name: Google Maps Quicksearch&lt;br /&gt;Location: http://maps.google.com/?q=%s&lt;br /&gt;Keyword: m&lt;br /&gt;&lt;br /&gt;Name: answers.com quicksearch&lt;br /&gt;Location: http://www.answers.com/%s&lt;br /&gt;Keyword: a&lt;br /&gt;&lt;br /&gt;Name: Wikipedia Quicksearch&lt;br /&gt;Location: http://www.google.com/search?q=site:en.wikipedia.org %s&lt;br /&gt;Keyword: w&lt;br /&gt;&lt;br /&gt;Name Wikipedia I'm feeling Lucky Quicksearch&lt;br /&gt;Location:&lt;span style="font-size:85%;"&gt; http://www.google.com/search?q=site:en.wikipedia.org %s&amp;btnI=I%27m+Feeling+Lucky&lt;/span&gt;&lt;br /&gt;Keyword: wl&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Personally, I like to put all these quicksearches into their own bookmark folder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;REMEMBER&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is most efficient when combined with pressing alt+d to select the content of the address bar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy Hunting,&lt;br /&gt;Abtin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-4189632810925749851?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/4189632810925749851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=4189632810925749851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/4189632810925749851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/4189632810925749851'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2007/03/use-for-googles-im-feeling-lucky.html' title='A use for Google&apos;s I&apos;m feeling lucky'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HEXD_sPjHms/Retlx4AwRuI/AAAAAAAAABI/vjs80WliZAQ/s72-c/01.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-113234231567214045</id><published>2005-11-18T11:29:00.000-08:00</published><updated>2006-12-28T14:58:42.660-08:00</updated><title type='text'>The Problem with Computing</title><content type='html'>&lt;h2&gt;The Problem&lt;/h2&gt;The problem with present computing boils down to this: computers are hard to use for the majority of tasks.&lt;br /&gt;&lt;h3&gt;Why are Computers Hard to Use?&lt;/h3&gt;At first this seems like it should be a simple question, one that could be answered by conducting some usability studies. In fact, it is an extremely difficult question and the answer is non-obvious.&lt;br /&gt;&lt;h4&gt;Ancient Ideas&lt;/h4&gt;Lets hop in a time machine and go back to the dawn of modern computing, a little over thirty years ago. At Xerox PARC, the Alto is born. Armed with a glorious 128KB of RAM and a 2.5MB hard drive, the machine contained every major UI concept we have today: GUI and mouse. The modern PC is nothing more than a glorified Alto. The display is now capable of billions of colors instead of black and white. Most people use a two-button mouse, down from the Alto's three. Oh, and windows can now be translucent while you drag them around.&lt;br /&gt;&lt;br /&gt;The rest of the power of computing is wasted. Hardware has improved by orders-of-magnitude so that the software will do what it has always done, except faster. Users still experience crashing systems, must learn about intricacies of networking, figure out when to double click and when to single click, etc. Low level concepts litter the user experience.&lt;br /&gt;&lt;br /&gt;One example of this is how network resources are handled. For some reason, operating systems still don't assume applications are going to use the network, which means, among other things, that there is no consistent method of handling errors. If you are disconnected from the network and try to go to a website, the browser spits out some useless error, instead of telling you that you are not connected to the network.&lt;br /&gt;&lt;h4&gt;Abstract Engineering Concepts&lt;/h4&gt;Two key ideas that make computing difficult for the majority of users.&lt;br /&gt;&lt;h5&gt;File Systems&lt;/h5&gt;Out of the primordial ooze of modern computing, from a time when only engineers used computers, came the idea of the file system. File systems are an OK way to store data and manipulate it when using a single computer. They make sense when the designer of the data store has no idea what facilities an application will need.&lt;br /&gt;&lt;br /&gt;A typical modern file system is logically structured as a hierarchy. However, a rigid hierarchy is only partially useful for working with data, and soon symlinks were tacked on as an afterthought. This incremental improvement may have seemed like a good idea at the time, but the choice haunts us to the present day.&lt;br /&gt;&lt;br /&gt;Think of all myriad ways we package and organize files: varies file compression schemes, package management systems, application installation programs, IDE project files, countless specialized file organizers like itunes, and document management systems, just to name a few. What all these schemes have in common is that they take a set of files and perform some action on them.&lt;br /&gt;&lt;br /&gt;I see no reason to reinvent the wheel every time a useful new batch program is made. Perhaps more of these tasks can be pushed down into the filesystem. For example, a 'directory' could be designated to use some form of compression, and thereafter any file added to that directory would automatically be compressed. If that 'directory' were to be copied or uploaded, it would be sent as a single compressed file. Certainly in Unix, this concept is not new. There already exist special files like the TTYs, that cause the OS to perform an action when they are interacted with.&lt;br /&gt;&lt;br /&gt;Present file systems also suffer because they are unaware of the network. This leads to many extremely common problems. Files are duplicated between local machines and fileservers. Special software must be written to enable even simple collaboration on a given file. An even more basic problem is that of limited file access. At my family's home, we have 4 desktops, 3 laptops, and a pda. My dad needs access to some file from his PDA. I need to work on files from both a desktop and a laptop. My mom would like to play her casino game from any machine. But there is no fileserver. The result is information anarchy.&lt;br /&gt;&lt;h5&gt;Applications&lt;/h5&gt;What is an application? Depends on who you ask. An engineer might tell you it is code that executes on a cpu and usually performs some operation on data. I think the remaining 98% of the population will say an application is a file of some kind. They will say that the letter they wrote to their grandmother is an application, or that their contacts are an application. In other words, users make no distinction between their data and the programs that let them work with their data.&lt;br /&gt;&lt;br /&gt;If you have ever attempted to explain how to a lay user how to perform a basic task with their computer, you will understand why this is a problem. The user wants to write a letter. You tell them to launch an application like Microsoft Word. You might explain to them the precise steps by which they can accomplish this: click on start, goto all programs, find the office shortcut group, find word, click it. Then the user can start typing.&lt;br /&gt;&lt;br /&gt;All the steps prior to typing the document are meaningless to the user, because users think in terms of verbs, but until the user gets into the appropriate application, there is no accessible verb metaphor. In other words, the user does not want to launch Word, they want to write a letter.&lt;br /&gt;&lt;br /&gt;This problem is further exacerbated by the lack of a unified approach to application. I would guess that the vast majority of users would have extreme difficulty understanding what a simple text editor is and how they are different from word processors, not because they are incapable of understand the feature differences, but because the interfaces are so different. And that is the simple case. Consider Microsoft Outlook. Outlook uses Word as the email composition editor, yet the interface is radically different. Why doesn't every application in the system use a single text editing component?&lt;br /&gt;&lt;h5&gt;Intersection of File Systems and Application&lt;/h5&gt;Some problems arise when the problems of file systems and applications are combined.&lt;br /&gt;&lt;br /&gt;Why are databases and file systems different? They both do essentially the same thing: store discrete bits of information. The database simply has more metadata. I think the only reason they are different is because "that's just the way it is." It would be useful for many applications to have database actions available at the filesystem level. One obvious area where this applies is computer games. Nearly every computer game needs a store of object/level/monster/weapon information. Most games end up implementing some sort of crude packaging tool to combine all the objects into one file. Also, when this problem is addressed at the operating system level, it is not done well. Consider the windows registry: it only stores configuration information and is also only accessible via Windows API functions.&lt;br /&gt;&lt;h4&gt;High Base Complexity&lt;/h4&gt;The minimum amount of knowledge and number of concepts (base complexity) a user must understand in order to effectively use a computer is too high.&lt;br /&gt;&lt;br /&gt;Consider what a typical office worker must understand to send an email. First, the user must be aware of the concept of email. Most likely they only have a vague idea that email is a little bit like mail, but different. Then the user must think "If I want to send an email, I must start Outlook." Once in outlook, the users needs to figure out how to bring up the new mail screen. Next, the user needs to understand the concept of email addresses. Assuming they know what an email address is, they can then begin working on the actual email. I suspect it would make more sense if the user could intuitively find the contact they want to send an email to, without launching a program, and then click on some kind of "write email" button.&lt;br /&gt;&lt;br /&gt;Beyond conceptual problems, the task of system administration is daunting. A typical windows user is simply incapable of administering their own system. Doing so would require knowledge of the registry, screen resolution and color settings, storage partitioning, just to list some basics. Security administration is even more complex, as it relies on detailed knowledge of how various components function, thus exposing vulnerabilities.&lt;br /&gt;&lt;br /&gt;Perhaps even more absurd is the knowledge of hardware required to intelligently purchase a computer in the first place. CPU speed, multiple cores, amount of RAM, hard drive capacity, 3D video... I suspect part of the reason manufacturers have not devised a better way of informing lay users about the attributes of a given computer is that they thrive on the user's lack on knowledge. Every time I visit a computer store, I see systems priced from $600-$2500. I can tell that the difference between a store displayed $1000 system and a $2000 system is negligible. I think retailers are hoping their terminology is so confusing that lay users will purchase a machine based on perceived prestige.&lt;br /&gt;&lt;br /&gt;Once again, two hard problems (too many software concepts, a lack of understanding of hardware) lead to an extremely difficult problem: powerful user computers means that every machine needs to be administered separately. Since each machine can be configured in myriad ways, administrative tasks that should be simple and automatable become impossible to implement successfully on every machine. Consider Windows security patches. One would imagine that a closed source proprietary system would be reasonably easy to update automatically. But consider the pains corporate IT departments go through to determine if a given patch will break some critical functionality.&lt;br /&gt;&lt;h3&gt;Ignoring the Problem&lt;/h3&gt;So how have engineers attempted to fix the problem so far? Mostly by explaining why the problem is a problem (aka blaming users) or attempting to fix the wrong problem.&lt;br /&gt;&lt;h4&gt;Common Explanations&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;You say computers are too hard to use, but that is because they are complex. Shouldn't users learn how to use computers? And if they can't, then they are lazy/dumb/etc.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Actually, I think users are pretty smart. They can understand complex concepts like business plans and convoluted laws. What has happened to the computer industry is similar to what has happened to the study of english: it has evolved to the point that it is incomprehensible to those outside the field. For decades computers have been built to fulfill the needs of a large sets of people, but have been designed and approved by a non-representative subset of those people. Just because the fraction of the population designing information systems thinks the designs are good and that people need training doesn't mean its true. Perhaps the designers need training and the rest of the population is right.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Users are generally not logical and therefore they need rigid methods of information organization imposed on them.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I suspect everyone has about the same ability to organize information. So why should they have to learn the engineer way of doing things? With our present hardware capabilities, we can let them work how they want to work.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Once a users learns about computers, its easy&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Nope. The problem is that users do not "learn about computers", they actually "learn about tasks". For example, a user will learn the step by step details of sending an email, but the idea of adding an attachment to the email is a whole new thing to learn. Since users do not learn the concepts behind each task they perform, each new task has the same steep learning curve&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Users think engineers are snobs because they (users) are dumb&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Nope. A doctor can converse with a lawyer. A business person can converse with an artist. Most professionals can talk with professionals from other fields and understand what the other person is talking about. Computing is the only industry that has a presence in every single home, school, and business, but whose professionals cannot have reasonable conversations with professionals from other fields. Thus, it must be the engineers who have the problem, not the users.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Users are dumb, we cannot make computing brain dead simple.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Perhaps we can't make it brain dead simple, but we can do a lot better than we do now. Why should a user need to know about the intricacies of security when all the user wants to do is write a letter?&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The present model of computing might be difficult, but its really useful having the power of a desktop pc.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Not really. My guess: 90% of tasks that 95% of users perform are basic (Office functionality, email, managing contacts, etc). The added benefit of increased system performance usually does not outweigh the burden of system administration.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The current way of doing things has been around for over 30 years, so we must be doing something right.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No, stability in technology is harmful. Technology does not stabilize, it stagnates.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Look at all the software that IT purchasers and business guys buy. The tech budget of corporations must mean we are doing things right.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Nope, they are just buying what is available. Most of the time its not even a technical decision. When was the last time you saw a website selling “enterprise-class” technology, and actually understood what they were talking about, or even what they were selling? The only reason I know Siebel sells CRM software is because I know Siebel sells CRM software. Nothing on their website would indicate that is what they do, or even what CRM is. Heck, my primary job is implementing CRM, but even I find it hard to explain how CRM is different from a glorified contact management system.&lt;/li&gt;&lt;li&gt;One reason corporate IT budgets are so high is because the computing industry is doing so many things poorly. So the costs add up in terms of tech support and consulting.&lt;/li&gt;&lt;li&gt;Corporations are run by business people. They trust us engineers to build what they need. We tell them “this is what you need”, they say “but I would like it if it did this”, then we say “that would require perfect AI, we cant do that.” But maybe we can do it. Maybe we just don’t see the solution because our tools are so poor.&lt;/li&gt;&lt;li&gt;Popularity means nothing. Read Paul Graham's essays&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Well, maybe things suck for lay users, but our development tools are awesome!&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I see you have never written software. Our development systems are so bad that when a RubyOnRails or a TurboGears is announced, programmers are shocked that someone developed a nice, clean, integrated way to develop web applications.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Ok, things might suck for users and developers, but our tools are awesome for science and research.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No, our tools are horrible and our abstractions are useless. That’s why all the scientists use software like Mathematica.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Computing isn’t stagnant, look at home much it has improved&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The hardware has improved. Its improved by several orders of magnitude.&lt;/li&gt;&lt;li&gt;The software has not improved. Please refer to the section titled "Consequences"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;h4&gt;Attempted Fixes&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;If we make a bunch of small programs and let them pass data, everything will be great because users can connect these programs however they like!&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This is the present nix approach. It is usable for engineers, but useless to users.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Our new UI for *insert application type* will make it simple&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No, you are building on a broken foundation&lt;/li&gt;&lt;li&gt;It isn’t just one application that needs fixing, its all of them.&lt;/li&gt;&lt;li&gt;You are probably only solving the problem for those who already understand computing&lt;/li&gt;&lt;li&gt;Users don’t even know they have a problem, we have beat them into accepting our superiority&lt;/li&gt;&lt;li&gt;People do not learn concepts, they learn tasks. A new UI will just confuse them.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Konfabulator shows just how good our interfaces can become&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Konfabulator also shows how shitty our present computing is. Oh look, pretty widgets that make sense. Cool. Oh, Its kinda weird when I want to add new widgets to my desktop; that interface is kinda ho hum. Back to where we started. Why cant I create a task by clicking on the calendar? Shit. My task list doesn’t appear in outlook! Fuck.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;So you are saying that our interfaces aren’t pretty enough.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No, they are plenty pretty. They just don’t make any sense.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;h2&gt;The Consequences&lt;/h2&gt;Now that we saw how the problem manifests itself, what are the effects?&lt;br /&gt;&lt;h3&gt;Monetary expense&lt;/h3&gt;Mistakes cost money, and computing is full of mistakes right now.&lt;br /&gt;&lt;br /&gt;Technical support is a term dreaded by users. Countless people toil in cubes trying to help users with impossible to reproduce computer problems. This is in sharp contrast to web applications which are generally support free.&lt;br /&gt;&lt;br /&gt;In addition to the software support costs, the millions of computers distributed across the world need physical repair. This means there are costs to transport the parts, transport the PCs, employ countless certified technicians, and so on. And the downtime of a downed consumer PC is generally far greater than a server in a server farm. And when consumer PCs fail, they tend to lose a lot of information due to the lack of backups.&lt;br /&gt;&lt;br /&gt;There is also the cost of distributing the hardware and software. Giant factories need to produce ultra-complex computers. These might then be sent to giant warehouses. The warehouses need trucking to deliver the units to retail stores. The retail stores employ countless salespeople to pester clients. Every step has a cost.&lt;br /&gt;&lt;br /&gt;Some monetary expenses are less obvious. The value of lost data is intangible, but significant. And it happens all the time. Every time a consumer hard drive crashes, or a consumer gets a new PC but forgets to copy over all of their old information, data is lost. Perhaps even more significant is the enormous electrical requirements to power the millions of consumer PCs that are utilized for only a fraction of the time they are powered.&lt;br /&gt;&lt;h3&gt;Software development&lt;/h3&gt;The lack of basic abstractions at the file system means that programmers tend to re-implement a concept over and over again. Consider all the package managers, compressions formats, and so on.&lt;br /&gt;&lt;br /&gt;The focus on the platform also leads to the idea of "portable code". Yet the kinds of applications where portable code is important are the exact same kinds of applications that would be better implemented as web applications.&lt;br /&gt;&lt;br /&gt;Also, targeting platforms means that software is released in versioned packages. This is an outdated model of software development. Many of the issues that making a release is supposed to solve, like bug fixing, are non-existent in the web application model. Indeed, quality assurance for web applications has more to do with ensuring scalability than, for example, worrying about poor interaction with a video card driver.&lt;br /&gt;&lt;br /&gt;The low level concepts littering high-level computing also result in the average person being unable to code. Thus, in many companies the IT department essentially acts like a group of internal consultants. Data in databases is hard to access, so "Business Intelligence" employees design and run queries against a database so that management can get the numbers they need. I think this inability to perform aggregate operations on data can be resolved by improved UI access to data and better models of information storage.&lt;br /&gt;&lt;h3&gt;Other Consequences&lt;/h3&gt;* Aesthetic Expense&lt;br /&gt;&lt;br /&gt;Perhaps less important are the aesthetic consequences of having high-powered PCs. The are generally loud due to the cooling requirements. Also, they are generally fairly large and ugly.&lt;br /&gt;&lt;br /&gt;* Inherent Tendency for Monopoly&lt;br /&gt;&lt;br /&gt;Due to all of the monetary expenses and the difficulty of administration, there is a strong push to standardize on the dominant platform. I once read an article on slashdot about a company moving from Linux back to Windows. They simply did not have the internal capacity to support both platforms, so they standardized on one.&lt;br /&gt;&lt;br /&gt;* The dumbification of selling technology&lt;br /&gt;&lt;br /&gt;Technology is now sold in terms of prestige or by intentionally attempting to confuse consumers with complex specs. Consider Intel commercials from a couple years ago: how is the blue man group related to CPUs? Or consider television ads for PCs, where the announcer mumbles through a whole list of specs. Expecting the average user to understand details of each component of a PC is absurd.&lt;br /&gt;&lt;br /&gt;* Other Idiocy&lt;br /&gt;o Self-healing machines/networks/etc OR how to sell someone hardware that is more expensive and additional software, while providing them with no value.&lt;br /&gt;o Vertical markets OR our software must be rigid to be reliable and developable, and therefore we need fifty versions of everything&lt;br /&gt;&lt;br /&gt;* Obsolescence&lt;br /&gt;&lt;br /&gt;When was the last time you absolutely had to run out and by a new computer to run some application? Probably never. Obsolescence in computing is a phenomenon accepted as unavoidable, but this is not the case. Software tends to be stable for longer intervals than hardware, so a way to decouple software from consumer hardware would be useful.&lt;br /&gt;&lt;br /&gt;* UI Design&lt;br /&gt;&lt;br /&gt;Present UI design assumes engineering abstractions are good and does not attempt to fix them.&lt;br /&gt;&lt;h2&gt;My Dad: A Case Study&lt;/h2&gt;I will now discuss the ultimate layman: my dad. He has two traits which hinder his ability to use computers effectively: english is his second language and he did not grow up around computing. However, he is highly intelligent and has two masters degrees.&lt;br /&gt;&lt;h3&gt;Abtin, can you show me something?&lt;/h3&gt;Every time my dad needs to perform some new task using a computer, he asks for my help. Armed with a legal pad and a pen, he takes careful notes while I guide him through the steps of accomplishing what he needs to accomplish. He then attempts to repeat the task using only his notes. If he gets stuck, I help him and he takes additional notes to clarify the step.&lt;br /&gt;&lt;br /&gt;At my job, I frequently go through a similar process with employees who must use office applications. Try as I might, it is extremely difficult to teach users the concepts behind a task. Thus, users are given nothing more than simple algorithms with which to tackle complex tasks.&lt;br /&gt;&lt;h3&gt;When note taking fails&lt;/h3&gt;My dad likes to save images from news sites to his computer. So he asks me how to do so, and I show him. What I would really like to explain to him is how the file system is structured and what that means for his files and how he works, but I have a limited vocabulary in my dad's native language, so the ultra-abstract concepts are too hard to explain.&lt;br /&gt;&lt;br /&gt;My dad happily saves his images until, one day, I get a phone call: All of the images he has recently saved are missing! I examine his computer and immediately discover the problem. For some reason, the internet explorer save dialog is no longer saving his images to the "NewsImages" directory I created, but to his "My Documents" directory. Since I cannot explain to him the concept/structure of the file system, I move his files to where he expects them to be and make sure internet explorer is pointing to the right directory. I cross my fingers and hope he does not have the problem again.&lt;br /&gt;&lt;h3&gt;The PDA&lt;/h3&gt;About two years ago, I noticed that my dad kept several legal pads full of contact names, phone numbers, and addresses. I decided I wanted to help him organize his contacts better, however the thought of teaching him how to use Outlook or any other application was frightening.&lt;br /&gt;&lt;br /&gt;One day I was at Costco, where I noticed they had several PDAs for sale. I examined the floor unit and realized that the interface was so simple, my dad would be able to use it. All he would have to do was click on "Contacts" from the main menu, and the resulting contact management screen would be extremely simple. I purchased the iPaq for his birthday and he was delighted to start using it. This was the first time I did not have to give him step by step instructions. I simply showed him how the main menu was structured and he figured out how to use it. I also setup Outlook on his PC so that he could plug his PDA in and backup his data; I did not show him how to use Outlook.&lt;br /&gt;&lt;br /&gt;A few weeks later I checked in on my dad. His PDA now contained hundreds of contacts and he claimed that he couldn't live without the device. While I was please by his acceptance of the technology, I was genuinely surprised when I examined his PDA and discovered he had begun to use the scheduling functionality as well: he had entered a number of meetings. I asked if he had sought help from anyone to accomplish this and he said no, he had figured it out on his own.&lt;br /&gt;&lt;h3&gt;The Internet&lt;/h3&gt;So how does my dad handle the internet? It depends on the task.&lt;br /&gt;&lt;br /&gt;News and Email are probably the two most important tools my dad uses, though he does not really understand them. He can send emails to others and he can also pull up a news website. But frequently he confuses the two. He might see a website address and try to send an email to it. Or he sees an email address and tries to open it in a web browser. He is not the only one with these problems: his friends tell him things like "email me at www.somedomain.com".&lt;br /&gt;&lt;br /&gt;These would not be such major issues, except that the error message web browsers generate are hideous. They should use simple regular expressions to determine if the address entered is an email address and tell the user the problem. They should detect when they are not connected to the net and say "You are not connected to the internet" instead of "host not found".&lt;br /&gt;&lt;br /&gt;I also suspect that frequently, users (like my dad) do not read the content of the web page they are looking at. I've noticed that users will fixate on some portion of the screen and ignore everything else. This causes problems for things like looking at shopping carts, creating accounts or logging into website; these are actions that are usually placed in the corners of the web page, and users fixate on the center of the page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-113234231567214045?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/113234231567214045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=113234231567214045' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/113234231567214045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/113234231567214045'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2005/11/problem-with-computing.html' title='The Problem with Computing'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-111912607696805389</id><published>2005-06-18T13:10:00.000-07:00</published><updated>2005-06-23T18:29:47.336-07:00</updated><title type='text'>My Google Summer of Code Proposal</title><content type='html'>&lt;span style="font-size:180%;"&gt;Implement Remote Logging for Gaim&lt;br /&gt;Abtin Forouzandeh&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;The objective of this project is to implement a system by which gaim will communicate with a web server for the purposes of storing log files. This will be done by implementing a plugin for gaim which will use HTTP POST to send data to a website. A reference website will also be developed and deployed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;THE PROBLEM&lt;/span&gt;&lt;br /&gt;I communicate with my employer and my users over IM and logs of these conversations are invaluable. The problem arises because I use gaim from multiple locations (home, work, laptop). Logs are distributed between these locations and therefore log recollection is cumbersome and frequently impossible.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;BENEFITS&lt;br /&gt;&lt;/span&gt; &lt;ol&gt;   &lt;li&gt;Logs are useful for serious uses of IM, such as coordinating work and school tasks. Centralized, searchable logs would increase the usefulness. For example, at my job, my department conducts meetings over IM. It would be beneficial to be able to integrate IM logs with our project management website.&lt;/li&gt;   &lt;li&gt;Gaim with a log website could become a form of answering machine. You could leave your computer running gaim and go on vacation, leaving an away message that indicates you will check your message periodically. All you would have to do is log onto the website from any computer to access your unread chat logs. With some basic development of the website, you could even respond and send new messages.&lt;/li&gt;   &lt;li&gt;An open method for sending logs over HTTP will lead to unforeseen integration&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;A trivial use would be a new style of blogging. People post pictures to the web right now, why not IMs and chats?&lt;/li&gt;     &lt;li&gt;What if transcripts of online meetings could be integrated with groupware?&lt;/li&gt;     &lt;li&gt;Though gaim is not the ideal platform, it could be used as a method for posting irc logs to the web.&lt;/li&gt;     &lt;li&gt;Perhaps it could even be integrated with a system like cellphone text messages.&lt;/li&gt;   &lt;/ol&gt;   &lt;li&gt;If a centralized log website becomes popular, it could potentially become a source of revenue for the gaim project by hosting googlestyle ads.&lt;br /&gt;&lt;/li&gt; &lt;/ol&gt; &lt;span style="font-size:130%;"&gt;DELIVERABLES&lt;br /&gt;&lt;/span&gt; &lt;ol&gt;   &lt;li&gt;A plugin will be developed for gaim which will intercept message/chat send/receive events and post them to a website.&lt;/li&gt;   &lt;li&gt;A website will be developed which will receive input from the plugin, authenticate users, search and retrieve logs.&lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PROJECT DETAILS&lt;br /&gt;&lt;/span&gt; &lt;ol&gt;   &lt;li&gt;&lt;span style="font-size:130%;"&gt;GAIM DEVELOPMENT&lt;/span&gt;&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;Functionality will primarily be implemented as a plugin. Every attempt will be made so the plugin will be crossplatform.&lt;/li&gt;     &lt;ol&gt;       &lt;li&gt;The plugin will have a preferences UI frame, which will use GtkWidgets for controls. Options specified by the user will be: web server to which logs will be sent, user name and password for that server, and whether the user would like to log either or both IMs and chats.&lt;/li&gt;       &lt;li&gt;The plugin will subscribe to the "sent-im-msg", "received-im-msg", "sent-chat-msg", and "received-chat-msg" signals. The corresponding callback for each signal will check preferences and decide if it should log the event (for example, if the user elected to not record chats, then the callback will simply return). This is the same method which is used in the state notification plugin (statenotify.c).&lt;/li&gt;       &lt;li&gt;When one of the signals are triggered, the callback will build string (herein called poststring) containing the user's name, password, account type(jabber, aim, etc), account name, and data. The callback will then make a call to a function which will be defined in util.c.&lt;/li&gt;       &lt;li&gt;The function (which might be named HTTPPost) in util.c will handle POSTing the data. It will require two parameters: one specifying the web server to which the string should be sent and the other being the actual poststring. The response to the POST request will indicate whether the log entry was successfully added or if it failed.&lt;/li&gt;     &lt;/ol&gt;   &lt;/ol&gt;   &lt;li&gt;&lt;span style="font-size:130%;"&gt;WEBSITE&lt;/span&gt;&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;The objective of the website is to give users the ability to see the advantages of remote logging and therefore motivate others to begin more advanced projects like integration various websites.&lt;/li&gt;     &lt;li&gt;The website will be developed using either PHP or RubyOnRails.&lt;/li&gt;     &lt;li&gt;Users will goto a website and create an account. They will receive a user name and password, which will then be used to configure the gaim plugin and to log into the website.&lt;/li&gt;     &lt;li&gt;Users will not need to specify their accounts. They will automatically be identified when logs are posted.&lt;/li&gt;     &lt;li&gt;Users will be able to retrieves logs by account/contact. They will also be able to search the logs using basic keywords.&lt;/li&gt;     &lt;li&gt;The website will be backed by a database, which will probably be MySQL.&lt;/li&gt;     &lt;li&gt;Schema - this was a table in the pdf i originally submitted.  I'll post it if anyone so requests.&lt;br /&gt;&lt;/li&gt;   &lt;/ol&gt;   &lt;li&gt;&lt;span style="font-size:130%;"&gt;PROTOCOL&lt;/span&gt;&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;The structure of the POST string will be precisely defined so that others may implement websites which take advantage of the plugin.&lt;br /&gt;&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Potential Followup Projects&lt;br /&gt;&lt;/span&gt; &lt;ol&gt;   &lt;li&gt;Security&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;Use SSL to transmit the POST message.&lt;/li&gt;     &lt;li&gt;Encrypt the text portion of the message prior to sending it.&lt;/li&gt;   &lt;/ol&gt;   &lt;li&gt;Advanced Preferences&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;Permit the user to define on a peraccount, perchannel basis which logs they would like sent to the web server.&lt;/li&gt;     &lt;li&gt;Or more generally, permit the user to specify a different server for each account they have. That way, logs from a connections to a corporate chat server can be sent to a corporate log website and personal logs can be sent a different log website.&lt;/li&gt;   &lt;/ol&gt;   &lt;li&gt;Improvements to existing gaim log viewer&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;Add a feature to send existing logs to a website.&lt;/li&gt;     &lt;li&gt;Add the ability to view remote logs from within gaim.&lt;br /&gt;&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Bio of Abtin Forouzandeh&lt;/span&gt;&lt;br /&gt;I recently began my doublemajor in math and computer science at San Francisco State University. From 20012002, I led development of a proprietary PalmPilot VNC client for a small startup firm. Presently, I actively code and lead a small team developing CRM and other internal software at a wholesale distributer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-111912607696805389?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/111912607696805389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=111912607696805389' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111912607696805389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111912607696805389'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2005/06/my-google-summer-of-code-proposal.html' title='My Google Summer of Code Proposal'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-111722848455660734</id><published>2005-05-27T14:12:00.000-07:00</published><updated>2005-05-27T14:15:52.736-07:00</updated><title type='text'>Database Feature Desire</title><content type='html'>It would be nice if SQL Server (or any other database) would divide everything into applications. So you would create an "application" which would then contain all of your stored procedures and views and packages and whatever else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-111722848455660734?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/111722848455660734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=111722848455660734' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111722848455660734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111722848455660734'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2005/05/database-feature-desire.html' title='Database Feature Desire'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-111705774551729914</id><published>2005-05-25T14:48:00.000-07:00</published><updated>2005-05-25T14:50:35.836-07:00</updated><title type='text'>Real-Time Backup</title><content type='html'>I started prototyping an application for real-time backup. You fire it up and point it at directories that you would like to track. The app takes a snapshot the directory contents and then begins tracking file changes. When it detects a change, it makes a note, and then stores the difference between the snapshot and new file. I have not written the actually differencing part yet for good reason.&lt;br /&gt;&lt;br /&gt;Why do I need real-time backup? The first reason is trivial. My desktop frequently becomes cluttered with documents I no longer need, but which I need to retain just in case management needs something in the future. I would like the ability to simply delete every file and be secure in the knowledge that I have lost no data. The second is more important. At my job I frequently must work with large excel files. Sometimes I spend tens of hours working with a single spreadsheet (cleaning data, performing analysis, coding, etc). Every once in a while I take the time to make a backup copy of my work. But that’s not enough. Several times I have lost a whole day of work because excel has lame undo capabilities. The moment you save a file, your undo history is gone. I have this habit of pressing ctrl+s every few seconds. Hence, I never have more than a couple seconds of undo. So I would like an application that will take every single save I make and store the complete history, transparently. There is no reason a user should have to actively store content changes, ever. None. Nada. Zilch. Except...&lt;br /&gt;&lt;br /&gt;Real-time backup of office documents is nearly impossible. I wrote my application all the way up to the point where it makes note that a file has changed. I pointed the app at a sample excel file and.... changing a single character results and 20 or 30 file changes. And none of the changes occur in the file you are working in. It looks something like this:&lt;br /&gt;&lt;br /&gt;1) Your original file is untouched&lt;br /&gt;2) Make a change and save&lt;br /&gt;3) Excel makes the change in any number of temporary files&lt;br /&gt;4) Excel builds a new file with the change&lt;br /&gt;5) Excel deletes your original file&lt;br /&gt;6) Excel renames the file from step 4 to your original file name&lt;br /&gt;&lt;br /&gt;Basically, in order to solve the real-time backup problem, I would have to build a bunch of code to identify the pattern and store the real change. Word pretty much works the same way, which raises issues not present with excel. There are multiple editors for .doc files. What if the user edits the file in WordPad instead of word? What if WordPad has a different pattern for saving the file than word? Well then maybe I could start tracking what application has which file handles open... maybe... but as you can tell, it all becomes a complicated mess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-111705774551729914?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/111705774551729914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=111705774551729914' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111705774551729914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111705774551729914'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2005/05/real-time-backup.html' title='Real-Time Backup'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-111691367205611758</id><published>2005-05-23T22:37:00.000-07:00</published><updated>2005-05-23T23:36:41.903-07:00</updated><title type='text'>I need a project! &amp; Comments on Microsoft CRM</title><content type='html'>I should be working on an essay. School is winding down this week and and my last final is coming up. At work, there is nothing particularly interesting to work on. I am leading the way in developing an entirely custom interface for Microsoft CRM. Nothing particularly challenging. If you know of any hard programming problems or interesting ideas for software, LET ME KNOW!&lt;br /&gt;&lt;br /&gt;The interface MSCRM ships is useless. The productivity of salesreps at my company has dropped at least 40% since we deployed MSCRM. I think what happened is Microsoft just plain decided to very rapidly develop MSCRM and ship it out. When you look at their original plans, this makes sense. MSCRM was supposed to be merely a platform, with third parties developing CRM applications on top of the platform. Apparently at some point they decided to build the application themselves and so the whole thing just feels rushed.&lt;br /&gt;&lt;br /&gt;Frankly, if anyone out there is considering a CRM solution, stay away from MSCRM. It hardly provides any value for the investment. A half-decent web-developer could write a superior system in short order. What is the difference? You don't get a web-services API. You don't get role-based security. You don't get corporate support. You don't get exchange/outlook integration. You will probably get better search functionality. You will probably have an easier time integrating with your other systems. You will have a highly customizable UI (critical).&lt;br /&gt;&lt;br /&gt;The web services get in the way more than anything else. The problem is that CRM never ever stands alone. It has to integrate with accounting and distribution management (at the very least). Want to search for customers based on how/what widgets they order? Good luck. You will have to ignore the webservices and query the tables directly (which in unsupported and loses the role based security benefit). THE MOST IMPORTANT point about MSCRM webservices though is that THEY AREN'T WEB SERVICES AT ALL. Want to call a webserice function? You need the Microsoft CRM dlls. You cant just hookup with the webserver the way you would with something like the google API or any other webservice. This is an absurd attempt at platform lock-in and holds zero value for the customer.  Also, check out the paragaph below about integration for more reasons why web-services, as they are implemented in MSCRM, are Bad.&lt;br /&gt;&lt;br /&gt;The role-based security is ok, though muddled. Take one part enterprise style security (company, divisions, vice presidents, managers, users) and one part small business application. Next, mix in a dash of very broad categories of security. For example, take your customer records. A given user can edit the record if the record is within their role (does the record belong to the user? the division? the whole company?). The problem is that merely "editing" a record is extremely broad. At my company, we would like to show the account's "Account #", a property of our distribution system. However, in MSCRM, if you show a field, that field will be editable. What if a user accidental changes the #? That will result in bad things like not being able to find the record and duplicate records (because at my company, new accounts in our distribution system are created in MSCRM). You may make a field non-editable through unsupported means, but then the whole reason you went with something MSCRM was to get support, right?&lt;br /&gt;&lt;br /&gt;The support for MSCRM is silly. The only time you will ever call them is because you desperately need a feature that is not on their product roadmap. Good luck.&lt;br /&gt;&lt;br /&gt;Exchange integration is also silly. Frankly, the way Microsoft recommends implementing it (that is, define a whole new subdomain exclusively for CRM) negates the whole benefit. You will need another exchange server (hardware $$$ and software $$$). Why not just deploy some free server for email? And for anyone thinking of getting MSCRM because of the Outlook integration, forget about it. They are integrated if your definition of integrated is "they are accessed through the same application through completely separate UI and almost no entities map correctly between the two applications and even when they do the mapping can be broken since one has significantly less functionality than the other."&lt;br /&gt;&lt;br /&gt;The search functionality in MSCRM is horrendous. This is one area I could go into a lot of detail about. However, suffice it to say that whenever the question of improved search comes up (like in the Microsoft newsgroups), the inevitable answer is check out &lt;a href="http://www.c360.com/"&gt;c360&lt;/a&gt;.  More $$$.  At my company, I have invested a very substantial amount of time implementing our own searching method.&lt;br /&gt;&lt;br /&gt;Integrating with external systems is implemented in a useless way. Say you open up an account. The information for the account is broken up into tabs. Integration is accomplished by adding new tabs that point to web pages you develop. What if you want to show the customer's year-to-date sales on the main account screen? Good luck. The general answer to this is go check out &lt;a href="http://www.scribesoft.com/Products/InsightForMSCRM.asp"&gt;scribe insight&lt;/a&gt;. Oh, and remember those wonderful webservices? Well, while you may not do any damage searching the and reading data directly from the database, it would be EXTREMELY unwise to directly write data. That's because the security system is implemented in a really strange way. Why does this matter? Because the maximum speed at which you can create/update records through web-services in MSCRM is about 10-15 records per second. You read that correctly. If you don't believe me, call up Scribe Software and ask them how fast insight is able to work with MSCRM. They will give you the same answer. Also, the 10-15 records per second is achieved only by using multiple-threads. If you know anything about programming, you know multi-threaded programming is much more difficult then single-threaded. &lt;20 is the absolute maximum speed, regardless of hardware. This is caused by some bug/design in how MSCRM deals with it's own security. Last I read about this issue, there is no planned fix.&lt;br /&gt;&lt;br /&gt;And then the UI.  *sigh*.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-111691367205611758?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/111691367205611758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=111691367205611758' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111691367205611758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111691367205611758'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2005/05/i-need-project-comments-on-microsoft.html' title='I need a project! &amp; Comments on Microsoft CRM'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13124756.post-111689526866016837</id><published>2005-05-23T17:40:00.000-07:00</published><updated>2005-05-23T17:41:10.983-07:00</updated><title type='text'>First Post!</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13124756-111689526866016837?l=nopink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nopink.blogspot.com/feeds/111689526866016837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13124756&amp;postID=111689526866016837' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111689526866016837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13124756/posts/default/111689526866016837'/><link rel='alternate' type='text/html' href='http://nopink.blogspot.com/2005/05/first-post.html' title='First Post!'/><author><name>Abtin</name><uri>http://www.blogger.com/profile/09978601607286385767</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
