Wherever there is modularity there is the potential for misunderstanding: Hiding information implies a need to check communication.
quark (random)
Lucille.v3.screen
Lucille.v3's screen
1h46 ago
38.103.63.55

Lucille.v3



Lucille.v3 is a 15'' PowerBook 1.67 Ghz G4, 768 MB ram and 80Gb hard drive.
To date, the OS is  Mac OS 10.4.3.


History of the name

The name Lucille comes from the movie “Red Planet” in which the expert system which drives the ship MARS-1 is called Lucille by the crew. I have seen lots of A.I. and pre-A.I. in movies but Lucille was a special kind of expert system able to take some initiatives but without being a proper A.I. She was at an intermediary evolutionary steps which is almost never mentioned in movies.

Another little detail that I liked about her was her voice.

Actually "Lucille" is not a name, but a concept. I call Lucille all the objects, from simple piece of paper to super-computer, that I use to help me managing my time, and by extension store some data.

nb: MARS-1 (the name of the actual ship in the movie) is the name of my main external hard drive, a Lacie 320 Gb.


Versions

- Lucille.v1 was a Palm Pilot Vx. The first electronic device with which I had a rather close relationship. It still works but I no longer use it.

- Lucille.v2 was my first laptop as well as my first Macintosh. I bought it second hand on the 22nd December 2003 from Robert who managed to have too many of them in his hands. It was a 12'' PowerBook G4, 867Mhz, 640Mb ram and 40Gb hard drive. Getting this laptop have been one of the best thing I did in my life, not for the laptop-thing, but because of the Apple-thing. I actually totally felt in love with the Apple design.

I have 249 files on my computer which have 22nd 12 2003 as creation date.


alpha/

The size of Lucille.v3’s current backup is 20Gb. This includes 4.86 Gb of music (I bought some of it!), 3.60 Gb of pictures in the iPhoto Library and 5.47 Gb of movies (I bought some of them!). The most important folder of my home directory is named "alpha".  alpha/ weights 5.71 Gb and is nothing else than the electronic version of my life.

The setting of alpha/ has been one of the most complicated thing I did in my life. The problem was to find a tree structure which fits the way I mentally organize things. The surprising thing with alpha/ is not that it was such a complicated problem but the fact that it took me an awful amount of time to solve it. It has been a very slow and gradual process. Actually the structure itself doesn’t say much, it comes with an algorithm.  The purpose of alpha/ and its algorithm is that any electronic file with any content understandable by me has got a unique place in the tree.

The problem itself is trivial to solve: any external event identifiable by my mind has got a unique identification number of the form xxxxyyzzaabbccdd. For instance this [word] could be called 2006010700301023. This number is to the 100th of second the date I wrote the word. I was also looking at a movie when I wrote the entire sentence and I could find a frame with the same number (with a bit of luck actually since there is only one frame every 4/100th of second in a movie) but my attention would have accessed them at different time, with the possibility for me to move one of them in time. Hence every file on alpha/ could have got a unique identification number (for instance the date I mentally acknowledged their existence). Given this, the trivial solution is to put all the files in one folder. The problem with this solution is that my mind does not keep track of the *exact* time of things. I would not be able to find anything (except the pictures of my wedding) in such a folder. Hence the problem has been to find the tree structure which fits the way I think of files, rather than when I did think of them. In the current (stable) state of the tree I can access any of my files in less that 3 or  4 seconds from the root (having the column view of the Finder helps a lot).

It may nevertheless happen that some files are unclassifiable. They are so particular that it would have to make the tree unnecessary complicated for them to have a natural position. Let us take for instance the archive of alseyn.net/blog.old/. The contents of this url are frozen since alseyn.net has moved to the new blog. On my computer I have two paths

.../alseyn.net/Archives/Contents.txt
.../alseyn.net/Archives/Files/200512301820.zip

In the text file Contents, there is a table which says that the file 200512301820.zip is the archive of the folder alseyn.net/blog.old/. This means that if I ever need to extract something from this archive (for instance because I accidentally deleted a file inside the folder blog.old/ on the web server). I have to look at inside Contents.txt first which tells me that the zip file that I am looking for has been archived my me on the 3oth December 2005 at 06:20 pm.

Of course I also have a path .../alseyn.net/Backups/ which happens to be the backup folder of my public_html/ folder on the web server. Regularly I backup all modified files since the last backup.

Hence the total tree is a semantics tree where the leaves are sometimes a folder of the type Archives/ with a Contents.txt file and a Archives/Files/ subfolder.

Or course there are exceptions. Given a folder .../.../folder, if the folder and its subfolders are organized following an ad-hoc scheme, then there is always a .../.../folder/Quid.txt file which explains to me what I had in mind when organized the folder and the subfolders. Consequently, sometimes, when looking for a file I encounter a Quid.txt file that I have to read before going deeper in the tree.


The initial 1-deep structure of alpha/ was
alpha/
    0.Lucille.nb
    1.Human_Beings/         
    2.Archives/
    3.Jobs/
    4.Universalis.Turing/
    5.Ngeestra/
    6.Multimedia/
    7.Universalis/


Since 20060107 it is
alpha/
   Human _Beings
   Multimedia
   Ngeestra
   Universalis
   Universalis.Turing


“Ngeestra” comes from Stafl-Preonsa Fal Shilde 'Ngeestra dam Crose, the name of a referee of the Culture who has been active during the war against the Idirans.


alpha/  has currently got 3323 files. It used to be a very deep tree, but is now (since the update) of deep 8. The deepest elements are the emails that Aubrey and I have sent to each other since we met. They are ultimately stored as dated archives. The commmun beginning of their paths is alpha/Human_Beings/Alseyn/



A screenshot of the screen is updated every hour on alseyn.net. The process is done in two steps : [1] The screenshot is done, the picture is resized to have a width of 200 pixels and saved. [2] One minute later the picture is FTP-ed to the web server.

[1] is done by an Automator-generated application triggered by an AppleScript, the latter scheduled as a cron job. The reason why the application is not directly scheduled, is that on 10.4 applications created by Automator do not react to the command line but can be activated by AppleScripts (I think that this bug is due to the youth of Automator). On the other hand AppleScripts can be scheduled (I had a *very* hard time spotting this bug and understanding what was wrong).

[2] is an AppleScript scheduled as cron job.

The reason why [2] is performed one minute later than [1] and not as the same time, is that when the computer is busy (heavy cpu load) [2] starts before the end of [1] with sometimes bad consequences. There is a way to ask [2] to wait a given amount of time but for some reasons I dislike it.

[2] asks to the keychain the password for the FTP transfer to alseyn.net. This request is unfortunately buggy on 10.4 and I had another *very* hard time going round it. It was so annoying that I was about to get rid of the idea of this request and embed the password as part of the script (this would not have been such a big security problem but I like clean solutions). I eventually made it work by modifying a piece of code that I found on a German web-site.


The current (stable) code for [2] is

set LSGN to (load script alias "Lucille.v3:...:Lucille.Scripts.Growl.Notifications.scpt")
set getANP to (load script alias "Lucille.v3:...:getAlseynNetPassword.scpt")
set theSystem to system info
set theIPv4 to the IPv4 address of theSystem
if ((theIPv4 is not "127.0.0.1") and (theIPv4 does not start with "169.254")) then
    tell LSGN to Lucille_Says({"[alseyn.net]", "Lucille.v3's screen updating..."})
    tell getANP
        set thePassword to AlseynNetPassword()
    end tell
    set theLine1 to "hidden"    
    tell application "Terminal"
        do script theLine1
    end tell
end if


LSGN is a home made interface for Growl...
The contents of variable theLine1 is not displayed here, neither are the complete path for the scripts “Lucille.Scripts.Growl.Notifications.scpt” and “getAlseynNetPassword.scpt”.


The code for LSGN is

tell application "GrowlHelperApp"
    register as application "Lucille.Scripts.Growl.Notifications.app" all notifications {"Notification"} default notifications {"Notification"} icon of application "Script Editor"
end tell

on Lucille_Says(theRequest)
    set theTitle to item 1 of theRequest
    set theText to item 2 of theRequest
    tell application "GrowlHelperApp"
        notify with name "Notification" title theTitle description theText application name "Lucille.Scripts.Growl.Notifications.app"
    end tell
end Lucille_Says


The code for getAlseynNetPassword.scpt is   

on AlseynNetPassword()
    
    try
        tell application "System Events"
            set foundApp to first process whose name is "Keychain Scripting"
            set pid to id of foundApp -- this will exit the try block if the process isn't running
            quit foundApp -- we get here if the process is found
        end tell
    end try
    
    -- get Finder to launch Keychain Scripting
    tell application "Finder"
        open application file ((startup disk as string) & "System:Library:ScriptingAdditions:Keychain Scripting") as alias
    end tell
    
    -- make sure that Keychain Scripting is up and running
    repeat while true
        try
            tell application "System Events"
                set foundApp to first process whose name is "Keychain Scripting"
                set pid to id of foundApp -- this will exit the try block if the process isn't running
            end tell
            exit repeat -- we get here if the process is found
        end try
    end repeat
    -- end startKeychainScripting
    
    delay 1
    
    tell application "Keychain Scripting"
        try
            set theKey to first key of current keychain whose name is "hidden"
            set thePassword to password of theKey
        on error message number errNum
            set thePassword to message & " (" & errNum & ")"
        end try
    end tell
    
    return thePassword
    
end AlseynNetPassword

The name of the keychain item which hosts the password has also been hidden.