Fri, 18 Oct 2013

When context is key ...

Here's an amusing case of how not having a certain piece of knowledge (if knowledge comes in pieces) can make you totally miss the boat.

I was trying to get the web server Nginx running with cgi (Ode is a cgi script. nginx doesn't handle cgi's the same way as the Apache server but requires that they be launched via a seperate cgi process handler). Lots of things are different than my previous experience with Apache and a different Linux distribution: the default document root, the configuration file syntax, etc. But I was calmly troubleshooting one step at a time, trying to think and to remember all the usual gotcha's (like file permissions). I knew it would take a bit of work, and I wanted to understand how Nginx worked so I took it slowly.

I was using the 'fcgiwrap' program which I installed via my distribution's package manager to run ode as a cgi, making it available to nginx. This, too, was new, but I seemed to be making headway: what I learned from the first time I installed Ode was that error messages are a good thing because at least you know there's something running to send an error message back, and I saw that nginx was getting an error back from the cgi wrapper program. So, I stayed calm.

But it was starting to take a bit long ... until I finally realized what my problem was. A complete misunderstanding of how these fastcgi programs work.

Let's see if I can avoid the same pitfall I will describe in a minute when I get to the moral of this story. Essentially: where I thought I needed to launch the cgi script (ode.cgi), I actually needed to launch the cgi wrapper, and tell nginx to tell the wrapper what cgi script to run. Does that make sense? probably not (I'm thinking of people with little to no previous knowledge of these kinds of things).

Well, I'm tired out from an hour of troubleshooting so I won't explain in more detail. But how did I finally get this? by reading the documentation of a different program than the one I thought I needed to be understanding, where I saw a configuration example which clued me in. The whole time I was thinking 'fastcgi' worked one way, when really they worked differently and thus I was reversing two pieces of the puzzle.

The moral of the story? Is not that I, as the learner, need to learn to learn better. What else can I do? Eventually I noticed what the issue was, but I don't think I had much control over how long that took. The moral of the story is, rather, that documentation can be wonderful and complete, but still always assumes a certain level of background information and it can be really difficult to imagine the framework from which someone else will read your documentation.

(Incidentally I was talking about this, the level of detail to put into instructions/tutorials, with some the other day. I tend to try to back way up and give lots and lots of context. I think that can be helpful, but it sure takes a lot of energy and time -- so much that I often end up aborting the documentation effort).

Tue, 03 Sep 2013

The Cod is swimming again, AKA Ode is back online!

I took a look at my website this morning and saw that the Ode mascot, a photo of an atlantic cod, was swimming in the sidebar again :) This means that the website is online, which is great news.

I also just realized this is a big admission I've been very a-socially doing a cross-domain image request all this time, and I should probably get a copy of that image locally.

But here's an ode to Ode (o-dee), the versatile personal publishing engine! I hope the new season is a profitable one for all web technology fishermen and -women.

Tue, 06 Aug 2013

Fundraising appeal: let's keep the Ode project online for a year

Ode (pronounced o-dee) is the publishing platform that runs this site and which has helped me and others learn a lot about web development in recent years. Due to recent circumstances, the Ode community websites (the blog, the forum, and the wiki) have gone offline. At the same time, Ode's creator has indicated the desire to broaden the scope of the project a little. To shift the focus a bit from Ode the software to the collaborative learning community that has begun to grow around it.

I think this is a good opportunity to contribute back and increase our communal sense of ownership and community. I say let's pitch in to fund Ode's hosting costs for a year. I think that's a good stretch of timein which we can see what shape the wider Ode project might take. It's hard to set up a sustainable plan at the moment, but I think a year is a good balance between short-term aid and the longer term. Rob has indicated hosting will cost about $100 USD for a year. If even a few of us contribute, we can easily cover this.

If you, like me, have benefited from Ode and its community forum in the past while -- I say pitch in! Or if you don't know Ode yet but are curious, you're welcome to help out too (feel free to ask for more info in the comments below).

I'm starting with a commitment to $30. Give whatever you feel is appropriate for yourself. If we can get the Ode website(s) up again, I'd like to take a more active role in helping build the new learning community.


Sat, 09 Feb 2013

Your identity is in the code

I just realized something very fascinating about the Web.

Since the Web is theoretically World Wide, it would seem that a large problem in its operation would be uniquely referencing individuals participating in it. You may only know one John Smith, but on the Internet there may be many. And since the Web is composed mostly of texts left behind for others to read later, you can't interactively figure out with your audience which John Smith you're referring to, before proceeding to talk about him.

The obvious solution would be to add context into the content of what you write on the Web. For example:

I ran into John Smith yesterday (the John Smith who graduated from Small College in Little Town in 1999 and who ran in the Big City Marathon on June 8th, 2005).

Hmm. That would work -- two discrete pieces of information about this particular John which together should identify him uniquely. But this isn't ideal, for several reasons: first, it's kind of awkward (you have to interrupt the flow of your text) and second, it might give away sensitive information. This way of identifying the referent depends on others somewhere on the Web being able to verify the connection between the two pieces of information. So to uniquely identify someone with information others can confirm, you might have to put down something like their phone number or street address.

Even the example above connects John Smith to 'offline' information that can then be used to track him even further. We usually say things on the Internet with a much smaller audience in mind than the whole world, but in this case either John can still be traced through several connections, or else the purpose is defeated because John still hasn't been uniquely identified on the Internet except for the intended audience.

Maybe this is all a bit hypothetical, but the point is coming. The way the Web works inherently provides a different solution, which does identify John Smith uniquely, while intruding only very slightly on the flow of the text, and also not disclosing anything that wasn't already available on the Internet.

The solution is the familiar blue text, classically underlined. The hyperlink.

If John Smith has a website of some sort, a link to that website identifies him uniquely. Because it is only a particular John Smith who built that website and posts to it and pays the bills for its hosting and domain name registration. But, John controls what information is available about him in connection to that website. John Smith may be a pseudonym -- but it is a consistent and reliable identifier of 'John Smith' -- whoever he may be -- on the Web. So we can refer uniquely to John Smith as known on the Web not in the content of what we write but in its underlying infrastructure. Like this:

<a href="">John Smith</a>

Of course, it is not this bit of code by itself which uniquely identifies John Smith. That is what's so fascinating. His identity is in fact distributed through this link and all the references, domain name registries, applicaton code and physical infrastructure which connect this hyperlink to his website, and further through all the activities which go into maintaining that website which are carried out by whoever is behind the entity known as "John Smith" on the Web. That could be a man, a woman, or a whole group of people -- but all we know about (and care about) is that we can type a little bit of html code containing that domain name and everyone knows whom we're talking about.

An important note: this says nothing about the veracity of our reference. Someone could deceptively link John Smith's name to a completely different identity on the Web, and as I've pointed out we have no idea if John Smith is really John Smith. But if we are trying to refer to a unique online identity, we can be sure -- as long as the chain of code initiated when someone clicks on our hyperlink isn't intercepted and redirected -- that we are referring to whomever we want to refer to.

Thu, 07 Feb 2013

It's empowering to say something on the Internet

It may be a different question whether it's always wise to say something on the Internet, or whether everything that's said is a useful addition to the Internet. But that's not what this post is actually about.

I just wanted to note that with Ode, writing something on the Internet is the same thing as working on your website. Developing. Editing. Hacking. Because all you're doing is writing in a tet file and saving it to your server.

A while ago I said I was relinquishing all goals for the development of this site, and for publishing on it. Instead, I want to try to develop the habit of working on it always. It's nice that writing and developing are really the same thing.

Fri, 01 Feb 2013

Reporting on reading for the Ode Learning Perl Book Club

Quick notice:

I'm going to try reporting my reading and exercise-doing progress for the Ode Community Learning Perl Book Club here.

Short story: my schedule and the main schedule of the Book Club are asynchronous. It's too much hassle to reconcile those in order to report my progress, and so I find myself not doing it.

I don't have proper access to my hosting account now, so just this notification for now. When I have access I will start a category in which I can report, every day, what I have read or how far I've gotten with exercises.

The idea is to just do a little bit each day!

Many thanks to the community and to Rob Reed in particular for the momentum of the Reading Club! I'll definitely keep participating in the Reading Club discussions. Hopefully I can also find a way to report in the forum. But for now I just need to have a much more effortless channel to publish my progress, so I don't fall completely off the wagon.

More soon!

Wed, 09 Jan 2013

Announcement: a new job!

I'm very pleased to announce my new job: as of this week I'm working for webmapper in Amsterdam. Webmapper is in the business of ... well, web maps! I'm really excited about all the opportunities to learn about open source, standards based Geo-ICT tools and technologies in the coming while.

(lots more has happened: moving and getting married being the main things of note from the past month. That, and being without a good Internet connection for several weeks seem like pretty good reasons for my recent comparative silence. As you may imagine, development of this site has been interrupted as well (now I get paid to build other web applications ;), and with a move my access to some servers has been thrown a loop). This will all get straighted out and I'll pick things up again in the coming weeks).

Fri, 14 Dec 2012

the Unity HUD brings makes command-line style plugins feel natural in the GUI

Ubuntu's HUD (heads-up display) isn't news anymore. It seems to have found its place and is appreciated by many (including myself). For those who have missed it -- or who don't know what Ubuntu is -- it's main distinctive feature is that it lets you use a text input to launch not only programs but commands inside programs' menus. So with a click on the 'alt' key you can type a few keystrokes and execute a command hidden three layers deep in the 'Tools' menu of a random graphical application. Extend this to the entirety of your desktop -- access browser history and bookmarks, launch not only your music player but a particular song by name -- together with smart search algorithms that work quite well -- and you go from pushing the mouse around to feeling like you're working in a fluent flow.

That's all well and good, and, like I said, not news anymore. A better impression can be gained by watching this video. The second chapter of this 3-minute video incidentally demonstrates the use of the HUD with Inkscape, which is the next topic of this post.

Read the rest of this post

Sat, 08 Dec 2012

Random musings on lack of Internet

Here I am in a little island of non-connectivity in the middle of a city. Just having moved, I don't have a regular Internet connection yet. And in a strange little appartment tucked deep inside the back of an old building, cellular signals penetrate with just enough strength to fetch text-only email, but nothing more. And it turns out that even those computer applications you might expect to still be 'offline-capable' often aren't.

Read the rest of this post

Thu, 22 Nov 2012

My test server is running now

I've set up a test server on my LAN to continue development of The idea is to use a local server to try out my design, using version control to track the development and to publish iterations to the production server. That way I have a safe, offline development environment but can also quickly publish changes to the live site.

It took a while to get the Apache configuration figured out. It turned out I was looking in the wrong place: I was thinking that I couldn't find the subdomain I had created (as a VirtualHost) because of a problem with the Apache config. But it was simply a DNS issue. I added an entry to the hosts file on my desktop machine, and the problem was solved.

Coming up: a discussion of version control and what I intend to do with it.