BlackBerry (by )

Many moons ago I did some work writing apps for BlackBerries. I liked the things at the time; they seemed to be well-built, both from the hardware and software angles.

So when my mobile phone contract came up for renewal (meaning I can get a free new phone if I sign up for another two years), with my existing phone falling to bits and rather crashy, I was pleased to find that I was eligible for a free BlackBerry 8520!

The device is a nice evolution of the BlackBerry I was using back in 2004 or so; rather than the thumb-activated scroll wheel we now have a two-dimensional scroll thing that works like a trackball, but seems to really be the innards of an optical mouse, set up so it sees my thumb moving over a small plastic window. This works well, takes up little space, and has no moving parts apart from the click action when it's pressed in to select something. The one downside of the new hardware is that my original Blackberry had a reflective LCD; it had an optional backlight, but spent most of its time with it switched off, simply reflecting the light incident upon it (in colour!). This didn't make for vibrant, saturated, hues in photos, but it did save a lot of power, and meant that the screen was highly readable in the brightest sunshine.

There's a few rough edges in the software; my model lacks a GPS, and the supplied maps application lets me enter my home and work locations by typing in an address, then gives me the option to locate that from the current GPS position (which of course fails) or to look up the address - which also fails, claiming the state/province cannot be found. If I just put the postcode into the address and nothing else, it works - but only matches on the first part of my postcode, getting a location that's some distance away in my rural area. I'd like to have an option to choose the location I've scrolled the map to by hand, geocoding that doesn't suck, and no menu options about GPSes when I have no GPS, please.

The mail system tries to auto-configure itself. Which is a blessing, and a curse. I bet it's a blessing for many users, and their IT departments, that they can just enter their email address and password, and have the rest fetched. However, I have a funny mail setup; I have lots of different IMAP mailboxes on the same server, with usernames like "alaric-work". And there happens to be a POP3 daemon listening on the machine that hosts my employer's web site. So when I put in my work email address, it notices that the domain part of the email address has an A record, and it has a POP3 server, and that POP3 server has a user called alaric (which is the user part of my work email address) which it can log in as with that password - so it goes ahead and makes me a POP3 account... with the wrong username and wrong mail server. Which would be OK apart from the fact that there's no way of changing the protocol or username on an existing mail account.

