My dad's user interface has really progressed in the last two days. Screenshots to follow.



Google's Eric Schmidt apparently said in an interview

If you have something that you don't want anyone to know, maybe you shouldn't be doing it in the first place.

I almost agree. I'd add that "You should probably accept the possibility of it being made public. I don't mean in a "is it worth the risk", but just, while it's convenient that the whole world doesn't know, you should have an idea that you could tolerate its becoming public. I mostly thought of this after trying to evaluate how I felt about Jason Fortuny's Craigslist Experiment. I suppose I feel: if it's real, it exists in the world and its existence will challenge concealment.



So, a lot of churn, not much improvement.

Firefox doesn't work well when I have 50 tabs open. Yes, I do want 50 tabs open. Or, I want to maintain a working set of around 50 things to read eventually. No, I don't want to use bookmarks. What would be nice is if Firefox could even refrain from loading tabs until you've clicked on them. I mean, my session is restored when I open Firefox again. That doesn't mean it needs to download several megabytes that I still do not yet intend on handling.

Anyway, Firefox with 50 tabs gets slow and slows down my system. The CPU is running near constantly at 100%. I'd like to think it's due to stupid Flash and JavaScript. Regardless, using multiple threads in a single process doesn't allow for very complete or clean separation of memory and CPU usage between sites. I don't imagine Firefox getting better. Instead, I have to try to deal with tabs that are not yet convenient to deal with. Triaging. Joy.

My other options are Epiphany and Google Chrome (now in Beta for Linux). Epiphany just changed from Mozilla's gecko to webkit (as seen in Konqueror and Safari). Consequently, tab handling, downloading, and the caret in this text area as I type are all messed up. I am amazed that Fedora thought it was good enough to include. Yikes. I mean, with the default settings, you cannot download anything: it's set to try to download to /! Users don't have write permission to root. Did the developers working on this do so under root?! Ugh. A ridiculous download manager appear for the duration of a download and then disappears, stealing focus. At least with Firefox's, it doesn't auto-disappear, and you can keep it in the background so it won't annoy you anymore. Yay.

Tab handling in Epiphany is busted as well now. I click "Open in Tab" and there's a 50/50 chance that it will open in a new window. Sometimes, I have no way to open a link in a new tab, it will only do it in a new window. And vice versa. It's a probabilistic target? I don't know what the deal is with the caret in this text area, though. It's leading its expected position by 1/2 to 1 full character width. Characters still appear where the expected caret should be, though. Yay?

Google Chrome Beta for Linux was short-lived on my computer. I do want its process separation of sites, but it froze on me 6 times in the first 20 minutes of use (arguably, I was trying to install extensions at the time), its extensions are all somewhat annoying (I mean, the ones for Google Services are all crippled or very limited, making them all very useless to me). I will try it again in 6 months or so.

I think the biggest obstacle for me in using a non-Firefox browser is the absence of this fundamental feature: vertical tabs. For some reason, modern browsers seem to mostly take a cue from 1995 window lists: horizontal, and the more you have, the smaller they get, and the less you can read of the window/tab's title, until it's useless! Meanwhile, vertical lists of tabs or windows allow something wonderful: consistent width, consistent size of tab/window name, and a much larger number of items can be added vertically, since the names are orthogonal to the list. Yay!

Google Chrome does have two extensions for vertical tabs, but both in the stupid form of a button that shows you a dropdown (even Epiphany has their Tab menu built-in), and Google Chrome's horizontal tabs are not hidden by either of those. Ugh. I don't hold out much hope for an extension being able to actually move those to the side, but I can keep hoping. Epiphany doesn't let me hide the tab list either, come to think of it.

Oh, and the fonts in Google Chrome! I couldn't readily find a way to shrink the default font size. I'm sure it's there, I just couldn't find it.

So yah, here's looking to the future. Perhaps Firefox 3.6 will go beyond advertising speed/efficiency improvements and actually implement some. Then again, life could be worse: I could be stuck using IE!



Paper receipts are getting to be kind of ridiculous.

You see, I keep meticulous possession of all my receipts. They have a flow: through the wallet into the repurposed cereal box, which when full is taped shut and then piled atop my other receipt boxes to seldom be reviewed again. It's a good and worthwhile system. it means that I have a collection of evidence of my history. I can pop open a cereal box and search for the memory cues buried within. "Wow, we did buy a biodegradable cup of cherries at Granville Island in 2007! That was cool."

However, these receipts, when considered as given out to everyone as a record of every monetary transaction, indicate a MASSIVE CONSUMPTION OF PAPER THAT RARELY GET REVIEWED OR REUSED! I wonder how great the recycling rate is for them. Hmm hmm hmm. It clearly makes oodles more sense to receive electronic receipts, which can reveal your purchasing habits to even yourelf in ways only meticulous transcription and analysis would previously. It will also save oodles of paper.

I know banks already over you records of totals for each transaction, but they don't even offer that as an eternal history. I can only get my information back a few months, and then back a few more for a fee. It's outrageous. I worked for a company that also dealt with similar records that said "we don't want to become a data warehouse" to which I think: Yes, you do! Total and complete records are so very much more valuable than partial ones. I feel sorry for Google who must bend to privacy concerns and limit the peroid information is retained for. At least recency ends up being a bigger factor for them?

So yes, here's to digital receipts: their standardisation and omnipresence can not arrive soon enough.


Plain Design Ltd.

That should be the name of my new web development company. There's a lot of complexity in the world and complexity is the true root of all evil.

I've spent most of the weekend updating a website from a ... retro 1998 GeoCities-style to something more humane.

Before After

(Sometime soon, both of those will point to the same one.)

Changes have included:

  • Rewriting almost all the old presentation code. It was primarily broken HTML with a table-based layout, and now it's clean HTML+CSS+JavaScript with a position-div-based layout. It's about 1/3. In the end, it's about half the size. The smallest savings come from the PayPal-based order page.
  • Restructuring some of the flow. Most of the navigation was usually at the bottom of the page. We now have a sidebar that can get you to almost anywhere, except the individual game's pages, and for those, we have thumbnails of each game leading to their page. Yay.
  • Some of the saving comes from how I build the sidebar and header consistently on all pages: they're built using JavaScript and written in response to getHeader() calls on each page.
  • Cleaning a lot of the images. Many were GIFs with coloured edges. I cleaned those edges and made them into slightly smaller PNGs. Hurrah!
  • We now use Silk icons for a few icons. Yay. Silk is a great CC By-licensed icon set ideal for websites and application development.
  • We now use handfont2 by Benji Park as a cool web font as provided by the Open Font Library. There are a few points where text and text images still needs to be converted.

Anyway, there's still some work to be done, but it has been fun. Back to my first comment, though, the new design was initially very plain, and I hope it still mostly is (though the thumbnails son the left and the paw prints up top seem to have muttered up things a bit, in a way I like). I don't have aspirations to particularly rich designs. They often end up garish. A lot of websites I visit look repulsive. Especially on-line stores. I don't understand how making their website difficult to traverse, cluttered, and ugly is supposed to improve sales. Ah well, I'm not everyone. I think my designs err on being too simple sometimes, but at least they are hopefully efficient and a pain-free experience.


Why isn't my z-index doing anything?!

Tip of the now: z-index apparently only works on elements whose position have been specified. So, if you like, set "position: relative;" for the objects CSS style and then set its z-index. Hurrah! My images now float where they're supposed to.


Stop GNOME from resuming old sessions

Once upon a time, I asked GNOME to save my session when I logged off. Eventually I disabled it, but ever since, the last session saved has always tried to start when I logged in. It's rather annoying, as it greatly slows my login.

Parts of that session were saved across a few different directories. I decided to clear their contents to restore my profile to a pristine and quick-to-load state.


GNOME doesn't have really good session management features, but what does? At least Firefox doesn't clobber its sessions anymore.



Submitted another revision of my patch adding gdata_picasaweb_service_upload_file_async() and gdata_picasaweb_service_upload_file_finish() to libgdata. I think it's almost there. We will hopefully have asynchronous upload support for PicasaWeb in libgdata 0.6.0 and I will hopefully be able to use these official functions for my Postasa PicasaWeb uploading plugin for Eye of GNOME. Yay!


Almost Perfect

I have just finished reading Almost Perfect, a book available for free online about the author's involvement in the rise and fall of WordPerfect Corporation. The author is Pete Peterson. It's kind of interesting. I think I disagree with a lot his ideas, but I liked using Corel Word Perfect when I got my first computer in 1998, and I really enjoyed following the development of the company.

The idea of building a company is exciting and scary. I'd probably only do so if I thought I was able to help distribute important technological advances to many people by doing so. Personal wealth isn't very attractive to me. Money comes and goes and enables many things but isn't the reason why.

I more or less liked many or most of the ideas the author related. He liked to keep a flat, simple organisation, encourage principles and be hard when it was necessary. WordPerfect Corporations downfall did follow from his exit from the company, so there could be some correlation in that. He had to more or less figure out what he was doing as he went along. I suppose I'd probably end up having to do that, too. However, there seems like there'd be abundant resources in the market I'd have to compete in to learn from, whereas during his time, there'd be many fewer for the software market.


Fedora 12

So, I upgraded to Fedora 12. Yay. Naturally, bugs bugs bugs. Most interestingly though, is this:

Fedora12 now comes with ABRT, a bug reporting tool with so many bugs it can't actually report bugs it finds, so I have to manually report bugs on the bug reporting tool.

Preupgrade crash when resuming


Seth Vidal has a better solution. Rather than just catching the exception, you can prevent it by correcting the error in the code, as noted by Anonymous in the comments:

Patch from Seth Vidal:

diff --git a/preupgrade/__init__.py b/preupgrade/__init__.py
index 2e82f1e..d79ec4b 100644
--- a/preupgrade/__init__.py
+++ b/preupgrade/__init__.py
@@ -325,7 +325,7 @@ class PreUpgrade(yum.YumBase):
rf = open(repofile,"w")
for repo in [self.instrepo] + self.repos.listEnabled():
# adapted from YumRepository.write()
- repo._grabfunc.opts.user_agent = __user_agent__
+ repo.grabfunc.opts.user_agent = __user_agent__
yc = yumConfigParser()
for k,v in repo.iteritems():

So the problem is that it tried to use _grabfunc, which doesn't exist, instead of grabfunc. Yay.

I was trying to upgrade to Fedora 12 today via preupgrade but had to stop my upgrade session due to a network issue. When I tried to resume, as you're supposed to be able to do, it started getting the metadata again and then it suddenly crashed!

[root@localhost ~]# preupgrade
/usr/lib/python2.6/site-packages/yum/__init__.py:203: UserWarning: Use .preconf instead of passing args to _getConfig
  warnings.warn('Use .preconf instead of passing args to _getConfig')
Loaded plugins: blacklist, dellsysidplugin2, presto, refresh-packagekit,
              : whiteout
Detected in-progress upgrade to Fedora 12 (Constantine)
preupgrade-updates (mirrorlist) 
  url: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f12&arch=i386
  now: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f12&arch=i386
unknown metadata being downloaded: metalink
Traceback (most recent call last):
  File "/usr/share/preupgrade/preupgrade-gtk.py", line 764, in 
    widgets = PreUpgradeGtk()
  File "/usr/share/preupgrade/preupgrade-gtk.py", line 376, in __init__
  File "/usr/share/preupgrade/preupgrade-gtk.py", line 259, in _do_main
  File "/usr/share/preupgrade/preupgrade-gtk.py", line 436, in main_preupgrade
  File "/usr/lib/python2.6/site-packages/preupgrade/__init__.py", line 130, in setup
  File "/usr/lib/python2.6/site-packages/preupgrade/__init__.py", line 328, in complete_repo_setup
    repo._grabfunc.opts.user_agent = __user_agent__
