On Strong AI and the Chinese Room.

This is a post taken out of context I made to a discussion group in my AI subject. (Which another Matt and I have decided they falsely advertised, and should have called “Expert Systems”). It’s a bit vague in a couple of places, and I will probably come back to this topic at some stage and write a clearer explanation of what I mean. But this is here for now.

I did some thinking about the thought experiment where a guy sits in a room translating English into Chinese, and how “He will probably learn some characters over time.”, and how this is not the same as a machine.

I think it is the same. If a machine is able to recognise a word/character, that is still the same as the man learning it, rather than just memorising it. (I’d actually counter that memorising meanings and symbols is still a type of learning, and I come from an educational background, so I do know a little about learning).

But I want to push even further. A human isn’t the same as a translating program because it can learn new information that wasn’t there when the program was written. If a program is able to incorporate new facts, develop new pathways, and perhaps even rewrite it’s own program, then this is a much closer analogy to what we define is learning.

There are system out there that allow for dynamic reprogramming (I think some derivatives of Smalltalk are pretty good at this), and many systems that allow for dynamic alteration of code (perhaps by an outside source). Even the OLPC project is based on a system which can be changed while it is running.

Our brains are a machine that can alter it’s physical structure in response to the environment - indeed that is how we learn - and the pathways that are used often eventually end up working better than those that are used infrequently. A program could work the same way. Evolutionary programming is another example - an algorithm can be seeded, and then a variety of mutations are generated, and an “overseer” selects the mutations which result in a better algorithm.

I can’t provide any hard quotes, but I know this has been used to some extent to develop novel programs.

I know this is verging on Strong AI, which Darius says is a no-no, but consider this post as having taken place in a pub or cafe. In fact, I’m off to the pub now.

Fighting with ssh.

It’s still relatively unusual for me to have to work on a system that I don’t have superuser status on - at home I am the administrator of all of the machines, and at work I have sudo privs on both the development and production servers.

At Uni, however, I have to play by some other dude’s rules.

And, that means sometimes not having software installed that I need.

Take mercurial, for instance. I use this as my exclusive RCS, because it is simple to set up a repo, easy to clone, plays nice with OS X, and with Trac. It’s extensible, and easy to merge changes from clones.

But it isn’t installed as standard, or even at all on the Solaris machines at Uni. SVN is, but I’m not about to go through the whole rigamarole of setting up an svn server again. It just doesn’t do anything for me that mercurial doesn’t but it’s more setup work.

And I create new repos all of the time. I have one for each of my topics, and every time I start a new project, I create a new repository. It’s just that simple: hg init.

So, I tried installing it as a general user. I have it so that it works to some extent: I have the ability to change my environment variables, so I can add ~/bin to my path, stick all of the hg files in there, and then the mercurial/ directory into ~/.python, which I then make my PYTHONPATH.

Then, I can happily use hg while ssh’d in (or logged in to one of the SparcStation machines).

But, I can’t use the remote access.

See, ssh <machine> hg <command> will not work unless a) hg is in the system path, and b) mercurial is in the system python directory. You can fudge the first part (by explicitly telling the local hg where to look for the remote hg) but then I can’t figure out how to tell it where to load the python classes from.

So, my solution is this: mount the folder using sshd (or in my case, ExpanDrive). Then clone the repository from the local machine. You can then happily work away on either machine, but to push/pull you need to have the folder mounted.

Bit of a bummer. I’ve asked for mercurial to be installed, but we’ll see if that happens or not…

Why do that? Really?

I have been searching for cheaper ways to buy textbooks (it’s crazy to pay $120 for a text, IMHO). I’ve chanced across www.textbookexchange.com.au. Let’s examine the workflow when trying to find a book there.

  1. Visit the site.
  2. Type in the name of the book or author.
  3. Press “Search”
  4. Be redirected to a login page.
  5. Have to type in the name again because you were redirected back to the home page, rather than your search results.

I mean, seriously. It’s not that hard to keep some handle on state and redirect to the search results.

If I hadn’t saved so much money buying my books this way I wouldn’t use their stupid site!

