Content here is by:
Michael Still
mikal@stillhq.com

All my Open Source projects
Online CVS server
Extracted view of CVS
Home
Site map
May 2008
Sun Mon Tue Wed Thu Fri Sat
       

ImageMagick book
MythTV book





Sat, 28 Dec 2002



29 December 2002

    Long time no write. Spent lots of time on family, and very little time on coding. Playing with code which can render PDF files to PNG bitmaps. Very cool. One day I might even finish it.

    The regression test results for the pandalex PDF parser are as follows today:
    2372 PDFs parsed:
    segfault = 12
    parse failed = 16
    other fault = 0
    ok = 2344
    
    These are random PDFs pulled from everywhere I could find them. If you have interesting PDFs (especially from slightly odd generators such as Oracle, and Great Plains), then feel free to email them to me. The bigger the better (within reason).

    It toook me a little while to realise that GNU time only has the GNU options if the binary name isn't time. How buggered is that?

    Another question on the debugging front. Why are there so many pages on the Internet (as documented by google), which have the abort man page, and therefore show up in a search for SIGABORT, but don't discuss why you might be sent this signal? Do people really think it helps the world if they publish the Redhat man pages? I could understand if the manpages were a little harder to find, like some of the libtiff ones, but these are all stock things.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 56 posts have been culled and 85 blocked. Be the first to make a non-spam comment here, please!


Wed, 25 Dec 2002



25 December 2002

    Christmas. Lots of presents for Andrew, I offically got my trampolene, and I also got a cool nurf bazooka. Heaps of people over, so little coding done. I did get an opportunity to break pandalex though...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 38 posts have been culled and 81 blocked. Be the first to make a non-spam comment here, please!


Mon, 23 Dec 2002



24 December 2002

    Twas the day before Christmas, and all through the house, everything is silent, cause everyone's gone out.

    Waiting for work to get their act together and get the network happy enough for me to be able to work from home again.

    Ahhh. I understand the CVS logging problem I mentioned a couple of days ago. One of the members of my final year project group (Blake Swadling) appears to have hand editted the CVS respository files (the ones with ,v at the end of their names). He seems to have managed to damaged the respository in some subtle way in the process.

    My snapshot of the repository before he played still works, so I will just submit that to the lecturer.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 18 posts have been culled and 56 blocked. Be the first to make a non-spam comment here, please!


Sun, 22 Dec 2002



23 December 2002

    In the new building. The decor is nice, but it sure would be good to have power at my desk, and to be able to get into the building out of hours...

    Played a little with shdns, and pandalex. One day I might just manage to finish a project... Just in case, started another project which has been on the todo list for a while -- I'll let you know more if I ever get anywhere...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 50 posts have been culled and 83 blocked. Be the first to make a non-spam comment here, please!


Sat, 21 Dec 2002



Announcing side

    Finished off side, a little ditty that took an hour or two. It takes a filter arguement, and two file names. It then runs the two files through the filter (one at a time), and then displays the output of each beside each other. Therefore, the command:
    ./side "/home/mikal/opensource-stable/mi/i - < %s" 
       ../shdns/sample-response ../shdns/shdns-response  | less
    
    Takes two DNS packets, and displays them after they have been pretty printed. The output looks like this:
    /home/mikal/opensource-stable/mi/i - < ../shdns/sample-response        | /home/mikal/opensource-stable/mi/i - < ../shdns/shdns-response
                                                                           |
    0                 135       0x87       0207                            | 0                 135       0x87       0207  
    1                 210       0xD2       0322                            | 1                 210       0xD2       0322  
    2                 133       0x85       0205                            | 2                  10        0xA        012  
    3                 128       0x80       0200                            | 3                  56       0x38        070       '8'  
    4                   0        0x0         00                            | 4                   0        0x0         00  
    5                   1        0x1         01                            | 5                   0        0x0         00  
    6                   0        0x0         00                            | 6                   1        0x1         01  
    7                   1        0x1         01                            | 7                   0        0x0         00  
    8                   0        0x0         00                            | 8                   1        0x1         01  
    9                   1        0x1         01                            | 9                   0        0x0         00  
    10                  0        0x0         00                            | 10                  0        0x0         00  
    11                  0        0x0         00                            | 11                  0        0x0         00  
    12                  3        0x3         03                            | 12                  0        0x0         00  
    13                119       0x77       0167       'w'                  | 13                  3        0x3         03  
    14                119       0x77       0167       'w'                  | 14                119       0x77       0167       'w'  
    15                119       0x77       0167       'w'                  | 15                119       0x77       0167       'w'  
    16                  7        0x7         07                            | 16                119       0x77       0167       'w'  
    17                115       0x73       0163       's'                  | 17                  7        0x7         07  
    18                116       0x74       0164       't'                  | 18                115       0x73       0163       's'  
    19                105       0x69       0151       'i'                  | 19                116       0x74       0164       't'  
    20                108       0x6C       0154       'l'                  | 20                105       0x69       0151       'i'  
    21                108       0x6C       0154       'l'                  | 21                108       0x6C       0154       'l'  
    22                104       0x68       0150       'h'                  | 22                108       0x6C       0154       'l'  
    23                113       0x71       0161       'q'                  | 23                104       0x68       0150       'h'  
    24                  3        0x3         03                            | 24                113       0x71       0161       'q'  
    25                 99       0x63       0143       'c'                  | 25                  3        0x3         03  
    26                111       0x6F       0157       'o'                  | 26                 99       0x63       0143       'c'  
    27                109       0x6D       0155       'm'                  | 27                111       0x6F       0157       'o'  
    28                  0        0x0         00                            | 28                109       0x6D       0155       'm'  
    29                  0        0x0         00                            | 29                  1        0x1         01  
    30                  1        0x1         01                            | 30                  3        0x3         03  
    31                  0        0x0         00                            | 31                119       0x77       0167       'w'  
    32                  1        0x1         01                            | 32                119       0x77       0167       'w'  
    33                192       0xC0       0300                            | 33                119       0x77       0167       'w'  
    [snip]
    
    It handles line wrapping and stuff like that, but it is not a visual diff. It might one day be, who knows?

    You can get the code from here.

