Unnaturally Long Attention Span

Article Archive for 2006
16 November 2006

Using Google Calendar in Microsoft Outlook




I’ve recently started using the Google Calendar as my main calendaring application. It’s neat because its accessible wherever I go, and you can easily add appointments from email messages if you use Gmail. However, when I’m using my notebook, I like to use Outlook for email so that I can keep copies of everything locally. So, I started searching for a way to integrate Outlook with Google Calendar, and found this [link: Incorporate Google Calendar in Outlook]. It’s a nice solution, but it involves downloading pieces of M$ crapware (Visual Studio 2005 Tools for Office Runtime, Office 2003 Update: Redistributable Primary Interop Assemblies) and an Outlook plug-in.

I, not a huge fan of installing unnecessary stuff, found a much easier way to integrate GCalendar with Outlook that is enough to meet my needs and requires installing nothing.

Behold!


How it’s done:

  1. In Outlook, right-click on the folder you want the GCal link to be in and do “New Folder…”. Call it whatever you like.
  2. Right-click on your newly created folder and select “Properties…”. Under the “Home Page” tab, put in the address of Google Calendar (http://www.google.com/calendar/render?pli=1) and select “Show home page by default for this folder.”
  3. Click ok, you’re all done.

One drawback of this method, is that you are not really using the Outlook calendar, so its not really a solution for you folks in corporate world on MS Exchange. But if you’re happy using Google as your main calendar store, this’ll be fine!

20 September 2006

When Disgruntled Laptops Attack Their Masters

So, this is what happened at work this morning. I think the pictures are pretty self-explanatory. Apparently, the smoke detectors in our 8-story tower are only for decorative purposes, since despite the thick black smoke and smell, nothing happened until someone manually pulled on the fire alarm. Comforting, eh?


On the other hand, my personal notebook is a Dell, too, that I’ve been using almost 4 years with no problems.

More coverage here:

Dell battery explodes at Yahoo HQ, hundreds evacuate (Engadget)

Flickr shots of the event

Valleywag

11 May 2006

The Right Cognitive Testbed for AI – Babies

The AI community has had a hard enough time defining what AI is, let alone defining milestones for achieving a functional AI. I believe that the obvious choice for funtional milestone is to achieve a functional AI equivalent of a newborn child. You might think this is a quite natural choice, but it differs from a lot of historical “milestones” of the AI community. An effective robotic baby is not going to help streamline your corporate environment, drive a war vehicle through enemy desert terrain, or handle urban assault situations. But then again, if you don’t think a baby can cause mass destruction, you haven’t spent enough time with one.

It’s uncertain whether developing a functional baby cognitive model is the right direction towards human-level adult AI, but at least the progress is measureable, which can’t be said for a lot of other approaches, such as animal models, games, or Turing-test-like setups. For example, just look at how the competition to create a Turing-test passing chat bot has turned out. Has creating a world champion chess computer advanced our knowledge at all of building a human-like AI? Not by much.

If you buy into my arugment so far that the baby model is the right approach, what does it actually involve? I will try to break down what I think the work in this track involves. I’ve citied the sources of the information at the end of this article.


This image shows how a baby’s developing eye sees the world.

Below I have a timeline of an infant’s cognitive development up to 1 year, and my own comments on what AI work is involved in emulating that functional behavior.

  • Between 1 and 2 months of age, infants become interested in new objects and will turn their gaze toward them. They also gaze longer at more complex objects and seem to thrive on novelty, as though trying to learn as much about the world as possible.
If you look at the image above, it suggests that during this time period, the sensors and the brain interface necessary to support them are still being constructed. An interesting cognitive feature–the ability to determine what is new–develops during this time. This ability to highlight “what is new” is the defining feature of what makes us alive. Basically, living things respond to changes, not to steady-states, so the central survival trait is the ability to detect and track changes. This feature is very complicated and affects us at many levels and deserves really its own discussion. At the lower level, this ability allows us to detect that predator lurking in the field or in the dark alley. At a higher level, why does that new song sound so good now, but so lame the next year?

The ability to detect changes also implies the ability to filter out what’s old. i.e. pattern recognition. Old things are, by definition, things that fall into a pattern. So, I believe that the first step of AI is to have generalized pattern recognition(knowing what’s old) and differencing(tracking the new changes).
  • At around 3 months of age, infants are able to anticipate coming events. For example, they may pull up their knees when placed on a changing table or smile with gleeful anticipation when put in a front pack for an outing.
The second cognitive ability that makes us living things, is an internal prediction engine. The prediction engine kicks in at 3 months, which is when the sensors finally start collecting reliable data. Prediction implies that there is an internal mental model of the world at this point, however primitive. There has actually been a lot of work that has been done on this component. We now have methods that can make predictions better than humans can. The key challenge, however, has always been in defining what are the inputs(how is this represented in the mind?) and outputs(how does this get translated into behavior?), and what is the structure of the prediction(does context play a role, and over what time periods?).
  • At around 4 months, babies develop keener vision. Babies’ brains now are able to combine what they see with what they taste, hear, and feel (sensory integration). Infants wiggle their fingers, feel their fingers move, and see their fingers move. This contributes to an infant’s sense of being an individual.
Sensory input development has finally stabalized and now we start refining the outputs(fingers and toes). Up until this point, we have not seen any fruits from our labors–there are no outputs! AI research has been stunted because there is so much upfront cost in developing a cognitive model, when the benefits(driving a war machine through enemy towns, translating natural languages) rely on the outputs. The point where a baby sees his own finger move and realizes what’s going on is an important one. It’s the point that completes the loop between sensors, internal model, and actuators and this loop creates a very powerful feedback cycle–Do something, predict the output, see the result, match it against the internal prediction, etc. This is the fundamental property of local optimization.
  • Between 6 and 9 months of age, synapses grow rapidly. Babies become adept at recognizing the appearance, sound, and touch of familiar people. Also, babies are able to recall the memory of a person, like a parent, or object when that person or object is not present. This cognitive skill is called object permanence.
In the last step, I hinted at some kind of learning going on, and this leads naturally to the development of a memory to store learned results. The key questions here are “what do you store?” and “what do you forget?”. There have been many different approaches to answering the question of what to store. An approach that has been popularized by the press is that of creating a large “commonsense” database of knowledge that an AI can draw upon to do reasoning. The best example of this approach is the CyC project. However, I don’t think this is compatible if we look at it in terms of developing a functional baby AI. Most people, not even adults, know the length of the Amazon river or the 25th president of the United States, so it seems that this type of knowledge is not a prerequisite for intelligence. A key feature of human cognition is the ability to forget, and these types of knowledge should be ones that a functional AI forgets(i.e. filters out).


  • Babies observe others’ behavior around 9 to 12 months of age. During this time, they also begin a discovery phase and become adept at searching drawers, cabinets, and other areas of interest. Your baby reveals more personality, becomes curious, and demonstrates varied emotions.
This marks the point where the baby is able to acquire completely new pieces of knowledge on its own. I think this is the point where it is effectively an “adult” AI. At this point, the baby has enough capability to learn to be a rocket scientist or computer programmer. The AI equivalent, I think, is one that can learn by simply crawling, reading, and understanding the entire internet.

sources:
[1]Gizmodo-Seeing the world through the eyes of a baby
[2]Yahoo! Health-Cognitive development between 1 and 12 months of age

8 May 2006

LED Letters!

Want to use a cool LED-looking font while fooling spammers? Read on..

The other day I was doing some work in Javascript, to try to fix some things in Diffbot, when I re-discovered a cool thing about element borders in HTML. Adjacent borders actually come together at a 45° angle in most browsers. Here’s what I mean:

This is a div element with borders.

Now, if you take two of these blocks and simply stack them on top of each other, you get a pattern that resembles the LED “8″:

.
.
Like its circuit-based cousin, these HTML LEDs consist of seven parts, which can be turned on or off to create a variety of characters. Having spent countless hours in the circuits lab during my undergrad working with these dreaded LEDs, I realized that now you could design an entire display system using this as a base–you could go as far as creating a scrolling stock ticker! I wrote a quick Javascript demo that turns any text into this form. To try it out, simply include led.js (less than 2k) and the following call to your html <body>
makeText("hello", parentElement);

Below you see an example output:




Try to select the above “hello” with your mouse–it’s neither an image nor text.

The interesting thing about this is that you can use it to make text without actually having that text in the source code. This is great for preventing crawling robots and spammers from reading your text, while still allowing your human readers too see things fine. Some applications of this might be to cloak or email address, generate CAPTCHAs, or to do evil search engine optimization by hiding text from Googlebot. This method might be better than the straightforward method of rendering your text as images because it requires the robot/spammer to have
  1. a javascript interpreter/browser
  2. the ability to snapshot/render a certain region of the screen
  3. Optical character like recognition capability
The image rendering obfuscation method, on the other hand, only requires #3. Obviously, a specific implementation can be defeated by reverse-engineering the html/javascript without these three components, but the resulting spamming algorithm would be implementation specific, which would not scale well for the spammer.

10 April 2006

The Nerve Center that is SF

Here’s a video where someone did an interesting thing. They graphed the locations of every Yellow Cab equipped with GPS in San Francisco over the course of a day. The intensity of the red represents how fast the cab is going.

http://clients.stamen.com/cabspotting/cabspotting_01.html


Doesn’t this remind you of the videos of nerve firings in the brain?

9 March 2006

Engineering Software

Many of my technical readers out there have job titles that match the regular expression “(Sr.|Jr.)? Software Engineer (I)*”. For the non-geek readers, that means we call ourselves “Software Engineers” :-) . But, what would you consider the difference is between someone who is a “Software Engineer” and someone who’s title is a “Computer Programer”? They seem like similar lines of work, yet one seems to imply a higher level of education, perhaps at least a 4-year college instead of a technical trade school. Historically speaking, there has been a huge difference between an engineer and a programmer. During the second World War, “computers” where actually women that caculated artilliary projections using desk calculators. These women became the first computer programmers when they were assigned to program the ENIAC, a room-sized computer with 18,000 vacuum tubes. Engineering, on the other hand, implied not the people that operated the machines, but those that designed the system and solved the larger problems.