Compiler Construction, or Game Development?

As a class, we have the choice of what the focus of one of my topics this semester is going to be.

I’m voting for Compiler Construction. Even though we’ll be doing it in Java (ugh!), it is something I was disappointed to find wasn’t otherwise offered.

If you need convincing, read Stevey’s Blog Rants: Rich Programmer Food.

Now, if only I can convince the rest of the class!

configd Kernel Panic

First KP in ages today.

Tue Jul 29 13:50:14 2008
panic(cpu 0 caller 0x00192FD4): "pmap_flush_tlbs() timeout: " "cpu 1 failing to respond to interrupts, pmap=0x6b58ae0 cpus_to_signal=2"@/SourceCache/xnu/xnu-1228.5.20/osfmk/i386/pmap.c:4570
Backtrace, Format - Frame : Return Address (4 potential args on stack) 
0x628bfa18 : 0x12b0fa (0x4592a4 0x628bfa4c 0x133243 0x0) 
0x628bfa68 : 0x192fd4 (0x45f414 0x1 0x6b58ae0 0x2) 
0x628bfad8 : 0x1932b8 (0x6b58ae0 0x200000 0x0 0x0) 
0x628bfb88 : 0x195721 (0x6b58ae0 0x215000 0x0 0x14160a8) 
0x628bfbe8 : 0x169e6f (0x6b58ae0 0x215000 0x0 0x216000) 
0x628bfd08 : 0x16a437 (0x216000 0x0 0x0 0x0) 
0x628bfd48 : 0x182517 (0x1b32618 0x215000 0x0 0x216000) 
0x628bfd78 : 0x159209 (0x1b32618 0x215000 0x45 0x11d992) 
0x628bfdb8 : 0x12d17e (0x12a66d9c 0x874e0a0 0x0 0x0) 
0x628bfdf8 : 0x126257 (0x12a66d00 0x0 0x28 0x628bfee4) 
0x628bff08 : 0x1973dd (0x628bff44 0x0 0x0 0x0) 
0x628bffc8 : 0x19f3b3 (0x6b61820 0x0 0x1a20b5 0x12b56f20) 
No mapping exists for frame pointer
Backtrace terminated-invalid frame pointer 0xbffff508

BSD process name corresponding to current thread: configd

Doesn’t really give me much info, does it.

From the Xcode-Users list...

How do you pronounce XIB?

I’d say it as ZIB. You know, like xylophone?

Testing Modified ecto-Twitter addon.

As the man says…

Creating a new Avatar.

Can you tell I’m procrastinating?

I’ve spent the last little while using Acorn to create a new Avatar. Here are some ideas.

manga_matt_dot.png

manga_matt.png

manga_matt_pont.png

Matt_vectorized_pont2.png

Matt_vectorized_dot.png

Turn of the Century. Again.

Back sometime before the year 2000, I happened across a book called “Turn of the Century”, but Kurt Andersen. I remember absolutely loving it, but the coolest thing was that one of my longest friends, who had not too long previously moved interstate, had started reading it at exactly the same time. It was like our own private Oprah’s Book Club, but without Oprah. So, better.

Today, I happened across a blog by Buzz Anderson, and for some reason, this reminded me of Kurt Andersen. I dunno why, you figure it out.

So, I decided I’d read the “Turn of the Century” again. Which is cool, as I can’t really remember what happens in it anyway. I just remember that I loved it. But I already said that, didn’t I?

#1 Fix for Twitterific

It annoys me that when I click off the Twitterrific window, it doesn’t auto-hide. There doesn’t seem to be a setting to make this happen.

Luckily, you can fix this with a quick edit to the MainMenu.nib file.

(This requires you have InterfaceBuilder, and therefore the developer tools installed.)

View the contents of the Twitterrific.app package, and navigate to the Resources/English.lproj directory, and open up MainMenu.nib. Find the Tweet Window, and change it’s properties to “Hide on Deactivate”.

Save the nib, and restart Twitterrific. Bingo, clicking off the window auto-hides.