Thursday, July 31, 2008

To the northwest corner!

We're going to Lassen on Saturday. But I made an error in reservation, and sent us off to a night at Butte Lake. Accessible only by driving eight hours down a gravel road. At least it will be (relatively) secluded.

I am forgotten

I feel as though I've been forgotten, working here in front of my computer. But is it really that I'm forgotten, or that I've forgotten how to be?

Tuesday, July 29, 2008

Space profiler needs profiling

I struggled and failed against the Allegro CL 8 space profiler yesterday. I tried capturing a space profile for some of our software running on Windows. With only five seconds worth of data Allegro CL would chew up 300MB of heap in producing the profile. Needless to say there was nothing meaningful to be had there.

What I really want is to get visibility into which heap data allocated makes it to oldspace. I want to see what's making the image size grow. I'm not getting useful data from the space profiler, and I don't think I possibly could. Time profilers are much more useful in optimization, space profilers can't separate temporary allocations from those that get tenured.

Monday, July 28, 2008

Photos from India and Taiwan posted!

It took me a while, but I'm finally through processing all the photos I had taken in India and Taiwan. I posted them on picasaweb and flickr. I clearly have a long way to go in developing my photography... I also upgraded my 28-135mm lens to a 24-105mm L lens. My first L lens. And it is fantastic! Even zoomed in at 100% the pictures are sharp as can be.

I took the lens out for a test run around Stinson Beach. There was fog covering the whole area, except a hole around the beach that let in some nice warm sunlight. The beach though is far from photogenic. Not really all that much worth photographing. So I got some spectacularly sharp photos of fairly generic stuff, like sand, and seagulls, and sunbathers. All the exciting stuff happening off shore, like pelicans diving for fish, was too far for me to capture with this lens.

The lens is considerably heavier than the 28-135mm, but definitely seems to be a great investment. We'll be going to Lassen soon, which will give me a chance to really give the lens a workout.

Monday, July 21, 2008

The Dark Knight

I had a peek at The Dark Knight on IMDB. The movie currently is the best ever on IMDB, with a score of 9.6/10. It will probably come down, but this is an incredible score. Going through the user comments, found this: "Oh my freaking baby Jesus." Which sums up nicely how I felt when I saw the two minute bank robbery clip six months ago in the previews of I Am Legend. I've been waiting for this movie ever since.

Sunday, July 20, 2008

Whatever Happened to AI

I just finished reading Lenat's "The Voice of the Turtle: Whatever Happened to AI". It's in the Summer 2008 issue of AI Magazine, more precisely Volume 28, No. 2. In it he asks what happened to the premise of producing human level AI. There are several knee jerk responses that immediately come to mind, given that I've spent a bit of time working on AI:
  1. The meaning of human level AI is fuzzy. In the absence of a clear definition, the question is not really meaningful.
  2. Human level AI is not a unitary construct. An individual's conception of the world is greatly affected by the types of tasks she knows to perform.
  3. Humans are not logical in the manner that logic can be programmed into software. Although the paper isn't about an AI that mimics humans, we're going against the grain of the one example of intelligence out there.
Lenat is extremely intelligent, but quite opinionated on the right way to achieve intelligence. I disagree with his approach, primarily because I don't think of intelligence that has arisen out of nothing. Intelligence is a facility that has developed in response to particular evolutionary pressures. In our case, I believe it is to deal with increasing complexity of social structures. The application of social intelligence to other more general problems is a happy accident.

I do believe that an intelligent agent has to have some embodiment external to its representation of its world. In other words, an agent should be able to take in uninterpreted sensory information (even if it is symbolic), translate it into a format that is more amenable to manipulation, and take actions on that format. Communication with other agents must be one of the many actions the agent is required to perform. Without this overall architecture I don't think there is any way we can build a truly intelligent communicative agent.

Lenat's overall flaw is in believing an intelligent entity can be created by manually representing facts. I believe intelligence is seen where an entity is able to operate and adapt to an environment, and communicate with other agents. These facts are an afterthought, a story we have put together to explain how we do things. It isn't how we actually do things.

So, what happened to AI? I think it is only necessary in entities that have to be truly autonomous or embodied. Otherwise we'd generally be better off with the story of facts weve so far been creating.

Friday, July 18, 2008

Portrait Photography

I've run through my first experiments with portrait photography. And I have a lot to learn. I was working with the Canon 50mm F1.4, and the Canon Speedlite 580 EX II. I didn't have much control over the environment in which I took photographs. Generally I took them wherever the subject happened to be sitting. Here's what I've learned:

  • Small rooms with light walls work best for bouncing the flash.
  • If you have a glossy wall in the back, watch out for reflections massively affecting the flash metering.
  • I need a diffuser.
  • Don't point the flash at the subject. Bouncing it off walls works suprisingly well for getting an even exposure. Consider pointing the flash away from the subject.
  • Ideally, avoid having a wall behind.
  • Even wide open, the background can be distracting.
  • Fill the frame. Not entirely, but do fill it.
  • 50mm, even with a crop sensor, is not enough as a good portrait lens. I think I need at least 100mm.
  • BUT, if there's a possibility that you might need to accommodate multiple subjects, a shorter lens is quite helpful.
  • Overexpose. But don't underexpose. A lot of my photographs were underexposed.
  • By focusing on the eyes you really do get an image that, even though the face is fuzzy at many other spots, turns out to be quite pleasing.