posted at: 22:00 | path: /side | permanent link to this entry
There are no comments on this post which have survived moderation. 85 posts have been culled and 142 blocked. Be the first to make a non-spam comment here, please!


Announcing side

    Finished off side, a little ditty that took an hour or two. It takes a filter arguement, and two file names. It then runs the two files through the filter (one at a time), and then displays the output of each beside each other. Therefore, the command:
    ./side "/home/mikal/opensource-stable/mi/i - < %s" 
       ../shdns/sample-response ../shdns/shdns-response  | less
    
    Takes two DNS packets, and displays them after they have been pretty printed. The output looks like this:
    /home/mikal/opensource-stable/mi/i - < ../shdns/sample-response        | /home/mikal/opensource-stable/mi/i - < ../shdns/shdns-response
                                                                           |
    0                 135       0x87       0207                            | 0                 135       0x87       0207  
    1                 210       0xD2       0322                            | 1                 210       0xD2       0322  
    2                 133       0x85       0205                            | 2                  10        0xA        012  
    3                 128       0x80       0200                            | 3                  56       0x38        070       '8'  
    4                   0        0x0         00                            | 4                   0        0x0         00  
    5                   1        0x1         01                            | 5                   0        0x0         00  
    6                   0        0x0         00                            | 6                   1        0x1         01  
    7                   1        0x1         01                            | 7                   0        0x0         00  
    8                   0        0x0         00                            | 8                   1        0x1         01  
    9                   1        0x1         01                            | 9                   0        0x0         00  
    10                  0        0x0         00                            | 10                  0        0x0         00  
    11                  0        0x0         00                            | 11                  0        0x0         00  
    12                  3        0x3         03                            | 12                  0        0x0         00  
    13                119       0x77       0167       'w'                  | 13                  3        0x3         03  
    14                119       0x77       0167       'w'                  | 14                119       0x77       0167       'w'  
    15                119       0x77       0167       'w'                  | 15                119       0x77       0167       'w'  
    16                  7        0x7         07                            | 16                119       0x77       0167       'w'  
    17                115       0x73       0163       's'                  | 17                  7        0x7         07  
    18                116       0x74       0164       't'                  | 18                115       0x73       0163       's'  
    19                105       0x69       0151       'i'                  | 19                116       0x74       0164       't'  
    20                108       0x6C       0154       'l'                  | 20                105       0x69       0151       'i'  
    21                108       0x6C       0154       'l'                  | 21                108       0x6C       0154       'l'  
    22                104       0x68       0150       'h'                  | 22                108       0x6C       0154       'l'  
    23                113       0x71       0161       'q'                  | 23                104       0x68       0150       'h'  
    24                  3        0x3         03                            | 24                113       0x71       0161       'q'  
    25                 99       0x63       0143       'c'                  | 25                  3        0x3         03  
    26                111       0x6F       0157       'o'                  | 26                 99       0x63       0143       'c'  
    27                109       0x6D       0155       'm'                  | 27                111       0x6F       0157       'o'  
    28                  0        0x0         00                            | 28                109       0x6D       0155       'm'  
    29                  0        0x0         00                            | 29                  1        0x1         01  
    30                  1        0x1         01                            | 30                  3        0x3         03  
    31                  0        0x0         00                            | 31                119       0x77       0167       'w'  
    32                  1        0x1         01                            | 32                119       0x77       0167       'w'  
    33                192       0xC0       0300                            | 33                119       0x77       0167       'w'  
    [snip]
    
    It handles line wrapping and stuff like that, but it is not a visual diff. It might one day be, who knows?

    You can get the code from here.

