Alternatives for “blog post”

If you run or write for a blog, or talk about blogs, you’ll want to refer to the content of blogs. Publications on blogs (perhaps mostly outside news organisation blogs) are commonly referred to as “blog post” (I guess news organisation may call online-only content “articles” too).

Because I don’t particularly like this phrase, I had a little brainstorm and wrote down some alternatives. In order of thought:

  • bulletin
  • alert
  • post
  • publication
  • letter
  • essay
  • entry
  • issue
  • report
  • note
  • proceeding
  • paper
  • review
  • record
  • part
  • article
  • brief
  • column
  • opinion
  • memo
  • memorandum
  • view
  • announcement
  • document
  • thing
  • story
  • text
  • section
  • chapter
  • blog
  • message
  • line
  • piece
  • memoir(s)
  • item
  • journal entry

I am still working (a bit) on a redesign and custom theme for this blog, but have already decided to go with “message” in the abbreviated form “Mess.”. Lots of “mess.-es” create a mess, which translates to Dutch as “Bende”. This concludes another mess. for this mess.

To do (excerpt): redesign, catalogue, PIM-KB, Semantic EPUB

I’ve had some ideas for things and things to do at some point in the future, but I can’t do all of them at the same time and most ideas need more thought (and research). I’ll list them here, not ordered by priority in any case, hopefully to inspire more ideas and spark discussion.

Continue reading “To do (excerpt): redesign, catalogue, PIM-KB, Semantic EPUB”

Want to be LinkedOn this page?

Yes, I’m on LinkedIn, and yes, in the past I have supplied even my Gmail password to LinkedIn to let it pull in all my contacts. I don’t believe I made LinkedIn send everyone an email. Back in the days, I had the option to see who else was on LinkedIn (by email address) and invite people to connect manually. I felt bad afterwards that I had entered my password and still see traces of my address book in LinkedIn.

Maybe I should delete my LinkedIn profile and put more effort in sharing details more selectively. Details about myself (I don’t have a Facebook account and try to be selective with what I share on Twitter), but details about my network too, need not necessarily be public. I don’t need others like LinkedIn to make money off the information I’m providing explicitly and implicitly. I’m not sure though, how to balance keeping private information private and have some kind of public profile for others to refer to. Or maybe that should be: for other to exploit like LinkedIn exploits my information currently.

Maybe I should try the old way: link people on my website, endorse them by writing something nice about them and their work, but only if we all agree that’s a Good Thingâ„¢. Would you want that?

Hosting my own Twitter images on WordPress using Tweet Images

As you may know, I use Twitter. I sometimes use it to post images from my smartphone to the world too. Those images are first taken by the TweetDeck app, then uploaded to a photo hosting service (YFrog by default). The photo host returns a link to the media, which is usually a landing page that prominently shows the picture or video, plus advertisements and other stuff that may or may not be of interest.

Why host my own pictures?

It is easy to have a free large service host your pictures, but there are some drawbacks. They make money using your pictures, and they may even have claimed ownership of it when you uploaded it. After that, I usually lose track of the pictures I uploaded because the tweets in which they appear vanish after some time. And the copies that are stored in my phone lack the context of the tweet.

Since I already have webhosting, a WordPress install and space to add pictures, why not host my own pictures? Well, it turned out to be not so simple – mostly because the major image hosters are the only services you can choose from in the Twitter clients. For example, TweetDeck on Android only lets you choose between YFrog and Twitpic. More on this later.

Make your WordPress install your Twitter image host

Although I am not the only person to have done this, this story reflects the steps I took to get to making my WordPress my image host.

There’s a plugin for that

Sure enough, on the first result page for a search on “twitter images” I found Tweet Images, which promised to be pretty much what I envisioned: no OAuth fuzz, but a secret URI that only the authorized person(‘s Twitter client) knows. It separates the tweeting and image uploading, whereas the major image hosts require access to your Twitter account (reading tweets, sending tweets, following accounts) before accepting anything. Tweet Images takes (just) the image and tweet text, creates an image post and returns the URI of the new post. It uses the shortest possible URIs to return to the Twitter client: <blog address>?p=xxx, and that apparently only works when that is not already the permalink form of the blog.

The permalinks created for the image posts contain a somewhat ugly hash, instead of the usual slugs that WordPress creates. But again, there’s a plugin for that: Clean URLs for Tweet Images. Installed flawlessly.

(I should have another plugin that adds semantic markup to the picture, i.e. <picture> foaf:depicts <person/thing> based on Twitter handles included in the tweet. Perhaps I should first install a plugin that adds Open Graph metadata to the post.)

Trumpet, the only Twitter client that supports a custom image host

After updating my WordPress user profile – you have to check a box before Tweet Images accepts pictures for the user – I thought I was good to go. The included test script uploaded an image with message correctly and returned the URI of the post that contains the photo I uploaded.

As I had noticed TweetDeck doesn’t allow setting a custom image host (Twitter, the owner of TweetDeck doesn’t provide support pages for the TweetDeck app either). So after some searching and installing several Twitter clients, I had to conclude that Trumpet is the only Android app to support custom image upload URIs. Although it is still called a beta version, it seems to be pretty complete, stable and nice. I’ve had notifications that there were 20 new mentions when there were no new mentions at all, but that is the only flaw I discovered. Oh, and you have to take the picture outside Trumpet as it doesn’t ‘connect’ to the Camera app. From the Gallery, however, you can share images using Trumpet like you can with other apps via the Share command.

The real test…

… is of course to upload an image from my phone. I copied and pasted the URI to post to in Trumpet’s settings and tried. “Unable to upload, please try again.” So I tried again, but the result was the same. I checked the server error log, which showed that Mod Security blocked the upload:

[Wed Apr 18 15:03:50 2012] [error] [client <ip address>] mod_security: Access denied with code 500. Error processing request body: (null) [hostname "ben.companjen.name"] [uri "/tweetimage/<secret>"]

I’m not completely sure what “(null)” means in this context.

My webhosting provider will not make an exception in Mod Security for me or my specific client. After a second email to the customer service I received a useful answer: that (null) may mean that there is a null character in the request somewhere. I have yet to find it, but that would probably mean that the Twitter4J library (developed by Twitter, used by Trumpet) creates bad requests.

The workaround I used now is lowering the level of security (i.e. using some directives in .htaccess to turn off Mod Security for POST requests). I should be able to turn it off for a specific path, but figuring out how will take a little more time. It seems my hosting provider is very restrictive in what directives can be used in .htaccess files, which makes it hard to try out several options without making the whole site unavailable. Or that may just be me 🙂

Image previews in clients

One of the disadvanteges of building an image host yourself, is that there are no standards or even best practices for exposing its services to clients. Apparently Trumpet is okay with uploading to any URI that returns something like <mediaurl>http://…</mediaurl>, and so are a couple of clients for iOS. But Tweet Images returns the URI for the post, not the image itself (or one of the resized copies). This is just like any of the major hosters. However, it appears that each hoster has its own way of getting the (preview) image’s URI from the post’s URI. That means clients wanting to support image previews have to know how to interact with each host they want to support. In this light: how can any client know from the URIs I tweet where to find the preview images?

I have yet to try and find out if copying e.g. YFrog’s behaviour can work, although I’m afraid all these behaviours are hardcoded and only work with the right URIs. Some standardisation should be possible here, shouldn’t it?

If you have any ideas for improvement, please leave a comment.

My Linked Data publishing ‘platform’

Among the goals I had in mind for Companjen.name were to publish (parts of) my family tree so that others can benefit from it (without being bound to specific collaborative genealogy websites), and to play around with linked data (i.e. having a webspace to publish my own ‘minted’ URIs with data). I believe the second goal has been completed (and that the first can be achieved using the second).

Linked Data

Linked Data is based on using Uniform Resource Identifiers (URIs) for online and offline resources, that are dereferenceable via HTTP, so that at least useful information (i.e. metadata) about the resource is returned, if the resource itself cannot be returned. The machine-readable data format of choice is RDF, which should be serialized as RDF/XML (because all RDF parsers must be able to read that) and any other serialization I wish. For human agents it may be nice to have a data representation in HTML.

URI design

Because every URI is an identifier, we want to make sure they don’t break. I want the URIs I use to identify resources to be recognizable as such, and they need to be in my domain. Therefore I chose to have all URIs that may be used in my Linked Data to start with “http://companjen.name/id/”. (Resources can have many identifiers, so I can easily add another one to resources that already have URIs.)

What comes after the namespace prefix can take many forms; I haven’t decided yet. I do think it is nice to reserve filetype extensions for the associated data representations, i.e. “.html” for HTML, “.rdf” for RDF/XML and “.ttl” for Turtle documents.

How it works

My hosting provider allows me to use PHP, .htaccess files and MySQL, all of which I used to create the “platform”. It is composed of the PHP Content Negotiation library from ptlis.net, the PHP RDF library ARC2, two custom PHP scripts and a .htaccess file.

Since all URIs that I want to use have the same path “/id/”, but I don’t want to keep HTML, RDF/XML and Turtle files of every resource, I wrote some RewriteRules (helped by looking at Neil Crosby’s beginner’s guide) in the .htaccess file in the document root to redirect the request to a content negotiating PHP script. That script lets the Content Negotiation library determine the best content type based on the Accept header in the HTTP request and sends the user to the URI appended with .rdf, .ttl or .html via HTTP 303 See Other.

The HTTP client will then look up the new URI. Since the requested path will still contain “/id/”, mod_rewrite will catch the request, but another rule points to a PHP script that queries the ARC triplestore and puts it in the requested format (RDF/XML and Turtle are created by ARC itself, HTML is created by filling a template).

What you get when you look up something in the /id/ space, is the result of a simple “DESCRIBE <URI>” request to the triplestore, which is somewhat limited: it will only return triples with <URI> as subject. This gives some context (one of the principles of Linked Data), but it may be very interesting to know in what triples the resource is used as object or property (if applicable).

Future work

Apart from making the results more interesting by returning triples that have the URI in the property or object part, there is more to do to mature the platform.

First and foremost: fill the triplestore. There are things that I’d like to publish myself, instead of giving them away to commercial parties from whom I can only access them through controlled APIs. I already mentioned my family tree, but another example is concerts I visit. Let Last.fm, Songkick, Resident Advisor get that info from my triplestore, so that I only have to create the info once and keep control over it. Or maybe the concert venue will find my data on Sindice and display my review on the concert’s page. Oh, the possibilities of the Semantic Web…

As more data will become available in the triplestore, it makes sense to describe the different datasets using the Vocabulary of Interlinked Datasets (VoID) and put a link to the VoID document at the .well-known location. My family tree will be a nameable dataset, for example, with links to DBpedia, perhaps GeoNames and perhaps eventually online birth, marriage and death records.

The current HTML template is a table with columns Subject, Property and Object. A templating engine that has templates for different resource types would be a nice start, so that e.g. a person in my family tree will be displayed with a photo and birth and death dates like genealogy websites usually do (e.g. âš­” for marriage). Maybe there are browsers/editors for linked data family trees already, but looking for them is also future work.

Now to ‘mint’ a URI for myself: http://companjen.name/id/BC. Look it up if you like!