I didn't really have much time, or many opportunities, to get the shot right for many of the portraits. I'm also unclear on how to set up an on-camera flash and have it work with the camera in portrait mode. Every portrait was taken in landscape mode. Though not bad, it does potentially waste a lot of screen real estate. Well, I need to practice, practice, practice...

Thursday, July 17, 2008

RDF and Hypergraphs

Today I discovered directed hypergraphs in all their glory. Well, OK, not all their glory, since information about them is pretty sketchy. There seems to be only one entry in Wikipedia about hypergraphs, with some of the math involved in them. Digging deeper into the literature brought up directed hypergraphs, which according to Wikipedia should not exist. So... what is a hypergraph?

While a graph has edges that connect pairs of nodes, hypergraphs have edges that connect an arbitrary subset of the graph's nodes. A directed hypergraph places a direction between two sets of nodes, where the sets are disjoint. There are mathematical formalizations for these graphs, naturally, but I just want to stick to the intuitions.

Naturally, the resulting data structure can't be visualized in any reasonable way using nodes and edges. So... what are they good for?

I started looking into this knowing that they have been applied to semantic web problems. Google brought me pretty quickly to the realization that hypergraphs have been widely considered for representing RDF. Each node in such a hypergraph could be either the subject, predicate or object of an RDF triple. The triple itself is then an edge in the hypergraph. The hypergraph must be directed, otherwise it isn't possible to distinguish subject from object.

Unfortunately there doesn't seem to be enough discussion about precisely how such an edge should be interpreted. Would the source and destination sets be {s, p} -> {o}, or {s} -> {p, o}? Because, really, we need to distinguish between subject, predicate and object. And in the representation above you can't really tell (other than by the letter prefix I've used) which one of the three is the predicate.

There are other ways I've seen of applying hypergraphs to representing RDF. There was a paper that described the application of hypergraphs to mergining ontologies. The description was quite precise and relatively clear.

Monday, July 14, 2008

More camping trips planned!

Took a trip up Mission Peak again on Saturday morning. It was good, but we're both out of shape. This is a hike we should be able to do in less than two-and-half hours. With loads. So we need a lot of practice. We're taking an optimistic outlook, and have made reservations at June Lake, Lassen, and are trying to get a decent reservation at Angel Island. June Lake is near Mono Lake, and is going to be a launching pad to the White Mountains. Home of many bristlecone pines, the longest lived individual organisms in the world. I've never been to the Easter Sierras, so I'm really excited about this trip. It'll be freezing up there at night, but that's OK. It'll be worth it. Hiking at over 7000 ft for a couple of days!

I'll take lots of photos, naturally, but I wonder how I'm going to put together the time to sort and process all of them. We're talking at least another thousand photographs over the next couple of months. And I'm having a hard time getting through the India photos. I'm having a great time creating bluer skies in my photos than I had caught at the actual time of taking the photo. It really creates so much more drama in the photos. I also tried creating a panorama using hugin from some photos I'd taken at Rajaji National Park. Took forever, and ultimately I had to discard half the photos I had taken for the panorama. It didn't matter though, I still ended up with an image multiple megabytes in size. I'm not sure whether it was really worth putting together that panorama... It isn't *that* good.

I wish we'd been at Rajaji when the elephants were out. Oh well.

Thursday, July 10, 2008


Once again I'm going to attempt restart blogging.

I am still going through the photos from India. Taiwan's done. They have been going on to flickr and picasaweb. Though I'm putting our personal photos only onto picasaweb. They have better privacy control facilities.

I've also received positive feedback from another photographer I'd met at the SF photography meetup. It's given me impetus to find a used 24-105mm to replace my current 28-135mm, which I'd describe as a decent consumer lens. There are far too many instances where the 28-135mm has fallen short, and this is my most frequently used focal range. An improvement here will be an improvement across most of my photographs.

On the work front, I've started looking again into financial planning. I'm extremely interested in seeing what can be done with socially constructed ontologies. However, there aren't all that many examples of such ontologies. And there are even fewer examples where these ontologies have been subjected to reasoning. (Rather, I haven't found any examples where reasoning has been applied to socially constructed ontologies.) I should look at the biomedical wiki and other biological ontologies a bit more closely. I believe these involve trained individuals guiding the construction of the ontology, so it may not be fully in the socially constructed sphere.

On the programming front, still spending all my time with Common Lisp. I took a stab at Python a little while ago, and will go back to it soon. I'm underwhelmed, to put it bluntly. There is syntax to make some operations that are more verbose in Lisp a bit more compact. But the language isn't really interactive. Anything you had created in memory goes out of date once you update the definitions. And speaking of updating definitions, there isn't a straightforward way of reloading all updated source files. The language is interpreted, not really interactive. Contrast that with Common Lisp, where you have a well defined protocol for updating an instance to an updated class definition... This is not even considering all the differences between the languages. I have yet to experience anything in Python that has shown convincing superiority over Common Lisp.

Finally, finances. I've been losing money. The market is becoming cheaper from a long term perspective. But I don't have, at present, funds to invest. A lot is tied into the remodeling of the house. There are nagging doubts about whether we've taken the right approach to managing our money. But it is too late for that now. I still don't know how easy or hard it is going to be for us to refinance. I hope we can get to it in the next couple of months. We really need to wrap up construction by then.

That's it for now. More tomorrow.