posted at: 22:00 | path: /site | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


22 December 2002

    Started the work required to roll Nick's honours extension to GDMS into the main app. Once that is done and I have done a little more cleaning up, it will be ready to announce on this site.

    In the process discovered that the CVS repository at uni seems to have issues:
    [snip]
    cvs server: Logging cvs001/contrib/wxwindows/docs/pdf
    cvs server: Logging cvs001/datasets
    cvs server: Logging cvs001/docbook
    cvs server: Logging cvs001/docbook/guide
    cvs server: Logging cvs001/docbook/guide/figures
    cvs server: Logging cvs001/lectures
    cvs server: Logging cvs001/manuals
    cvs server: Logging cvs001/meetings
    cvs server: Logging cvs001/presentation
    cvs server: Logging cvs001/prototype
    cvs server: Logging cvs001/reports
    cvs server: Logging cvs001/source
    cvs [server aborted]: unrecognized operation '\x20' in /cvs/cvs001/source/cepLs.cpp,v
    [root@localhost cvs001]# 
    
    That's why my CVS log reporting wasn't working properly... I did another log and get the same error, so I don't think it is a transitory problem. Anyway, something to put onto the TODO list to look at fixing...

    It's been very warm the last couple of days -- high thirties (celcius), which is warm for us.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 19 posts have been culled and 32 blocked. Be the first to make a non-spam comment here, please!


21 December 2002

    Finished off side, a little ditty that took an hour or two. It takes a filter arguement, and two file names. It then runs the two files through the filter (one at a time), and then displays the output of each beside each other. Therefore, the command:
    ./side "/home/mikal/opensource-stable/mi/i - < %s" 
       ../shdns/sample-response ../shdns/shdns-response  | less
    
    Takes two DNS packets, and displays them after they have been pretty printed. The output looks like this:
    /home/mikal/opensource-stable/mi/i - < ../shdns/sample-response        | /home/mikal/opensource-stable/mi/i - < ../shdns/shdns-response
                                                                           |
    0                 135       0x87       0207                            | 0                 135       0x87       0207  
    1                 210       0xD2       0322                            | 1                 210       0xD2       0322  
    2                 133       0x85       0205                            | 2                  10        0xA        012  
    3                 128       0x80       0200                            | 3                  56       0x38        070       '8'  
    4                   0        0x0         00                            | 4                   0        0x0         00  
    5                   1        0x1         01                            | 5                   0        0x0         00  
    6                   0        0x0         00                            | 6                   1        0x1         01  
    7                   1        0x1         01                            | 7                   0        0x0         00  
    8                   0        0x0         00                            | 8                   1        0x1         01  
    9                   1        0x1         01                            | 9                   0        0x0         00  
    10                  0        0x0         00                            | 10                  0        0x0         00  
    11                  0        0x0         00                            | 11                  0        0x0         00  
    12                  3        0x3         03                            | 12                  0        0x0         00  
    13                119       0x77       0167       'w'                  | 13                  3        0x3         03  
    14                119       0x77       0167       'w'                  | 14                119       0x77       0167       'w'  
    15                119       0x77       0167       'w'                  | 15                119       0x77       0167       'w'  
    16                  7        0x7         07                            | 16                119       0x77       0167       'w'  
    17                115       0x73       0163       's'                  | 17                  7        0x7         07  
    18                116       0x74       0164       't'                  | 18                115       0x73       0163       's'  
    19                105       0x69       0151       'i'                  | 19                116       0x74       0164       't'  
    20                108       0x6C       0154       'l'                  | 20                105       0x69       0151       'i'  
    21                108       0x6C       0154       'l'                  | 21                108       0x6C       0154       'l'  
    22                104       0x68       0150       'h'                  | 22                108       0x6C       0154       'l'  
    23                113       0x71       0161       'q'                  | 23                104       0x68       0150       'h'  
    24                  3        0x3         03                            | 24                113       0x71       0161       'q'  
    25                 99       0x63       0143       'c'                  | 25                  3        0x3         03  
    26                111       0x6F       0157       'o'                  | 26                 99       0x63       0143       'c'  
    27                109       0x6D       0155       'm'                  | 27                111       0x6F       0157       'o'  
    28                  0        0x0         00                            | 28                109       0x6D       0155       'm'  
    29                  0        0x0         00                            | 29                  1        0x1         01  
    30                  1        0x1         01                            | 30                  3        0x3         03  
    31                  0        0x0         00                            | 31                119       0x77       0167       'w'  
    32                  1        0x1         01                            | 32                119       0x77       0167       'w'  
    33                192       0xC0       0300                            | 33                119       0x77       0167       'w'  
    [snip]
    
    It handles line wrapping and stuff like that, but it is not a visual diff. It might one day be, who knows?

    You can get the code from here.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