AttributeError: 'NoneType' object has no attribute 'opts'

That's obnoxious. I didn't want to restart it, as I'd already downloaded over a hundred MB of files. So, as root I looked at the file tripping the AttributeError, /usr/lib/python2.6/site-packages/preupgrade/__init__.py, and decided to catch the error:

    repo._grabfunc.opts.user_agent = __user_agent__            


    repo._grabfunc.opts.user_agent = __user_agent__             
except AttributeError:                                          
    print "Can't set user_agent, repo._grabfunc = NoneType :( "

I then ran it again, and this caught two exceptions, but allowed me to proceed with seemingly no loss of functionality. I am now happily downloading still more amazing amounts of MB. Hurrah!

Now to file a relevant bug if it doesn't already exist. The oft duplicated, already existent RH bug is 538118.

The Internet is for Recipes

So, the Internet is changing a lot of things gradually as well as quickly. One thing I thought of today is the death of family recipes. I don't really expect them all to die, but I could believe a trend of people moving away from learning traditional family recipes and to the top hits from Google.

Instead of having different species of a recipe evolving in isolation with generational mutation and a little bit of interfamily crossover, people can now find that canonical First Hit for "Pumpkin Pie". Information becomes so trivially distributed now. I suppose it was somewhat similar with popular cookbooks that might have been had in one out of three homes.

At least we don't easily all implement the same recipe the same way. There's still a lot of room for variation. And it doesn't have to spread just locally now, it too can spread globally. It still seems, though, a little sad that what once would have acted as a thread through generations of a family now loses that claim to legacy.

But then again, perhaps most children who learn how to cook will continue to obtain instruction first from their parents, and cooking as a family activity will blunt the invasive power of globalised recipes.


Pay Me

I like micropayments. I like their idea a lot. It's nice to see that cheap virtual content is actually making money, too. People are getting less afraid of spending money online. Yay! The Internet might be able to thrive still more yet.

People buy music online (wow!), people subscribe to video download services (waiting for Netflix to come to me), people buy an insane amount of applications for their cell phones (software that I find to be much more limited than their PC counterparts, which people would often be SHOCKED, SHOCKED to pay for!). Old properties like 1990 video games even generate money anew through consoles' online stores and emulation. Wow. Some people even buy books.

It's nice to know that people are willing to exchange something and not just take it. I'm surprised when I find people who are still perplexed by why they should pay for something. Sigh! In some ways, though, I wonder why such things didn't take off still earlier.

For instance, gutenberg.org has millions of classic texts available for public consumption, but in some ways it doesn't seem as successful a resource as, say, the Wikipedia. Lots of people I know do not know about it, but know about Google Books. Perhaps it's the technical interface? (Hey, it looks better these days.) Or perhaps people really just want to read modern literature. Ugh :(

Lots of Open Source software offer ways for you to donate to its development. I think most never see much more than a dime, though, unless they start promoting it heavily or in the context of some strong need. GNOME is a major project, huge, and they have a donation-based project that, to me, is surprisingly under supported. Well, at least they have private sponsorship to make up that massive shortfall :)

Newspapers are in dire, need I guess, for a successful revenue model that goes beyond advertising online. Lots of payfor magazines and stuff have, if they survive, seem to more subsist. If they lock all their content away, then they end up having to survive with much reduced reach, too. Is it more important to make money off your content, or for your content to obtain maximal distribution? I suppose the mixed-model with pay-for premium content and free regular content isn't that bad, though I stopped visiting IGN for that reason.

As micropayments become still more popular, and in the traditional sense, with readers being willing to pay 2¢ for an article and not think twice about it, I think a lot of traditional funding problems will relax. Many websites would thrive off 1¢ per visit, which is a very minor expense for a user who enjoys any of the content. Imagine the profitability potential for webcomics. If a consistent and regular model and interface was available for open source projects beyond the Pay Pal button, things might improve there, too. I'm sure copyright holders will be happier when YouTube starts generating still more revenue for them (they actually share money off the ads right now and purchases of their music prompted by YouTube).

I think micropayments could be made still easier if they could somehow be facilitated by the browser. I don't think browser makers want that responsibility, though, and extensions and toolbars are limited in their reach. Perhaps mashups will help instead. It would be nice to, without being redirected to a completely different page to make a purchase, have a small widget that indicates how much money I have (but which is not available to the site hosting the widget), and offer me a two-click process to spend a small some to reward or access the content.

So, yah, I think people are becoming more and more comfortable spending money online. Content exists that people are proven to be willing to spend money on. Now for it to become more trivial to spend small amounts.

The downside

Oh, of course there is one. The success of many businesses online is a very damaging threat to businesses offline. I dare say a threat to the very economy!

When Netflix, which is now moving onto all the major consoles, I read, and services like it hit critical mass, why will people still visit the video store? Eventually, the video store as a popular destination must die. I'm sure some might still exist, but in general, at some point, people will turn to their computer to watch it on a cheap monitor or to their game console to watch it on their TV, like they would if they inserted a DVD into it. Sure, Netflix and its competition will be new business and will hire people, but will it need to employ as many people traditional brick outlets? I don't think so. In theory, it should be incredibly cheaper to operate a comparable business online rather than offline, especially in the human resources department. Ah well, having people drive to get their movies is bad for the environment anyway, and high unemployment will reduce consumption which is bad for the environment anyway.

I imagine it will take longer to migrate people away from paper to digital books. Current ereaders are repulsively ugly and awkward. However, in theory, people might accept a digital board to do all their reading from. If library systems can manage to implement a loan and share system like in the brick world, that'll be an additional blow. I wonder how they'll manage it, as it seems like it could really undermine commerical models. Manufacturing thousands and millions redundant copies of books, many of which can go unsold, is bad for the environment anyway.

I suppose any information-based item that can be shipped over the Internet, or physical object that can be constructed with a 3D printer, signals the impending demise of a previous industry, increased efficiency, and, perhaps, high unemployment and reduce environmental impact. I suppose all the unemployed can make their living off huge global audiences reading their webcomics, anyway.

Here's to the future!


Blogger navbar returns

Blogger doesn't force their navbar upon you when you use SFTP to publish to your own server. They do if you have it hosted at blogspot.com or use a hosted domain (like blog.kosmokaryote.org). So, when I switched over, I initially used CSS to hide their navbar. They would rather you didn't do that. However, because I use my own template, they don't provide me with any easy way to change the colours to make it match my vibrant colour scheme. I can't simply restyle it with CSS because their navbar is hosted on their own server in an iframe, and thus doesn't regard my style sheets :(

However, I did check its code today to realise that it sets the colour scheme in the iframe's src's URL. Hurrah! So, now when the page loads, I re-src the navbar to one with the above colour scheme. Pretty! Also, fragile and improper. At least it looks good.


GenderGuesser SetBuilder

GenderGuesser and SetBuilder have been updated! They now compress their sets (the use XML to store their data, so hurrah!), and you can now edit specific records in SetBuilder, rather than just adding new records and removing old ones.


Security on the local machine

Patch on Bug 531603

Apparently, GNOME Blog once upon a time stored your passwords in plain text in GConf. I've posted a patch which stores them in Gnome Keyring instead. Yay!

And now

GNOME Keyring support for GNOME Blog?

Gnome Blog

Gnome Blog is a nice little application/applet for GNOME. I have enjoyed using it. Sadly, it hasn't seen much love in recent years. I even submitted a patch to make it support Blogger's ATOM API, so that we could, you know, have titles that were proper and separate from the post.

I just looked at the patch again and touched it up a little. I previously had it adding a second Blogger.com option, but now it just replaces it. The old blogger.com API remains, because apparently some other service uses it. I decided to also find out how to add tags programtically. So, you should see those appear at the bottom.

Testing on another blog, I noticed that paragraphs weren't appearing properly, but I couldn't figure out why. Perhaps they will here?

One other thing I like about the ATOM API is that my blog list is sorted by Last Used, rather than by Random :) Yay!

New Softwares!

Eye of GNOME plugin for PicasaWeb

I've written a plugin for Eye of GNOME, currently available as a patch to Eye of GNOME Plugins, which I submitted for inclusion there. I might have to just release it separately, though.

GNOME bug 600109 has the patch for it.

You can see screen shots and more here

Bell Aqua redux

This is that nice little software I have that announces the hour on the hour using Speech Dispatcher.

I think I previously posted about Bell Aqua, but just as a shell script's contents. Now it's still a shell script, but it's a bit nicer. Sleeping your computer no longer interferes (much) with its countdown to the hour. It also is hosted at gitorious.org/bellaqua/ which also hosts simple instructions on how to set it up to run when you login.

It also has a local page now that mostly just redirects you to gitorious.


Instead of telling you that my blog will behave strangely as it undergoes maintenance this Halloween, I instead did maintenance and let the breakages be a spooky treat for hapless visitors. Oooo, scary.

I had a problem with the header. Another "Firefox and friends define a DOM property that IE doesn't, thus leading to breakages." Not having a Windows installation and consequently no IE, I didn't have many options for debugging, but I trick or treat'd a friend with a few moments to hand out and, tada, even IE users (perhaps most visitors?) should see the starfield and header now.

I also get e-mailed links about access attempts that result in 404, 401, etc. I often get e-mailed about 404 errors when browsers check for a favicon.ico. I have used a .png image historically, but I don't think IE understands it, so now I have a favicon.ico too. Or, at least browsers still check for the favicon.ico, so it exists now. Yay.

I'm aware that this blog mostly seems to discuss this blog. What a blug!


The Web

So, I am aware that kosmokaryote is actually broken in Internet Explorer. I think the stars and header do not appear. I haven't had regular access to a Windows computer in a while, so I haven't worried about it. I'm aware that anyone who finds my page will think it's a strange broken thing. I'm sure some friends have visited it with IE and now judged my web-competence negatively, but to them I say: use a browser I can use, and you will see what I can see! 'tis beauty.

Also, if anyone has access to IE and would like to spend some time helping me debug my page in it, that would not be unwelcome.


DNS, CNAME, and name servers

I use Blogger for my blog. Blogger wants me to use Custom Domains rather than SFTPing content over to my server. That's fine. Let their servers handle the immense strain my blog is under from its abundant audience. Or at least let them dynamically host and regenerate labels pages and so forth, rather than spending minutes (MINUTES!) of time generating and copying them over to my server, where they'll just waste space anyway. Also, I don't have the most bandwidth. (So close, though.) Is it sad that I used more bandwidth in publishing my blog than I did in serving it to readers?

So, the other month, I set it up. I created the appropriate CNAME record, which can be used to redirect requests for, say, some subdomain (oh, blog.kosmokaryote.org) to some other, more canonical name, like ghs.google.com, where the content will actually be located. The swell thing is, unlike HTTP redirects and such, visitors still see it as hosted at my domain, and not at Google's. Hurrah. The deception (except for this post) is complete!

Or, it would have been complete. After making the change, for the the last 6 weeks, my blog has had downright sketchy availability. I mean, more than half the time I tried to visit it, it was unavailable. I tried to investigate a few times. Tried reapplying the CNAME change. Why not go back? Well, something with Blogger's SFTP transfer seemed broken, in that for the couple weeks before that, I hadn't been able to copy over anything anyway. So, have a blog that can't update or one that can update but is only available half the time?

Investigating again, trying to find out what could be the possible cause of the CNAME being findable sometimes and not others, and assuming that it wasn't the fault of the DNS system in general (originally, I thought that there was some annoying lag in the record's propagation, but no), I finally discovered that two very relevant nameservers were out of sync, and one of them was just not updating to know of the CNAME record. Ugh. It's been resolved now, so hopefully by tomorrow, all blog.kosmokaryote.org will be found, mwahahaha!


