Pefkos, Rhodes, Greece

I think that I have missed the last few years of holiday posts. They are no doubt getting undoubtely getting increasingly in-appropriate as this blog completes it's transition to an open lab-book. Still, I am stuck in an airport post-ICBO, so why not? I have, to my knowledge, only been to Greece for work before, so I was not entirely sure what we were going to get, beyond the climate and food, which I figured was likely to be pretty similar to Turkey where we were two year before (actually, we could see the Turkish coast we had swam from). In this, I was correct. It's reasonably hot. The ground is dry although there is no shortage of water (although, I didn't know that Rhodes has almost no natural running water). The first week there was a very pleasant wind blowing, although I believe tha…

Tawny-OWL 1.4

I am pleased to announce this 1.4.0 release of Tawny-OWL. It is with some surprise that I find that it is about 8 months since the last release, which is indicative of the relatively stable state of Tawny. The main addition to this release has been further support for patterns, which now include what I am calling "facets", as well as some general functions for grouping the entities created using a pattern with annotations. I have had a lot of discussion about the implementation of this feature and that it should be useful in practice. The main motivation behind making this release now is the development of a Tawny Tutorial for ICBO 2015. The features are stable for the release are stable, so the release has not been rushed out the door, but I wanted to use them in the tutorial as…

The Tawny Tutorial

While I have been working on a manual called Take Wing for Tawny-OWL [@url:www.russet.org.uk/blog/3030] for some time, it is far from finished. In the meantime, I am giving a tutorial at this years ICBO, and the slides for this are now relatively advanced, although I have a few more sections and some checking to do. The full tutorial is available (http://github.com/phillord/tawny-tutorial), and I think it offers are fairly comprehensive guide to basic Tawny-OWL usage. I am fairly pleased with the tutorial as it stands. It is written up as a semantic document using my lentic package [@url:www.russet.org.uk/blog/3047] which seems to be working well (although I discovered a few bugs with the asciidoc support in the course of writing the tutorial!). For anyone who is thinking of coming, the pr…

How, Why and What of Testing

Abstract [kblog-inc server="arxiv"]1505.04112[/kblog-inc] Plain English Summary Ontologies are a mechanism for representing parts of the world computationally. They allow you to describe the world in a complex way, and then query over it repeatable and consistently. However, ontologies are complex and are themselves hard to build consistently and repeatably. If the ontology is built incorrectly, then queries will give the wrong answers also. Software is also complex and over the years, software engineers have developed many techniques for building software so that it, too, is correct. While these do not always succeed, they have allowed us to produce software that is vastly more complex than in years past. One important technique is automated testing. Here software can be run to …

Scaffolding the Mitochondria

Abstract [kblog-inc server="arxiv"]1505.04114[/kblog-inc] Plain English Summary Ontologies allow complex descriptions of the world in a way that is both precise and computationally amenable --- that is, computers can be used to check and query these descriptions. The mitochondria is a critical part of the cells of most organisms, being responsible for energy usage. We wished to build an ontology describing the current research on the mitochondria. The more traditional approach to this, would have been to build the ontology from scratch; but many parts of the mitochondria, including the genes and proteins have already been described in other databases. Building from scratch on the basis of the data in these databases would be time-consuming, but also sensitive to change --- if the…

lentic 0.9

Lentic is a package which implements lenticular text --- two Emacs buffers that contain the same content, but are otherwise independent. Unlike indirect-buffers, which must contain absolutely identical strings, lentic buffers can contain different text, with a transformation between the two. It was not my original plan to have another release so soon after the last release [@url:www.russet.org.uk/blog/3068] However, the work that I had planned for that release turned out to be very-straightforward. For this release, introduces a new form of buffer which is an unmatched block buffer. The details do not matter --- the practical upshot is that with, for example, org-mode it is now possible to have more than one style of source block. In my examples directory, I have an org-mode file with &quo…

lentic 0.8

Lentic is a package which implements lenticular text --- two Emacs buffers that contain the same content, but are otherwise independent. Unlike indirect-buffers, which must contain absolutely identical strings, lentic buffers can contain different text, with a transformation between the two. This has several uses. Firstly, it allows a form of multi-modal editing, where each lentic buffer shows the text in a different mode. For example, this can be used to edit literate Haskell code. This should work with indirect-buffers, but in practice does not because the buffers share text-properties. These are a feature of the buffer strings in Emacs, and are used by some modes for their functionality; when two modes work on the same string, each tends to reset the text properties of the other. It is …

m-buffer 0.11

m-buffer is a package which provides a high-level convienience API for interacting, searching and changing the contents of an Emacs buffer. It abstracts away from Emacs' use of global state, and provides list-orientated operations removing the need for explicit looping. Hence, we can replace: (while (re-search-forward "foo" nil t) (replace-match "bar")) with: (m-buffer-replace-match (m-buffer-match (current-buffer) "foo") "bar") m-buffer also protects global state, so the first form actually needs to be something closer to: (save-excursion (goto-char (point-min)) (save-match-data (while (re-search-forward "foo" nil t) (replace-match "bar")))) There have been a few changes since the 0.10 release [@url:www.ru…

Lentic Doc --- self documenting source for emacs

Emacs, of course, has always described itself as self-documenting because it has an integrated documentation system. With my new creation, lenticular text, [@url:www.russet.org.uk/blog/3035] though the world changes slightly. I can now write rich documentation embedded into the code base of my package, and can do this without comprimising either the documentation or coding environment. For the 0.7 release of lentic [@url:www.russet.org.uk/blog/3047] I added support for generating this documentation automatically on the fly from the source code. This can be viewed either internally in Emacs with EWW, or externally with a browser. In the latter case, I have used org-info.js [@url:orgmode.org/worg/code/org-info-js/] which gives an info-like and navigable experience to the manual. As yet, this…

m-buffer.el 0.10

I have just released m-buffer version 0.10. A pretty minor point release, but I thought I would post about it, as I have not done so far. Interacting with the text in an Emacs buffer can be a little bit painful at times. The main issue is that Emacs makes heavy use of global state its functions, something which has just rather gone out of fashion since Emacs was designed, and probably for good reason. I know that I am not the only to find this painful [@url:www.wilfred.me.uk/blog/2013/03/31/essential-elisp-libraries] Perhaps, most obvious, is that many functions work on the current-buffer buffer, or at point. As a result, Emacs code tends to have lots of save-excursion and with-current-buffer calls sprinkled throughout. We see the same thing in the regexp matching code. So for instance, th…