Fri, 20 Dec 2002



20 December 2002

    Well, the company moved to a new building today, which meant that we didn't get much work done... Spent the afternoon at a team Christmas barbeque because the network was turned off at 11am...


posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 29 posts have been culled and 61 blocked. Be the first to make a non-spam comment here, please!


TOWER building move

    We moved building at work yesterday. These pictures are from wandering around upstairs harrassing people... Afterwards, R & D went out to a christmas barbeque.

posted at: 22:00 | path: /events | permanent link to this entry
There are no comments on this post which have survived moderation. 16 posts have been culled and 27 blocked. Be the first to make a non-spam comment here, please!


New site skin

    I've had a bit of feedback recently that this site has been a little hard to read. Hopefully this tweak to the site skin will ease some of that pain... Let me know if you have any ideas for improvement.

posted at: 22:00 | path: /site | permanent link to this entry
There are no comments on this post which have survived moderation. 102 posts have been culled and 171 blocked. Be the first to make a non-spam comment here, please!


Tue, 17 Dec 2002



18 December 2002

    Long time no write. I assembled my Christmas present with Catherine early this year, which is good because it required a whole kind of screw driver that I didn't own -- finding an open hardware store on Christmas day might have been a little hard.

    Social work golf pictures are now online...

    The company moves building at the end of the week.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 56 posts have been culled and 92 blocked. Be the first to make a non-spam comment here, please!


Sat, 14 Dec 2002



14 December 2002

    I was a good boy and took another offsite backup of my important data collection. Now I just have to get the mound of CDs somewhere than on my wife's desk in the study...

    Saw Jess' house (which caught fire) for the first time today. Wow. I have to go back with a camera (and probably a tripod) sometime.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 28 posts have been culled and 66 blocked. Be the first to make a non-spam comment here, please!


Thu, 12 Dec 2002



13 December 2002

    Back in this meeting with Peter again. Spent the morning discussion ASP.NET, which is only of passing relevance to me. The biggest problem is having to constantly fight the assumption that all clients are running the latest version of IE.

    Sent a Knoppix CD to Melbourne to be put on the front cover of the next AUUGN. It turns out Greg Lehey was having troubles burning it...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 48 posts have been culled and 104 blocked. Be the first to make a non-spam comment here, please!


12 December 2002

    Spent the day is a meeting with Peter from Monash.NET discussing whether we should do .NET at work. He certainly seems to know his stuff, and .NET isn't as bad as I had first though.

    CAUUG committee meeting in the afternoon, and then home to assembly Catherine's christmas present -- a swinging seat.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 99 posts have been culled and 158 blocked. Be the first to make a non-spam comment here, please!


Tue, 10 Dec 2002