Fedora 12: No steps forward, 8 steps back, off a cliff

I could swear I wrote a similar post about Fedora 11. Basically, a new release, and everything gets worse, again.

This time around:

  • X crashes a lot. Starting certain programmes crash my X server, making my desktop disappear and return to the login manager. Certain programmes like "About this Computer" and "System Monitor". Or, resuming from suspend. Yah, it's probably my video card, which is an intel and was once heralded as a good choice for Linux.
  • Suspend: I can suspend, and I can resume, and I can watch X crash after resuming. See above.
  • 3D effects and acceleration: the computer hangs now. It gives me two seconds of indecision and then just freezes up. Nothing to do but power down the machine.
  • The "good" video source is broken, somehow. I have to go to my multimedia subsystem's properties dialog (not installed by default) and change it over to something simpler to get any video from applications like Totem movie player, or to see my face played back from my webcam.
  • Cheese photo booth. Actually, this broken sometime in the last couple of months. It no longer shows a feed of what the webcam sees. Instead, when I start it, it shows one static frame from the webcam feed and doesn't update again. I can still take photos and video, but that's about it. Oh, stopping video freezes the programme, so I have to kill it and restart it.
  • Authenticate! So, certain administrative dialogues and menus requires the use "authenticate" themselves. I think you're supposed to put in the administrative (root) password, but I don't know, because clicking any of the buttons on the dialogue does nothing! Nothing! It just sits there. Closing it via the window manager still gets rid of it, thankfully.
  • Tablet not recognised as such. What's wrong with this? It used to work. It works now. It will soon not work. This is progress? I thought they might have instead fixed the bug where, after resuming from suspend, the cursor jumps when using the stylus. They did! By breaking tablet support for a relatively common tablet: an IBM Thinkpad X41t. Liv's tablet thankfully is recognised as such but encounters a ridiculous error in the driver during booting that prevents it from functioning. It doesn't even think to check that mine is a Tablet. Sigh.

This is why I cannot recommend Linux or Fedora in particular to any of my friends, ever. I need at least two releases where they haven't seriously broken existing functionality at launch. They've less than a month until the final release if anyone takes an interest in the myriad of bugs I filed yesterday for these. But, gauging from history, I might get a comment, and then they'll move on to bugs that matter to them more. Sigh.

Conclusion: Fedora 12 sucks. But I think I wrote an almost identical post about Fedora 11. Of course, after a week of tinkering, I was able to get things working on my system. I'm sure all users are sufficiently technically minded and forgiving to invest a week for Fedora 12, too!


Window Cleaner

Cleaning windows is hard.


Open Source Web Chat made Easy

AJAX Chat is awesome. Today a friend made a request for their birthday: could I help them setup a webchat for their website. At first I thought that this might require a lot of effort. I certainly wasn't going to write one. I asked whether a Java-plugin to an IRC server (a common solution) would do. No, preferably no IRC server and no Java. (Java is slow and ugly and requires plugin installation.) Perhaps something more AJAXy exists.

After only a couple minutes of Googling, prominently standing out was AJAX Chat. It's demo seemed near perfect with a few defects. "I could fix those" I thought, suppressing the dread of a long, protracted maintenance situation. I figured "Let's give it a try." It requires PHP and MySQL on the server, and my friend's account doesn't have either of those. Well, my hosting does, so perhaps we can just fiddle with a CNAME record for their domain and point it over.

So, in less than hour, I created a separate subdomain for this, I setup the DB for my account, I briefly reviewed the installation and security instructions for the software, I uploaded it, I did some minimal configuration, and, tada, it worked! Visitors need nothing beyond a JavaScript and cookie-enabled browser!

Then, over the course of another hour came some customisations. Adding registered users, modifying default login behaviour, add a purple-coloured stylesheet for default, change the default emoticon ascii (very necessary) and add a butler to the login page. Oh, and change the CNAME record, so it will hopefully appear like a seamless part of their website in a couple days time when the DNS change is propagated.

So, a neat gift in a minimal amount of time. Go computers. Now I'm sure they'll grow bored with it in a week's time :D


Labels Considered Futile

The issue with human-prescribed metadata is that it is almost never complete. It is almost never consistent. It is barely reliable.

Now that it doesn't take minutes to republish label pages (yay for being hosted on Google's servers), I have gone back and labelled any posts without labels since last November. There are still a bunch of posts requiring labels. That's alright. I don't think I even expose a tag cloud of them anywhere.

Sadly, as I said, they'll invariably inconsistent and incomplete. At least I get to reread posts doing this :)

Oh, and there are a number of dead images that point to an uploaded folder that no longer exists, and dead embedded YouTube videos. Silly Internet.

Gender Guesser Repository

(Gender Guesser is a Question and Answer application, that prompts you with text, an image, or sound, and solicits a response that it might evaluate. Useful for practising your knowledge in advance of an exam, like one on German noun genders...)

Ugh, of course, right now there's the issue of multimedia packages. Sets of questions and answers comprised of images, sound, or video. (Well, Gender Guesser doesn't support video yet, but it will!) It would probably be alright to just upload archives of them, but then there's no installation support. Perhaps a packaging standard! I think this requires a committee. See why I restrict upload access? Ugh.

The Web: A Romance

The following are mostly boring techy details.

Blogger, SFTP, and DNS records

What an exciting 24 hours it has been!

I wrote a post the other day and Blogger failed to push it to kosmokaryote's server. That's alright. I'll try again later. I did try again later, and it still failed. Adventure time!

I have been aware that they were encouraging users to no longer use the SFTP service. While it's nice to have them as an interface to manage files that are remotely stored on my own server, I can kind of see the benefit. It takes up my bandwidth for them to update and copy files to my space. In particular, publishing can take a long time when I use labels, because they also update each label's static HTML page that they then transfer over. If I let them host it on their server, it could all be done dynamically. Yay. I could also have access to cool layout options (if I wanted, but I like my template). Sadly, I want it to be within my domain (kosmokaryote.org), not on theirs (blogspot.com). They at some point allows a method where you could use your own domain, directing it to their server, having the best of both worlds.

I made the change to my DNS records yesterday to point blog.kosmokaryote.org to their server, and today it's finally propagated through the various DNS servers such that going to blog.kosmokaryote.org for me now works as expected. If you're reading this later than I posted it, and were getting 404 pages, then your local DNS server didn't have the updated entry pointing blog.kosmokaryote.org to them and you're confused. Good luck!

Of course, there are various pointers on the web to pages hosted under www.kosmokaryote.org/blog/ (instead of the new blog.kosmokaryote.org). Google feeds (I have two subscribers, incidentally; go Google for including that in their feed-fetcher's user agent string) and old images and files and etc. I don't want all those to go stale. (I might forever lose my two subscribers!) So, to that end, I have made love to the .htaccess files of Apache, and now redirect any attempts to go below kosmokaryote.org/blog/ to blog.kosmokaryote.org (yay me).

The only issue right now is the extra space at the top. Perhaps that's blogger's navbar breaking somehow? Maybe it doesn't like my javascript header?

Gender Guesser, Perl, CGI, PHP

Consuming more of my time than an .htaccess file and a DNS record change (and various relative-to-absolute paths in javascript and CSS files) has been an effort to write a simple CGI script. You see, my girlfriend got development time as part of her birthday gift, and one of the things she wanted was a web repo to store Gender Guesser Q&A sets in. Being a little familiar with Perl and CGI scripting, and having CGI advertised with my host provider, I went to work.

Naturally, none of my test scripts nor the provided example scripts worked. Instead, I constantly received the dreaded Premature end of script headers. If you google around for solutions, you'll find a lot of ways in which the script could mess up, and a couple ways in which the server messes up my script. This was one of the latter, with the specific case being incorrect permissions and privileges for/with the dreaded suexec module.

I'll say right now that Chris Parrinello of webschwerver.com web hosting is awesome/special/amazing/cool and spent what seemed like a good deal of his own time attending to my issue. Various restarts and tests and attempts later, tada, CGI scripting works!

Sadly, for all that effort, I did end up writing my uploader and repository in PHP as he suggested at one point. PHP, consequently, is my new favourite web development language. I like both it and JavaScript. I never really liked Perl to begin with, you see. I just got used to it. I had settled for what I knew. It sure is versatile at least. You can always say that for Perl... ugly as hell though. Makes my hair fall out. Wouldn't invite it to a party. Well, sure I would, but it's more out of pity. Sure is ugly... right, PHP: Pretty Handsome & Parsable.

Anyway, playing with PHP has been fun. No, you cannot use the uploader. Not until you request permission, at least. Why would you? I haven't really even made the Gender Guesser code very public yet. Oh, I will. I'm just lazy, you see. Don't hassle me! I want to finish a few things first. Like the Set Creator GUI! Did you know, I wrote a handy application to help you create the sets you use in Gender Guesser? It's written in Vala. (On the note of languages, I might also be getting over my C#/Mono bigotry, not that I'm much of a bigot on that front to begin with, but I never want to use Mono...) The only issue is that it saves it in the CSV format and I want XML. I also want it to be able to open existing sets and let you edit and resave them. All coming along now, you see.

You can, however, view the repository of sets: here

Now, to learn more LaTeX so I can finally create a decent CV.


Work, Blogger, work!

Blogger has suddenly started to fail to publish. I reckon it's actually my fault. Let's see if I can get it to work again!


Frustration of Choice

I find myself frustrated by having too many inadequate choices at my disposal. I want to write a little GUI application with GTK+. I've already been writing a lot in C, and I'd like to write something in a higher level language. I was looking at Vala again, but I'd really like it to be out of the alpha stage and start acting more like a mature language in the documentation (I hope I don't have to look at .vapi files in my filesystem anymore) and editor support (intellisense support would make many headaches go away). I don't think these conveniences are fundamental or necessary, but they are convenient, and sometimes I just want to write something quickly.

I've already written a few things with Python recently and I don't really like Python. Something to do with a Global Interpreter Lock whenever I try to do things in parallel...

Java? Java GNOME doesn't seem to support GtkBuilder c(oh, SO close!). Java would actually be preferred. I'm sad that Java didn't take off as more of a desktop language. Something to do with a cumbersom JVM and closed source once upon a time...

Mono? Ugh, I am not fond of C# due to something irrational. Too bad community won't build behind Vala like community does behind Mono. I think GtkBuilder only exists on Gtk# trunk, though, and I don't want to deal with that hassle.

I suppose I really just want to use Vala, but I'm concerned that it will never get much support behind it (a logical argument to withhold my own, I am sure), that the community around it isn't taking it seriously as a good next language for GNOME, or at least that GNOME isn't. That they're too inconsistent in how they implement things. (A recent example saw code that used "new Gtk.Button.with_label()" and another had something like "GLib.something.new()".) They also fail to bless or at least judge any of the developer tools available for aiding Vala development. Their list of IDE support offers no commentary what so ever. So, I wasted a few hours trying them all! None of them did what I wanted, so back to emacs :)

Ah well, here we go.


Illustrious Nocturnal Habitats for Diseased Minds

Pickman's Model

I am somewhat desensitised to the world. Much that should horrify does not initially, unless I actively make myself sensitive to the matter at hand. Ghastly and grisly events are reported so regularly on the news that they seem unexceptional. They occur so infrequently in my own life, that reports of them elsewhere seem remote, disconnected from my reality, and inconsequential.

In some ways, I think that this is good. I remain sensible and rational when hearing or thinking about many disturbing things. This is also bad. Often, you might want to be emotional about such events, so you can better sympathise and understand the consequences to the pitiful subjects of the horror.

Thankfully, I feel I am not so far gone as to be immune and totally insensible to the tragedies of others, especially the real life ones that are all the more tragic for being real, and not just a perverse fiction let loose from a demented imagination. I understand that many people, however, are more immune to I and feel minimal remorse for relatively reprehensible acts against life. Some people I read blame moral decay resulting from the rise of materialism and secularism, but I don't.

Hopefully not too much to the disappointment of my friend Frank, the morose writings of H.P. Lovecraft fascinate me. By far preferable for me to any modern horror found in film, his writings leave much to the imagination, and to what terrifying depths ones imagination can stoop, when given a little guidance. Of course, it's not so simple at my level of removal from the world around me (the desensitisation I spoke of above) to be moved by nightmares manifested in words. I first have to volunteer my courage to crumble and allow my dread to feed truly frightening ideas into my awareness of the world. These are not just pretty words, but documentation of the very things that lurk under window sills and creep along your sleeping skin, feeding off your health and sanity.

He writes very well. After reading any work of his, I wish to drop my latest set of ambitions in favour of writing after him, chasing him into the darkness into which he has himself since vanished. But let me dream not for too long, lest I waste a life perfectly well suited to the labour of logical programming. Many have tried to repeat what H. P. Lovecraft achieved and the relative quality of their imitations cause me almost more pain and cringing than the grisliest horror.

But what purpose does this all serve? Is it simply to frighten grown men and women like a naïve children? No. Subjecting myself to the psychotherapy of darker writings help rescue me from the desensitisation or insincere sensitivity. Awareness of what shapes enemies to my existence and sanity could take provide a new basis against which I can really appreciate the sunlight and smiles of my present situation.

Pickman's Model

Linux Driver for EeeTop TouchPack touchscreen


So, I have a Eee Top 1602. I want to run Fedora Linux on it and have it setup simply for my father. No keyboard, no mouse, just the touchscreen and a full-screen application that will let him do a small handful of tasks.

Sadly, at present, the Linux kernel does not correctly read the input for the X and Y vectors from the touchscreen. That is, it has no sense of position or direction when I touch the screen! It can tell that I've pressed it though, as it simulates the click that it should. Just not where I want it to be.

Someone wrote a small preliminary driver to fix the axes and it's available at least at the Redhat Bugzilla: bug 491629. I originally wanted to compile this driver without compiling the entire kernel. I ended up downloading the source RPM for my kernel and tried to build up the correct gcc command to compile just this one driver independently from the logical behemoth that is the Linux kernel.

This plan has wasted much more of my time than I'd like to admit (some parameters and files are dynamically generated by the kernel build process and contain values that I don't care to guess at for my machine), so I finally went the simple route of dropping the driver source file into the Linux kernel source tree, editing the relevant Makefile and Kconfig files, and compiling the kernel with the driver set as a module (rather than built-in). That's currently underway, but it seems to be progressing well.

For the record, the touchscreen is reported as this by 'lsusb':

Bus 005 Device 002: ID 1bfd:1688 TouchPack Resistive Touch Screen

This might be missing steps, so if it doesn't work for you, let me know

  • Download the source code for my latest installed kernel:
    yumdownloader --source kernel.i686
    This gave me the file 'kernel-2.6.31-0.185.rc7.git6.fc12.src.rpm'. Yah, I'm running rawhide installed from the F12 Alpha, as I had hoped it would have better support than F11 for this computer.
  • Extracted the contents of the RPM file using cpio:
    rpm2cpio kernel-*.rpm | cpio -i
    This dumped all the files inside into the current directory.
  • I took a guess as to where it should go and put the driver source file (hid-touchpack.c) got from the Red Hat bug linked above (491629) into linux-2.6.30/drivers/hid/
  • I edited a few files and made the following changes to make the kernel build with the driver
    • To linux-2.6.30/drivers/hid/Makefile, I added
      obj-$(CONFIG_HID_TOUCHPACK) += hid-touchpack.o
      Under the similar entry for the sunplus driver.
    • To linux-2.6.30/drivers/hid/Kconfig, so that the kernel configuration process could be aware of and include the TouchPack driver, I added
      config HID_TOUCHPACK
       tristate "TouchPack"
       depends on USB_HID
       default !EMBEDDED
       Support for TouchPack Resistive Touchscreen
  • Then, in linux-2.6.30/, I ran "make menuconfig". I then went to Device Drivers, HID Devices (near the bottom), Special HID drivers, and there was "TouchPack". I set this to compile as a module, so that I can insert it into my currently running kernelUnfortunately, I couldn't use this as a module, as the device was claimed by another generic HID driver. Boo. So, instead, I compile with it built into the kernel, and it claims the touchscreen - hurrah! Sadly, I have to run the kernel I just compiled and not a regular Fedora one, but that's alright.
  • I then exited and saved the menuconfig and after configuration, ran "make" to compile it.

I just want to compile it as a module. I could have optionally written a more useful patch for the Kconfig and Makefile bits, and edited the source RPM's spec file, and built a new RPM including the driver, but I don't really like the driver so much, (wouldn't a proper solution involve linux-2.6.30/drivers/input/touchscreen/?) and I don't even know how well it'll work yet.and it works great!

I think this will be nice for my father. Uninterested in either a keyboard or a mouse or most of computers, we agree that he could still benefit from German radio, photos we upload to the web, and eventually, voice and video chat with his children. I'll update further on how well this works. Cheers.



This post is mostly for my own future reference on how to deal with web-fonts

This is a 'guest' post by your same regular author. If you're using Firefox 3.5, it should look slightly different. It's using a font Un Dinaru which you probably don't have installed on your machine, but which as a web-font hosted on my server you could still see it.

That is, given a browser that supports web-fonts. Even IE does, but I'd have to do something slightly special to support IE which I haven't yet. Opera and Chrome should, but I don't know about Safari. Firefox 3.5 is what I'm using anyway. This paragraph is in LetsTrace

Two problems that I've encountered so far include

  • font size. Un Dinaru is normally a 1MB-big font. That's as large as many high-resolution photos! That's a big file for people to have download (and for my server to serve) and that could get expensive in time and bandwidth. Thankfully, http://fonts.philip.html5.org/ exists, which offers a bunch of fonts for which it will generate a trimmed down version including only the characters you care about. Un Dinaru wasn't one of them, so I had to download the service's source code and generate a trimmed-down version for myself. The page lets you click on an example of the font you want to use, type the characters (or all the text) you want to use in that font, and lets you download the resulting trimmed down file, which you'd have to host yourself on your own server. It also gives you the HTML and CSS code you'd want to use to actually use the font.
  • cross-domain access. Mentioned briefly above, browsers won't load a font-file from a domain that is not your own. I'm having issues with a blogspot blog in trying to use webfonts hosted here at kosmokaryote, since one is blogspot.com and the other is kosmokaryote.org. Grr. It makes sense, preventing people from leeching off larger fonts hosted on your server. (It doesn't really help prevent copyright violations, since you still need to be able to download the font via your browser (just in the background) to see it anyway, so you can keep it around and abuse it if you like, though you should not like!) There is at least one good way around it, which is to allow specific domains to access things on your server side. Sadly, I can't easily do that on kosmokaryote.org right now, but I've contacted the hosting provider to see if he can enable the module I need :) More details at: http://openfontlibrary.org/wiki/Web_Font_linking_and_Cross-Origin_Resource_Sharing

Really, I wish Mozilla would have offered some error message or warning that it couldn't load the fonts; it took me a long while to discover why I couldn't see fonts hosted at kosmokaryote.org on blogspot.com. Ah well.


Google Contacts error handling

Wahoo! That was quick. I found a small bug in Evolution (mail/calendar/tasks), did a bunch of investigation for it, reported it, and then it was fixed within a couple hours! Milan Crha sure has some energy.


Linux still sucks :(

Things that crash more than I remember:

  • X server
  • Firefox
  • Eye of GNOME (simple image viewer)

Things that still crash more than I'd like:

  • Evolution (mail, calendaring, contacts)

Things that crash less than I'm used to:

  • Totem (which doesn't help much, since their codecs feel too inefficient to watch anything full screen)

Several reasons I cannot in good conscience recommend Linux desktops to people.

git 'er dun

I'm not sure why, but git as a version control system feels so easy to use and so cryptic too.

I got an error message when trying to resync gitorious.org/libgdata-picasaweb today,

! [rejected] master -> master (non-fast forward)

But thankfully, googling for git usually turns up the answer. Thank you Junio C Hamano.


My imagery is nothing like Picasso's

Icarus: the desktop PicasaWeb browser
Why?  Simply to exercise libgdata's PicasaWeb support, not to really be used in place of the web interface.
It caches file and lets you successfully upload files now.  It has discovered a few issues with libgdata's PicasaWeb support (which I'm partially to blame for) and I've file and helped fix one problem so far.  Yay PicasaWeb!

Ah, yes. THAT button.

TA: I click this button and... nothing happened?
Me: Yah, it doesn't do anything.
TA: Ah, yes.



I decided that I actually really do want the functionality sooner than later, though I'm not currently interested enough to run Tracker from git to write that metadata registrar.  (Honestly, I don't really use Evolution or Tracker at all as they generally get in the way.)  I am already running mail-notification so I thought that perhaps I could add it as a feature there.  Despite a test release of gob2 2.0.16, I still cannot get mail-notification .gob files to parse/compile properly.  (Yes, I had separately tried applying the relevant mailing list patches.)  So, that was a disaster.  But you know what did work?  ... patching notification-daemon!  I wrote a really ugly prototypy patch to just see if it would work or work well, and it does, more or less.

In this case, mail-notification uses libnotify(right?) to send notices to notification-daemon which then publishes them in a notification bubble.  Other pieces of software use this, too, and I believe Pidgin can use it via a plugin.  The current "patch" I wrote is a couple dozen lines in daemon.c's notify_daemon_notify_handler() to read aloud whatever notice it got.  It's just a terrible hack right now.  I even added a small function to strip the XML elements off of the notice, since I dislike hearing Speech Dispatcher reading markup.  However, this might be a good place to add some generic notice-speaking code.  Add a speech.c file and add a couple options; things could be nice.  It would mean that IMAqua might be less necessary, too.  Of course, there are some cooler things I can do when writing a plugin or a patch for an application itself instead of relying on reading its notification-bubble text, but the latter might be sufficient in some cases, especially those where I don't want to try to write a plugin or patch :)  It might also prove more generic :)


Developer Accessibility

EvoAqua (temporary vanity name for my mail speech-notification project) will probably be on hold for a little while.  I was going to integrate it into Evolution as an EPlugin, but besides being terribly ugly, they don't see to export a message's subject or sender information.  (Bug 588843.)  A better solution might be available soon that involves becoming a registrar that listens to DBus for mail notifications from more apps than just Evolution.  See http://live.gnome.org/Evolution/Metadata for more information.  It's on hold because, for that metadata, an EPlugin was written for tracker that will sit in Evolution to export it.  Then, I can listen to and grab it and do with it what I will.   Yay.

I'll note that documentation is a bit frustrating.  Everyone agrees that it needs to be better and that there needs to be more of it.  In Open Source, I'm welcome to jump in and help.  However, I and most other people already have many time sinks, and documentation is never as trivial to write as some calls for it make it sound.  You don't want to write ill-informed documentation.  That just doesn't help that much.  Trying to figure out how to write a simple EPlugin was painful, because I had to read a somewhat "comprehensive" though at times incomplete manual to EPlugin: http://projects.gnome.org/evolution/developer-doc/eplugin/.  It leaves me dangling on the edge of a bunch of theories that build up and cram up in my brain, trying to find concrete instantiation in an example to see how they actually apply.  In the end, it was useful, but it felt like it could have been much simpler.  I recall recently following the also-incomplete Pidgin documentation for writing a plug-in and having a much more pleasant experience.

I know I should also look at how other plugins are written, but they of course end up being rather large making it difficult to separate out the parts that are actually relevant to me.  In the end, it feels like I should learn much more about a system than I should need to to write a relatively small 100 line plugin.  Understanding the system I'm writing in is important, but some documentation and examples end up making that understanding much more expensive than it needs to be.

Official DBus GLib documentation is also incomplete.  Examples of usage online was somewhat helpful, but it largely pales in comparison to the informative capacity of something like Java's documentation.

So, I know it's expensive for the developer to invest a lot of time into the documentation; especially when they don't know how much of it will be used.  However, you have to wonder how many contributions or users of a framework are lost to people feeling put off by the guess-work they have to do.  I don't have a difficult time trying to think of why Maemo would switch toolkits (a massive change, isn't it?) from GTK+ to Qt.  (Though, I'm sure Hildon's redundancies didn't help.)  I cringe everytime I see people advertise certain frameworks or toolkits for other developers to come and use.  Yes, I like these very systems that I complain about right now, but their accessibility (by developers, not a11y) and polish are not yet something I'd want to market.  I hope it's not something systemic to Open Source.  Ugh.




The source code for Icarus is now available.

I'll note again that Icarus is a test application to exercise the libgdata support for PicasaWeb.   It's also good practise for me to do things like non-blocking network IO and learn how to use GtkTreeView (ugh) and GtkBuilder (not quite as ugh, but it could be so much more!.



PicasaWeb, libgdata, and fun

The other month, I contributed a chunk of code to libgdata to access PicasaWeb.  Peter Withnall was cool and eventually polished it and integrated.  Yay.

For the last 2.5 days, I've been writing a test programme to exercise the resultant libgdata picasaweb API.  The first day, I struggled with GtkBuilder and GtkTreeView, the former just lacks a bit of polish and the latter just excels in sadism.  However, by the end of it, I had a working album/photo browser... for my local file system. 

Yesterday I didn't get to work on it too much, though I did cure it's disgusting memory hole.  (I need to learn about memory handling with GObjects and when it's appropriate to unref things :).  However, this afternoon, I got it hooked up to libgdata and replaced the local filesystem code with the libgdata picasaweb API.  Yay!

I'll upload the code to gitorious after kendo practise this evening.

Why am I interested in PicasaWeb?  It's my primary photo storage location (though it's free storage is woefully small) and I previously wrote a libsoup-heavy uploader to it, for which I wrote a plugin for Eye of GNOME and for which I wrote a Nautilus Action script.  However, it wasn't in any state to really share, and its HTTP-based PicasaWeb API-accessing code wasn't very general.  libgdata was something I had hoped to find when I started writing the above uploader and plugins, since I had wanted to write them in Vala which can easily use C libraries. 

Anyway, once I exercise the API quite a bit, I'll switch to writing some useful plugins for F-Spot, Eye of GNOME, etc. again.  Yay.


BellAqua released!

A record time for development, no doubt!

Actually, this is just the prototype.

BellAqua's purpose is to announce aloud the hour on the hour, like some feature I heard on a friend's computer once.  I hope to write a trivial GNOME Panel applet for this, which is definitely overkill. Here's the prototype though:


# by Richard Schwarting (aquarichy  gmail  com);
# 2009/07/10
# http://www.kosmokaryote.org

function calc_period {
    CURMIN=`date '+%M'`
    CURSEC=`date '+%S'`

    # I should learn how to calc things in the shell properly 
    export WAITSEC=`echo "(60 - ${CURMIN})*60 - ${CURSEC}" | bc`

echo `date`
while true; do
    echo "waiting ${WAITSEC} second until next hour";
    sleep ${WAITSEC};
    CURHOUR=`date '+%l'`; # it should be hard to arrive here *before* the hour # %k for 24-hour, %l for 12-hour 
    spd-say "It is ${CURHOUR} o'clock";
    echo `date`;

I'm not very good at bash shell scripting, so this could break a bunch of times, and might say the wrong hour, but I don't think it will (I reckon I'll probably over sleep instead!  Or, at least I hope this programme is as lazy as me).

It's GPL2 of course.

To use it, save to a file, run with bash, and forget.  You might consider setting it to run when you start, using System > Preferences > Startup Programmes (or whatever it's called in the English localisation) or however you like.

IMAqua source release


If you use Pidgin for Instant Messenging and a system that supports the Speech Dispatcher library for speech output (i.e. a Linux system),  then IMAqua might be for you!


As the previous post notes, it will announce aloud the author of incoming messages and, optionally, the message's content.  You can choose which voice to use out of those your voice engine supports.  (That is, Speech Dispatcher can use Festival or others which offer different voices, and you can pick which voice!)  Also, it will by default only speak when you're not actively at your computer (when your status is not set to available).  This can be changed, so as to always announce them.  Let me know how it works for you.

If you need help building it for your system, please let me know, and I will try to package it for you.


P.S.  Windows users might enjoy Audible Alerts which uses eSpeak directly.



IMAqua is underway!

I know, it doesn't make any sense.  It should probably be "Telegraham" or something.  But my name's not Graham, it's Aqua. 

Anyway, it's a plugin for Pidgin which will announce a message's author and content, like Rhythmbox's DJAqua announces a track's title and artist.

However, IMAqua is already more complete, with preferences!  If you use Pidgin and are interested in the plugin, but I haven't posted the source yet, just e-mail me (front page) and bug me to hurry up. 


Fixing commenting, finally


Once upon a time, comments worked on this page.

Then, a friend complained a couple times that commenting didn't work for him.  At the time, when I would test it, it would sort of work for me, and so I wouldn't invest the time to fix it. 

Well, after trying to post a comment myself to my own post for 15 minutes, losing my text repeatedly, I have finally realised how annoying and painful that must be to try to leave a comment and have it just TOTALLY DISAPPEAR FOR NO APPARENT REASON.

Thus, a pop-up window for comments should now pop-up, and it should work.  If it doesn't, please write me.  (My e-mail is on the front page.)

  The Proprietor



If you use Linux and the music jukebox Rhythmbox, here is DJ Aqua, a plugin that will announce the artist and title of a track before and after it plays. It uses Speech Dispatcher for speech, so a working installation of that will be necessary.

If you have installed Speech Dispatcher and you don't hear anything from DJAqua or when running spd-say on the command-line, perhaps it is not able to output sound in your session.

If it connects to alsa at system startup, or if speech-dispatcher isn't setup to run by default (like on Fedora 11) you might want to do this
  • Set 'AudioOutputMethod "pulse"' in /etc/speech-dispatcher/speechd.conf (the line should exist with alsa instead of pulse, and it might be commented out)
  • Create a Startup Applications (System > Preferences) entry with the command speech-dispatcher -d -P /tmp/sd.pid for your session.
 Then, when you login, speech-dispatcher will start and try to connect to the running pulseaudio daemon, which will be the one for your session.  Try spd-say again, and if it works, then so should rhythmbox's DJ Aqua.


The Future Is Nigh

The National Student Loans Services Centre (NSLSC) and the Ontario Student Assistance Program (OSAP) in Canada are a bit strange on the web. They're migrating like much of the world to more electronic, web-based services. I think these types of services are amazing when done well and done right. Very often, you see them done poorly. Apparently, one of my banks won an award once for their sites' usability, but it and another have always been painful for me to use. In contrast, the bank I use in New Zealand has an amazing website. It's like they considered contracting out to a normal firm that could be relied upon to be well-versed in creating terrible websites, but instead they let the geek on floor 12 do it. Business-class professionals create some of the worst websites you'll ever use. Especially for banks.

The NSLSC and OSAP websites aren't horrible like some (all?) Canadian bank websites. They're not quite as amazing as at least the one NZ bank website. They're more "in transition", and that's the weird part.

To modify the terms of my repayment, I can go online and ... generate a PDF with my new repayment terms on it, which I then need to print and mail or fax to them... what? Why can I not simply change them online? Is it this fetish with inked signatures that the world still carries? I have a tablet PC, you see. I once signed an important document digitally and returned a "scanned" version of it, though I never actually printed it. Instead, e-mail attachment -> PDF -> PNG -> PDF -> e-mail attachment. The receiver was alright with it, though it was unusual. A small glimpse of That Better Time.

And likewise, I had recently made an application for a loan via OSAP which I had to cancel to-day (due to cost-cutting measures undergone by the NZ government). You can usually cancel applications in progress from the web UI, but once submitted, you now have to telephone them to do so. I'm not quite sure the reason, why. After sitting through over a minute of menus (one of the phone's many failings (note: the web and phone will merge at some point)) and about 3 minutes of hold muzak, I spoke for 20 seconds with a lady.

Me: "I'd like to cancel a loan application."
Her: "What is your name and date of birth?"
Me: "<insert relatively public information here>"
Her: "For <insert University name here>"
Me: "Yes."
Her: "Alright, you should see the change online in the next couple of days."
Me: "Thank you.  Good bye."

What was the reason this? Is it just so I can confirm some relatively public information? Is it a small degree of reduced liability or that courteous "thank you" at the end that makes them sleep better at night?

So, it's almost there. Now, if only universities, governments, and student assistance programmes didn't also didn't form a cyclic graph sometimes. I'm sure things get better, despite the porcupines.


A Quick Break Point

Due to issues with the remote work situation and the limitations of my contract, I've left my job which I've had for the last year on positive terms.   Now that I'm in New Zealand and with a lot of free time, what will I do?  I'm contemplating school.  Once upon a time, up until June 9th, 2009, German citizens (yay, me?) qualified for domestic tuition rates for Masters here.  That was until June 9th.  The government decided that the additional students that might draw were not worth the reduced tuition income, and have opted to cancel.   So, I am now contemplating school a little less.  Too many options now :)

While working, there's been a lot of fun and important work postponed due to time constraints, so I've started tackling that now.  There's a bunch of new bugs in Redhat and GNOME's bugzilla now filed.  I've cleared out some reading queues and cleaned up my inbox.  A large foreboding mountain of papers to my right has been re-organised and some of it dealt with.  Progress!


My Rhythmbox plugin, DJAqua, that announces a track's artist and title before and after play has had an annoying bug for a while: it froze Rhythmbox.  I've now narrowed down the cause to Speech Dispatcher's involvement.  It's only when functions passed to Speech Dispatcher as callbacks try to adjust Rhythmbox's volume that Rhythmbox freezes.  Python threading issues?  I'm not quite sure.  I've come up with a slightly less ideal solution, though.  I still want Rhythmbox's volume to lower when Speech Dispatcher is reading out the text for the track's artist and title, and for it to be restored afterwards.  Unable to rely on Speech Dispatcher's callbacks when speech begins (to lower) and ends (to restore the volume), I now lower it when I send the command to speak, and schedule the restoration with an estimate of how long the announcement will take. 

Here's part of the neat part.  Originally, I was just going to guess it would take 6 or 7 seconds (based on informal timings) to read it out, but that really won't work when the title and artist are longer than usual or shorter than usual.  So, I did the intelligent thing.  I collected some sample data on how long it took for 11 random samples to be spoken, and how many characters were in those samples.  I then analysed the number of characters per second and found that the average was consistently around 15 with a few outliers.  So, now it expects the speech to take (# of characters to be spoken / 15) seconds, and it works very well.  Yay.  This lets me ignore Speech Dispatcher's other race condition which sometimes prevents the callback from being called when speech begins.

I've filed a bug with Redhat for the issue of Begin not being emitted, and a bug with GNOME for Rhythmbox's UI freezing due to the plugin:
I know I need to pursue this better with Speech Dispatcher.  I wrote them about the first bug and they are vaguely aware of the problem but didn't have a solution at the time.  Then I disappeared due to work business.

So, yah, now DJAqua doesn't freeze.  If you want to hear what track is playing and its artist, and you have a working installation of Speech Dispatcher (in Fedora 10, I had a bunch of other issues that don't seem to be problems in Fedora 11, regarding Pulse Audio and stuff), please try it out.  I actually have to move the new code to its gitorious repository, ah well.

Phone Number Portability

Having grown up with super-portable e-mail addresses, the fragile connection between a mailing address and a phone number to a person seems utterly ridiculous to me.  Clearly, people should specify that mail should go to me and not some building, and that a phone call should to me and not some randomly assigned phone number. 

Consequently, I use my father's mailing address all the time.  It adds almost a week or two of latency for a lot of mail, but it ensures it will get to me now and in the future.  As a co-op student, I moved way too much to keep track of who has what address and to try to update them all.  Regarding phone numbers, I've been grateful to have my Vonage phone number for so long.  Of course, it fails in being regional to Guelph, but that's alright for me.  I end up getting a local number wherever I go, but that's often split with others, so the cost isn't doubled. 

The future will be better.

For example, people in the future won't, when moving into a new home, end up with a recycled phone number that once belonged to an automotive shop, who continues to receive daily calls to the number.  Internet listings are in part to blame, particularly ones to which you cannot contact to request the now residential number be removed :(  Hehe. 

Celebration of Freedom

While my work was not slave labour (though the remote work environment, given the time difference, left me feeling isolated as though I lived in a closet), it is always pleasant to celebrate change and free time.   Of course, with unemployment comes economy, so homemade cupcakes and half-price arcade fun it was!  I have my girlfriend to thank for both.  Hurrah for her!

The influx of self-directed time has led me to review all my pending goals and tasks, to reorganise them and to start milling through them.  Some are as common as "Clean this room!"  or "Pad the doorway to prevent the slamming noise".  Others are "save the world" and "figure out what I want to do for the next year, the next three years, where I want to be, the value of people and time with them, etc.  I sometimes wish I had a wise sensei like Splinter from Teenage Mutant Ninja Turtles or Enho from The Twelve Kingdoms to offer some advice. 

Debugging, problem solving, and mail notification

Mail Notification by Jean-Yves Lefort has a bug.  I reported it a couple years ago, but it remains.  The CPU seemingly random takes 100% while it continually claims it cannot connect to the IMAP server, which is true, but I don't know why.  It is probably triggered when I resume from suspend, or when I am disconnected and reconnect, or when the hour turns.  I don't know. 

I don't really know how to debug the 100% CPU activity.  I'm going between ltrace, sysprof, and gdb and learning a bit about each.  I think I'd really like to use Linux Trace Toolkit, but it's not as trivial to setup, it seems, requiring a kernel patch.  Or maybe I'm just confused.  Anyway, whenever it comes out, I quickly quit what I'm doing and think about how I can figure out what's going on.  I am sure victory is within my grasp.


How to remove the close button from your tabs in Firefox

Do you use Mozilla Firefox?

Do you hate the presence of the close buttons on tabs?

Do you want to hide the close buttons on tabs? 

I really do.  I use Tree-style view and they waste a bunch of space.  Stupid close buttons!  So, go to about:config, filter for the property browser.tabs.closeButtons, and change its integer value from 1 to 0.  This way, it will only display the close X button on the tab you are on.




Running Fedora 11?  Running into an X11 crasher bug that you can reliably reproduce but don't have the hard iron to run all of X in gdb?  Perhaps like this one when you click on the Gimp's canvas and see X flash before your eyes?
0: /usr/bin/Xorg(xorg_backtrace+0x3b) [0x812d07b]
1: /usr/bin/Xorg(xf86SigHandler+0x9e) [0x80c061e]
2: [0xdf0400]

Fatal server error:
Caught signal 11.  Server aborting
Perhaps the bug is equally represented in Xorg and Xephyr.  In which case, you can probably run Xephyr from your desktop
Xephyr :1
with :1 to denote which display it should take (:0 should be in use by your session already).

Then, run which apps you need to inside Xephyr to reproduce the bug.  (e.g. the Gimp). 

You can tell them which X server to appear in by setting the DISPLAY variable like so
DISPLAY=:1 gimp
Now, right before you cause the Xephyr X server to crash,  run gdb on it
gdb --pid=`pidof Xephyr`
You might not have the debuginfo files installed, which you'll want to be able to trace through the human-readable source code.  gdb should prompt you with a command for any relevant, missing debuginfo.  Note that, on Fedora 11, you'll also need librpm.so available for it to do this (provided by rpm-devel).

Once you have the symbols loaded and gdb connected to your Xephyr process, tell gdb to "continue", and now reproduce your crasher.  gdb should catch the segfault (or signal SIGSEV or something).  Then you can get a backtrace ("bt") from gdb and start finding out where you are.

After that, I tend to restart Xephyr, reconnect gdb, and "break" at the names of functions where the crash happens, and then start "step"ing and "next"ing through, "print"ing the variables whose values I want to see until I find out why I'm crashing. 

RH bug 505823 will let me know if this was at all useful.

[Technology] Unable to open "librpm.so"? Perhaps rpm-devel is missing.

In Fedora 11, are you getting something like this when using gdb when you're missing some debug info files? 
Unable to open "librpm.so" (librpm.so: cannot open shared object file: No such file or directory), missing debuginfos notifications will not be displayed.
I was, and it meant that gdb couldn't suggest which package I had to debuginfo-install to get the
misisng debug information and symbols.

I did a locate for librpm.so and found librpm.so.0 and friends in /usr/lib.   Guessing that's where librpm.so was supposed to be, I did "yum whatprovides /usr/lib/librpm.so" and that told me rpm-devel-4.7.0, which I then installed.

After that, I ran gdb on the process I wanted to inspect again, and ta-da, I am finally told the name of the package which I need to install to get my debugging symbols.  Copy, paste, yay. 


DJ Aqua

A plugin for Rhythmbox to have Speech Dispatcher announce a track's artist and title before and after play. The code, finally available.


Blogging Theory

I suppose one reason why I don't blog more often is because I'm not too fond of Blogger's post creation interface. I'm not sure why. My complaint used to be its size, but now the text entry box is resizeable. It used to be how often I'd lose work if I didn't manually save drafts, but now it autosaves. It's rather quite nice. I suppose I long for some sort of ideal, common desktop applet like GNOME Blog. Sadly, it's gone unmaintained for a while. It needs to be updated to use Blogger's Atom API. I wrote a patch doing just that once and submitted it, but the product is neglected. Sigh. I'll note that the interface surely isn't the dominant factor in my blogging frequency though.

I think I'm given to making large multi-part posts, and that this is probably bad. I should probably instead make multiple, more focussed posts. Then, people would be less daunted to read any individual post. Hopefully, their amazing frequency helps keep people sufficiently riveted that they'll gladly afford the time and disinterest for particular topics to trudge through the tired terminology.


I used to think more and less about it. I once lived with a good friend with whom it and alternatives could be discussed and debated. I didn't know much about it then, and I don't now, though I know more. Its propositions seem less controversial or questionable now. I don't really wonder about it's plausibility any more: I've had to code simulations of the principles of natural selection, genetic mutation and crossover. I've encountered case studies documenting smaller changes over more visible periods of time. The only thing that I don't expect I'll ever be certain of is whether it's how it all happened. My friend had pointed out at the time an event relayed by a fellow who even came to speak at our University, about a student asking for advice, and the details are gone now, but essentially, while the student thought that perhaps they could avoid explicitly making a decision, they in fact would effectively implicitly make a decision that would be reflected in their daily decisions that require assumptions of how things are. It might have been a story to question agnosticism, but I don't really remember. I still think that not committing to something important but uncertain, even if you have to act as though that something was certain sometimes. Some things are too important to get wrong.

I used to read some popular blogs about evolution and not-evolution and it's really silly. It's as ridiculous as modern politics. Non-physical battles are so ridiculous, I cannot believe we tolerate them. How can we respect people who behave as badly as those who engage in these most ridiculous arguments in government and in science/religion. Presently, though, I am reading a textbook, Evolutionary Analysis by Freeman and Herron. It's quite nice, but they make an effort to defend evolution against alternative theories and this defense feels misplaced. They don't dedicate enough time to properly introduce the alternatives or fully address them. That's alright, because that's certainly not the purpose of the text, but they probably shouldn't try to address controversy that they won't allow themselves enough time for. More importantly, they do spend lots of time on specific case studies, like Grant and Grant's study of medium ground finches on Daphne Major, on HIV, and on bees and flowers. I've only read their first three chapters so far, one of which discusses HIV as a primer, and one of which discusses the theory of evolution, explains it, and occasionally makes mild attempts to justify it.

I don't have a good mind for casual details anymore, it seems. I think I'm just too distracted by "important" things from work and previously school. I don't have time like I did with video games to be as observed. However, information from this textbook seems to be sticking better. So does information from the lectures I attend on campus. I'm quite pleased. I hope that my endeavours to sleep more (enough to wake up naturally on some non-weekend days, even!) are to credit. Anyway, perhaps the next time I get to constructively debate evolution with someone, I'll be better informed and better able to contribute.


I've worked since last May for a company whose product is largely database driven. I left it for a brief time before returning on a contract which will be ending early soon.

One of two reasons include feeling handicapped by the lack of availability of coworkers for work-related tasks (e.g. sometimes I need access to a peer for information on a system, or a business analyst to understand what needs to be done given some development) for which, for half of my day, I have to wait until the next day to do. That's because, while I start at 7-7:30AM NZST, that's in the middle of lunch in Vancouver. There's usually about 3-31/2 hours of overlap when people are back from lunch before they leave in which I can interact, and it often finds me rushing to send of e-mails with questions before my lunch, hoping to catch people before they head out before waiting for tomorrow again. While I almost always have enough work to ensure I can still be busy and productive in the meantime, it means some tasks end up dragging on for far longer than they should (particularly investigation work where I end up with more time-sensitive questions).

It's also stressful a bit trying to ensure that I'm up at 7AM due to the winter season out here and relatively awful climate control in my NZ residence. The story goes that houses were built all over the north island where the climate is tropical, and then the same builders came to the south island and built all the houses the same, despite the fact that it's temperate here. So, sure, it doesn't get as cold as Ontario outside of the house, but it does get as cold inside as it does outside, which is still 3 degrees right now! While I have a portable oil heater in my room, that doesn't help heat the other parts of the house (kitchen, washroom, etc.) I enjoy waking up early in the day, but all the prep work for the day is an early shock to the body, and I've grown use to ... warmth! See my earlier blog entry on it!

The second of the two reasons I'm describing is feeling disconnected and isolated. There's one coworker who's online later than the rest often and who converses with me regularly. He's great and it's fun, but it doesn't prevent me from feeling like a boy who's stuck in a closet and given school work all day to do. I do not think that this is due to the nature of remote work, but that remote work enables it when you don't have a very good culture of interactivity electronically. I feel like if I could be more involved with my coworkers and team on-line, this wouldn't be as much of a problem. If we had effective forums where the administrator actually approved me, if we were all available via instant messenger, or actually used a common chatroom. I don't mean to goof off, either. Sure, there should be some of that, but more liquid communication could help productivity and involvement a lot.

I do hope that my employer doesn't go away from this contract with a negative impression of remote work arrangements. I think they understand some of the issues with the current one well enough not leave with that wrong impression. I hope.

The Brain

So what is a boy to do with his time? Find another job? Nay! say I. Who would hire a visitor for just a year? Someone, perhaps, but that would be such a gamble; I've had a few bad job experiences during my co-ops and I'd like not to repeat them in New Zealand. Instead, a Masters is the object of my eye!

Yes, I had considered getting a masters a while ago, but while in Canada, there wasn't anything that ended up being so compelling, and I was very burnt out of school after my last semester and wanted to escape. However, due to uncertainty of my contract originally, I did investigate options and found a professor here whose work is interesting. I've been attending his lectures, and it appears that he'd be willing to supervise me if I enrol. So, that's what I'm looking forward to now. A single-year research/thesis masters of computer science. It will involve the brain, you see!

I've read a lot of stuff related to the course and the potential Masters topic recently to understand it and whether it's something that I'd like to do. I think it is. The domain itself is exciting and fascinating to me. It's something I felt as though I took some of the wrong courses during my undergraduate to be able to study later on, but I appear to have been mistaken. Give me your basal ganglia now, please.

Employment and Employers

At some point, I want to write about challenges faced at the place where I am most recently working and some facets of employment that I think are important. I'll briefly mention one now though: attention to the development infrastructure and tools internally. It sometimes feels as though the existing infrastructure and the tools are not growing apace with the challenges of a larger code base or with what's available. I think it's useful to have someone specifically tasked (or at least part-time) with identifying all the resistance developers face daily and work to remove or minimise it. Like, improving the product is important, but improving the situation of the developers helps that goal, too.

Clarity, age, and crystals

It's strange, but some ideas have become clearer in my mind over time. I notice a lot of gaps in my memory, but new things are easier to generalise, categorise, manage, understand. Old ideas that were obtuse and always vague in my mind see to crystalise more easily. I'm sure a lot of it has to do with increased experience and a better conceptual framework in which to understand these old and new things. Sadly, there appear to be downsides.

With improved crystalisation and the growth of my interdependent conceptual framework (knowledge), my mind appears to be less malleable, even now, at 25. I wonder whether that puts me at risk for being able to contribute anything particularly novel to the Masters research I now hope to do. I hope that awareness and wariness of this will help me to not fall into traps of stale, stubborn knowledge.

The other downside is the removal of magic from my environment. Natural things in particular are now much easier to understand. I wonder whether someone my age who had avoided science and explanations would still feel a better sense of mystery, or whether it just degrades naturally over time. I've been expending effort recently, looking harder at beautiful scenes to feel their beauty like I feel I once would have. I am heartened that the professor I've mentioned before paused to remark on the glory of a magnolia tree in a courtyard we approached the other day. But then again, the CN Tower wasn't very impressive to me when I was younger, as I had seen greater things in video games, and it wasn't until mid-university that I came to appreciate the sight of it.


Warmth and Humanity

Warmth is a comfort that is by no means guaranteed or natural to always enjoy. I suppose a relatively small fraction of the Earth's total population can rely on a warm home. For some reason, it seems like something I've taken for granted. I'm not sure why, as the home I have grown up in was generally frigid throughout the winter months, often leading me to Do Nothing except huddle in blankets in front of a computer. I assume it was an influence in me doing very little homework at home, or playing so many video games. Yes, activity will help warm you, but moving leads to contact with the cold air, and staying more or less stationary while insulated in blankets helps create a nice pocket of trapped bodily warmth. Delightful!

However, while at university, I was generally blessed with Very Well insulated or heated accommodations (where the utilities were included), or a room so small my computer would leave things toasty. I suppose I became somewhat used to heated comfort. Visiting home, I would start to remark on the cold. My father is well insulated bodily, but I am scrawny and was not. I am sure all my friends have remarked upon it during the winter season. "It's warmer in the snow," some might say. I should have moved into an igloo.

In 2008, I found the cold to be debilitating while living in a basement. The cold, among other dreary basement factors, infringed upon my happiness and comfort in a way not before recognised. Yikes. Now, though, I'm in a room relatively poorly insulated. On a good note, we have an oil heater that we rely on in our room to allow our digits to move. (A few days spent hiding from the world and with fingers that were growing numb quickly eroded my inhibitions against power consumption.) We have yet to see an electricity bill, and it probably will be ugly. However, half of it is covered by the landlord, and the remaining half is split 4 ways. So, 1/8th of the total usage of the house will hopefully be not very bad. Hopefully we're also won't be the greatest contributor to it. At least there's two of us sharing the heat from one heater in here :)

I wonder whether it would be a worthwhile goal to try and establish comfortable conditions for all, as far as warmth goes, and what that would entail. The alternative, adapt to what's natural, makes sense. But if we can all be comfortable and warm, why not?

I'm not sure that we can. Consistent warmth for everyone who is suffers from the cold will probably require a lot of energy. Enough energy to counter the natural elements plaguing people. In severe winters, all the more energy is required. Sure, we can probably generate enough electricity, but will that affect climate? If carbon and other green house gases are produced while generating all that electricity, it would probably put us in a situation worse than we might now be in. Regardless of climate change, there's regular pollution. China apparently has severe issues with pollution resulting from their coal plants. Besides heat from electricity, we can also popularly get it from natural gas and oil. Allegedly, those will eventually be in short supply. At the very least, the price isn't the most stable, and can become very expensive. Finally, how do we get the heat to many people? What about areas where electricity isn't reliable? Will they be reliant on oil or natural gas?

So, here are some considerations to make it more viable:

  • Improve structures' insulation to ensure that they can retain as much of the heat they have.
  • Try to use cleaner forms of energy to prevent pollution and excess carbon.
  • Have smarter systems to help prevent waste. Like, a house that could detect windows left open and close them or notify someone to close them, would be good.
  • Try to provide efficient heating systems that don't rely on power mains, oil, or gas. (Try magic.)

So, be more efficient, minimising waste and by-products while maximising availability. Will this require massive production of new heaters to improve coverage or to replace inefficient systems or improve insulation? Production and the requisite consumption of resources might also be undesirable depending on the availability and renewability of the resources, and the by-products of the production.

I suppose this would be helped by some advances in technology. But, I suppose it doesn't really matter. Climate change and oil availability not withstanding, another key requirement that I think is probably lacking is interest. I don't think there's sufficient interest to try to ensure warmth for everyone who wants it. Right now, it seems like it's mostly up to the individual to try to secure warmth for themselves. Yes, there are government programmes to help the disadvantaged improve their homes insulation and organisations that try to ensure the availability of basic necessities. But until it becomes an almost trivial task, or until someone finally decides that the cost no longer outweights the glory of the achievement, I think general availability of heat, providing it for all people who could otherwise not afford it, will remain a dream, and I'll have to take it less for granted.


#General #Microblog friends #Technology life gnome music google iaido guelph fedora vegan bugs food school #GNOME linux technology #School jodo blogger gxml #Budo #Photos work web nature happy vala firefox android art Flesherton anime internet travel home open source stress kendo kosmokaryote writing animals birthday dad science security canada computers environment future cookies development german language photos programming reading sick sleep snow video winter GUADEC cell phones css fun learning love me movies people phone picasaweb ta time christmas evolution vancouver vegetarianism #Vegan Toronto ai git gsoc identity new zealand society speech vlogbrothers adventure birds communication dreams facebook google+ gseta happiness libgdata netflix night responsibility skedge stars tea tv video games wind mobile Nintendo baking cake consumerism design fedora 17 javascript memories nlp organisation photography quote tablet uoguelph Josh Ritter animalia blogging books bug encryption family humanity magic meaning memory money pidgin rain recipes speechdispatcher sushi weather #Reading Spain TAing The Frames cat chocolate cold cycling death emusic film flight genderguesser gitorious halloween health knowledge languages liv mail new years nightmares politics productivity psychology software swords the legend of zelda ubuntu web development xml xorg youtube Thanksgiving acer bc busy change conversation cooking duolingo emacs fedora 18 galaxy nexus gay rights gmail japan libxml2 martial arts materialism mozilla nerdfighteria nostalgia privacy rhythmbox sound space university upgrade valentines wahoo walking water web design Con-G Europe John Green Scott Pilgrim age animal welfare apple autumn bash blog brain brave breath of fire II calm camera canada day clothing comments confidence conservation creativity culture dance dataloss djaqua duplicity e-mail emotion english errors feminism gdom germany goals google reader gtk humour intelligence japanese laundry law light math morning moving ottawa peterborough pets philosophy pie quality research sei do kai shopping spring style summer value village vday vonage website x11 #Life New York alone anime north anxiety argument backup budo buffy business cats computer science concert copyright data loss diy eating economy education energy exercise failure fedora 19 feelings file systems flowers freedom french friend games gdata greyhound growth habits heat history house html ice cream im information java joy koryu laptop living lost microsoft mood moon muffins mystery news nz pain photo php physics pirates pizza play poverty preupgrade progress purple python rae spoon reality reflection religion rss self serialisation sharing skating social sun synergy tachi uchi testing themes thesis thinking thought thoughts transit turtles veggie challenge velociraptors violin weekend weird yum zellers API Air Canada Empathy Grimes Hank Green Hugo Jane Austen Lord of the Rings Nexus One OCUS Sudbury Trick or Eat arboretum audible autonomous automobiles beauty bike blogs browsers camping cancer canoeing celebration charity chrome cleaning colour community content corporations crafts decay decor depression depth disaster drawing epic equality experience faery fest farmer's market fedora 12 fedora 16 fedora 20 fedora 22 fedup fireworks gender ghetto ghosts glib gnome blog gnome shell google talk green hair hobocore hungry icarus instant messaging interest introspection jobs last exile luks macbook mail-notification mario meat in vitro mind mom moon festival motivation mtp ninjas oh the humanity pagans pants papers past performance perl phones picnics pitivi plastic pride pumpkin pumpkin pie quiet thrill receipts rogers rpm seminar sewing simple simplicity sleep deprivation smells soy milk speech dispatcher sports stories story telling strange streamlines swimming telephone temperature texting thrift stores time management time travel tragedy truth understanding united states urban ecosystems usability usb veganism voice volunteering webschwerver wild wireless working world yojimbo zoology Avatar: The Last Airbender Blassreiter CIS*2750 CIS*6890 Czech Republic Diablo Dresden Codak Dunedin Dutch Blitz Electric Networked Vehicle Elliott Brood Ender's Game France Fringe GNOME 3 HTC Hayao Miyazaki Mario Kart Montréal Network Manager Newfoundland Nintendo Switch Ontario Ouran Host Club Richard SVC Samsung Samurai Champloo Santa Claus Studio Ghibli TCAF US academics adb advertising aeroport algonquin amusing animal agriculture apartment ask automation awkward bad movies banana bats battery beard belladonna beta bicycle book branding breakfast brno bus buses buy nothing day cabin calgary candy cards cars catastrophe celebrate celtic chat cheap cheese childhood china chinese calendar cities clarity clean clock comics compassion compiler computer conspiracy theorists consumption context convention cookie cool cornerstone cosplay cottage country court creation cthulhu cupcakes curiosity cute dancing dark themes dbus definition deja-dup democracy despair detachment dinosaurs discomfort dns dodgeball dragon dress dust dystopia earth earth day efficiency eggs elections email enhanced history ethics evil exhausted expectations exploring ext3 ext4 fail fair trade fall fashion favourite feedly ferry focus formal free friendship fruit fudge full moon furniture gaelic game boards garden gardening gee generosity genetics gimp gir gobject good google hangouts google wave government grading gratitude green roofs groups gsec guerilla gardening haircut hakama help homosexuality honesty howl hp human rights humanitarianism humility hypocrisy ice images imaqua instagram integration intellectual property internet explorer jabber jazz jelly bean jokes kernel keyboard knife labs last exile: fam the silver wing laurena lazy letters library libxml livejournal lizzie bennet loneliness loss lovely lyrics maps maturity meditation melancholy metadata microbes microfinancing microwaves moon cake morality mother music concert muso jikiden eishin ryu myth namespaces nasa nautilus nerdfighter neural networks nintendo 3ds normal normality notes obsolescence oceans open open souce open standards panasonic paper parties patches peanut butter perception personal perspectives philanthropy plants pleasant poem politeness potluck preparation problems ptp pulseaudio quidditch racism recreate redundancy relationships relax repairs resizing richard's room roomba roses rsync running sad sadness salsa samurai sanity scary schwarting seasons self-esteem self-navigating car selinux semiformal senility sensitivity sentimental sheep ships silicon motion sleeping in sms social justice software engineering solitude solutions songs soup speed spelling ssh star wars strangers stupid success sunset surreality survival skills suspense sustainability sweet sympathy symphony tardigrades tasks teaching technical communication and research methods test tests thrift tim tams time and space tired tools tracker tradition tranquillity transience trees trust tumblr twitter update user experience utopia via vihart vlog waffles warmth waste waterloo wave web comic webkit wii wiki winter is coming wizard wonder woods words xmpp yoga youth zoo #Gaming #Wishlist #anime #general 1. is anyone reading this? 1602 1984 2. you win a prize! 2008 2014 24fps 3. gimme a call to collect 404 A Short Hike All My Children Andy Griffith Argentina Armstrong House Avatar: The Legend of Korra BarTab Beach House Boston Boston Summit British Columbia Businesses C CIS*6050 Cambridge Christopher Plummer Claymore Creatures Darker than Black David Attenborough Dear Wendy Docking Station Dollhouse Earthbound England Excalibur FOMO February Fergus Final Fantasy IX Fire Emblem GError GNOME Files GSA Go Google Play Music Hunger Games I am not okay with this I believe in a thing called love I'm a wizard IRC Ikea Ireland JRR Tolkien King Arthur Lost Lagoon MIT Mac OS X Madrid March Massachusetts Matlock McGuinty Melodies of Life Merlin Michael Cera Mother Mother Mr. Tumnus Narnia Neil Gaiman New York Philharmonic Nick and Norah's Infinite Playlist Nintendorks Norns North Korea NotesFromNewYork Olympic OpenShot Orphen Orson Scott Card Oscars PEAP Pauline Johnson Pete Peterson Planet Fedora Porco Rosso Questionable Content R ROM Rent S SIM Wireless Sauble Beach Sega Sega Genesis Selenium Shakespeare She-Ra Snakes and Lattes Splatoon Star Trek Steve Grand Stranger Things ThanksLiving The Darkness The Devil is a Part-Timer The Fifth Estate The Guild The Hobbit The Stand Tianjin Tim Hortons Tolkien UI UK UX VPN Will Grayson Will Grayson Wolves in the Wall WordPerfect Xiki [General] abrt absolutism abuse academia accessibility active activism activity addiction adreama adrift adulthood advertisement air airport express airship ajax al gore alarm clock albums aldiko alice in wonderland alien alistair summerlee amateur amazon ambience ambition amy winfrey anaconda and imperfection angle angry birds anhosting animal cognition animation anon anonymity ant apache apology appearances appreciation aqualab arcade architecture arduino arrogance assassins assignments association analysis astrid asus eee top asynchronous ati attachment attitude attribution audio aural abuse authentication authenticity automake automarker avatars awesome b43 backpain backtrack3 backyard bounty bad bagel bandwidth banjo banks barbarians barefoot baseball bathroom beaches beautiful bed bees beetles being belief bellaqua benedict cumberbatch berlin bertrand russell bill gates biofabrication biology biometrics bit rot bitcoin black and white blame blockbuster bloomberg blue board games bohemian bold bon thé place bonds border boredom botany boxing day boy brain scoop brickworks broadcom broccoli browsing bubbles bubbly buildings bunnies burn bus stops butterflies buttons c# c++ cafe calendaring calligraphy camel camera obscura cameras canadian english canopy capitalism captivity careless caring cast causality cbc cedar row cello censorship certainty cgi chalk challenger changing locks chaos theory charm cherry blossoms chickadee chickens chivalry choir chopsticks chores christchurch christianity chudan church cijf cinnamon classes clif clorox clorox green works cloud cloud atlas clubs cname coca cola codeine codeviz cognition coincidence coins color comfort commons communism competence competition competitive coughing complaints completeness compliments conference configuration conflicted confusion consciousness consent conservatives conservativism console construction constructive criticism contagion contest contributing convenience corpses cough suppressants coughing coupons courageous crashes crates crayons crazy creative commons criminals crisps criticism crosscanada crowd crtc cry crying cryptic cryptozoology csh cuddles cult currency current tv curse customer service customisation cuttlefish cvs daily grind data data mining databases dating david bowie dconf debate debug symbols debugging delicious design patterns desktop desktop summit destiny dftba diet difficult digimon digital receipts disabilities disappointment discordianism discourse discoverability dispute dissection kit distraction diyode dnf doctor who doctors documentation dokuwiki doubt doughnut dpkg drab drano drano prevention dream dreaming drinking drm drowning dryers drying dtwydt ducks dvds dying dynamic typing ease easter easy ebony jewelwing ebooks ecards economics editors eeetop el paso elder neglect electronic receipts elements elitism ellen page embarrassment emily graslie emptiness empty enchant end of enterprising environmental science symposium eog epiphany eplugin equipment essentialism ether euphoria evoaqua experiment experimenting expertise extensions extortion facades faith falafel familiarity fan fancy fantasy fascism faun favicon fears fedora 11 feed me feedback festival fibonacci fiction fiddler crab field guide field identification figment figures of speech file formats finances fire fish fitness fixing flac flash light flesherton fling flexibility flour flow flying fonts footprints forceps forgottotagit fork fortunate fortune found fragaria frameworks fraud fred penner free time freezing french fries fresh friday friend's wedding frog fspot funding funerals funny fury fuse gargoyles gdb geek geeks gf3 gi gifts gio gitlab gjs glass globalnewtgames glory gloves glue gluten gm gmo gnome keyring gnome software gnome-control-center go ninja go go transit goat gods goodbye goodfella's google assistant google books google calendar google chrome google wallet gp2x gqe grad graffiti grammar graphing graphviz grass green beaver grey county groceries growing up gtest gtg guts gvfs gvfs metadata gypsies habit hal halls hard hard drive hard drives hardship hardware harry potter hdtv heart heart break heaven 17 hemlock grove hewlett packard hijinx hiking hoaxes hobbies holidays homelessness homework honey badgers honour horatio hornblower horror hostels hosting hot house of cards hp lovecraft hugs humblebundle humbleness hunting hyperlinking hyrule i am a carpet ibm thinkpad x41 icalendar ice cream sandwich ice rain icthyology ignorant ill image image editing imagination impermanence inadequacy inaturalist inconvenience independence india individuals industry infinity ingrid michaelson inhumanity injuries ink innovation insects installation intel interactivity interlocutor internet tv invertabrates io irish irony isolation it it is indigo james bond java 13 jedi jikiden joke journalism journey judgement julian assange julie thiel justice kata kayak keys ki-ai killme kim taylor kinder kindness kirby kitchen kitzl kiva knights knots kodak koodo kung fu labels landau sacamoto late laundromat led legend lending lenovo lessons letsencrypt letstrace letter writing liberalism liberals libnotify libreoffice librpm lifehacker lilo limericks limits linksys liquid lists live wallpapers livecd liveusb loans local local food local install login london losher lots of hugs mac mini machine learning machine vision madness mae magic school bus magical maintainership majesty malaria malls mantis shrimp marine life marketing marking massages matrices maturation may seminar meat media medicine mel's diner memory leaks mental health meow mercy messaging metacity metaphor methodology mezzo forte micropayments mild mild weather military milk mindhacks minimalism misanthropy miscellany misery misfortune missed the boat missing mlp modelling moisture mold molly parker monitors monologue more cats mosquitoes moss mother's day mounting mouse moxies muffin muffinfilms mundane murder museum mushishi mushroom soup mushrooms musicals mutual funds my slumbering heart mysql nameservers nanowrimo national treasure natural language processing naturalism nausicaa navigating necessity neighbours nervous netgear network new new users newspaper hat next year ninja turtles nodelist nointernet noise noisy nominate non-root norse noses not really dying notebooks notification-daemon novels november fair nuclear war numbers numix obama obligation obliviousness obscure ocz ogg oggenc olap olive omote open formats open music openness openoffice optimisation optimism orcas orchestra oreo oreos org-mode origami oscar otr overheat owen sound package management packagekit packing paint shedding pan pancakes panda parallelism paranoia passport patents patience pattern recognition pdo peace peaceful pen pence pender penguins penmanship perfection pet rocks physical piano pickman's model picnik pidgin plugins pikmin pintsize pipelight pirate festival pizza hut plagiarism planning plans playground playlists plumbing plushies podcast poetry points pokemon polls pomplamoose positions posse post posters postmodernism potatoes potlucks power ppc practise prejudice premier pressure pretty pride and prejudice priorities private processes professionalism progressive web apps projects promise protest proud purchases pwa qt quarantine rad radeon railroad randall munroe raop rats reagan recursion recycling redhat reductionism refactoring refrigerators regret relativism release renew renfrew repetition report resolutions resolve resumes reuse reuters reviews revolution rhino rhps ricola risk road trips roar robots rockwood rot rover rtm ruby day ryu safety sanctuary sand satisfaction savages scary movies scheduling schneier scholarships scooters scp screenshots script seals search secret world of arrietty secrets seitei self-interest self-respect self-sufficiency self-worth semesters senescence sessions setbuilder settlers of catan sftp shame sheepo pistachio sheila patek shell shells sherlock holmes shipping shogun shotwell shoulder bag sigh signal sim city simafort simpsons sincerity singing sjr skill skunks sky slackware slashdot sliver small smartphones smiling snails sneezing snowboarding soccer social dance social media socis soft solemn someonesmotherwantstoadoptme song sony sophistication sorbet sorrow sparklers speed river spell spellchecking spies spilt milk splendid splendor splinter spoilers sponges sql squaresville sr ssd sshd stanley park starry night starving steampunk storage strawberries strength structured information struggle stuff stylus suburi sucks sugar super mario super mario land 3d superiority superstition surprise surprises surreal sushi surrender swings systemd systems tabs tachi uchi no kurai tail coats tameshigiri tarot taxes tears technocracy teddy bears tedtalk term termcap terror the duke the fault in our stars the hulk the human league the irregular at magic high school the onion theatre theory thingsidon'twanttodo tim berners-lee tim mcgraw timber timbre timeliness tin tin toaster todo toilets tolerance tonight toomuch touch screen touchpack tour tourniquet towels toys trac trailer translation travel buddy treestyle view trex triumf triumph trivia trouble tweak twist tx2500 tx2617 typing ugly logos umbrellas un dinaru underwold unemployment universe unlimited blade works updates upgrades uploading urban agriculture urban ecology urchins vagrancy vagrant vague but exciting valadoc validation values vampires vanilla ice variety vegetables velvet burger verb version control vi vinegar violence voip vpnc vulnerable waf wandering wanting war warm wayland weapons web hosting webcomic webcomics webfonts werewolves whales what a wonderful town whatsbetter whic are also lazer powered white spot wifi wii u wikisource will williams wings wisdom wishes wizardry wolf wonderland wordplay world cup world water day writing voice xenophobia xephyr xinput xkcd xpath yahoo yay yyz z-index

Blog Archive