Most major universities separate the School of Engineering from the School of Sciences. Engineering includes departments like chemical, mechanical, nuclear, bio and electrical engineering. Science includes departments like chemistry, physics, biology and computer science. Although, it seems like there’s a lot of duplication here with the sciences, supposedly, this is because engineering has some common skillset. Engineering cirricula require a certain type of maths. Engineers usually study topics like design, tolerances, robustness, production processes, and technical writing.

However, let’s return to what is software engineering? One of the most popular degrees that Software Engineers graduate with is Computer Science, which is not an engineering degree. What I’d like to argue–and this point has been made before–is that software engineering, is not only not taught in formal education, but is consequently different from the other types of engineering. This is why large companies recruiters complain about fresh college grads knowing nothing about debugging, why there are so many software internships, why most software engineering jobs require a few to several years of prior experience–its because that’s when you actually learn some “software engineering”!.

However, I say software engineering is fundamentally different from other types of engineering, because the field itself is still in its prenatal state. Maybe that is one of the reasons why it hasn’t been developed yet in formal education; we don’t really know yet what are the best practices and fundamental formulas in software engineering. The level of engineering that goes into building even the largest software projects is nothing like the level of engineering that goes into building something like a car. It’s more like the amount required to build a snowman. Even when I was working at Microsoft on the Windows source code, the Hoover Dam of software engineering, there was very little engineering in place to manage the complexity and uncertainty. To get a sense of this, compare the reliability of your office buiding to Microsoft Office. If your plumbing system or electric system failed as much as my MS Outlook or Firefox crashes, you would be a very unhappy camper. Yet for information workers, both things are equally important to their day.

