by lazymalevolence at 2010-07-19T20:16:11Z
by lazymalevolence at 2010-07-19T20:16:11Z
by lazymalevolence at 2010-07-15T19:57:35Z
by lazymalevolence at 2010-06-29T13:19:36Z
by lazymalevolence at 2010-06-11T06:51:54Z
by lazymalevolence at 2010-03-08T21:24:25Z
by lazymalevolence at 2010-03-08T21:23:19Z
by lazymalevolence at 2010-03-07T06:41:40Z
by lazymalevolence at 2010-02-24T23:54:35Z
by lazymalevolence at 2010-02-19T04:50:20Z
by lazymalevolence at 2010-02-15T07:53:01Z
by lazymalevolence at 2010-02-15T07:11:35Z
by lazymalevolence at 2010-02-15T07:10:49Z
by lazymalevolence at 2010-02-15T06:52:05Z
by lazymalevolence at 2010-02-10T06:56:27Z
by lazymalevolence at 2010-01-31T20:24:10Z
by lazymalevolence at 2010-01-29T01:38:48Z
by lazymalevolence at 2010-01-28T03:51:09Z
by lazymalevolence at 2010-01-24T07:35:07Z
by lazymalevolence at 2010-01-20T05:31:39Z
by lazymalevolence at 2010-01-12T07:19:30Z
by lazymalevolence at 2010-01-09T06:53:16Z
While going through my backlog of TV shows from the past week, I was watching the Colbert Report from Tuesday (December 1). During his interview with Sherman Alexie, I heard something that sounded rather offensive to my ears. Skip to 3:14 to hear it.
For those of you who hate Flash or don't wish to watch the video, the context here is that Colbert is asking why he doesn't allow his books to be digitized. His response, up to the point which I reference above, was the typical response about how the music industry is losing money because of the rampant piracy, and that the only way to make money is via live shows. And then he makes this statement:
[...]and with the open-source culture on the Internet, the idea of ownership, of artistic ownership goes away.
Mr. Alexie, to use a colloquialism: What have you been smoking? I know that you're BFF with The Stranger, but this is ridiculous. You're supposed to be intelligent, not ignorant. There are a couple of things that are inaccurate with your statement.
First, I'm pretty sure you're referring to the Free culture movement. "Open source", while it can refer to non-technical ideas, is more closely associated with software and its licenses. But I'm being pedantic.
Secondly (and more importantly), where does the idea of ownership go away? Maybe if you release the work into the public domain, sure. However, the majority of "free culture licenses" (e.g., Creative Commons licenses) ensure that one still owns the work that they create. The significant difference between traditional copyright and those licenses is that certain rights are granted by default, instead of having to ask the author about it. For example, this blog post (and the entire blog, for that matter) is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License (as explicitly stated in the sidebar). What this means is that I have granted noncommercial entities to reproduce (or even "remix") my work (in full or in part) in other works, so long as I am credited, and the work retains the same license. Nowhere did I relinquish my ownership of this blog post. If a commercial entity wants to use my work, or someone wants to reproduce/remix my work under a different license, traditional copyright applies and they have to ask (assuming the use doesn't fall under "fair use").
As one of the literate (see the interview for the reference) and also a dead-tree book lover, I suggest that you read two books, both by Professor Lawrence Lessig: Free Culture and Remix: Making Art and Commerce Thrive in the Hybrid Economy. Both should be available at your local bookstore.
Finally, thank you, Mr. Alexie, for reminding me that I still need to donate to the Creative Commons this year. I want to spread the Free culture movement as quickly as possible, making sure that the views that you expressed are corrected just as quickly.
by Mark at 2009-12-05T06:22:02Z
by lazymalevolence at 2009-11-10T02:26:07Z
by lazymalevolence at 2009-10-30T20:23:14Z
by lazymalevolence at 2009-10-14T05:49:12Z
Weirdness which I can now attribute to "PHP Library Hell" (similar to DLL hell) had caused the full text of posts for most of the feeds to not be syndicated in the planet feed for several weeks. This is now fixed. (I had to upgrade to Wordpress 2.8 for the actual error to appear and a solution to be presented, it seems.) I apologize for the inconvenience.
by Mark at 2009-06-27T08:07:11Z
I've been a bit quiet about Awn in my blog. This is partially because I've been working on two major areas: libdesktop-agnostic and Vala/GObject Introspection (as explained in my previous post, On Bindings).
Since my work on libdesktop-agnostic is directly related to Awn, I'll address it here (even though it may be boring to most of you). I currently have abstractions for configuration, desktop entries, and virtual file systems (e.g., GIO). The area that needs the most work currently is the configuration support. What will ultimately happen is that there will be a class which lets you have per-instance configuration for a given app(let), regardless of the backend that is being used. What this means is that Awn users won't be shackled to using GConf if they want a stable dock. Plus, if a user wants to switch backends for some bizarre reason, they don't have to recompile Awn to do so. Obviously, they'd have to migrate the settings themselves, but that's the price one pays.
Anyway, on to Awn. Here's a screencast I took (CC-BY-SA 3.0 licenced!) of a development version of Awn in an Ubuntu Jaunty virtual machine (hooray for VirtualBox!):
(Direct link to YouTube video)
The bar colors are kind of ugly, mostly because I was testing some of the color-related code on that VM.
Obviously, the features shown in the video (orientation, panel style, and applet loading indicator) aren't the only new features in 0.4. I'll be showing off more shininess in successive videos.
Moonbeam has covered most of the current status of Awn 0.4, which I will repeat here, briefly, for those of you who are scared of clicking on links:
I'd like to take a moment to talk about the Awn plugin system, particularly to those who actually write the plugins. The D-Bus plugin API that was in 0.2.x and 0.3.x will be deprecated in the 0.4 series, and removed in the 0.6 series. There will be a new API in the 0.4 series.
With regards to what I'm working on - in addition to libdesktop-agnostic integration, I will most likely be working on implementing the D-Bus plugin API, once Moonbeam is done with the API mentioned above.
On the Awn Extras front, I have the Garbage applet waiting to be added. This is waiting on Vala support being re-activated (which is dependant upon adding GObject Introspection support to Awn), and porting the applet to the 0.4 API. There is also an rTorrent frontend and a social aggregator applet that I have on the backburner (both written in Vala), which may or may not make it into 0.4.0.
And finally, a note for Ubuntu users: we are not making available PPA builds of 0.4 until there are no feature regressions in the rewrite. This release is targeted for the official Karmic Koala repositories, just as 0.3.2 was targeted for the Jaunty Jackalope repositories. We anticipate building packages for Hardy and above.
Remember, the best way to keep track of new developments in Awn/Awn Extras is to subscribe to Planet Awn. Be with us next time for "Autohide and Seek", or "The Incredible Shrinking Dock"!
by Mark at 2009-06-03T20:31:31Z
Over the past couple of days, I've implemented a private URI shortener service for myself, which I have named "Rshrtnr". The derivation of the name is left as an exercise for the reader.
My main motivation for writing it was a criticism of public URI shortening services that I have been seeing in blogs for a long time: if the service has some downtime or suddenly disappears, all of the links that you have created with it are useless. With my approach, I regain some control of where my shortened links point to, and if the service has downtime and/or disappears, I have more options for restoring it.
The code itself is written in Python. SLOCCount says that the core module runs at around 100 SLOC. Most of my time, however, was taken up by working around problems relating to my webhost's Python installation. The supported Python version is 2.4.x, which is ridiculously old (for reference, Gentoo was the last major Linux distribution to switch from Python 2.4 to 2.5, around July 2008). Additionally, for some reason, if I attempt to change the sys.path variable (i.e., the "include path") to use locally installed modules (I am on a shared host), the entire script breaks with zero logged messages anywhere. It runs fine via the command line, but in FastCGI mode, the strangeness occurs.
The two third-party modules that I used were Paste and mysql-python. I store the URIs and their associated aliases in a simple SQL table, and I use Paste for various WSGI/HTTP-related utilities. I "manually" handle routing via parsing the PATH_INFO environment variable.
There are two ways to specify an alias: either explicitly send a custom one as a query parameter with the URI, or let the app make a random one for you. With the latter behavior, it hashes the URI to generate an eight character "unique" alias. Since there are (in theory) 64^8 possibilities, I don't think I'll run out of aliases any time soon, especially since custom aliases can be anywhere from 1 to 15 characters long.
In my opinion, the most interesting feature is that adding URIs requires one to send an OpenPGP-encoded query string, which needs a public key recognized by the app for the operation to succeed. To write this, I simply parsed the output from sending the OpenPGP message to the gpg binary.
Finally, mod_rewrite magic is used to prettify the shortened URIs. Nothing too exciting about that part.
I had thought about hosting a version of Rshrtnr on Google App Engine, but a key component is missing - OpenPGP support.
If anyone wants me to release it, please comment below. There's currently a bunch of webhost-specific things that I would need to abstract out before I release the code to the general public, and unless someone gives me a very good reason, it will be licensed under the AGPL version 3.
by Mark at 2009-05-15T07:38:26Z
One of the more interesting areas in software development, to me at least, is language bindings. Being able to interface with a library written in one language in another language is kind of satisfying, as it allows me to develop without having to reinvent the wheel. There are two specific projects that I use and work on so that I can enhance the software that I develop: GObject Introspection (G-I) and python-spidermonkey.
As a quick overview, the goal of this project is to give C libraries the tools
to provide enough metadata about their API so that bindings can be written with
minimal effort. Given the time and effort that I have put into maintaining the
Awn bindings, it is not very surprising that I would be willing to help out
getting this framework working for Awn. My ultimate goal is to eliminate the
bindings/python folder in the Awn source tree. It is basically a mixture of
a Scheme definition file plus a very bizarrely formatted "override" file for
custom definitions, all integrated into autotools to produce a C library that is
ready to be dynamically loaded into python via import. To meet this goal, I
am contributing to the PyBank project, which is a prototype Python module
that interfaces with the GObject Introspection library to read compiled library
metadata files (called "typelibs") on the fly so that classes, functions, etc.
can be loaded and called at runtime. In addition to myself, a Google Summer of
Code student and a Sugar Labs developer are also working on the module, with
Johan Dahlin overseeing it all. So far, I've contributed a unit test suite,
ported from the gjs project (JavaScript bindings for GLib-based libraries based
on the Spidermonkey VM) and working type bindings for various simple types
(e.g., int64 and float).
I have also put some coding effort toward G-I integration in Vala. Vala supports G-I by both reading GIR files (the XML serialization of G-I metadata) to produce VAPI files (short for Vala API files), and writing GIR files when producing a library written in Vala (e.g., libdesktop-agnostic). I have contributed mostly what amounts to workarounds in the GIR reading code, with regards to Vala/G-I behavioral inconsistencies. Didier 'Ptitjes' has done much, much more solid work than I have on both fronts, which I greatly appreciate.
This project, as the README states, lets you [execute] arbitrary JavaScript
code from Python[, and allows] you to reference arbitrary Python objects and
functions in the JavaScript VM
. As I've stated in an earlier blog post, I
use this in my custom website build system to both validate and pack my
JavaScript code, via JSLint and Packer, respectively. Since I published
that post almost two years ago, that project was revived twice - once by a
Mozilla employee (and co-founder of Humanized, which is quite awesome) named
Atul Varma, and the latest incarnation is on github. Since it is based on the
original implementation in C, and not the Python-based ctypes version, the Base2
recursion problem does not exist, and so I have happily written modules and
scripts which wrap the two JavaScript utilities. Recently, I have made them
available in a public project on Launchpad called python-jsutils. I haven't
really announced it until now because it currently relies on a change I made to
python-spidermonkey which allows one to iterate over a JavaScript array, instead
of having to write "unpythonic" code like for x in range(0, len(foo)): #....
While it is in my fork, it has not been merged to the "official" repository.
by Mark at 2009-05-07T09:13:53Z
I need something to get myself blogging again, so I figured that I should write about how my website is written. I'm going to start with one of the parts written in JavaScript: the Tag module. It's comprised of a simple JavaScript object with static methods and properties, no instances. Its main purpose is to create (X)HTML nodes for use in what used to be known as "dynamic" HTML. Incidentally, it's also part of my "old projects" series: I originally created it for an Intel-sponsored research project that I was working on during my time in university. (For more details on the project, please see my curriculum vitae.)
In practice, calls using Tag.create() don't look too horrible. Consider the
example of building a minimal HTML5 document:
var html = Tag.create('html', {children: [
Tag.create('head', {children: Tag.create('title')),
Tag.create('body')
]});
Or, a data table:
var table = Tag.create('table', {
attributes: {summary: 'MLS Statistics'},
classes: ['sortable', 'centered'], // uses sorttable
styles: {border: '1px red inset'}, // use CSS style names, not JS ones
children: [
Tag.create('thead', {children: Tag.create('tr', {
// text is automatically converted
Tag.create('th', {children: 'Team'}),
Tag.create('th', {children: 'Goals For'}),
Tag.create('th', {children: 'Goals Against'})
})}),
Tag.create('tbody', {children: [
Tag.create('tr', {
Tag.create('tbody', {children: [
Tag.create('tr', {
classes: ['west-coast', 'usa'],
children: [
Tag.create('td', {children: 'Seattle Sounders FC'}),
Tag.create('td', {children: '9'}),
Tag.create('td', {children: '3'})
]
}),
// add more teams here...
])
]
});
I recently modified the function so that it deserializes an object (originally a JSON string) into a DOM node tree. This is particularly useful when you're sending partial HTML documents as JSON strings (which I prefer to sending HTML strings and dealing with that mess). So, the first example would look like this:
var html = Tag.create({
"name": "html",
"children": [
{
"name": "head",
"children": {"name": "title"}
},
{"name": "body"}
]
});
Interestingly enough, I created this without the knowledge of the existence of JSONML or any of its bretheren, although I suspected that JSON-HTML converters already existed.
Three of the functions in the module are basically wrapper functions.
Tag.createWithText() creates an HTML element with a text child node, and
Tag.createHeader() creates an HTML header element (e.g., <h1>...</h1>)
with a text child node. Tag.text() is shorthand for the DOM's
document.createTextNode() method.
In the current iteration, nearly all of the event-related code is commented out,
as there are far more competent JavaScript libraries out there which deal with
cross-browser events. The only event-related function left is
Tag.dispatchEvent(), which sends a "synthetic" event for a given HTML
element. If I remember correctly, I coded for both the W3C and Microsoft models,
but I don't remember testing it on browsers other than IE6/7 and Firefox 2.
At some point, I'll probably reintegrate event support to Tag.create() at
minimum, using Base2.
The remaining function is a utility function. Tag.inXHTML() determines
whether the document in question is in XHTML mode, using a variety of
heuristics. I'm sure there's a better way of doing it, but I couldn't find one
when I was researching it.
This module has been tested in IE6/7, Firefox 1.5/2/3, Safari 2/3, and Opera 9.5 - although not all in the same time periods. It's licensed under the Apache Licence (version 2.0) and is currently somewhere in my compressed JavaScript file. If there's any interest, I'll put up the non-compressed version somewhere and update this post.
by Mark at 2009-04-26T05:45:24Z
I mentioned on Twitter that I wanted to blog about some old projects. The first one is more than a year old, but it still may be useful to someone.
Back during college, I was implementing a file sharing client with Twisted - the GUI was first written using wxPython, and then rewritten in PyGTK (the reasons for the rewrite I can expound upon later, if anyone wants to know). It's not publicly released, mostly because it never got past being a chat client. Anyway, a part of the file sharing protocol involved tiger tree hashes to verify the data as it was downloaded. I couldn't find an implementation in Python (and attempts to write it myself failed), so I found some C source code and manually bound it to Python (via its C extension API). This was my first exposure to extending Python via C — I later used some of this knowledge to fix up the Python bindings for Awn.
The Python part is licensed under the Apache License v2, the tiger (tree) code is public domain-ish. (see COPYING for details)
The code can (as of the publication date) be found in a junk bzr branch on Launchpad. If you wish to continue work on it, I can move it to a full-fledged project — just contact me about it via the comments.
Edit (2009/03/24): Due to interest in the code, I've created a project for pytiger at Launchpad.
by Mark at 2009-03-25T01:34:28Z
Benjamin Otte recently wrote about desktop-web integration in the GNOME desktop. It's kind of interesting that he calls himself "not web enabled", given that he's the main developer of the swfdec library and associated applications. I agree with most of what he wrote, but there are a few comments I would like to make.
Benjamin asks:
Why does dconf (or GConf) not store my settings in the cloud so it uses the same settings on my university login?
As I understand it, this is one of the features of Conduit. There's a bug in Awn regarding config synchronization via Conduit. I'm probably going to look into how that works when I resume work on the config interface for libdesktop-agnostic.
There is an erroneous statement in his post:
We don't even have a http library that knows cookies.
libsoup has had (non-persistent) cookie support since 2.23.1, and persistent support will be in 2.26.0.
And then there's the main point:
[GNOME is] doing a very bad job at integrating the web into the desktop. Apart from epiphany (and the weather applet), what application does GNOME ship that speak http?
I believe there are two main reasons for this: One is GNOME developers are not "web-enabled". [...] The other, related reason is that we don't have the software to do this.
In Awn-land, we have several web-enabled applets:
In particular, webapplet is a work in progress framework, which will allow what is essentially an applet version of Mozilla Prism. It currently uses WebKit as the backend, although there is also a Gecko-based backend planned. The rest of the applets listed are written in Python. In particular, the digg, meebo, pandora, and rtm applets use the gtkmozembed Python bindings to view the respective websites. Here lies one of the problems of the web-enabling the GNOME platform. This library is acknowledged to be less than ideal. If you look at the source code of the applets, you'll see that there are some ugly hacks in order to make them work properly on Ubuntu systems. Webapplet is slated to replace that ugliness.
One of my side projects is a status aggregator applet. It's supposed to aggregate all of these social networking status feeds and also to sync all of your personal statuses. One of said social networking websites returns complex, site-specific HTML that obviously needs to be sanitized/canonicalized. The easiest (but not necessarily most memory-efficient) method of performing that task is to use the DOM. There is not currently a DOM library for the GNOME platform. There is a libgdom3 project (written in Vala) which I believe is being / will be used by the gnome2-globalmenu project, but it is unfinished. There is also an old, unmaintained library called gdome2 based on libxml2. I'm not even sure if anyone actually uses that library anymore (its last release was in 2003). I avoided using gtkmozembed and friends based on the experiences described above. I settled on a promising feature request for WebKit: a GObject/C DOM binding. (As an aside, the WebKit bug linked is a fascinating case study on several levels: conflicting coding standards, conflicting developer personalities, and some interesting coding/reviewing.) It's very nice - I can manipulate document fragments as if I were using JavaScript in a web page, among other things. I eagerly await that feature being committed to WebKit trunk.It is an important stepping stone when it comes to working with the web.
Another side project that I'm currently working on is a developer dashboard applet. It's kind of like the previous applet, except as applied to software projects. I was originally going to write it in Vala, which meant that I would have to write an interface to (at least) the Launchpad API, which meant implementing at least three specifications in Vala: OAuth, URI templates, and WADL. I finished the first two (I haven't yet decided whether to release my URI templates implementation as a separate library - the implementation plus the test app is 451 source lines of code), and WADL is a very complex specification. So, I decided to postpone working on the WADL library and instead am currently working on a prototype applet using Python and launchpadlib. Implementations for those three specifications and many others (including AtomPub) should be included in the GNOME platform if it wants to be web-enabled.
by Mark at 2009-02-23T06:59:10Z
Mike Rooney (Awn Extras developer, among other things) posted an article on this "webhooks" idea. As I understand it, it's essentially a customizable, web-based version of the "Subscribe to future XYZ via email" features (e.g., blog comments) that are currently around. The key phrase in this sort of thinking is "push technology". Mike asks:
So will webhooks replace the current paradigm that I'm using here, or complement it?
I believe that it will complement the current paradigm. We need to have a transitional period (à la the old, rigid deadline for the US digital television transition) between the current "polling" techniques and the "new and shiny" (and arguably bandwidth-saving) push techniques. Take, for example, Twitter [1]. Let's assume that they didn't shut down their XMPP service, and they built upon it an (XML-based) API so that a client (for the purposes of this thought experiment, let's say my currently-in-vaporware Status Aggregator Awn applet) could connect to a specific JID (AKA user name + domain + "resource", or specific client) and listen for any new tweets, responses to my tweets, etc., replacing those messy timeout callbacks with messy async socket callbacks. The main benefit that I see is a savings in bandwidth for both the consumer and the producer. It avoids sending network requests every X minutes, which would add up, given the number of services/feeds that a user subscribes to (including mail). This actually leads me to my answer to Mike's other question:
Are webhooks the next step of this evolution, or something else entirely?
As evidenced by my thought experiment, I'd like to see XMPP as the next step, or at minimum, the step after webhooks. While I love HTTP, and am a big fan of the whole REST concept, it's hard for me to see it used as a facilitator for pushing data, as opposed to pulling it. In fact, given the way that ETags and the like are designed, HTTP is inherently a pull technology. The Comet model feels like a big kludge to me for that reason. XMPP, on the other hand, is designed to be a push technology, and its supporters are actively marketing it as such. It's also scalable, as servers like ejabberd and services like Google Talk can attest. I suppose the bottleneck here is a catch-22: you need both services and apps to buy into this particular implementation. Maybe when I finish one of the myriad projects I have going at once, I'll take a crack at adding a push-based web service client. Ideally, for configuration, all a user would have to do is set their app-specific JID (e.g. foo@example.com/bar_app) in both the web app and the client app, and it would "just work" (well, you would also have to set the JID password somehow as well, but that's beside the point).
Update (2009/02/18): It seems that I was subconsciously channelling a presentation on XMPP PubSub that I read over six months ago.
| [1] | I'm focusing on the one I actually use. Yes, I should be using identi.ca, since I am a supporter of free and open services/protocols. It even has the hallowed XMPP interface to microblogging. One of these days, I'll do what all the cool kids™ are doing and post to both. It'll probably happen when I (continue) work on the vaporware [2] mentioned above. |
| [2] | It's vaporware until I push the source code onto a public server. |
by Mark at 2009-02-18T20:47:21Z
For the past week or so, I've been working on various web services-related libraries, in the hopes of writing some sort of Launchpad dashboard applet for Awn. I think it would be nice to have new/recently changed bugs in Awn/Awn Extras at a glance in the dock, among other things. The first somewhat complete component is an OAuth client library. I finished the initial implementation (plaintext signature only) in under nine hours, and after the Awn 0.3.2 release (and a bit of frustration), I added HMAC-SHA1 signature support with the help of RFCs 2104 and 2202 (using GLib's checksum API). I've tested it with both the OAuth example Python server and the Launchpad API.
Also included in the source are two small test programs: one tests the HMAC-SHA1 implementation, and the other tests the OAuth implementation in its entirety. The latter uses .ini-style config files to define keys/secrets/URIs/etc. for a service.
There are a few things that still need to be done, in order for it to be a "complete" implementation. I probably want to replace my handwritten HMAC-SHA1 implementation with a libgcrypt-based one (although I'd have to figure out how to create bindings for Vala), which would also enable me to add RSA-SHA1 signature support. Additionally, I should probably add an asynchronous equivalent to the current synchronous API. Finally, it would be nice if it integrated better with libsoup's existing authentication structure. Currently, I just generate an Authorization: header to be manually added.
The next component I'm working on is a WADL dispatcher library. I don't like the idea of a library generating code (as I presume wadl2java does). We'll see how this turns out.
by Mark at 2009-02-16T07:12:30Z
For those of you who don't know what a postmortem is in this context, it's essentially a reflection of what happened in this release: what went right, what went wrong, and what we'll try to do next time.
Before I begin, a lot of the history is from memory, so the facts may not be 100% correct.
Back around July 2008 or so, we essentially had two branches: stable/bugfix-only (0.2.7) and trunk (0.3.1). A few developers wanted to release from the bugfix branch for the sake of the distributions, but since work was well on its way in trunk, there were not many volunteers to lead the effort. I volunteered to do so, and began merging bugfixes to the stable branch, with the goal of releasing by around the end of August.
Unfortunately, there were three big roadblocks in my way: the infamous make distcheck, Bug 194018 (an intermittent problem with launching launchers on docks not built with GNOME libraries, and Bug 194431, "the trash bug".
For developers, I would guess that one of the most annoying things about releases is the dreaded make distcheck command. This command makes sure that if you run make dist to generate a tarball, that it compiles correctly out-of-the-box. It took what felt like dozens of iterations to make sure that certain files were in the tarball, ready to be installed by the build system. But the most annoying part of the process was the part dealing with internationalization (i18n). I18n is handled by the intltool/gettext packages in Awn, and they expect files to be "just so", or else make distcheck fails with a semi-comprehensible error. With some help from Qball, I managed to more-or-less get the trees into a releasable state.
The desktop-agnostic launcher bug was a pain to debug, as all it did was spit out a cryptic error message to the console instead of launch the application, and this only occurred with some launchers (varying between machines). Fortunately, moonbeam managed to write a fix for it in early August.
The trash bug was more complex in its own way. In GNOME 2.22, GNOME switched virtual file system (VFS) libraries from GNOME VFS to the more desktop agnostic GIO (part of GLib). Part of this conversion was that the trash directory changed from $HOME/.Trash to the more complex Freedesktop.org standard of $XDG_DATA_HOME/Trash. In comparison to the old trash directory, which was just an intermediary directory prior to "permanent" deletion, the new standard added a trash metadata directory (e.g. for the "restore this file" feature). Now, the trash applet did not have a maintainer. As I understand it, Neil ported it from the GNOME applets package as one of the proof-of-concept Awn applets. By this time, Neil was (and still currently is) very busy with his awesome (but unrelated) work at Canonical. Thinking that this was a desktop-agnostic issue, I decided to take the bug. My first attempt, merging in the new trash implementation from GNOME applets, failed badly. My next move was to rewrite the entire thing in Vala. My reasons for doing this were twofold: I wanted to work on my skills in C#-like languages, and I wanted the applet to be a bit more readable/maintainable for the next person who would take up maintainership. Unfortunately, it took way to long to write (through no fault of Vala's). The main problem was that the algorithm to determine the number of files in the trash (an important part of the original applet) is ridiculously complex in non-GIO libraries. This is due to the fact that multiple volumes can have trash cans. By the time I figured out about half of it, it was the end of August. Given the number of people subscribed to the bug and commenting on it, plus the comments I saw on the forum, this was a showstopper bug. I couldn't very well release without it in there, so the deadline came and went, and there was no update to Awn in the fall Linux distribution release.
I should note that there will be a happy ending to this bug - last month, I managed to get trash support into libdesktop-agnostic, and as soon as I convert Awn to use libdesktop-agnostic, I will commit the Garbage applet.
Fast forward to last month (January). One of the core developers (mhr3) suggested that we do a snapshot release of trunk, since work on the rewrite was well underway. Somewhat surprising to me, more developers agreed to help with this release. This time, mhr3 was release manager (for obvious reasons). For the rest of the month and the first week of February, bugfixes were committed to the trunk branches of Awn and Awn Extras. There were also some features added (I admit that I added at least one of them), but the most notable one was the merging of the AWNLib 2.0 branch. I'll get back to that shortly. People were testing applets and noting their functionality on a wiki page, which helped with finding bugs.
By around February 6th, preparations were underway for the actual release. mhr3 and gilir were busy making sure that make distcheck worked for both Awn and Awn Extras, and I was working on the release notes. DBO, a developer for GNOME Do/Docky, suggested that we put some effort into doing a little marketing, like they did with their recent 0.8 release. So, I started a wiki page with a list of volunteers who would post to various news/forum websites.
The day of release was interesting. Throughout, various people (including myself) were in and out of the IRC channel doing stuff In Real Life. I managed to finish the release notes (and get screenshots) with the help of the folks in the channel, and gilir stayed up way past midnight local time to sign and upload both the source tarball and the PPA packages. As soon as mhr3 gave the go-ahead signal, the release announcements were sent to their respective news sites. I filed bugs in Gentoo for version bumps for both packages, to head off any overzealous Gentoo + Awn users. I also notified the Mandriva packager of the release, since I had his contact info handy. A few hours later, I remembered that I had an OSNews account (for commenting on some article which was probably tangentially related to Awn) and decided to submit an article. In the morning, I was informed via IRC (on a non-Awn channel, no less) of its publication, with a surprising addition: a mini-review by one of the site's editors, which was positive.
As of publication, my blog post announcing Awn/Awn Extras 0.3.2 has received almost 5,500 pageviews (see screenshot). To put numbers on the data points in the graph:
We should have reverted the AWNLib 2.0 branch merge. It caused more problems than it solved: it was inevitable that applets would break, and that at least one API change would be missed before release, especially given the amount of time between the merge and the release.
Coordinating the news/forum releases went OK, but we ended up having two Digg links, which probably spread out the total number of diggs, thereby lowering the chance that it would hit the Digg front page.
I was naïve enough to think that Debian/Ubuntu users wouldn't immediately file version bump bugs as some Gentoo users are prone to do. I was wrong.
Additionally, too many Ubuntu users did not read that we already provide binaries for Feisty through Jaunty (inclusive) - they seem to want to install from source, which we do not recommend (unless they plan on doing development).
The release coordination in the channel went fairly smoothly, especially given that we were all in different time zones.
Posting to OSNews was definitely a good thing. As you can see from the screenshot, it was the highest referrer to the post.
It was nice that someone not associated with the project posted to reddit - it was the second highest referrer. It was posted two days after the release, but beggars can't be choosers.
by Mark at 2009-02-13T19:47:34Z
The Avant Window Navigator (Awn) and Awn Extras teams would like to announce the release of version 0.3.2. This represents a year's worth of bugfixes, performance improvements, and new applets. Note that the 0.2.8 release was cancelled, due to lack of developer interest. Our next major release, 0.4.0, will be a complete rewrite of the dock and applet API.
Avant Window Navigator is a dock for the Free Desktop which shows your launchers and open applications. It also contains support for extensions, via plugins for third-party applications, which communicate with the dock with DBus, and via applets, which allows for workspace switchers, system trays, clocks, etc., to be embedded in the dock. These applets can be written in C, Vala, or Python.
Awn currently requires compositing support in order to run. Window managers which support compositing include (but are not limited to) Metacity (part of GNOME), Xfwm4 (part of Xfce), KWin (part of KDE4.x), and Compiz. There are also standalone compositing managers, for window managers without support built-in: Cairo Compositing Manager and xcompmgr.
Awn Extras is a catch-all project which houses mainly third-party applets for use with Avant Window Navigator.
![Licensed under the WTFPL [Awn screenshot, courtesy of mhr3]](http://img7.imageshack.us/img7/9707/screenshot1pn1.png)
![Licensed under the WTFPL [Awn screenshot by h4writer]](http://img140.imageshack.us/img140/3125/schermafdruk1ki6.png)
![Licensed under the CC-3.0-BY-SA-Unported [Awn screenshot by onox]](http://img7.imageshack.us/img7/6954/sexyawn032kc8.png)
These will probably be fixed in 0.4.0.
![Licensed under the WTFPL [Awn screenshot, courtesy of mrooney]](http://img5.imageshack.us/img5/3416/screenshotjq2.png)
![Licensed under the WTFPL [Awn screenshot by triggerhapp]](http://img9.imageshack.us/img9/1479/awnssjauntyvh2.png)
![Licensed under the WTFPL [Awn screenshot by h4writer]](http://img3.imageshack.us/img3/3959/schermafdruk4rn5.png)
![Licensed under the CC-3.0-BY-SA-Unported [Awn screenshot by moonbeam]](http://bayimg.com/image/manhnaabh.jpg)
Semi-official Ubuntu packages for various Ubuntu versions will be available at the Awn Core PPA. We are working with various distributions (Mandriva, Gentoo, Debian, Ubuntu) to update their packages. You can download the source code at Launchpad (Awn Extras) - instructions on how to install from source are at our wiki (Awn Extras).
by Mark at 2009-02-09T02:57:16Z
Yes, there is an Awn rewrite in progress. Here are the important parts (to me, anyway):
I am not going to list the wishlist items, because nothing is certain to make it into the rewrite unless someone actually codes it in.
The priority at the moment is to get the taskmanager in working shape. That's not really my line of expertise, so my priority is to get libdesktop-agnostic ready to replace my second attempt at a non-GNOME-specific dock. Of course, all of this is contingent upon the amount of time the developers have available. It seems at this point in time, we are either consumed with (paid) workloads, schoolwork/exams, or both. (I currently fall in the first category.) So, as I say over and over, there's no timeline for when this will all be done. It will probably be ready for release when Neil says it is.
Given that this is pretty much a complete rewrite, we (the developers) are not yet comfortable building binary packages for it. If you want to test it, you're going to have to build it from source. Please pay attention to the entire build process (the "development" track) if you have not done this before. The branch information is on Launchpad.
Update: mhr3 has kindly supplied a screenshot (licensed under the WTFPL). This showcases the right-oriented dock, plus the action that happens when an applet crashes. No more white lines!
![[Screenshot of Awn rewrite, courtesy of mhr3]](http://lh3.ggpht.com/_-LcS-OEM6Fg/SXE3EPJNMPI/AAAAAAAAAAM/bIam-j4BtU0/awn-rewrite-screenshot.png)
by Mark at 2009-01-17T01:48:06Z
There seems to be something inherently wrong with how PEAR is packaged in Debian/Ubuntu (hence referred to as Debian, since Ubuntu doesn't modify the php5 source package with regards to PEAR). A bit of background: I'm currently trying to update the PHPUnit package to the current version (the Debian version seems to be stuck at 3.2.x — 3.3.9 was released the day this was written). I'm (re-)running dh-make-php to accomplish this, mostly because there doesn't appear to be a very obvious way of upgrading PEAR packaging for Debian (given package.xml, etc.). The problem is that PEAR is bundled with PHP on Debian, courtesy of the php-pear package. The one on Ubuntu's Hardy Heron is stuck at 1.6.1, whereas the current version (again, as of the day this was written) is 1.7.2. I can't use dh-make-pear to package the latest PHPUnit because the package.xml file requires PEAR 1.7.1 to parse it.
Now, Ubuntu's community documentation for PEAR recommends upgrading PEAR via the pear command. That seems counterproductive to me. Given that pear, by default, installs to the same location as the package, I presume that PEAR and any other "pre-installed" package that was pear-upgraded would be reverted, in particular if there's a security release. This makes the sysadmin's job harder, obviously. I can't seem to find any rationale for this packaging behavior (admittedly, I didn't look very hard). But other distros get it right - Gentoo definitely packages the non-bundled PEAR versions, and from a cursory search, it appears that Fedora does as well.
So, what's my solution (for now)? Backport the latest stable PEAR into the php5 source package.
by Mark at 2009-01-03T06:19:09Z
According to Blogger, this is going to be post #100. I have no idea if that counts the various dead drafts in my queue or not.
Anyway, if you've been following my Twitter stream, you'll know that I've been playing with Pylons, and by extension, WSGI. One of the things that I'm interested in is OpenID-only authentication, mostly because I hate having to create new account names/passwords everywhere, and I'm too lazy/paranoid to use one of those password management extensions. After several attempts, here is a short Python script which runs a sample web app that requires OpenID authentication for the /private path (via the AuthKit middleware). The OpenID URL that was used to sign in is stored in the environ['REMOTE_USER'] variable. It was tested with AuthKit 0.4.2, Beaker 1.0.3, and Paste 1.7.2.
#!/usr/bin/env python
#
# Copyright (C) 2008 Mark Lee
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# For a copy of the GNU General Public License, see
# <http://www.gnu.org/licenses/>.
import os
from beaker.middleware import SessionMiddleware
from paste.auth.auth_tkt import AuthTKTMiddleware
from authkit.authenticate import middleware, sample_app
from paste.httpserver import serve
app = middleware(sample_app,
enable=True,
setup_method='openid',
openid_store_type='file',
openid_store_config=os.getcwd(),
openid_path_signedin='/private')
app = AuthTKTMiddleware(SessionMiddleware(app),
'some auth ticket secret');
serve(app) # opens a socket at localhost:8080
by Mark at 2008-11-24T07:29:12Z
Should I choose RSS or Atom?
Who cares? I don’t. I bet if I asked everyone I had contact info for, only a few would prefer one or the other (though hopefully one in particular).
I've got a preference — Atom. This is mostly because of the fact that's it's one de jure standard, as opposed to the at least five de facto RSS standards.
More to the point, I agree with the underlying argument:
And that being so, it makes no sense to put both standards (if not different versions of each) in the auto-discovery tags, especially for big sites like Flickr and consumer blogging software like WordPress. [...] For the rest of us, our feed readers could care less. So please stop confusing us.
Sadly, I also know the history behind this. Back in the "bad old days", feed readers did not follow the robustness principle. So, websites had to deploy a sort of "inverse robustness principle", to make sure that as many feed consumers as possible could read the content. The good news is that today, any decent feed reader can read most feed formats. The bad news is that no one (or not enough people) have bugged the feed producers (e.g., Flickr) into fixing it. The solution? File a bug and remind them of Postel's law. Of course, only file said bug if no one else has already done so — we don't need to annoy the developers.
by Mark at 2008-10-28T03:45:37Z
Source code management, or version/revision control, is one of the most useful tools that a developer has, especially if this person works with others on a shared code base. However, I've recently realized that some people don't understand what a good "commit"[1] entails. (I'm not naming them, or whether they come from my professional or hobby "spheres of influence".) It doesn't matter whether you're using Subversion, Bazaar, or even CVS. There are a few principles that you should consider when you make a "public" commit (as opposed to a "local" commit, which is supported by distributed version control systems):
Add foo. Addresses #12345adds a comment to ticket 12345 with that commit message and a link to the revision, whereas the message
Add bar (fixes #12345).performs the same task as the "addresses" phrase, plus it sets the ticket status to "closed". In my opinion, putting the "fixes" or "addresses" phrases at the end of the first line is preferable to putting them in the detailed explanation.
Hopefully, this is helpful to those who are new to using version control systems, and those people who are the "gatekeepers" of the repositories. Comments and criticisms are welcome.
1: The difference between a "commit" and a "revision", in my view, is that a revision is a patch that has been committed to a repository, whereas a commit is the process.
by Mark at 2008-10-02T21:25:50Z
This is in response to something that I read on an Ubuntu Brainstorm page.
Attention people who think that you need an expensive video card
in order to run Avant Window Navigator, AKA Awn: I have a computer that I maintain with a Diamond Monster Fusion video card (tdfx Xorg driver) that runs Metacity + Awn 0.3.1 (on Ubuntu Hardy) just fine, with applets, on an everyday basis.
This has been a public service announcement by your somewhat friendly Awn/Awn Extras developer. You may now continue to go about your Interneting.
by Mark at 2008-09-09T08:12:45Z
For the 1% of Open Source software enthusiasts who haven't yet seen this yet: Donate to support the development of free/libre/open source graphics software by helping developers meet in real time, in person, (etc.) at the Libre Graphics Meeting 2008! I'm a big fan of Inkscape, because it lets me, as someone who is not very artistic (nor has very good (precise) hand-eye coordination) to create and manipulate logos and icons with ease. My graphics programming skills are essentially non-existent, so I figured that I could be more useful by donating some cash to help a developer of one of the participating projects travel to the meeting.
And here's the shiny (but not flash-shiny) information-rich button that they're using to show how much more money they need to reach their goal:
(I should note for the American-income-tax-minded that this is a tax-deductable donation.)
On a somewhat related note, I'm planning on going to LinuxFest Northwest 2008. Fortunately for me, both the conference and the transportation is free. People who have either followed me for at least a year or have read through the archives know that I went last year. I plan on going on Saturday again (this year, April 26), and I'm bringing my XO laptop with me. If things work out right (i.e., my stupid printer decides to work), I'll have a nice, big Awn icon (again, thank you Inkscape!) taped to my bag. It'll be an interesting experiment to see who recognizes it.
by Mark at 2008-04-15T07:50:17Z
After hearing about it from a friend (specificallly, that I could get there for free courtesy of Pogo Linux), I decided to go to an actual Linux...fest... and take in the nerd atmosphere without getting some sort of otaku or gamer disease. Unfortunately, I could only go on Saturday. I would have loved to hear Brad Fitzpatrick talk about how LiveJournal scales their databases, among other things.
The bus left promptly at 8:06AM. The movie they were showing on those little screens scattered throughout the bus was the X-Files movie, which I have no intention of watching, so I caught up on some reading for one of my classes. One amusing thing that I noticed on the way up was that there was a "Lychee Buffet" restaurant at the freeway exit for the college. If you think about it, it sounds rather disturbing.
I had roughly 15 minutes between the time that the bus arrived and the first presentations. In that time, I got a bunch of CDs from the Ubuntu and Oracle tables (it was like the Oracle table was having a fire sale - I got an Oracle DVD and an Oracle Linux DVD), and some stickers from the FSF table, including the "Bad Vista" one.
The first talk that I heard was on copyright and open source, by Karl Fogel (of CVS/SVN fame). It was really interesting, given my affinity for history (especially regarding science and technology). He talked about the parallels between the era of the printing press and the present-day. I didn't realize that copyright (or proto-copyright) was created as a censorship/printing restriction tool by the official guild of printers.
The second talk I attended was on strong authentication, in particular multi-factor authentication. It was very informative, especially in regards to how those one-time password keyfobs work.
Presentation number three was about practical honeypots. I wasn't really impressed with it overall. It was rather high-level, and the presenter admitted that he had only started working on it that morning. A lot of it seemed like common sense, like being preemptive, only concentrating on exploits that are relevant to your particular systems, etc.
The last talk I observed was on scaling web services, by a lead developer from Real Networks. He reminded me of Penn from Penn & Teller. It was a very engaging talk, and it gave me a new perspective on scalability, that is, it's essentially an organizational problem, as opposed to a technological problem.
A closing thought: I would have loved to have gotten one of those stuffed SuSE lizards...it would have fit in well with the Tux I got in Canada several years ago.
by Mark at 2008-04-15T07:35:33Z
Everywhere I turn, there's a new post lamenting the fall of the mighty OiNK music torrent tracker. Yes, it's a pity, but what's surprising to me was the number of people who actually used it (and blogged about losing it after the takedown). It's like these people want to say, "Yes, I was a part of the secret organization before it disbanded!" It's an odd sort of sensation reading those posts; those of us who were also contributors to "the cause" say to ourselves, "Right on, brother! Fight the power! I, too, miss what has been wrongfully taken away from us!"
As I think about it, it gets more and more surreal. Why are we sad about something that is plainly an illegal means of retrieving goods? Is it because of the slightly better feeling in our conscience that says, "it's OK, I'm helping others who can't necessarily find this music any other way through seeding", rationalizing it as a sense of community and giving back? I am boggled.
by Mark at 2008-03-21T21:42:20Z
Obviously, I haven't done one of these in a while. There are a few reasons for this. For one, my workload has gotten a bit larger. Additionally, Super Smash Bros. Brawl came out recently...it's ridiculous how much time that game eats up, and I'm only halfway through "adventure mode".
But seriously...both the forums and the bug tracker have been relatively quiet. It's difficult to figure out exactly why that is. However, there have been a few things that have happened in the past month or so.
Moonbeam has a summary of what happened in the week following my last post. Additionally, he has been working on the framework for an applet that can use either the Gecko engine (used, most notably, in Firefox) or the WebKit engine (used in Safari) to render HTML. Hopefully, this will alleviate some of the problems that people have had trying to get some of the HTML-based applets to run properly. Unfortunately for us, moonbeam has become rather busy in real life lately, and so there may or may not be very much progress on the features/applets that he's been working on.
Andrewsomething, a longtime bug/answer triager for both Awn and Awn Extras, has finally taken the plunge (so to speak) and joined the Awn Extras developer team. His first contribution is the "Remember the Milk" applet, and for his next undertaking, he is seeing if there's any interest in a simple note applet.
It is interesting to note that two new, experimental branches have appeared for Awn recently. One, created by moonbeam, focuses on refactoring the launcher/task/applet effects framework so that it's easier to add new effects, and uses cairo's surfaces instead of Gtk+'s "pixel buffers" to manipulate the images. This allows for more complex effects to be used, while keeping the overall effect smooth (and potentially hardware-accelerated).
The other branch was created by longtime Awn contributor haytjes. He's working on fixing the "custom icon" feature. Currently, there are several bugs which prevent that feature from being very usable.
And finally, I'd like to give a quick Planet Awn roundup. Moonbeam has a very good post on the architecture of Awn and why it's not possible (currently) to have features such as parabolic zoom. Our fearless leader, Neil, has (finally) written a post about the recent Awn/Awn Extras release, and our upcoming plans for the projects. Hopefully, his presence on Planet Gnome will continue to give Awn more publicity :).
by Mark at 2008-03-21T18:12:14Z
I'm taking a break from both trying to make a <tbody/> scroll vertically without a horizontal scrollbar present and playing "Link's Crossbow Training" to write up what's transpired in the past several days in Awn-land.
The Awn Curves branch was partially merged into awn-core-testing. I say "partially merged" because meek is merging it in parts, due to the complexity.
The big event was when Neil finished reviewing the awn-core-testing and awn-extras-testing branches and merged them into their respective trunks. Among the benefits is that users of reacocard's Ubuntu Gutsy repository can now use the shiny new features that those of us on the (very) bleeding edge have been using for a while now.
I should also point out that Neil has added both moonbeam and myself to awn-core, in recognition of our work on both the testing branches and our respective personal branches. This means we have commit access to Awn's trunk branch and more bug/blueprint triaging privileges.
As a result of the big merge, we now have a new roadmap. What used to be Neil's big rewrite for 0.3 (code-named fandabbydosy) has been spread out over several releases. See the roadmap link for details. One important item to mention is that we plan to release version 0.2.4 of both Awn and Awn Extras on Monday (02/18).
In Awn Extras, most of the changes have been bugfixes. A patch was added to the media-control applet for Quod Libet support.
Finally, I'm holding a contest for Awn users/enthusiasts. In the near future, I'd like to have a post with screenshots and videos showing off all of the new features and applets in Awn/Awn Extras. Unfortunately, I suck at doing that sort of thing myself. :) So, I'm giving the Awn community the chance to show off their customized docks.
The only restriction on the screenshots and videos is that you license them under a Creative Commons license. I will, of course, attribute all media to their proper creators :) Ideally, the screenshots should be as hi-res as possible, but any resolution is welcome. The same goes for videos.
The deadline is Feb. 21, because I'd like to write the post by the end of next week. I'll choose a set of media that looks the nicest (with the help of the people in #awn) and use that as the basis of my next Awn post.
So if you wish to participate, please post the URL to the media, the attribution information you wish to use (your name or nick), and which feature/applet you're highlighting on the forum thread or as a comment here.
by Mark at 2008-02-15T23:11:51Z
Given the lack of releases of Awn, I figure that there needs to be some record of what's happening in Awn-land ever since we got version 0.2.1 of Awn and awn-extras out the door, other than the mish-mash of posts on the forums.
Here's a (most likely incomplete) list of the new features in awn-core-testing, mostly taken from the branch whiteboards:
Note that everything except the first two items are also in my desktop-agnostic branch.
Since the 0.2.1 release, a number of new applets and other changes have occurred in the awn-extras tree.
Our resident Debian/Ubuntu packager, gilir, successfully got Awn (the dock) into the official Hardy repositories, specifically universe/gnome, as avant-window-navigator. Unfortunately, there are some QA problems with the awn-extras applets package, awn-core-applets, but gilir is working very hard to get that resolved before the package freeze. He is also working on getting said packages into Debian sid.
Meanwhile, in Gentoo-land, there are official ebuilds for both Awn and awn-extras, named gnome-extra/avant-window-navigator and gnome-extra/avant-window-navigator-extras, respectively. Since the xeffects overlay is defunct, I'm working with the team behind the desktop-effects overlay to get the awn-core-testing and awn-extras-testing branches in as working "live" ebuilds. Of course, this comes after I was alerted via an awn-extras bug that one of the desktop-effects developers described the build system as piss-poor
. Being the author of the new build system, I was a bit offended. Luckily, the lead developer for that overlay was more level-headed than the stereotypical Gentoo developer whose comment started it all. I'm still waiting for an apology from said developer, but I'm not holding my breath.
A community member has contributed a wiki for our project. We've been using it for both end-user documentation (Installation, FAQ) and internal processes. In particular, the applet developers have been collaborating on some applet development guidelines which should be followed if a person would like their applet to be included in the awn-extras tree.
In non-Awn/Awn Extras news, there have been reports that the Gimmie project has added Awn applet support, in addition to its current support for the gnome-panel.
The changes I've listed for Awn and AWN Extras are currently being reviewed so that they'll be merged into trunk in the near future. In the meantime, you can grab the test packages from the Awn Testing Team's PPA (for Ubuntu users), install Awn and Awn Extras from the desktop-effects overlay (for Gentoo users), or simply install from source (making sure that you uninstall any previous version of Awn/Awn Extras first!).
by Mark at 2008-02-15T05:35:52Z
Note to self: the OpenWrt wiki, particularly the dnsmasq page, is a very useful resource for understanding why my XMPP server won't talk to the GMail or LiveJournal XMPP servers. (Hint: filterwin2k is a very bad configuration option for XMPP servers. Stupid default option.)
by Mark at 2008-01-23T09:33:10Z
I switched my DNS host from zoneedit.com to editdns.net, because ZoneEdit doesn't support DNS SRV records. They're needed for XMPP server-to-server federation support. My XMPP address is <${my_second_level_domain} at ${my_second_level_domain} dot com>. Note that this is different from my email address.
by Mark at 2008-01-17T02:11:49Z
I learned something new today: it seems that <button>s have a type attribute, and default to type="submit". Obviously, this doesn't apply to IE, which defaults to type="button". Makes my life just a bit more annoying. On the other hand, I don't have to use <input type="[submit|reset]"/>, which apparently makes it a bit easier to style.
by Mark at 2008-01-09T22:11:34Z
(Note: Originally written on 2007/11/11. It's been languishing on my computer since then.)
To begin with, I have to say that, like many people on the "Internets", I enjoy reading dive into mark for its sharp wit and no-holds-barred writing style, no matter who employs him.
His latest post is no exception. A few things bothered me about it, though.
For one, it (implicitly) assumes that you're going to be installing MySQL™ on your Ubuntu™ desktop machine and start using it to develop some application that needs a relational database for X, Y, or Z. However, ignorant CEOs and CIOs also read things written on the Internets, and when they happen to find this post via their Google™ search du jour for new technology to integrate into the fold, they'll turn to their system administrators and ask, "Why do I pay you so much when all I have to do to install a relational database is click a button a few times?" Thank you, Mr. Pilgrim, for devaluing system administrators in one fell swoop.
Another part that bothered me was the end. Here's how I imagine your average Ubuntu™ user's thought processes: "OK, I've installed this MySQL™ thing. Now what? How do I access this server thing? I have to use some sort of client, right? What kind of client do I get? Can I just search for 'mysql client' and do the same thing? Oh crap, that's for the terminal!" There goes that whole anti-"sudo make me a sandwich" argument. I guess it would be different if this HOWTO was in serial form.
On the other hand, it seems to be a much better experience than installing DB2™ on Ubuntu™.
by Mark at 2007-11-22T06:47:44Z
Just recently, I ran across the third Wordpress weblog in my feed list that had been hit with spam via what I assume to be the vulnerability fixed in version 2.3.1. It only shows up in feed readers, because it uses CSS to hide itself on the regular pages. That CSS is stripped by most feed readers' sanitizing process that removes all markup that may be malicious.
The striking thing about it is that all of the weblogs were related to web development: one was on a personal browser developer's website, one was a prominent web development news site, and the most recent one was the official weblog of a web browser. Now, I'm not necessarily putting the single browser developer at fault, since web applications aren't necessarily his area of interest. His webhost should make sure that classic security holes (like PHP's register_globals option) are turned offor disabled. On the other hand, the other two sites should know better. The web development news site has a significant number of posts on web application security, and the browser vendor deals with the security of its product every day, so surely they should be monitoring (or at least, find an automated process to monitor) feeds such as the ones at the National Vulnerability Database, in case exploits are discovered for any web applications that they may have installed.
To everyone else, if you can, please make sure that your webhosting environment is properly secured. Also, definitely subscribe to the news feeds of all the web applications that you run, because more often than not, there will be security vulnerabilities discovered, so you should upgrade as soon as possible in those cases.
by Mark at 2007-11-11T20:14:03Z
Oh man, they must be Scientologists!
– Attributed to one of the three guys in front of me when I was walking past the anti-psychiatry exhibit.
2007-11-06T19:58:20Z
I has a diploma, or at least some sort of rolled-up paper with some signatures on it. They're the same, right?
2007-06-09T05:41:02Z
(Part I of a multipart series)
Printers which cannot distinguish between one and three sheets of paper going through the spooling thing at once (I am not an expert on printer jargon), thereby printing 5% of the page on one page, 5% on the second, and 90% on the third. Which also screws up the double-sided print job you were trying to do in order to save paper.
2007-04-18T12:41:47Z
There are currently a bunch (~20) of urchins in the Suzzallo reading room who walked in to take a look at the desk of former Senator Warren G. Magnuson. Why they did it, I have absolutely no idea. These were definitely elementary school-aged ones, and even during my tenure in the public school system, I didn't learn very much about the famous senators Magnuson and Jackson in Washington State History class.
2007-02-15T22:10:46Z
I passed Brian AND Carl in number of tracks played on Last.fm. Go me!
...don't look at me like that, I have a right to be shallow every once in a while.
2007-02-06T09:32:58Z
This one (particularly the last panel) describes me in general.
This other one also describes me (at times). It also describes
sus7. I swear. I've seen it happen.
2007-02-02T02:56:08Z
I am continuously amazed at people's (in this case, college students about to graduate, or those that already have done so) general incapability to follow simple directions.
2007-01-25T14:13:47Z
It seems that everybody I’ve talked to in the last little while has found a way to work it into the conversation: “Oh, and I’m hiring; know any good developers?” Plus, the pace of calls from head-hunters has picked up. It’s about as hot as I can remember it being, ever, including the bubble.
...yeah, I must be looking in the wrong place. Or maybe it's my lack of experience. It doesn't help that I don't:
...bleh. This is just me ranting. One of these days, I need to publicly publish my resume.
2006-12-07T23:27:27Z
Gah, election coverage consumed most of my night, just like it did two years ago. DAMN YOU, TELEVISION! At least it's less aggravating this year.
2006-11-08T09:17:47Z
Yahoo! is in talks to buy Facebook, the social networking site for college- and schoolkids, the WSJ reports today.
The WSJ article (via ProQuest) noted that Facebook had held separate discussions with Microsoft and Viacom
previously. Personally, if Facebook were to have sold out to Microsoft, I would have deleted all of my information as soon as it was announced. I think it's just as bad to let a company like News Corp. to have a hold of that much personal information. I'm not sure what to think of what will happen if Yahoo! ends up buying it. Yes, it's also one of those giant companies, but they seem to have made Flickr and del.icio.us (some of their other relatively recent acquisitions) better services.
Discuss.
2006-09-21T21:40:48Z
It's a good thing I read the news (and look at the Electoral Vote feed), otherwise I would have completely forgot about my silly absentee ballot. I wonder what prompted them to add the "Signature Security Flap"...
In other news, Yarr.
2006-09-19T21:53:14Z
I was talking to my dad today, and he mentioned the main feature article in this week's Seattle Weekly on rats. Why did he bring this up, you may ask yourself. Well, it just so happens that a few weeks ago, it seems that a rat crawled up out of the sewer pipes and into the toilet bowl. Needless to say, I was rather nervous the next time I had to use the facilities at home. Damned toilet rats should NOT exist.
2006-08-14T04:41:57Z
Listening to the sound of someone retching outside my window for five minutes straight is just heavenly.
2006-08-14T03:34:55Z
It’s that time of year again! Every August, Seattle is treated to 4 days of being under attack by jet fighters in the form of the Blue Angels performing at Sea Fair. Aptly described by a friend as “sky NASCAR”, these giant wastes of taxpayers dollars whiz around the city at like 300 feet all weekend, scaring the bejeeezus out of everybody.
Tip: You know it's too damn loud when you can't hear the music you're playing when they're flying over.
Why don't they just stick to their area over I-90the Medina/Bellevue/Redmond area?
2006-08-03T19:25:13Z
Am I the only one who thinks that Bedlamball seems an awful lot like Calvinball?
2006-05-03T07:58:18Z
Vietnamese sandwiches for lunch has got to be the best lunch food ever.
2006-04-13T22:24:31Z
Note: some of this stuff is technical and should have gone here, but it also deals with LJ and I don't really feel like making yet another post.
2006-04-09T23:08:37Z
A little background - I wrote this after receiving three emails from three different people in my mailbox (within the course of about three hours) that contained exactly the same content. I happened to forget that it was in my "Drafts" folder until now. Edited only to look better.
To Whom it May Concern:
I've just about had it with the way iSchool staff use the mailing lists that those that are in the school are "strongly encouraged" to subscribe to. It appears that a significant number of those who post to the lists are not aware of the social norms that should be followed when performing such a task. An example of one such occurrence was Feb. 11, when three different professors forwarded the same email to two mailing lists [1]. Utilizing Google, the iSchool's obsession, a set of useful links to mailing list etiquette pages can be found, but the first of which is sufficient [2]. In reference to the example occurrence, this particular paragraph is relevant:
Should I "crosspost" to multiple lists?
Almost always, the answer to this is no. Most mailing lists are topically disjoint, and there is very little that is equally appropriate for posting to a number of them. It can also be annoying, as usually subscribers will get a copy of your message for each list they're on that you post to -- more than two or three of those and you can have a lot of annoyed people knocking on your mailbox.
That said, there may be some occasional instances where it would be appropriate to post to a number of lists at once. If you think this is the case, then you should probably contact the owner of each list and make sure that they agree before proceeding.
Hopefully, this will enlighten some people as to how to "work smarter, not harder" with regards to mailing lists.
Thanks,
--
Mark Lee2006-03-13T02:17:52Z
This is meant mostly for myself, as a reminder.
2006-01-23T19:07:13Z
2005-11-16T10:12:59Z
Why the hell do I have to download SIX PDFs for ONE STUPID DOCUMENT? Stupid "Electronic Reserves".
2005-10-13T06:41:07Z