trees

Archive for 'technical'

Linked Data is format and model agnostic

Many moons ago I wrote a blog post detailing how RDF (one of the semantic web modelling frameworks) is format agnostic, in other words you can write RDF in various languages. These languages, or formats, may include XML (as “RDF/XML“), Turtle (as “RDF/TTL“), Notation 3 (as “RDF/N3“), RDFa (as “XHTML-RDFa“) and N-Triples (as “RDF/NT“) [1].

Linked Data” (the modern Data Web concept) partly started life as an extension to the Semantic Web, basically increasing meaning to data in one space using outbound (and/or inbound) links to data in another space. But the important thing to grasp is that Linked Data is not format dependent, nor is it model dependent as some may believe! [2]

RDF does not have to be used to achieve “Linked Data”. RDF can obviously help in some cases, but in some cases when the data is either very simple or very domain-centric we don’t want to spend too much time trying to make our data fit into (or out of!) the RDF model. Linked Data could very easily be in some other format, such as CSV, JSON, RSS, Atom or even the Microsoft Collection XML format. Whatever data we are dealing with, we must carefully consider:

  • What is the right model/framework for the knowledge?
  • What is the right format for the data?
  • How it fits in with the Linked Data in general?
  • How to make it semantic/meaningful by using objective links and subjective lenses?
  • How it is going to be used, and whether it needs to be automatically converted to other formats or frameworks (and by doing so, does it (and is it ok to) lose any data and/or semantics)?

It is very much a Knowledge Engineering task

Linked Data is as simple as:

Footnotes

  1. Please note that RDF/XML and Turtle are, presently, probably the most commonly used Semantic Web data formats.
  2. For instance Keith Alexander posted a wonderful post on how Linked Data fits in with everything else ( http://blogs.talis.com/platform-consulting/2010/11/11/a-picture-paints-a-dozen-triples/ ), unfortunately the post seems to highlight that RDF is the only way that Linked Data can be modelled – which as I’ve indicated in this blog post is not the case. Keiths blog post, however, is only one way (of many) of making Linked Data – and he does hint at some good ideas.

I hope that this blog post makes some kind of sense, as I believe Linked Data is one of the ways that we can progress the web in a good direction.

Daniel

In the last couple of weeks I’ve been using a programming language (Python) that I’ve not used extensively in the past to work on a unit of a production website, increasing the simplicity of the unit and hopefully also increasing the efficiency (Occam’s Razor stylie?). I have been learning “as I go along”, and with a little help from a borrowed book[1]. It has been fun, and I’ve found myself liking Python a lot more than I was expecting (as I documented in my previous blog post about My Python Learning Curve).

Within the past week I’ve also picked up a small project (almost finished), which was essentially “Web Design“. Those of you who know me, probably know that I’m not really a “designer” but a “developer”. So this has been a bit of a learning curve for me too, actual practical – production level use of CSS (both 2.1 and 3 – focusing on getting it working for Chrome, Webkit, Firefox and IE >= 8), and also some graphical work using the GIMP.

Being freelance means that I’ve been able to focus on learning new things, and doing it quickly – its something that I love. I may, or may not, use the new Python and Design skills in the future – but hopefully it helps me to become a more well-rounded freelancer. Variety is also a spice, and so it has been nice to step away from the PHP/MySQL and Semantic Web stuff that I’ve been doing for quite a while.

The next step is progression. Next week is the beginning of a new tax-year here in the United Kingdom, and I hope that I will be able to progress using some variety (as indicated above), some reuse of my existing skill set, some hard work, some networking and a bit of luck!

Where am I going (i.e. where am I progressing to)? Who knows where the path may take us? but travel it nonetheless in good faith taking decisions when needed.

I have figured out that at any one time I have:

  • A favoured set of skills (skills that I already have, some of which might be rusty)
  • A set of skills that I’ve recently been using or learning (skills that I have and are refreshed in my mind)
  • A set of skills that I want to acquire
  • A set of interests which I wish to apply my skills to

So I look for freelance work that will combine as many of the above as possible (so if you can help then please let me know!).

As I am becoming a Journeyman of the Worshipful Company of Information Technologists, I shall be “paired up” with a mentor (someone who has many many more years in industry than I – although I do have quite a few already to be honest). This mentor will hopefully help to guide me on my career path, hopefully help me to avoid pitfalls that I have made in the past and choose good choices to make. I always hope that I can get more involved with the British Computer Society, but haven’t yet found their events particularly interesting (and when they do seem interesting, then they are usually somewhere else at some strange time).

So, time to plan combining skills and interests for the new tax year then!

Footnotes:

  1. Learning Python by Mark Lutz

Current Learning Curve: Python

I am currently quickly learning the Python Programming Language for a project that I am currently working on. Its ok though, because its syntactically quite similar to the Ruby Programming Language which I know already (but haven’t done for a while).

In the past I tried to avoid the Python programming language and often stated that it was “just Ruby but without the ‘end’ keyword, and so it relies on whitespace instead”. Aye, it is quite like that. But, I now think that both Ruby and Python each have their own unique pros and cons, and the differences are more than syntactic. We must remember that each application design should carefully review which programming languages and tools would be most useful for the task (along with their feasibility of availability/accessibility).

Much of my learning of Python is just translation of terminology, for instance:

  • pickling/unpickling” – essentially object serialisation and deserialisation (i.e. making suitable to store in a file, or send over a network)
  • “dictionaries” – an unordered key-centred array
  • “__init__()” – the python constructor method

Its quite nice purposefully learning something new again and applying it for specific tasks. Variety is a spice!

Are there any programming languages that you have have picked up recently, and have you found out anything extraordinary about them? Let me know by commenting.

Cheers,

Daniel

My Programming Style

I am constantly trying to improve myself and enhance my capabilities, but sometimes you just have to stop and know your own limitations. Limitations aren’t a bad thing, because if you know of them, then you can try to work around them at the same time as focusing on what you are very good at.

I think I’ve hit on one of those limitations in myself. I have problems with big projects which I can only do on my own. I just seem to not be able to manage them correctly. In fact, in some cases they’ve put me off of programming altogether.

So sole-developing big projects is my downfall. The only way forward if I have to deal with the project in its entirety then I’ll just have to get somebody else to help. Preferably if they have prior knowledge of the platform/technologies used. That obviously frees up some of my time to regain my sanity on some other small projects.

One other thing that I could do, and probably should do in the future is only say “yes” to team-based projects (if they are big projects) and small/mini projects such as building small plugins/modules/components to existing well-documented and well-designed systems.

I’ve been learning quite recently that I should say “no” to things more often, particularly if there is any chance that I can’t do something (skill-limitation), don’t have the time to do something (time-limitation) or don’t have enough time to learn how to do something (time-skill-limitation).

This does of course sound a bit of a negative post, but it is a crucial aspect of self-employment, and as you know I try to be open about my career. However, I don’t think that it is entirely negative. I was always taught “Know Thyself”. By knowing myself I can actively and continually work on (and at) smoothing those knobbly bits that can get in the way.

I am open to comments, suggestions and ideas. For now I shall be proud to say that I am a “divide and conquer” style pluging/module/component programmer.

Many thanks and blessings,

Daniel

Accessible POSH XHTML Strict Address Forms

I just wanted to share with the world some thing which I have just created for a project that I am working on. It is a form which is for inputting an address. I decided that it would be quite good to make it as accessible as possible, so I turned to that great site accessify.com and their wonderful Quick Form Builder. I used the address elements as described in the vCard format, which are also microformat (hCard / adr) friendly. I then used the W3C XHTML Validator and the W3C CSS Validator to make sure that all is in order with XHTML 1.0 Strict and CSS validation. I then further enhanced accessibility by doing very rigorous accessibility checks with achecker.ca adding any elements and attributes that it recommended.

The resultant code looks a bit like this:

<form id="address" action="#YOUR-ACTION-GOES-HERE" method="post">
<div><label title="Post Office Box (if applicable)"  for="txt_PostOfficeBox">Post Office Box</label>
<input id="txt_PostOfficeBox" name="txt_PostOfficeBox" type="text" tabindex="1" /></div>
<div><label title="Street Address (first line)" for="txt_StreetAddress">Street Address</label>
<input id="txt_StreetAddress" name="txt_StreetAddress" type="text" tabindex="2" /></div>
<div><label title="Extended Address (second line)"  for="txt_ExtendedAddress">Extended Address </label>
<input id="txt_ExtendedAddress"  name="txt_ExtendedAddress" type="text" tabindex="3" /></div>
<div><label title="Locality, City, Town or Village" for="txt_Locality">Locality</label>
<input id="txt_Locality" name="txt_Locality" type="text" tabindex="4" /></div>
<div><label title="Region, Province, State or County" for="txt_Region">Region</label>
<input id="txt_Region" name="txt_Region" type="text" tabindex="5" /></div>
<div><label title="Post Code or Zip Code" for="txt_PostalCode">Postal Code</label>
<input id="txt_PostalCode" name="txt_PostalCode" type="text" tabindex="6" /></div>
<div><label title="Country or Nation" for="txt_CountryName">Country Name</label>
<input id="txt_CountryName" name="txt_CountryName" type="text" tabindex="7" /></div>
<div><input type="submit" value="Submit form" tabindex="8" /></div>
</form> 

It is:

  • XHTML 1.0 Strict Valid
  • CSS Valid (and unobtrusive – as all styling is in a separate CSS file)
  • Accessible to WCAG 2 AA standards, and probably to a few other standards (it partially adheres to Section 508, because I’ve decided not to set the value attributes)
  • Semantically enhanced through Microformat (adr) class names (i.e. it is therefore <acronym title=”Plain Old Semantic (X)HTML”>POSH</acronym>)

I’ve got an independent page showing this example available:

Of course if you’re making the address form as part of a larger form then I would recommend surrounding the address sub-form with the HTML “fieldset” tag.

If we all used address code such as the above then we would be able to ensure conformance with standards (code, accessibility and location standards), it would allow our websites to become machine readable and malleable and would enhance the users experience. That is, of course my opinion, but it does sound quite useful to me. Of course my above form elements could probably be enhanced in several ways, but this was good enough for me and for the project that I am working on.

Oh – on a separate note, its almost Christmas. So if I don’t make a blog post before then a Great Yule, a Merry Christmas, plenty of Seasonal Greetings and a Happy New Year to all!

Daniel

I’ve just found a wonderful blog post which is a tutorial (with downloadable source code) about producing valid XHTML 1.0 Strict using TinyMCE. Very useful indeed for those people like me who love standardisation.

Go get it here:
How to produce XHTML 1.0 Strict markup with TinyMCE” – http://www.gethifi.com/blog/how-to-produce-xhtml-10-strict-markup-with-tinymce (written by Josh Lockhart of HiFi fame)

I have recently used this for something that I am working on and thought that I’d share my happiness with the world about XHTML Strict code through a Javascript-based HTML editor such as TinyMCE. Of course we have WYMeditor, which are quite good and provide XHTML strict straight out of the box but it needs a bit more work to enable it to be production-ready.

The International Knowledge Expo 2011: http://www.knowledge-expo.com/

It will be in mid-late 2011 in Bristol, UK. More details available on the website, please register your interest on the site to stay up to date.

I’ll be posting some informal information on this blog from time-to-time, but all formal information will be on the official website.

Here are some informal give-aways:
Slogan:

  • “Building Knowledge Bridges”

Mission Statement:

  • To bring together far reaching communities in order to share knowledge about working with knowledge.
Themed-Areas/Topics/Tracks:

  1. Knowledge Engineering and Knowledge Management
  2. Information Architecture and the Data Web
  3. Intelligence and Research
  4. Knowledge within the Humanities

We hope to have:

  • Stalls
  • Talks (including Keynotes)
  • Job Advertising Areas
  • Socialising Areas

So yes, please do keep up-to-date on: The International Knowledge Expo 2011 website: http://www.knowledge-expo.com/

Back in the office / Language Processing

Back in the office

First of all, I’d just like to say that I am back in the home-office after the honeymoon, and working hard! So I am now picking up emails, having meetings and doing work as usual… so do feel free to get in touch.

Language Processing

Secondly… Beki and I went to Sicily (a town called Cefalu’) on our honeymoon, and before we went I decided that it would probably be a good idea to learn some of the basics of Italian. I know a bit of Spanish, and a tiny bit of French and a very tiny bit of Swedish, so picking up the basics of another language could potentially be a bit easier than learning a language from scratch. While learning Italian it came to me that Italian, and the other Latin-based languages are incredibly “rules-based“, they follow quite strict grammar rules which are almost followed, even the shortening of sentences follow a certain rule. This differs from English, which I would call “lexicon-based“, where words have set meanings with a very subtle grammatical influence and are strung together using very liberal grammar rules.

The question then comes then, that, maybe it would be easier (i.e. more semantically viable) to do computational language processing – in its logical form rather than its statistical form – on a language such as Italian, or even Latin.

This is relevant for my research and development in Natural Language Processing, which I have always favoured the symbolic processing over the connectionist or statistical approaches. Maybe it is something I need to look into in more detail, and maybe there is some research about it elsewhere (if my readers know of any then please do let me know, either by a comment or by sending me an email!).

Welcome to the New Vanir Systems Blog.

It is true that I used to have a blog called “Daniels Blog“. I hadn’t posted for a while, and it seemed to become a bit redundant.  It will still continue to run in the background, but I’m treating it a bit like an archive now. It will be replaced with this blog, the Vanir Systems Blog.

The mission of this blog is:

  1. To update everybody interested with the work done by Vanir Systems, this will be using the “vanirsystems” category.
  2. To highlight interesting bits of technical news, along with my opinion, using the “technical” category. This may be on the topic of the Semantic Web / Linked Data, or Artificial Intelligence, Programming or Web Development.
  3. To highlight interesting bits of general news, along with my opinion, using the “interesting” category. This may be on the topic of religion, spirituality, theology, philosophy, psychology, or a mixture of science and technology.
  4. To provide code snippets in various programming languages, using the “codesnippets” category.
  5. To provide reviews or previews of products (hardware, software, etc), using the “reviews” category. If you have anything that you would like me to (p)review then please to get in touch, and I am sure that we may be able to work out a deal.

It will attempt to:

  1. Use relevant inbound tags
  2. Use outbound links to relevant information
  3. Be 100% valid XHTML that is reasonably POSH – wish me luck ;-) (maybe with sneaky bits of RDFa or Microformats)

Thank you for reading, and I hope you join me here again soon.

Daniel