A Picture of Weblogs

by Casey Marshall
rsdio@metastatic.org | explanation | add/remove | help | code | news | FAQ

NOTE: This applet is no longer being updated, and is available here for historical purposes only.

(Those with Java 2 installed (and a fast computer) can also try out version 2 of this applet)

Width: Height: Delta theta: Exponent:
You are seeing this message instead of a cool applet because you are using a browser that does not support Java, or you have Java disabled. Just because you don't have Java doesn't mean I don't like you; it just means I can't show you any Java applets. HTH. HAND.


The above applet is a rendering of a great many weblogs, and all the links that interconnect them. Each little box represents a weblog (and each can be clicked on, highlighting it and showing` its name and URL), and each line represents a link. When a particular weblog is selected, outgoing links will be colored tan, incoming links red, and mutual links black.

Type the name (i.e. the title) of a weblog, or part of the URL of a weblog into one of the text fields and click "Search" to look for a particular weblog. Click on the "View" button whilst a weblog is selected to view that weblog. The applet can be resized using the two text fields at the top. It looks best at larger sizes, because smaller sizes simply don't provide enough space for every box.

The "Find Path" button will open a dialog with two text fields, labelled "From:" and "To:". Enter a search term (can be a regular expression) into these two fields and hit "Find" to search for a simple path from one weblog to another. Due to a bug the shortest path is not always highlighted, but a path will be highlighted if one exists.

This applet is updated once per day, at midnight, pacific time, by reading 500 of the pages. This means that the above is not quite "live," in that only 500 pages are updated every day. A necessary concession, given that reading thousands of web pages translates into many hundreds of megabytes. A log of the most recent run is available for the curious.

Additions and Removals

New additions are not being considered any longer.

About the Layout

The applet above arranges the boxes in a spiral, as is obvious; this layout has nothing to do with the data themselves, but is instead my solution to make a quick, simple, easily automated layout scheme that is not as regular as certain others. For example, say I were to lay the boxes out on a simple grid. If, say, three weblogs were interconnected, but were drawn collinearly, then the links would be obscured because they all lay on the same line.

How does a spiral solve this problem, though? Well, take any box above, and imagine a line drawn from the center of the spiral to that box. Note that there are two quantities here: the length of that line, and the angle of it. It is trivial to make sure that no two boxes have the same "length", we just increment it slightly for each box we place in the spiral. Making sure that two boxes don't have the same angle is a little more difficult, but we can achieve good results by incrementing the angle by a value that does not divide 360. Incrementing by 7 degrees, as is done above, gives good results; using this heuristic it is rather unlikely that three (or more) boxes will be collinear. This parameter, delta theta, can be specified in the third text field above the applet.

The equation that determines the maximum length (the parameter r in polar coördinates) is:

{\big((\cos(\theta)w)^p + (\sin(\theta)h)^p\big)^{1\over p}}\over2

Where w and h are the maximum width and height visible on the applet, minus the labels, buttons, and text fields. When p is 2, which is the default, this equation produces an ellipse. The value of p can be controlled by the "Exponent" parameter at the top of the applet. Values of p can be any valid floating-point number, and good values are 1.5 or above (although negative values give very interesting results in their own right).

Finally, to make sure that the boxes do not get too close to one another, boxes near the center are drawn by incrementing the length slightly more than those on the edge. That is, boxes near the center get little extra length added to them, when they are drawn. This also creates the "iris" in the center.

About the Name

When I wrote this applet I was deep into my Edward Tufte phase, and came up with "A Picture of Weblogs" as the name since, in a way, that's what it is. Really I'd rather call it simply "wlm", or maybe "wlm-applet". All in all PoW was about the best idea I could come up with.


This site, and the other miscellanea made available from metastatic.org, will be disappearing soon due to the costs of this web space. If you want to try to keep it alive, you are welcome to donate what spare change you can; I doubt, however, that donations from kind-hearted visitors will suffice.

Donations can be made through PayPal:

Or through Amazon.com:
Amazon Honor System Click
Here to Pay Learn More


Entangle is a program very much like this applet, except it works outside of a web browser. It is unfinished, in my opinion, but still may be played with.


The applet above, and the code which builds the picture, are written in Java. I have elected to license it under the General Public License, so the code may be used subject to those terms. The code is split into eleven files:

There is a source distribution: wlm-1.3.tar.bz2.

For the curious, here is the shell script that launches the daemon, which uses a little utility I threw together: start-daemon.c. I have set up a cron to do something like this:

@daily wlm -n 500 -v -J-Dorg.metastatic.wlm.logfile=wlm.log -J-Dorg.metastatic.wlm.datafile=wlm.dat -J-Dorg.metastatic.wlm.contact=rsdio@metastatic.org weblogs.list

Webmasters may note that this program will call itself "wlm-1.2" as its user-agent.

A partial list of known bugs is also available.


To the Open Directory Project, from whom the source list of weblogs is built.