The trick, it turns out, is to deliberately put the wrong password in on the initial setup screen. This causes the POP3 login attempt to fail, and the subsequent IMAP one (in order to be compatible with Outlook's autodetection, it tries POP3 before IMAP!) too; it then says it can't automatically configure me, and asks me to list username and mail server. It then proceeds to guess IMAP somehow (it still didn't ask me, and the machine has POP3 as well as IMAP on it), and pow, my IMAP account is set up.

Personal Information Management (by )

One of the neat things computers have become able to do as they become more "personal" - eg, we spend more of our lives operating through them, and they become more portable - is personal information management (PIM).

I remember PIM apps in the early 1990s, running under MS-DOS. Quitting whatever you were doing and starting up a separate app to look at your calendar was a bit unwieldy so they didn't do so well, except perhaps Borland Sidekick, which used some clever tricks to pop itself up over running applications.

But nowadays we have systems like Apple's PIM components in Mac OS X; an address book, todo list manager, crypto keyring and calendar provided with the OS, with nice interfaces for using them yourself and an API for all applications to use the same databases. Mac OS software seamlessly uses the inbuilt PIM infrastructure wherever applicable, for the good of all. It's about as good as it gets, so far.

But it's not perfect.

For a start, the task list is a bit primitive. When I had a Mac, I used the excellent Things.app to manage my tasks, as it supports projects and roles and all that stuff, which helps to keep my hectic life compartmentalised. Since it has a much more rich data model than the OS' inbuilt task list, it has to have its own database to keep it in, but it integrates with the inbuilt one as well as it can. My tasks in Things.app get added to the native task list, without their extra information; and new tasks I add to the native task list appear in Things.app, in the 'inbox' area for unclassified tasks, awaiting my attention to move them to a project.

It'd be nice if the underlying PIM database was flexible, allowing arbitrary properties to be added to objects. Then the native task list viewer could share the same actual task list as third party apps, and it would just ignore the extra information about projects.

But even that would suck a bit. Imagine I also had a task manager app that synched to my smartphone, and let me tag each task with the physical locations I can do it from (eg, DIY must be done from home), so an app on the smartphone can show me tasks filtered by location. I'd then need to juggle two task list apps; both would be a superset of the basic task list app (and would therefore duplicate all the basic display-a-task, deal-with-due-dates, etc logic), but each adding their own extra features. Altering all of the properties of a task would involve finding it in two separate apps. Et cetera.

As it happens, I'm also interested in making more use of knowledge representation techniques in software. Knowledge representations such as Resource Description Framework or Horn clauses have the useful property that information from different sources can be merged, as long as the names of things are agreed upon. They work by storing information, not in tables (like the relational model), nor as a graph structure (as the in-memory data model of most programming languages), but as an unstructured list of statements about objects.

The objects can be literal values - strings, numbers, that sort of thing - or symbols of some kind, used to represent objects that don't (or might not) exist directly within the computer, such as people or concepts. RDF uses URIs as its symbols; Horn clauses (being a mathematical notation) are a bit vaguer as to what a symbol is. Either way, they have to be some identifier for the abstract objects.

Each statement links a number of objects, with a relationship (which is itself an object, usually constrained to be a symbol).

So say we have objects called alaric and cheese (the latter representing the general concept of cheese, rather than any particular lump of cheese), and an object called like, representing the concept of liking something. We might write something like:

  (like alaric cheese)

...to mean "alaric is related to cheese by like". As it turns out, just about anything can be represented as such statements. From the relational model, a table can be converted into a symbol used as a relationship (the table name will usually do), and each row into a relationship of the objects that are the values of the fields of that row (likewise, we could have a relational table called LIKES that lists the IDs of objects that like other objects). Relational models usually use arbitrary integers as the "symbols", and automated mapping into knowledge representations is hard because it's not always explicit if an integer column is an identifier, or the identifier of what (as it could be a foreign key), or just a price or some other actual integer quantity. But with a bit of human guidance, it can usually be done.

However, note that in a relational model, that LIKES table would have two foreign keys into some other table that lists all the objects that can take part in liking. It'd be impossible to say that alaric likes like itself (it's nice to like things!), since like is a table rather than a row in whatever table the foreign key pertains to. The relational model has a very static type system, as people who have tried to map class hierarchies into it often find.

Now, the fun thing about knowledge representations is that the objects are implicit. In a relational system there'd be a table of People or whatever, giving each person an arbitrary integer as a primary key then listing details of that person. You can point at rows in this table and say "there are the people".

But a knowledge model just has lots of facts about each person, sort of spread around. There's no place you can point at and say "there's the person". If you want a list of all the people, then you need to look for all statements saying (is-a-person X) ("X is a person"), which is as close as we get to assigning types (not that (is-a-person X) can coexist alongside statements such as (is-a-customer X); an object can have lots of types, all overlapping). If you want to delete an object, you need to scan the knowledge base for all statements referring to that object, and delete those.

If my personal information was stored in a knowledge base, then Things.app could share the same basic relationship objects as the inbuilt task list. (is-a-task foo), (title foo "Feed the cat"), (is-urgent foo), (due-on foo (date 2009 12 16)), but also add its own: (is-a-project bar), (title bar "World domination"), (is-part-of foo bar).

Note the use of generic relationships - title gives any object a title. is-part-of is a generic containment relationship. This means that even without knowing about projects and task lists, software can tell that things have names, and that there's some kind of containment relationship to explore. The names we give objects - foo, bar in my example - are arbitrary; so for objects that don't have a natural name, they could just be random strings, like UUIDs; RDF even lets such objects have no name and be referred to implicitly. Objects we want to use widely (such as relationships) will benefit from nice names, however.

It's easy to merge knowledge bases, too. Just pour all the statements into one file. You have to be careful of the same object having a different name on each side, obviously, and how to fix that can only be handled on a case-by-case basis; RDF has the concept of "inverse functional properties" that are meant to uniquely identify an object (such as email addresses for people) that can be used to detect and automatically merge things, but it's not applicable to all situations.

If I merged my task lists from my laptop and my phone for the first time, for example, I'd now have more objects satisfying the query (is-a-task X); they'd be seamlessly merged. If I had synched my devices so they both had the task called foo above, and on one I added some extra statements about foo, they'd be seamlessly merged in. It gets more fun when there's collisions - if I change an existing statement, for example. If my knowledge base is sophisticated and puts unique IDs and timestamps on each statement then it can spot that it's a change and handle that in the merge; if not, then I might end up with both the old and new statements, and the application has to decide how to resolve that.

But all of this doesn't solve the larger problem: if I have several different apps, each of which add more behaviour to tasks, I still need to find the same task in both of them to see all a task holds.

So let's get rid of the apps. Can we make a general "knowledge browser" that's good enough to just edit the knowledge base directly?

This task can be helped a lot by having statements about relationships. I might install a package of pre-written knowledge that states that the like relationship normally relates a person to another person, or concept. It might also state that (like X Y) can be written in English as "X likes Y" (and another rule can state that an object X can be written in English as the title of X, if X has one). All of this can just be more knowledge in the knowledge base. A universal knowledge editor could use these statements to build a user interface, in a very similar vein to a browser using CSS to display some arbitrary XML document.

And yet, I'd still be able to jot down my own made-up relationships. (is-on-my-christmas-list bob). There might be no vocabulary statements defining what this Christmas list thing is about, but a universal editor might well list "is-on-my-christmas-list" when I look up Bob, and would thereafter be able to tab-complete "is-on-my-christmas-list", having seen it already in the knowledge base; it might even notice that existing objects tagged with "is-on-my-christmas-list" are all also tagged "is-a-person" or "is-a-company", and use that to guide editing - but that's a bit more advanced. So I can install pre-written vocabularies that make everything nice, or I can just make my own up as I go along, and maybe write vocabularies for them later.

Knowledge base systems can also be fed rules. Say I have an appointment database, with appointments of the form (is-appointment foo) (on-date foo (date YYYY MM DD)), etc.

I might write a rule of the form "(is-appointment X) and (on-date X (date YYYY MM DD)) and (title X (printf "%s's birthday" Z)) if (birthdate Y (date SOME-YYYY MM DD)) and (title Y Z)". Then anybody (or anything) that has a birthday in the system will cause an appointment to appear called "foo's birthday" on any date that has the same month and day as the birthday.

What if we know the month and day of somebody's birthday, but not their year of birth? We can just write: (birthdate foo (date _ 04 03)) (where _ is a special variable symbol that means 'unknown'). Since searching a knowledge base is a matter of pattern matching, that will match a query for (birthdate Y (date SOME-YYYY MM DD)), and not bind a value to SOME-YYYY.

Finally, they can also read from external data sources. I might tell my knowledge base that (exists X) if X is a pathname that refers to a file or directory that exists, that (is-part-of X Y) if X and Y are pathnames that refer to files or directory that exist, X is a directory, and Y is directly within that directory, that (title X Y) holds if X is a pathname and Y is the last part of it (the filename), etc. The rules can work both ways - if the knowledge manager is directly told (is-a-directory X) and it isn't, then the extension rules can tell it how to create it.

Then, suddenly, my home directory becomes knowledge, too. I can add statements saying that a given directory tree pertains to a given project. Then my knowledge browser UI can tell me about the files I've worked on as part of a project. Perhaps I could teach it how to open up applications to edit different file types. Or teach it how to read the files itself and understand their structure and turn it all into more knowledge.

Now extend that to email messages, browser bookmarks, my phone's call history, my IM history, my Twitter account...

Purple Hair! (by )

I have dyed my hair purple black!

The hair was still slightly wet when I took these so I'm hoping they will look more purple than this!

Purple Hair New Hair and blotchy skin

Science Budget Cut by 600 Million (by )

I follow New Scientist for the little snippets of news even though I decided I had to stop my subscription. And yesturday the thing that stuck out at me was the proposed Science Budget cut of 600 Million - they can't be serious - please tell me they are joking.

But they are not - in fact I am seeing reports now of 68, 000 🙁

And so this country will sink due to arttrition - with out science research our international standing will falter. With cuts that mean students will not be supported as well - 5-10 years down the line shortages will begin to appear in medical research, in defence, in Industry, in the infurstructor of the country that keeps buildings up and the like.

It will have knock on effects in medical care, food production and believe it or not business and the economy - you will be wiping out the innovationalists. They will have no way to foster their brains or their ideas.

And so the Uk will crumble and become a pantry backwater living off of the tourism of a by gone age.

We will also have an unemployment problem - a bunch of over qualified people competeting for the same jobs everyone else is trying to get - suicide rates will go up. Intellegent crimes like frued will go up. Unrest and dissent.

I look around and I see other things coming into being like the idea that ISP should spy on their customers to check what they are looking at - this is the UK and not China I am talking about here - look.

I am starting to feel we are in a slow under cover war against those people who actually think! The inventors and innovators, anybody who thinks - and the scary bit about this is if you get rid of those people who is going to stick up for those too scared or too busy looking after families or those who just don't have the mental campacity?

Such as the situation with this kiddy database where they ask lots of questions about what you eat when and if your scared to be with your perants etc.... (this is for like five year olds so the parent has to fill it in :/) it was not obvious it wasn't compulsary and when asked some of the parents had been scared that non compliance would have their children put on some list and taken away. This is not a good state of affairs 🙁

And what has this latest fiasco shown me? It's shown me that the government is going to break even their most arduant promises and that I can not trust a single thing they do or say.

Angel Jean (by )

Angel Jean

Friday Jean came home with a letter saying her costume needed to be in school by Monday - I had obviously missed a letter somewhere a long the line and didn't even know what she was supposed to be. She informed me that she was an angel and that she had to have silver wings.

So one Sunday afternoon, gaffa tape, cardboard and a trip to tesco's for some tinsel and we had a pair of angel wings complete with a mechanism for attaching them to her without pain!

angel wings Jean and her wings scoffolding

If I ever get around to writing this up the instructions and step by step photos will go on Salaric Craft. The angel dress was a rehash of last years snow cloud costume.

WordPress Themes

Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales
Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales