I Am Not Charles


Advogato vs. the world

Posted in the Living Room by Joe on April 30, 2008
Tags: ,

Now that I’m not using Advogato any more, I’ve taken a little time to think about what made me dislike it. Mostly it’s that the user interface is bland, but there’s also a bit of clunkiness that really annoyed me:

90% of the world’s blogs are laid out in the same way: if you have something to say about a post, you make a comment on it. If you have something to say that you think deserves a post of its own, you post in your own blog and make a trackback to the post you’re referencing.

Advogato works a bit differently: you can post, and that’s it. There are no comments and no trackbacks. On the surface, that’s because it’s more primitive, but the community’s had plenty of time to add these features. Either they just don’t care or they think their system’s actually better.

(Wait, that’s a misuse of worse-is-better – I should have linked to less is more.)

The advantage of the Advogato system is that people do comment on each others’ posts, but they do it in their own journals. You just start out with a link to the post you’re commenting on, in this format:

shlomif: did you actually read the Nichomachean Ethics? The thing is repulsive…

On most blogs, when referencing a post somewhere else the standard is to quote copiously – quote the parts you are replying to directly, quote the parts you find especially interesting, quote the parts that give the argument’s main points. Since you found the subject interesting enough to go to all this effort, you want to give your readers a good overview. But this gives the reader very little incentive to actually go back and read the original post you’re quoting, since they already have the hilights. The Advogato style gives no context, but readers can always click the link to find it. That means that, on Advogato, people who are hooked in by a post are actually more likely to go back and read the entire context, because there’s no other way to get it.

The other advantage of Advogato’s style is that I can find interesting discussions no matter who starts them as long as someone I know takes part. When a discussion starts on one blog and unfolds entirely in the comments there, it can’t draw in anyone who isn’t already a reader. I only find new blogs when they’re widely linked to, which only happens when lots of different people have a lot to say on a subject, or when they feel that a post is so insightful that it needs to be shared. I miss out on the smaller, more specialized posts which may attract comments and observations by not wide dissemination.

On the other hand, the Advogato style discourages casual commenting, since it’s so much work to make a link – nobody comments unless they have something substantial enough to make a full post. Discussions tend to peter out after a few exchanges. And unless you already have a strong relationship with the person you’re replying to, how do you know they’ll even read your reply? There’s a list of recent posts throughout the entire site on the front page, but this doesn’t scale well at all.

So, no, the Advogato system doesn’t really work as-is. It’s pretty good for building a sense of community, but the poor scalability and lack of features in the interface it makes it unattractive for serious blogging, so many writers migrate elsewhere. (Take a look at the Advogato recent blog entries list and see how many are syndicated from other sites.) In fact, the community feeling is exactly the reason I switched to WordPress – I wanted more control over the layout, the name, and the style. I wanted a blog that I felt like I owned. But here I am complaining about how blogs are fragmented when everybody owns their own instead of participating in a communal site.

So what’s the solution? Act like a writer, not a reader. Unless what you want to say is really inconsequential, do it Advogato-style, in your own blog, with a simple link back to the post you’re referring to. That way more people will see what’s going on, and the whole community will grow. Just commenting on other people’s blogs is easier and faster, but it’s also less effective. Unfortunately, it’s what’s most encouraged by most interfaces.

(Now – should I disable comments, just for irony?)

Advertisements

Advogato again (7 replies)

Posted in the Living Room by Joe on April 27, 2008
Tags: ,

I was just about done typing up a post about Advogato and how its community differed from most blogs, and then I went over there to check on something and realized my entire thesis was wrong. So let me ask a question to see if I can salvage it, or if I’m just a blind idiot:

I last used Advogato 4 years ago. I could have sworn at the time, there was no way to leave a comment on a post, leading to lots of people making posts in their own journals just to reply to a post in another journal. But the top post on avogato.org right now has 7 replies, so apparently it’s possible.

Has it always done that, or was it added recently? (That is, some time since 2004?)

“Troubleshooting icecream” is not a helpful search

Posted in the Kitchen by Joe on April 25, 2008
Tags: , ,

I’ve been a happy distcc user for many years – every time I got a new computer, I tended to have the old one still sitting around with nothing much to do except be part of a compile farm. Really, what else are you going to do with the old thing? But last time I upgraded, it was because the old computer completely died, so for a year or so I’ve been laptop-only and distcc-free.

However! My new job sent me a company laptop, and the combination of two computers in the house plus big projects to compile from scratch means it’s time to get distcc back in shape. Except the new laptop came with SuSE (which I’m not a fan of, so far), and SuSE’s package manager only contained some new thing called Icecream.

Icecream has an unfortunate naming scheme for at least three reasons: if I need help, do I Google for “icecream” or “icecc”, the actual binary name? (This is compounded by the fact that it’s so new there’s very little documentation out there to find, and it’s pretty much overwhelmed by hits about actual ice cream. Mmmm.) Ubuntu has a completely different package called icecream – name collision! And finally, they had the gall to name their work scheduler “scheduler”, which tells you nothing about what it’s for – Ubuntu sensibly renamed it to “icecc-scheduler”.

Apart from that, though, this is a pretty nice improvement. The first obvious difference is that there’s no more manually keeping DISTCC_HOSTS in sync – thank God! One server runs the aforementioned “scheduler” daemon, which keeps track of which hosts are available and how loaded they are, and every host that wants to take on jobs runs the “iceccd” daemon, which – in theory – finds the scheduler by multicast. Even if multicast fails (see below) you just have to feed them the one scheduler hostname manually, instead of the entire list.

The other big improvement is that icecc has the ability to package up a toolchain in a chroot, and transfer the whole thing to a compile host. That means you don’t have to worry about keeping your tools exactly in sync on each host any more (although you can avoid overhead by doing so). I haven’t tried it yet, but if it works it will save me a lot of headache, since I have no intention of taking Ubuntu off my personal laptop and I can see things getting out of sync in a hurry. It can even be used for cross-compiles.

And now the bad: like I said, it’s new and there are very few docs. (EDIT: apparently it’s not so new, but it’s still harder to find information for it than for distcc. I guess I should have said it has less mindshare.) The page I linked to is about it, really. So as a public service, here are some troubleshooting tips, in the order I figured them out:

  • The main symptom of icecc not working is that all compiles go to localhost only. There are two main causes: iceccd on other hosts can’t find the scheduler, so they never register, or they register but the scheduler decides not to use them.
  • To check that a host is registering, run icecc with the “-vvv” (very verbose) flag, and tail -f the log file (/var/log/iceccd on SuSE, /var/log/iceccd.log on Ubuntu). If you see “scheduler not yet found.” more than once or twice, this is the problem – you’ll have to pass the scheduler hostname manually with the -s flag. Or just pass the hostname manually from the start, because in my experience the autodetection never works.
  • If you see “connection failed”, it’s found the host but couldn’t connect for some reason. Check your firewall settings.
  • If all the hosts are connected (you’ll be able to see them in the detailed hosts view of iccmon) but the schedular still sends all jobs to localhost, check the scheduler log (/var/log/icecc-scheduler.log on Ubuntu; I can’t remember the name on SuSE, because I renamed mine to match Ubuntu’s and forgot to write down the original). Again, use “-vvv”. You’ll see “login protocol version: ” lines, again confirming the hosts are registered, followed by lots of “handle_local_job” lines, which confirm that the scheduler’s not sending anything out.
  • Make sure all the hosts have the same network name. Ubuntu’s default parameters set the network name to ICECREAM; SuSE’s left it blank. I didn’t trust leaving it blank so I added a -n parameter to the command line on SuSE. I don’t know if it was necessary, because my problem turned out to be the next one:
  • Make sure all hosts use the same protocol version. Turns out the Ubuntu package I installed was a few versions behind the SuSE version, so it used protocol version 27 while SuSE used version 29. (icecc developers: if your protocol isn’t backwards compatible, this would be a WONDERFUL thing to give an error message about!) I ended up compiling from source on both machines to make sure I had the same version – fortunately, it’s small.

Whew. Yes, it was a bit of a pain in the ass to get working – I hope cross-compiling works, or I’ll have to ask myself whether it would’ve been easier to just track down distcc for SuSE in the first place.

Advogato #6

Posted in the Junk Room by Joe on April 18, 2008
Tags:

Originally posted on Advogato on April 25, 2004:

I don’t imagine anyone actually cares about my web page at notcharles.ca, since all that’s there are a few old reviews and stuff, but I might as well announce that it’s going away…

Commentary: Never mind, nobody cares about the rest of this. (That applies to entery #7 too.) My god, has it been 4 years since I’ve had a web site?

Well, that’s it – everything useful from my Advogato account is here. That didn’t last very long. Now to get some new content up. Let’s see if it takes this time.

Advogato #5

Posted in the Junk Room by Joe on April 18, 2008
Tags: , ,

Originally posted on Advogato on April 16, 2004:

Hmm, I notice from the entry just below my last one that Parrot is getting really impressive. Must… resist… new project…

Commentary: Ha ha, Parrot? Really? Four years later, how much work has been sunk into Parrot and what exactly does anyone have to show for it?

Advogato #4

Posted in the Junk Room by Joe on April 18, 2008
Tags: , , ,

Originally posted on Advogato on April 16, 2004:

pcolijn just posted some Gnome API usability gripes that exactly mirror what I felt the one time I tried to write a Gnome app a few years ago. I’m disappointed to see the state of the documentation apparently hasn’t improved much. KDE’s is way ahead.

At the time, I didn’t even have the option of using a C++ binding to avoid having to fiddle with all the low-level GObject funkiness, because gtk– sucked ass. I understand it was discontinued, then recontinued, then changed maintainers, or something. Anyway, Peter, have you looked at C++ bindings at all?

Commentary: the precise post of Peter’s I was replying to is here, and his reply is here. I just took a brief swing through the Gnome API docs and they look much better than they did.

Advogato #3

Posted in the Junk Room by Joe on April 18, 2008
Tags: ,

Originally posted on Advogato on April 15, 2004:

I just read an interesting take on where Google is heading. Choice quote:

They have this huge map of the Web and are aware of how people move around in the virtual space it represents. They have the perfect place to store this map (one of the world’s largest computers that’s all but incapable of crashing). And they are clever at reading this map. Google knows what people write about, what they search for, what they shop for, they know who wants to advertise and how effective those advertisements are, and they’re about to know how we communicate with friends and loved ones. What can they do with all that? Just about anything that collection of Ph.Ds can dream up.

It’s an exciting idea. The author then falls off the track completely by concluding that Google should build a desktop OS.

Why in God’s name would they want to do that? I doubt they could make any money directly. First, the design of the desktop itself isn’t something their PhD’s and giant database can help with – as we’ve found out, it mainly involves a lot of tweaking. Second, there’s too much competition, and if they win all they get is the chance to sell something that most people will only buy once. The stakes are what Microsoft and Apple has – the chance to control the API – but they already have that as far as the Google server is concernced! Much better to make their Google tools crossplatform, and just piggyback off whatever OS is winning.

Commentary: four years later, and not much has changed. The OS is looking less and less relevant and Google has finally released the “everyone on earth can have an account” part of “a huge computer with a custom operating system that everyone on earth can have an account on”. (That’s from the link, but didn’t make it into the part I quoted.)

Advogato #2

Posted in the Junk Room by Joe on April 18, 2008
Tags: , , ,

Originally posted on Advogato on March 25, 2004:

Wonderful timing – just after I got all excited in my last post, Mark Hahn announced Prothon, a prototype-based language closely based on Python.

Pros: they advertise a better interpreter (but why not just use the same terp for Python?), no rough edges like the __init__ problem.

Cons: not actually Python compatible, so you can’t use existing class libraries.

I imagine I’ll look quickly at it, say, “Very nice,” and then keep using Python. Because this is pre-alpha, and Python works now. And hacking with metaclasses is fun!

Commentary: prothon.org is dead, and I assume the language went with it. I stopped following it because the author kept adding his own pet syntax changes and preferences that had nothing to do with prototypes, so it got farther and farther from Python.

How do I set my domain name?

Posted in the Junk Room by Joe on April 18, 2008
Tags:

Originally posted on AlumNit (back when it was open.nit.ca) on May 11, 2004:

A simple sounding question that nobody can answer:

Q: How do I set my domain name under Debian?
A: You don’t.
Q: So, when I type “hostname –fqdn”, where does it get the fqdn from?
A: DNS

You might run into this problem when installing something that refuses to start because “You have no domain name” (am-utils, for instance). “hostname –fqdn” will tell you what this program is complaining about.

Just forget about /etc/hostname and other distractions – it’s the resolver’s job to figure out your domain name. If you’re on a LAN with a competent DNS server (notably, if you get your address through dhcp), just make sure your own host is not in /etc/hosts, and “hostname –fqdn” will go ask DNS. If you have a static address (like if you’re setting up a home network), just add yourself, domain name and all, to /etc/hosts. If you’re getting a dynamic IP but the DNS server isn’t giving you the right thing – well, cry, I guess.

Commentary: Seems pretty obvious when you put it that way, but it took me ages to figure out what was wrong back in the day. I probably should have emphasized “keep your own hostname out of /etc/hosts” more, since that’s the only counter-intuitive part.

I noticed this while I was following links from my Advogato entries. Apart from the Python stuff it’s the only thing there that would fit in on a technical blog. Sooner or later I’ll move all the Python code here instead of just linking to it, and then everything will be in one place and there’ll be no reason to go back there.

Except for the CellPhoneServiceRant, which is pretty funny as a two-year record of my struggles.

Advogato #1

Originally posted on Advogato on March 22, 2004:

Fun with Python

A. M. Kuchling, in rec.arts.int-fiction, just showed me a really neat Python trick which he attributed to Michael Hudson. But first, some background:

I use a special-purpose language called Inform to write interactive fiction. It’s sort of a hybrid between standard class-based and prototype-based OO languages – there’s a shorthand to create a single object and add properties and methods to it, but if you want to create a bunch of identical objects you still need to create a class for them. It’s very handy for world modelling. Most of the specialized IF languages use the same scheme.

I’ve been thinking for a while about using a standard language – Python or Ruby, by preference – since every IF language has annoyances and weirdnesses. This involves writing a standard library for world-modelling, which is a big job. There are already a few for Python, but they’re really cumbersome compared to the Inform standard library, because creating a new object with a few specialized behaviours always involves both a new class and a new object.

Behold – prototyped Python (direct from amk’s post)! Now we get to see how well the whitespace survives it’s trip through HTML and back:

Wow. The answer to that is “not at all”. The <pre> tag appears to do precisely nothing.

Instead, the code is on my Wiki page at work. To summarize: it lets you say “class SpecialRoom(Room)” and get both a class SpecialRoom and an instance (also conveniently named SpecialRoom) automatically.

This still has a few weirdnesses. Unlike a true prototype-based language, there are still classes and objects, so you can’t directly say “issubclass(SpecialRoom, Room)” – you need to “issubclass(SpecialRoom.__class__, Room.__class__)”. I’ll need to experiment and read up some more to find out exactly how the class and the instance differ, and decide how to make it more seamless (or even if it’s worth it). This also can’t handle dynamically creating objects, which can be handled by adding a clone() method:

 def clone(self): class anon(self): pass return anon 

Except I’m not sure exactly where to put this. I tried initializing it in Prototype.__new__, which works fine but apparently isn’t correct – that’s what Prototype.__init__ is for, except it’s not actually getting called in the above code.

Still, this is lots of fun! Massive new project, here I come…

Commentary: The massive new project never materialized. I updated the wiki link to go directly to the relevant page, where you can see why – it’s a big disorganized mess of “here’s one way to do it” and “here’s another way to do it”. It was an interesting subject, though, and Python’s gotten a bunch of new features since then (decorators came out just after the original post) so I should really get back to that. It would be nice to pull it all together into a complete solution.

Next Page »