Software engineering is a newer discipline than mechanical engineering, or even electrical engineering. Obviously, the software world is undergoing a very rapid change right now. We haven’t had time yet to sit back and understand the principles and fundamental formulae that govern software. There are lots of well-specified problems, where there is no agreement on what is the best algorithm. Sure, there are small groups of people every studying problems like software reliability, static source code analysis to identify software weaknesses, and theoretic guarantees for software correctness and performance. I think these efforts will become increasingly important.

I’ve explained in my mind what the distinction between software and other forms of engineering are, but why do I think this is an important issue? There’s no problem with working in a field that is largely unstructured, complex, and ad-hoc. That’s part of the excitement of being in a brand new field. Life is great as a software engineer. The problem is that software is increasingly replacing the function of physical objects and electrical components. That is, computers are used to replace other things. Your typewriter has been replaced by your word processor. The control center of your car has been replaced by a small computer running an embedded operating system. Your telephone has been replaced by a small computer which emulates the phones functions. The stock market itself has been infused with tons of small programs, trading trillions of your dollars. Take the typewriter as an example, the mechanical engineer that designed it knows that unless the few joints between the key and the hammer fail, your keystroke will translate into a mark on the paper. The materials in the product have been carefully chosen with respect to their well known structural flexibility, strength, and mass. I won’t even begin to explain all the things that could go wrong between the time you hit a key on your computer and see a letter appear on screen. In this “design”, the components involved were chosen because they seem to work. It’s crazy talk to try to estimate how reliable this design is. Yet, this fundamental unreliability is what we entrust to keep our airplanes in the air, our cars on the highway, our bank accounts and financial markets secure. It’s just a matter of time before a catastrophic software failure occurs (many major ones already have), or we decide to design responsible software. Software that works as reliably as a toaster. Software that just doesn’t break, no matter what the user does.

Most Popular Posts:
Ranking Colleges Using Google and Open Source

28 February 2006