11 December 2002

    About two weeks ago I gave a talk about my shell based DNS server shdns. At the time, it couldn't reply to traffic because of an unknown error. Tridge suggested that it was because the UDP socket was "disconnected" (i.e. has no specific end point), and therefore my shell script couldn't use write to reply to traffic.

    Well, I finally got some time to look at this, and, as ever, Tridge is right. Here's the sample programs I used to investigate this:
    // Disconnected UDP socket example: this example simply reads from clients (there can be more 
    // than one), and returns what they said straight back to them. You'll note that we can't use 
    // read and write to get to the traffic, as this is not available for disconnected UDP sockets.
    
    #include <stdio.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    int main(int argc, char *argv[]){
      int lfd;
      struct sockaddr_in servaddr;
      struct sockaddr clientaddr;
      char buf[1024];
      size_t len;
      socklen_t clen;
      
      // We will listen with this file descriptor
      if((lfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){
        fprintf(stderr, "Error whilst starting to listen\n");
        exit(42);
      }
    
      // Define what we are listening for
      bzero(&servaddr, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
      servaddr.sin_port = htons(1234);
    
      // Bind to the address
      if(bind(lfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){
        perror("Couldn't bind");
        exit(42);
      }
      
      // Do stuff
      while(1){
        len = 1024;
        printf("Reading...\n");
        clen = sizeof(clientaddr);
        if((len = recvfrom(lfd, buf, len, 0, (struct sockaddr *) &clientaddr, 
    		       &clen)) < 0){
          perror("Socket read error");
          exit(42);
        }
        if(len == 0) break;
    
        // The buffer is not null terminated
        buf[len] = '\0';
        printf("Read: %s\n", buf);
    
        // And send it straight back
        if(sendto(lfd, buf, len, 0, &clientaddr, clen) < 0){
          perror("Socket write error");
          exit(42);
        }
      }
    }
    
    This one above is the standard socket example. It just works, because we can use the socket specific read and write calls for the data.
    // Disconnected UDP socket example: this example simply waits fro traffic, and the starts
    // a process to deal with the results. One process per packet, one packet per process.
    // This version wont work, because the socket is not connected. In fact, cat is smart enough
    // to warn us about this:
    //
    //           cat: write error: Transport endpoint is not connected
    
    #include <stdio.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/poll.h>
    #include <netinet/in.h>
    
    int main(int argc, char *argv[]){
      int lfd;
      struct sockaddr_in servaddr;
      struct pollfd pfd;
      
      // We will listen with this file descriptor
      if((lfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){
        fprintf(stderr, "Error whilst starting to listen\n");
        exit(42);
      }
    
      // Define what we are listening for
      bzero(&servaddr, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
      servaddr.sin_port = htons(1234);
    
      // Bind to the address
      if(bind(lfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){
        perror("Couldn't bind");
        exit(42);
      }
    
      // Setup the list of file descriptors we want to wait for events on
      pfd.fd = lfd;
      pfd.events = POLLIN | POLLPRI;
      
      // Do stuff
      while(1){
        if(poll(&pfd, 1, -1) < 0){
          perror("Waiting for new data failled");
          exit(42);
        }
    
        printf("Data arrived\n");
    
        // Spawn a child to handle this packet
        switch(fork()){
        case -1:
          perror("Couldn't spawn child to handle connection");
          exit(42);
          
        case 0:
          // Child process -- setup the file descriptors, and the run the helper application
          dup2(lfd, 0);
          dup2(lfd, 1);
    
          execl("/bin/cat", "cat", NULL);
          perror("Exec failled");
          exit(42);
          break;
    
        default:
          // Parent process
          break;
        }
      }
    }
    
    This one is the exec version of the first example. This is basically exactly what inetd and xinetd do. It doesn't work, because cat doesn't know that it has to use the socket specific read and write, instead of the normal ones.
    // Connected UDP socket example: this example simply reads from clients (there can be more 
    // than one), and returns what they said straight back to them. You'll note that we can now use 
    // read and write to get to the traffic...
    
    #include <stdio.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    int main(int argc, char *argv[]){
      int lfd;
      struct sockaddr_in servaddr;
      struct sockaddr clientaddr;
      char buf[1024];
      size_t len;
      socklen_t clen;
      
      // We will listen with this file descriptor
      if((lfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){
        fprintf(stderr, "Error whilst starting to listen\n");
        exit(42);
      }
    
      // Define what we are listening for
      bzero(&servaddr, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
      servaddr.sin_port = htons(1234);
    
      // Bind to the address
      if(bind(lfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){
        perror("Couldn't bind");
        exit(42);
      }
      
      // Do stuff
      while(1){
        // We need to peek at the first part of the packet to determine who to connect to
        len = 1;
        printf("Reading...\n");
        clen = sizeof(clientaddr);
        if((len = recvfrom(lfd, buf, len, MSG_PEEK, (struct sockaddr *) &clientaddr, 
    		       &clen)) < 0){
          perror("Socket peek error");
          exit(42);
        }
        if(len == 0) break;
    
        // Connect
        if(connect(lfd, &clientaddr, clen) < 0){
          perror("Could not connect");
          exit(42);
        }
    
        // And now we can just use the normal read and write
        len = 1024;
        if((len = read(lfd, buf, len)) < 0){
          perror("Socket read error");
          exit(42);
        }
        if(write(lfd, buf, len) < 0){
          perror("Socket write error");
          exit(42);
        }
      }
    }
    
    Here's an example of just the socket code, but connected, so that we can just use the read and write functions on the file descriptor (as if it was a file).
    // Connected UDP socket example: this example this example simply waits fro traffic, and the 
    // starts a process to deal with the results. One process per packet, one packet per process. 
    // You'll note that we can now use read and write to get to the traffic, and that this all
    // works...
    
    #include <stdio.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    int main(int argc, char *argv[]){
      int lfd;
      struct sockaddr_in servaddr;
      struct sockaddr clientaddr;
      char buf[1024];
      size_t len;
      socklen_t clen;
      
      // We will listen with this file descriptor
      if((lfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){
        fprintf(stderr, "Error whilst starting to listen\n");
        exit(42);
      }
    
      // Define what we are listening for
      bzero(&servaddr, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
      servaddr.sin_port = htons(1234);
    
      // Bind to the address
      if(bind(lfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){
        perror("Couldn't bind");
        exit(42);
      }
      
      // Do stuff
      while(1){
        // We need to peek at the first part of the packet to determine who to connect to
        len = 1;
        printf("Reading...\n");
        clen = sizeof(clientaddr);
        if((len = recvfrom(lfd, buf, len, MSG_PEEK, (struct sockaddr *) &clientaddr, 
    		       &clen)) < 0){
          perror("Socket peek error");
          exit(42);
        }
        if(len == 0) break;
    
        // Connect
        if(connect(lfd, &clientaddr, clen) < 0){
          perror("Could not connect");
          exit(42);
        }
        
        printf("Data arrived\n");
    
        // Spawn a child to handle this packet
        switch(fork()){
        case -1:
          perror("Couldn't spawn child to handle connection");
          exit(42);
          
        case 0:
          // Child process -- setup the file descriptors, and the run the helper application
          dup2(lfd, 0);
          dup2(lfd, 1);
    
          execl("/bin/cat", "cat", NULL);
          perror("Exec failled");
          exit(42);
          break;
    
        default:
          // Parent process
          break;
        }
      }
    }
    
    And finally, this is what inetd and xinetd should do. And now cat works as a UDP echo server...

    The next step is to write up the patches to inetd and xinetd. It strikes me as being singularly useless otherwise...

    Peter Morgan also seems to think I am on the right track with my honours thesis, which is a good thing.

    Company social golf in the evening. Pictures up soon!

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 171 posts have been culled and 171 blocked. Be the first to make a non-spam comment here, please!


Mon, 09 Dec 2002



10 December 2002

    Josh got a job at Citadel (my mate Doug runs the managed services area out there, but Josh got the job strictly on merit). Well done. It's been raining here for the last day or so, which is nice, because we are officially in a drought... It's quite cold for a Summer day as well. I am even wearing a jumper.

    Back onto shdns whilst waiting for compiles of work type code.

    We have some consultant from monash.NET coming down at the end of the week to explain to us why .NET would make our lives much happier. I don't think I disagree -- anything has to be better than DCOM.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 100 posts have been culled and 205 blocked. Be the first to make a non-spam comment here, please!


Sun, 08 Dec 2002



09 December 2002

    TODO list for today:
    • Achieve sainthood.
    Done.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 80 posts have been culled and 138 blocked. Be the first to make a non-spam comment here, please!


Sat, 07 Dec 2002



08 December 2002

    Working more on my honours extension, which is a web interface to the main application which we wrote for the undergraduate bit. Things are going well. It should be pretty easy to get it in on time and working well (unless something evil comes up).

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 94 posts have been culled and 141 blocked. Be the first to make a non-spam comment here, please!


08 December 2002

    Well, no closer to actually having a video capture happening, despite having carried the box with the capture card out into the lounge and plugging it into the nice aerial on the roof. Perhaps I have the tuner options wrong. I'll have to surf on that some more.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 106 posts have been culled and 172 blocked. Be the first to make a non-spam comment here, please!


Fri, 06 Dec 2002



07 December 2002

    Playing with video capture under linux. Plugged in Ben George's Maxtrox Millenium G200 Marvel (AGP), and had pain getting my AMD K6-500 machine to recognise that it could use an AGP video card. I'm blaming the Gigabyte GA-5AX motherboard at the moment, which has this wierd "use AGP " setting, which it seems to be ignoring.

    Played briefly with Ian's pixelview video capture card. First I had to guess the tuner type and put that in modules.conf. Once I had done that I still don't get a picture, but I am not sure if that is because of the aerial or not. I will move the machine closer to a real aerial tomorrow and try again...

    Basically, no closer to video capture after an hour or two.

    Checkout http://www.linuxprofessionalsolutions.com/pavlicek/tv.html for a quick guide...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 117 posts have been culled and 164 blocked. Be the first to make a non-spam comment here, please!


Wed, 04 Dec 2002



05 December 2002

    Well, here I am again, in my study. I can't believe that it is Thursday already. Time flies.

    Been doing lots of stuff on final year project honours extensions.

    I was having an arguement with a female friend this afternoon about whether her makeup was effective. My arguement is that makeup is intended to make people look different, and she still looked like Kate. I suggested next time she might try to look like Dracula, or Atilla the Hun.

    She countered with an arguement that makeup is meant to draw attention to your good features (a likely story!). When I suggested a more effective way was to draw arrows on her face, she got all grumpy. I don't understand women...

    Hacked up an extension to wget which will force it to only get filenames ending in .mp3. This is useful for grabbing the content of the linux show mp3 archive. I can see it being useful for other things as well. When I get around to it I will make it more general and submit it to the Maintainer...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 95 posts have been culled and 156 blocked. Be the first to make a non-spam comment here, please!


Tue, 03 Dec 2002



04 December 2002

    I hurt my lower back yesterday during a wild grab to not drop my son Andrew in the shower. As a result, I can't bend over or do anything interesting today. I even had to cancel my trip to the gym last night. Bugger.

    Spent more time on my honours thesis, so no interesting Open Source coding last night...

    Hurrah. Catherine's mother is officially a diabetic.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 102 posts have been culled and 183 blocked. Be the first to make a non-spam comment here, please!


Mon, 02 Dec 2002



03 December 2002

posted at: 22:00 | path: /resume | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


03 December 2002

    The seminar on Saturday seemed to go well, and my notes are now available online in the presentations area. There is a problem with the way that UDP sockets are handled by inetd which basically means that writing UDP servers with straight simple shell (e.g. echos etc) is impossible. Tridge and I had a discussion about how to fix this. I will have to look into it when I have some free time...

    Working on that web server at work again. I will oneday get enough time to finish it. Got an abstract in for an educational conference in the middle east that University of Canberra is interested in sending some people to. We'll have to see what comes of that aas well.

    Started documenting my honours extension to final year project -- fun fun fun.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 100 posts have been culled and 163 blocked. Be the first to make a non-spam comment here, please!


Wed, 27 Nov 2002



2002: Canberra AUUG

posted at: 22:00 | path: /presentations | permanent link to this entry
There are no comments on this post which have survived moderation. 7 posts have been culled and 19 blocked. Be the first to make a non-spam comment here, please!


28 November 2002

    Spent some time last night working on my DNS server so that it's ready for the talk on Saturday... I'm currently having pain getting xinetd to write back to the UDP connection. I need to look into this further...

    Cross the 100 linux CDs burnt barrier... So far I think I am up to about 105. Not bad for about 4 CLUGs.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 308 posts have been culled and 154 blocked. Be the first to make a non-spam comment here, please!


2002: DocBook
posted at: 22:00 | path: /presentations | permanent link to this entry
There are no comments on this post which have survived moderation. 102 posts have been culled and 185 blocked. Be the first to make a non-spam comment here, please!


Tue, 26 Nov 2002



27 November 2002

    Spent some time installing ISYS desktop today in an attempt to debug why our synonym searches don't see to do what I want them to -- I am hoping it is something I have done wrong. If this doesn't work out then the next step is to contact one of the people I know at ISYS and see what they have to say...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 70 posts have been culled and 106 blocked. Be the first to make a non-spam comment here, please!


Mon, 25 Nov 2002



26 November 2002

    Well, an exam today (in the afternoon), and then all I have left on the todo list for this week is preparing for my CLUG talk, and my talk at the AUUG Canberra chapter mini-conference thingie. I think I care more about preparing for the mini-conference than I do for the LUG at this stage, as we already have four talks and a competition judging lined up for this month -- we have no hope of getting through all of that in the normal time allocated, and people like to chat during pizza.

    I suspect people wont be keen to listen to more talking during the pizza itself.

    Once I have done the talk at the AUUG mini-conference, then I will be ready to announce to the general world what I have been working on (and am talking about). It is nothing special, but is a little quirky, and I wanted to let AUUG run with it first...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 6 posts have been culled and 1 blocked. Be the first to make a non-spam comment here, please!


Sun, 24 Nov 2002



25 November 2002

    Silly arguement with Kristy about the final year project, and whether or not she could claim copyright over all of my work... I think the CVS commit report might have a hint about why she wants to have her name mentioned on every source file.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 120 posts have been culled and 143 blocked. Be the first to make a non-spam comment here, please!


Sat, 23 Nov 2002



Mailling lists being monitored

    The mailling list monitoring part of patchtrack is currently monitoring the following mailling lists. If you think I should include more here, then let me know at mikal@stillhq.com and I will see what I can do...

  • Linux kernel mailling list
  • USB devel
  • Kernel janitor
  • acpi4linux
  • alsa devel
  • PPC devel
  • PPC embedded
  • PPC iSeries
  • PPC64 devel

posted at: 22:00 | path: /patchtrack | permanent link to this entry
There are no comments on this post which have survived moderation. 83 posts have been culled and 148 blocked. Be the first to make a non-spam comment here, please!


Fri, 22 Nov 2002



23 November 2002

    Final year project is nearly over. The talk went well, now we just need to hand in the thesis and documentation. Then I can do honours.

    I have documentation due, an exam, a local LUG talk, and a conference talk, all this coming week. I guess that makes me still busy...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 71 posts have been culled and 131 blocked. Be the first to make a non-spam comment here, please!


Tue, 19 Nov 2002



20 November 2002

    Got the flu, and now I'm losing my voice. I wish I wasn't sick for once...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


2002: Computer Engineering Project final report

    Is here. We don't actually present this until the 22nd...

posted at: 22:00 | path: /presentations | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


Mon, 18 Nov 2002



Patchtrack 0.1

    The source code can be downloaded here.

posted at: 22:00 | path: /patchtrack | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


Sat, 16 Nov 2002



17 November 2002

    Ditched my 132 cm internal projection TV in favour of a Grundig Xendia. Nice...

    Can't sleep, so coded some more.

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 75 posts have been culled and 108 blocked. Be the first to make a non-spam comment here, please!


Fri, 15 Nov 2002



16 November 2002

    I'm getting really bored with being sick. A couple of group members spent yesterday throwing up. I have the flu now...

    Five more accepted kernel patches, and Chris Wilson has done some nice work making one of my patches nicer. Cool...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 102 posts have been culled and 148 blocked. Be the first to make a non-spam comment here, please!


Tue, 12 Nov 2002



13 November 2002

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 1 posts have been culled and 0 blocked. Be the first to make a non-spam comment here, please!


Mon, 11 Nov 2002



My first patches included

    From the 2.5.47 ChangeLog for Linus' tree:
    Summary of changes from v2.5.46 to v2.5.47
    ============================================
    
    ...
    
    
    [PATCH] [Trivial Patch] journal_documentation-001
    	
    	This corrects DocBook formatting errors in the journalling API
    	documentation which stopped a "make psdocs" from working
    
    ...
    
    
    ppc64: fix misc_register usage from Michael Still
    
    ...
    


posted at: 22:00 | path: /linux | permanent link to this entry
There are no comments on this post which have survived moderation. 60 posts have been culled and 111 blocked. Be the first to make a non-spam comment here, please!


Libmplot 0.5.4

    This version adds the required function prototype in the header for you to be able to use the height functionality...

posted at: 22:00 | path: /site | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


Libmplot 0.5.4

    This version adds the required function prototype in the header for you to be able to use the height functionality...

posted at: 22:00 | path: /libmplot | permanent link to this entry
There are no comments on this post which have survived moderation. 106 posts have been culled and 164 blocked. Be the first to make a non-spam comment here, please!


Sun, 10 Nov 2002



Libmplot 0.5.2

    There was a small bug in the text rotation implementation. This has now been fixed... You can download a new version of the code from here.

posted at: 22:00 | path: /site | permanent link to this entry
There are no comments on this post which have survived moderation. 84 posts have been culled and 147 blocked. Be the first to make a non-spam comment here, please!


Libmplot 0.5.3

    This version adds a function which will return the vertical space taken by a painted string.

posted at: 22:00 | path: /libmplot | permanent link to this entry
There are no comments on this post which have survived moderation. 93 posts have been culled and 153 blocked. Be the first to make a non-spam comment here, please!


11 November 2002

    Knocked over the short reports for final year project during my lunch time, which means I am two things closer to being finished. Also filled in the paper work for my missed exam. It looks like the resit will be on 26 November, which works well because it is the day before my wedding anniversary.

    More work on final year project. It looks like we might be finally making enough progress. I crossed about four things off my todo list tonight.

    Call me two accepted kernel patches boy.

    My ISP had a massive hard disk failure on their mail / web server. This means stillhq.com has been offline for two days now, including email. I hate being out of contact... Perhaps they should consider some sort of mirrored setup in the future?

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 94 posts have been culled and 133 blocked. Be the first to make a non-spam comment here, please!


Libmplot 0.5.3

    This version adds a function which will return the vertical space taken by a painted string.

posted at: 22:00 | path: /site | permanent link to this entry
There are no comments on this post yet. Be the first to make one.


Libmplot 0.5.2

    There was a small bug in the text rotation implementation. This has now been fixed... You can download a new version of the code from here.

posted at: 22:00 | path: /libmplot | permanent link to this entry
There are no comments on this post which have survived moderation. 95 posts have been culled and 176 blocked. Be the first to make a non-spam comment here, please!


Sat, 09 Nov 2002



10 November 2002

    Another really stressful final year project day. Hurrah!

posted at: 22:00 | path: /diary | permanent link to this entry
There are 1 comments on this post, and 0 comments which didn't survive moderation. 0 were blocked by trained gerbils. Click here to see them.


Fri, 08 Nov 2002



2.5.46

    Checkout the patch tracker. I am currently trying to move away from janitoring to something a little more complex, and this version is the first version I have done this for. Then again, I am still doing janitor stuff as well...

posted at: 22:00 | path: /linuxpatch | permanent link to this entry
There are no comments on this post which have survived moderation. 86 posts have been culled and 188 blocked. Be the first to make a non-spam comment here, please!


09 November 2002

    Final year project. The web interface isn't working as well as I would like -- and I am not sure why...

    Has anyone else noticed that Brick is a really depressing song?
    
    She's a brick and I'm drowning slowly
    off the coast and I'm headed nowhere
    She's a brick and I'm drowning slowly
    they call her name at 7:30
    I pace around the parking lot
    then I walk down to buy her flowers
    And sell some gifts that I got
    Can't you see
    It's not me you're dying for
    Now she's feeling more alone
    Than she ever has before
    
    


    Also spent some time rolling in a couple of patches I had been sent against Panda and PandaLex. The coolest one is that now Panda supports wrapped text boxes (for the 14 core Adobe PDF fonts at least). Given these are the only fonts currently supported by Panda, this is probably good enough for now...

    I'll be releasing new versions just as soon as I have been able to test the changes...

posted at: 22:00 | path: /diary | permanent link to this entry
There are no comments on this post which have survived moderation. 82 posts have been culled and 152 blocked. Be the first to make a non-spam comment here, please!