What is Web 2.0 ?

Everyone in the sphere seems to have an opinion on what Web 2.0 means to them, and I will add my own here. Web 2.0 is the new software tradition which we have all but transitioned to. The features of this new tradition that differentiate it from the older tradition are that products are more focused on design rather than on capability/features. Take for example products like Flickr, Firefox, MacOS X, Office 12, and the slew of AJAX service-based microapps. A good example to illustrate this paradigm shift is MS Word. In earlier versions of Word(1-7), each release added more capability to the editor evolving it from something like Notepad to the current Word 2003, while essentially keeping the interface consistent and familiar. However, if you look at Word 12, the first thing you will notice is a new interface focused on making tasks more efficient and discoverable. Even the data is stored in open formats with the goal of making it easy to consume and access by third parties.

Why did this shift occur and does this mean that software companies will eventually evolve into pure design companies? It’s conceivable that with technology becoming more and more accessible and the wider availability of powerful tools, the software company of the future may be staffed almost completely with artists, psychologists, anthropologists, and designers, with maybe a few technical school graduates to write the tools.

And also, why is it that features and capabilities are less emphasized now? Aren’t those the cornerstone of the computer revolution–being empowered by technology?

The truth is, the software industry is stuck in a rut. You can see it across all specialties–office productivity software, on the web, in gaming–no new features have been added, no new types of websites, no new gameplay, just more efficiency, more polygons, more psuedo-chrome. Since we have no new features to add, we have been keeping busy by making things pretty and usable, to keep us employed. Why this rut? Some might say that it is because the industry has entered a stage of evolution rather than revolution. We’ve reached a critical mass where now the improvements will be in small increments. I agree and also disagree. I agree that is the state of the industry, but I think the cause for no new features is simply that we have no new technology.

Technology as a whole, even outside of IT, has actually slowed down. Where are the Bell Labs of today? PARC is a shell of its former self. What are the new Information theories and quantum theories, new internets. Technology innovation has flatlined after it was made unecessary after we came out of wartime. The internet itself is a wartime child.

Okay, I’ve gotten a little too caught up and started rambling, but I think the solution to this technological rut is clear. We need more fundamental research. We’ve reached the limit on how far we can milk the results of past research. Whether or not there is a wartime neccessity, we need to do this basic research in order to improve the capabilities of our systems, to claim that things are still getting better.

So, what kind of new capabilities should be developed? Computers today are used almost solely to input, output, store, or transmit human data. But, instead of just being repositories and pipes for the data, I believe computers can consume and reason with data, much like a human can. How this can be implemented in our current market, I’ll talk about later.

15 February 2006

Ranking Freedom of Press

Here’s another interesting ranking: the World Press Freedom Index. The list is topped by Denmark. At the bottom of the list is North Korea. The US? 44th. Another interesting data point is the United States of America (in Iraq) [sic] listed with rank 137. Defenders of freedom?

12 February 2006

Using Statistics to Uncover Human Rights Violations

The Human Rights Data Analysis Group , which used to be incubated under AAAS has just released a study they did on the analysis of the human rights violation datasets from Timor-Leste. I’m poring over their paper right now

The Profile of Human Rights Violations in Timor-Leste, 1974-1999
A Report by the Benetech Human Rights Data Analysis Group to the Commission on Reception, Truth and Reconciliation of Timor-Leste
The actual datasets are available for download as well. I encourage you to check them out(zipped CSV files):

the graveyard census database, called the Graveyard Census Database (GCD)
the fatal violations data from the Retrospective Mortality Survey (RMS)
the Multiple Systems Estimation (MSE) data file

8 February 2006

Ask the Geek Grammar Lady #1

In the course of working with fellow geeks, I’ve noticed a few language usages that are unique to us geeks. One of these is the tendency to classify problems and issues as either “trivial” or “hard”. Now, you have to understand, part of this standard geek colloquialism comes from the math tradition of formal proofs. Trivial is used to describe the obvious, non-interesting solution. “Hardness” could be a shortening of NP-hard, used to describe a class of problems that requires a lot of computation.

Next time you are tempted to use these labels, maybe consider some of the following more meaningful alternatives:

Instead of “This such-and-such problem is trivial“… consider replacing it with:
  • This such-and-such problem is easy to solve!
  • This such-and-such problem is small in scope.
  • This such-and-such problem is easy to talk about, but would require a team of grad students 10 months to implement.
Instead of “So, we all know such-and-such is hard”… consider replacing it with:
  • So, we all know such-and-such is computationally intensive.
  • So, we all know such-and-such is impenetrable.
  • So, we all know such-and-such is something I have no idea how to do.