svn diff -r "{2010-01-01}:{2010-01-31}" | diffstat

2010/08 ========================================================================

* bt-bin plays (still quite a hack)

2010/07 ========================================================================

Lintian complained about missing man-pages for buzztard binaries. I also had a
pending bug for gtk-doc to clarify how one can do man-pages. Last month I wrong
some docs about how to document binaries in docbook as well, so that the 
information is in the api-docs, but one can also generate man pages from the
same source. The new guides are not yet on library.gnome.org, but it can be
found in git [1].

I continued with more undo/redo hacking. I have again more tests that all pass
and working undo/redo in pattern editor for trivial operations. Need to do 
edit-groups next and work more on the journal replay part. The testing work
resulted in some local check improvements - the BT_CHECKS env-var supports
globbing to select tests. Also patched that for gstreamers GST_CHECKS env-var.

While showing buzztard to a colleague I noticed that the audio settings where
not used for the sample players. Fixed in svn.

In the early days I made some mistakes in the xml design of the song format.
Some tags had different attributes depending on their parent. This makes it 
impossible to do xsd schema validation. I have changed the song xml slightly
(with backwards compatibility of old songs) and now xsd validation works.

Finally I have started buzztard-bin. This is supposed to be a gstreamer plugin
that plugs a whole buzztard song, so that one can play that in e.g. totem. The
basics are there, should be working quite soon.

83 files changed, 2452 insertions(+), 624 deletions(-)

[1] http://git.gnome.org/browse/gtk-doc/tree/help/manual/C/gtk-doc-manual.xml#n1594

2010/06 ========================================================================

The packaging continued - I found a Gentoo overlay that has buzztard packages,
as well as packages for arch Linux. The later brought up some issues as Arch
Linux uses --as-needed when linking. An article in the Gentoo documentation [1]
suggests that its not a good idea to use this by default. To cut the long story
short - normally (without that option) the order of libraries in the linker
invocation did not really matter. When using --as-needed only libraries that are
actually used are linked in. To make that work one has to put needed libraries
behind libraries that need them. If you want to try this on your own software:
  LDFLAGS="-Wl,--as-needed" ./autoregen.sh

The Debian packages that have been made recently are nice too. All packages 
undergo various checks, among a spell-checker of strings in binaries.

As planned I worked a bit more on undo/redo. I have it now implemented and in
use for some case in the pattern editor. I also added unit tests to verify the
stack logic.

I also managed to finished some work I had started at the Linux Audio 
Conference - copy and paste of machine parameters between patterns and the 
machine property window.

54 files changed, 2174 insertions(+), 699 deletions(-)

[1] http://www.gentoo.org/proj/en/qa/asneeded.xml

2010/05 ========================================================================

It is nice to  see that more and more distros have buzztard packages. Many
thanks to Sebastian Dröge for submitting packages to Debian and Ubuntu.

Latest GStreamer releases (gst-plugins-base-0.10.28) have my adder fixes. With
those trick playback in buzztard works much better. Scrubbing is not locking up
any more and we can play the score forward and backward at different speeds.
There seems to be still an issue in more complex songs though. Every time the
playback accelerates, the sink is waiting for something and thus there is a
pause.

One major feature I'd like to have for 0.6 is undo/redo and journaling. The
latter is important to minimise the loss of data in case the application or the
system crashes. I have been thinking for quite a while how to implement it and
came to the conclusion that it can be made so that journaling means having a
serializable redo stack. I have now started to write the code for it. Hopefully
more news on how it went soon.

48 files changed, 2240 insertions(+), 351 deletions(-)

2010/04 ========================================================================

I will give a talk about "Writing audio applications using gstreamer" at the 
Linux Audio Conference 2010 [1]. Naturally quite some time went for writing the
article. Now that it has been accepted, I need to start working on the slides
and demos.

In buzztard I've tried to make the life of people that use jack or pulse a bit
easier. The problem here is that the player is only visible in jack/pulse when
it is actually playing. I have now some code that keeps the sink alive (in
GST_STATE_READY). This allows e.g. changing the volume in pulse or routing the
output in QJackCtrl even if the app is not playing. Unfortunately it only works
after the sink was in playing once. I need to confirm my theory of what wrong
still.

I recently brought a netbook (MSI L1300) and thus wanted to try buzztard on this
machine. I have installed moblin 2.1 on it to play with moblin. As usual, 
installing own software on a new linux distro/machine always brings up
something. After a few rounds of configure maintenance and dependency trimming
I am set and having it running. Performance seems to be okay even for complex
songs. Yay!

Besides that, I fixed a few more bugs and wrote more tests.

43 files changed, 796 insertions(+), 100 deletions(-)

[1] http://lac.linuxaudio.org/2010/

2010/03 ========================================================================

As if February isn't short enough already a nasty stomach infection send me to
the couch (and bathroom) for a couple of days. 

Still managed to do a couple of things. Some refactoring in the editor allowed
me to harmonize context menus. E.g. one can open machine windows also from
pattern and sequence view.

GStreamer has support for accelerated and decelerated playback, forward and
backward. I started to overhaul the seek handling a bit and added UI for fast-
forward and fast-backward. Fast-forward is working with some limitations, but
reverse playback needs some fixes in plugins still. As a side effect one can now
scrub with the mouse over the timeline.

I also wrote a standalone test app for my level meter. I was still not convinced
that is was always drawing correctly. Indeed there was a bug in the resize
behaviour, that now is fixed too.

As gtk+3 comes closer I did several rounds of adapting the the new style to use
accessor functions everywhere.
  
44 files changed, 1087 insertions(+), 317 deletions(-)

2010/02 ========================================================================

I couldn't really concentrate one a single task this months. Thus I ended up
with lots of small changes here and there. First obvious change is that buzztard
got an over-engineered tip-of-the-day dialog. I takes extra care to present tips
in random order, without repeating tips before you have seen them all.
I also played a bit with parasite [1] - the cool gtk ui introspector and noticed
that my dialogs are inconsistently layouted. Well, fixed now. 

Besides I did lots of small cleanups and refactorings. GStreamer pipelines load
faster as I now link pads directly (not elements). This also gives me better
diagnostics if it goes wrong. I could get rid of some dead code, removed a lot
of double checking and generally lowered the amount of gobject runtime type
checks. I also turned some more objects into proper gobject singletons. This way
I don't need to pass them around anymore.

Finally I wrote some test code in preparation of adding device selection to the
audio settings (like selecting the alsa device). Need to make a plan of how to
store the selection for multiple sinks.

173 files changed, 6014 insertions(+), 5939 deletions(-)

[1] http://chipx86.github.com/gtkparasite/

2010/01 ========================================================================

I worked most of the December time on gtk-doc [1]. After more that a year I
released 1.12 and 1.13 on the same day:). 

On buzztard I also spent a little time, improving the docs and pushing the test
coverage further. I will attack the bullets on the 0.6 roadmap next. Happy new
year and stay tuned.

[1] http://www.gtk.org/gtk-doc/

2009/12 ========================================================================

I made a nice change to the pipeline graph builder - It now uses a fixed 
internal format (float 32bit). This allows us to avoid plugging audioconvert
elements in wires and machines. Now we plug them only if the machine cannot
support the internal format. This gives 7 -> 1 sec speedup for load & play of
e.g. Aenathron.bmx.

In general also plain to wav rendering is now quite fast. On my AMD64 @ 1.8GHz
the 11:45 min. song renders in 45 sec. and on my Intel Core 2 Duo @ 2.0GHz it
takes 28 sec..

The rest of the month I spent a lot of time on project maintenance, improving
the api-docs and writing more test. Regarding the latter, I got the test
coverage improved a lot. Writing automated tests for some areas is quite tough
though.

Then I also made a small change in the UI. All context menus can now be invoked
via a popup menu button in the toolbar above (machine, pattern and sequence
view), this makes it more usable on touchscreen devices.


2009/11 ========================================================================

I started the month with upstream bugs work. First I looked into #581873, made
a fix and two days later realized that my git checkout was on a stale branch and
its already fixed in gtk+-2.18. Next I looked at the mime matching issue that is
already plaguing me for a while (#541236). I also have a patch for that and
hope that I get green light for it or a review how it should be fixed instead.

In buzztard I implemented copy and paste in sequence. I also found our what I
did wrong in my clipboard handling code (see my previous post). Dunno what wrong
with the old code, but this change made it work:
//GtkClipboard *cb=gtk_clipboard_get_for_display(gdk_display_get_default(),GDK_SELECTION_CLIPBOARD);
GtkClipboard *cb=gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD);

Next I finally got rid of the gnomevfs hard dependency. It is only needed if you
have a quite old gtk to get help working. While testing I noticed that some
translations disappear during run time. I made some i18n handling fixes
regarding to initialisation and libraries.

I am probably the last one to figure that one has to draw with the 0.5 px offset
in cairo to get non blurry gfx. After Matthias post I looked at my vu-meters and
voila, I was doing it wrong. Fixes are in svn together with some small 
optimizations.
  
[1] http://bugzilla.gnome.org/show_bug.cgi?id=581873
[2] http://bugzilla.gnome.org/show_bug.cgi?id=541236
  
2009/10 ========================================================================

After a release it is always not so easy for me to pick what I will work on next.
I decided to look into copy'n'paste as this is crippling usability right now.
This sounds like a trivial thing to implement, but its not. Its partially
difficult because the gtk documentation on that matter leaves a lot to answer.
With the help of the sources I got it implemented for patterns. One thing that
worries me right now is that I use GDK_SELECTION_SECONDARY instead of
GDK_SELECTION_CLIPBOARD (which seems to be the recommended one). In my case I
have a custom widget to edit structured data. I serialize the data in a textual
form, but use an own mime-type for copying, as its kind of pointless to paste it
into e.g. your editor. The mime type thing works. To debug it, I can also
provide the data as text and then I can paste it in some text editors. What
puzzles me is that if GDK_SELECTION_CLIPBOARD is used, gtk+ seemingly randomly
post a GDK_SELECTION_CLEAR in gtk_widget_event_internal() and that clear my copy
before I have a chance to paste the data. It has something to do with a 
"selection-clear-event", but again that's only partially documented and the
other related events are not documented at all.

Besides a few bug fixes, I also did more optimisations on song-loading. There
are still a few candidates for more optimizations, but some of them require
quite substantial refactorings. Some of the improvements I already did were on
the gstreamer side and they are now in the official tree (some already in
0.10.25 release and some in the next one).

2009/09 ========================================================================


2009/08 ========================================================================

Hollidays ahead - one whole month for me and family. This month I continued
profiling a few usecases (song loading and playback start). I did quite many
optimizations both for buzztard itself, but also for gstreamer. Altogether they
cut the times down by 20%. I still like to get it faster, but some things need
more work.

All the modules are now in string freeze. I will do releases in september unless
critical bugs get filed. While the translators are doing their work, I looked
into several smaller problems I had on my todo list and I am happy to see all
fixed. One recent changes was cleaning up the icons-theme handling. All themable
icons now use a namespace prefix to avoid clashes.

Many thanks go to Andrew Walton who is working on ubuntu packges [1].

[1] https://launchpad.net/~awalton/+archive/ppa/

2009/07 ========================================================================

After all the thinking last month regarding the saves and handling external
files, I finally found time at GUADEC to finish the implementation. I can do a
quick copy from the old file to the new one on save and create wav files on the
fly when e.g.. saving a buzz song in buzztards own format.

During the month I did a lot of real world testing. I recorded children songs as
I had scores from my sons kindergarden :), but also just played around. I had
the app running under gdb with G_DEBUG="fatal_warnings". Obviously I did not got
far with making music on the first evenings. A couple of days later we have a
lot bugs less.

My talk at GCDS about "multimedia in your pocket" went fine [1]. I showed short
demos of running pitivi, jokosher and buzztard on a omap3 device using maemo 5.
I hope the slides will be available soon.
For the demo I did some more performance tuning. Using GTK_DEBUG=updates was
very helpful to improve the UI to do less redraws.

I also spend some more time on the user manual again. Much less FIXME
paragraphs left :)

[1] http://www.grancanariadesktopsummit.org/node/215


2009/06 ========================================================================

May passed quickly. I was testing a lot and as usual this brings bugs to day-
light. I noticed one particular problem, that I still have to solve. Buzztard
songs are actually zip file containing the songs.XML file and references files
like samples. When the song is save the externals are copied from its original
location into the zip. First there is a chance that the file becomes unavailable
between loading it and saving the song (e.g. if the files where loaded some a
sample CD) and then of course if those songs are given to someone then the zip is
all there is. I see two ways to handle it - a) if the file is not available, save
the raw-pcm as a wave-file, b) when loading new files samples, copy these some-
where and keep the file open and when loading a song, copy this somewhere and
keep it open (somewhere = local file system). One thing I already have
implemented is save saving, that is rename the old file, save and in the case of
failure roll back.

There were also a couple of bugfixes in the UI. I had a long session to fix
object destruction and detaching related signal handlers - too bad that the
limitations in g_signal_connect_object() still render it pretty useless.

In the beginning of the month I continued with the work on the buzzmachines
module. I rewrote one effect from scratch and its pretty compatible. I also
added more presets and demo-songs.

While testing more buzz songs I realized two long standing issues. On the buzz
song loader I got one detail wrong from the reverse-engineering - I was loading
polyphonic pattern with voices and time swapped. That was easy to fix and make
many songs sound proper. I made a few other compatibility fixes and improvements
on the song load too. The other problem was actually much more work - the
buzzmachine emulation had a big flaw. When I instantiated a plugin I was loading
the  dll/so once for the class and created the machine instance at the same
time. The emulation API only had a init(). That means for multiple instances I
was "reusing" the class wide instance. It worked surprisingly well :) Now I did a
big refactoring there. In class init the dll/so is loaded and for each gobject
instance I create a instance of the wrapped machine.

Finally I got around implementing one feature in the GStreamer side. There are a
couple of wrapper plugins in gstreamer that act as a bridge between different
plugin APIs. The way this was done had quite a drawback. Whenever the plugin was
loaded, it was re-registering all the element types. In order to do that it
needed plugin specific metadata. So it was loading each of the bridged plugins
and querying the features. It needed two patches to get that changed. Now
gstreamer does not ref each element class of a loaded plugin during loading and
the registry can cache plugin specific metadata. What does it mean practically?
A typical buzz song now loads in a quarter of the time.
  
2009/05 ========================================================================

Lots of testing and small improvements again. Besides the usual valgind sessions
I tried the LLVM/Clang Static Analyzer [1]. There are some annoying warnings, but
lots of correct ones too. Most of them were nothing major, but this is a good
tool to follow. I also got more feedback from the NetBSD packages and worked on
my Maemo port. This resulted in a couple of portability fixes and dependency
cleanups.

With the testing came also many small but nice fixes and improvements. E.g.
stereo wavetable support was incomplete and is now working fine. The pattern
editor got many improvements like entering wave-table numbers, note-off support.
Finally "play notes" is fully done. Latency is a bit better also. With latest
pulsesink in gst-plugins-good git its actually quite okay (thanks wtay!).

The buzzmachines module has more machines ported, I have started to add demo
songs and preset files. This needed some update in the gstreamer plugin too.
Under windows the plugins, presets and help is all crammed into one dir. I have
split it to have docs and presets under share and not in lib.

Thanks for help on gobject-introspection irc channel, bindings start to work.
I have a javascript example that plays songs. Major obstacle was to get the js
syntax right. The python sample does still not work. I hope it will after this
summer of code.

I also reviewed and extended the user-docs. This version finally becomes
usable :) Will do the strings freeze and pre-release tarballs this month.

[1] http://clang.llvm.org/StaticAnalysis.html

2009/04 ========================================================================

We're heading for a 0.5 release! Most planned features are done and thus its
time for testing. I've added some more unit tests. Especially for the dynamic
editing, which now finally seems to work quite fine.

I added more keyboard shortcuts to support the workflow people might know from
buzz. There is one to start playback from cursor-position and several for cycling
through the comboboxes in pattern editor. I started to work on the play-notes
functionality in pattern editor too. One can play notes while editing if song is
playing already. Need to play the song in a idle-loop otherwise. Also need to
figure the horrible latency I get.

One feature that was missing compared to buzz, is that buzz also shows
parameters (volume, panorama) of incoming connections in the parameter view.
We have this now too.

I also refactored some code in the machines and made monitoring more flexible.
As a result the level-meters in the toolbar are now post-gain. Means if you
change the volume you see the level-changing accordingly.

Last change of the month is some eye candy. The icons in the machine view don't
become blurry when zooming anymore. I also added some simple effects to show the
state (desaturizing them or making them half transparent).

LJ has part two of the buzztard article online [1]. Its an interview and tells
you all you never wanted to know a bout me and the project.

[1] http://www.linuxjournal.com/content/buzztard-project-part-2-interview-stefan-kost

2009/03 ========================================================================

Yay. LJ has a nice online article about buzztard [1]. While helping the author
to get the code up & running, I mad several improvments to the configure stuff
to make things more obvious, especially when installing not to /usr. I also
updated the instructions on the wiki [2] and waffel updated our jhbuild module-
set. 

The GStreamer buzzmachine plugin now supports an index.txt file in the search
path. This is used in buzz to categorize machines. The wrapper plugin adds the
categories to the GStreamer classification filed and buzztard-edit uses it to
build a structured menu. This helps makes the menu a bit more useful again. Same
stuff needed for ladspa (via rdf).

The whole machine graph handling is now getting into 2nd phase. I can already
disconnect stuff while playing without breaking things. Adding sources still has
issues :/

I also made a series of UI experiemnts. I now have some code for doing properly
scaled svgs on gnome-canvas. Sofar the machine icons became blurry when zooming.
This was quite noticable in the screenshots of the article. Speaking of those I
am suprised that even today, browsers only do nearest neighbour scaling. As
graphics is fun, I also hacked some pixbuf filter effect, so that I can get icon
variants for selecting and disabling. This will hopefully be integrated in next
month. Finally I replaced the VU meter code with the cairo variant from gbo
#547490 [3] and made some fixes/improvements.

[1] http://www.linuxjournal.com/content/buzztard-project-part-1
[2] http://www.buzztard.org/index.php/Building
[3] http://bugzilla.gnome.org/show_bug.cgi?id=547490

2009/02 ========================================================================

Many not so visible code changes this month. Since last Autumn I have GObject
introspection enabled if available. So far it has not been that useful due to
some wrong use of the GObject in my code. That mostly fix now. Major thing was
to change all _new() function to just call g_object_new and utilize the
_constructed() and _constructor() vmethods in GObject. That wasn't so easy.
Buzztard uses a persistence mechanism [1] to serialize and deserialize objects.
It is implemented as an interface. So also this was needing a lot of changes to
allow construction from a data storage. Fortunately interfaces are tied to the
class, so one can have an interface method that acts as a factory. Main
remaining ugliness in the new code is there are some parameters coming from the
code and some from the file and its not straight forward to create an object
than - I will need to use g_object_newv(), but generating the GParameter array
is painful.

The second big rewrite that is now also merge to the trunk is the new GStreamer
pipeline graph handling. In the past the graph was more or less shallow. 
Machines, the building blocks of a song in buzztard, are a chain of GStreamer
elements. There are volume controls, mixing elements, level meters, converters.
They are all plugged as needed. But they were all plugged in the main pipeline.
Now machines and wires are bins (containers). That makes it much easier to
relink internals and also makes it possible to treat them with normal gstreamer
API. As a first feature buzztard now rebuilds the pipeline before playing and
used a deep graph scan to only add fully connected parts. That means one can
play songs that e.g. have a unconnected source. In the old code this was
stalling the pipeline. The UI has now a debug menu in the debugs build. The one
and only entry allows to dump a pipeline graph, converts it to png and opens it.
Nice to check the constructed pipeline.

There are also some smaller fixes and a few more tests. Its good to have the
tests when doing such refactoring :)

[1] http://www.buzztard.org/index.php/Gobject_serialisation

2009/01 ========================================================================

This month I worked on a couple of small, mostly UI related things, while
drafting bigger plans. There where many TODOs in the code for small improvements
and now there are less. E.g. I now filter more internal GStreamer properties
from ui dialogs. I added some more things to the menus (hide/show statusbar,
toggle fullscreen). The sequence view got some fixes - some shortcuts where
overlapping, the label column now shows cursor and selection and finally the 
cursor is clamped to now leave the editable area. I also started adding a debug
menu in --enable-debug configuration. The only command right now make a 
GStreamer pipeline dump as a dot file, converts and shows it.

I received two more translations this month too. I realized that its not always
easy to translate the texts and added comments above in the code to give some
context.

We're also getting more buzz-a-like. I made the playback start/stop and loop
behaving the same way. Now one can start playback from arbitrary positions.
Finally I also found and fixed one bug that caused noise in the output of
mono-to-stereo buzz machines. Together with some fixes in plugin parameter
handling, this makes more songs playing fine now.

As one item from the roadmap for 0.5 [2], I got rid of libgnome usage. Less
dependencies, yay! I read this nice autotools tutorial [1] over xmas and fixed a
couple of things in my setup. Definitely recommended reading.

[1] http://www.lrde.epita.fr/~adl/autotools.html
[2] http://www.buzztard.org/index.php/Roadmap#Version_0.5_.28crown_of_thorns.29_2009

2008/12 ========================================================================

Finally I have cut a 0.4 release for all buzztard packages [1]. I spend most
time before with maintenance tasks, such as i18n updates (we now have dutch and
dansk translations!).

I started with some features after the release. There are now some nice
gtk-theming improvements for the pattern and the sequence view (we have a custom
gtkrc now that extends the theme). Then the audio settings got ui for choosing
sampling rate and channels. This will be nice for arm based devices if the cpu
power is not enough for high quality as well for doing high sampling rates on
fast machines for max quality.

Naturally people try your software once you released it and not before. Thus we
got quite some amount bug reports. A lot of them were related to portability,
looks like we get it working on BSD. I'll probably do another release soonish.

[1] http://sourceforge.net/mailarchive/message.php?msg_name=492DB0BA.1070204%40users.sf.net

2008/11 ========================================================================

Beginning of October I've been at the Boston Gnome summit and learning about the
GObject Introspection project [1]. The project will help to add language bindings
to libraries in a easy and consistent way. I added the stuff to buzztard libs and
it sort of works a bit already. Cool!

I was showing buzztard to some people at the summit and noticed that samples are
not always imported correctly from buzz songs. This is now fixed. I've tries all
my songs (~50) and it handles them fine for all now. Along with that, I
implemented some missing methods in the buzz emulation layer - sample playback
seems to be fully emulated now. 

I also looked into some ui issues. One was an obscure repaint issue with gnome-
canvas that we use in the machine view [2]. OpenSUSE released an update recently
that has the fix. Unfortunately there is no tarball release that has it. I fixed
another issue where the canvas became blank. I keep the content position fixed
when resizing the window. I was also doing this when the window was bigger than
the visible area and that means doing math with NaNs. Fixed. The last UI issue
was the self made treeview table header. It did not repaint when scrolling. I
tested this with the lovely GTK_DEBUG envvar and the area just stayed red. I got
the size requests synced the wrong way between table, viewport and actual
content.

The last issue I worked on is the interaction between animated object properties
and UIs. We use the GstController to apply the sequence events to the machines.
But also users can change parameters while playing. The sequence events are
suppressed while changing the parameter (e.g. slider), but unfortunately value 
springs back once one releases the control, if there are sequence events. Seems
that we need some API to keep the sequence disabled until the next
control-point.

[1] http://live.gnome.org/GObjectIntrospection
[2] http://bugzilla.gnome.org/show_bug.cgi?id=553997

2008/10 ========================================================================

I began the month with the remainder of the namespace cleanups. Should be all
fine now. The ktorrent guy was not giving in. Well that's their way of handling
it then.

I have registered buzztard with the translation project. All strings are frozen
for 0.4. Now of course I look for translators who are willing to help.

During testing, I discovered that for some bpm and tick resolutions, notes where
swallowed. This was due to different rounding behaviour in the sequencer and the
plugins. This is now fixed. As a side effect, I can now render in any sampling
rate. That will help my mameo version :)

[1] http://translationproject.org/latest/buzztard/

2008/09 ========================================================================

Out of some irc conversation, I gave implementing synced meters a go. Until so
far level and spectrum meters in buzztard were ahead of time. The reason is that
gstreamer tells me about the values once they are computed, but that's not when
the actual data segment gets played. Luckily the message has a timestamp. So all
it needs is to sync drawing with the audio sink. MikeS gave me some good
pointers on irc. It wasn't that straight forward. I found and fixed a bug in 
level meter plugin so that it now puts useful timestamps on messages when it
play loops. It works really great now.

gtk_widget_grab_focus() is a nasty function. It asserts when the widget is not
mapped/realized and steals the focus in any case. This is problematic if you
have tabs and update widgets when things changed. I now have a wrapper added
that does the extra checks. Wonder if that would be a good change for upstream.

I did lot of testing with real buzz songs and machines. I have now about 80
original plugins in use. Real testing always leads to some good fixes :) We now
add an empty pattern by default when adding new source machines (like buzz did).
I also noticed that bpm/tpb information was not loaded from buzz songs. This is
now fixed (also master volume was missing). After that I spotted that most bpm
tempi did not work well. Now timing precision is much better.

A big recommendation to everyone. Pick a decent prefix for your project. I've
been a bit blue eyed and had chosen 'bt'. Part of my package is a core library
called libbtcore. Now unfortunately ktorrent did the same mistake and have a
libbtcore (bt stands for bittorrent there). As neither of them are really
general purpose they should be uniquely named. I analyzed all files I install
and went thought the great pains of renaming everything - libs, binaries, docs
includes, pkg-config files, desktop files and so on. Hope I never have to do 
that ever again. I also filed a bug for ktorrent [1] so that they can fix it
before its causing problems. Interesting how they dealt with the report - "I was
first with libbtcore - RESOLVED AS WONTFIX". Interestingly I was 1.5 years
earlier, but that wasn't the point at all.

[1] http://bugs.kde.org/show_bug.cgi?id=170674

2008/08 ========================================================================

Wow, July went fast. I spend most time with my family. Still a few news from the
development front. I worked mostly on wavetable view. It now features more 
proper sample playback. I wrote a memory audio source for GStreamer. It supports
forward and backward playback. This is needed for e.g. ping-pong loops. Also now
changing things takes effect while a sample plays. Our waveform widget also
shows a playback pointer and loop markers. I also got around to unify and merge
duplicated note conversion code. You know, when you've copied something the 3rd
time, its time to refactor.

Earlier this month I refactored the song-io plugin API a bit. It has now more
metadata. This helps the UI to setup file and recent filters. Unfortunately I
had to find out that the mime-type detection in glib was broken [1]. Its at
least fixed in trunk. No idea since when it actually worked. As a workaround I
am now adding "*.xml" to the filters.

[1] http://bugzilla.gnome.org/show_bug.cgi?id=541236

2008/07 ========================================================================

Some very visible changes this month - svg machine canvas icons. For that I
needed to add better icon theme support. All icons are now themeable and colors
are matched with the theme. Machines now have tiny level-meters embedded in the
icon.

I also found a solution for slow start of playback in complexer songs. Data-
format-negotiation is not deterministic in all cyclic gstreamer graphs. Proposed
patches are attached to Bug 540645 [1].

Finally I got around implementing support for a zip based song format. This
can contain binaries (like the samples being used). The loader is based on
libgsf [2], which turned out to be a pleasant experience.

I also added filters to the load and save file-choosers and to the recent-chooser
in the new recent menu. Still fighting with the filter not doing a precise
detection [3].

Next on my todo list is refactoring the song io plugin api a bit. Right now
there is too much hard-coded data (like mime-types, format names, extensions). 

[1] http://bugzilla.gnome.org/show_bug.cgi?id=540645
[2] http://directory.fsf.org/project/libgsf/
[3] http://bugzilla.gnome.org/show_bug.cgi?id=541236

2008/06 ========================================================================

In the previous month I worked further on sample support. Samples are played now
from memory and can be transposed. Also the buzz song import plugin got sample
support added. This means I can load now a big share of my existing songs. While
testing those I could fix some more issues with plugin initialisation and those
song sound like in original buzz now. Yah, we're getting there.

The current version also brings some eye-candy, Marc (aka deloun) drew us great
icons in tango style. I reworked the code to load all icons via theme mechanism.
I also allocate other color based on chosen theme now. One thing left for June
is to start using the svg on the canvas.

2008/05 ========================================================================

As can be seen on our roadmap [1] sample support is scheduled for 0.4. As this
is the major feature, we started working on it. I have to say that building
buzztard on top of GStreamer was definitely the right thing to do. We can now
load whatever GStreamer can handle. FSM did a nice cairo-based waveform widget.
Right now I am working on the code that allows plugins to access the wavetable.
It will hopefully be ready real soon.

Besides that I've started to restructure the gst-buzztard package a bit further.
I also plan to merge the buzz wrapper plugin into it. The aim is to reduce the
number of packages that one needs to build.

[1] http://www.buzztard.org/index.php/Roadmap

2008/04 ========================================================================

After the release I demoed it some friends and obviously found some issues. Now I
spend the rest of the month tracking then. Its mostly ref-counts issues. Why are
the so nasty? Well unlike memory leaks, they are anonymous. Memory is allocated
once and should be paired by one free. The id of the resource is the memory
address. Now every ref should be paired by an unref, but all the refs and unrefs
share the same id (address of the object). So how to figure which ref is not
having the unref? Refdbg [1] can trace object and gather backtraces for
ref-count operations. So one has to go through the list one by one, remove pairs
and study whats left. Its not easy, but it works. 
Now why is this so important. If the refcount never reaches 0, the object is not
disposed and occupies memory (until the application exits). Under valgrind it
would appear under reachable memory usually. For most apps it has no immediately
visible effect. For gstreamer app it has. In buzztard I do dynamic stuff with
pipelines, like adding and removing elements. If you get the ref-counting wrong.
The element is unlinked but not disposed. If the pipeline is set to PLAYING one
gets data flow errors. But then its not a gstreamer only problem. E.g. icon theme
pixbufs in gtk. If the are not unrefed, gtk cannot unload the theme. Means if
you try a bunch of themes, none of the is unloaded if even just one panel
applet has a ref-count issue. The sad thing is that the gnome libraries have
quite some ref-count leaks. I've started to track and fix them as its hard to
see something within all this noise [2][3].

I've released buzztard-0.3.1 with the fixes. A few more developments to mention:
Waffel started a demo for the zip loader based on libgsf, Deloun made great svg
designs for the machine view canvas and the tabs and Herzi send me a patch to
add native scrolling in the pattern editor. Now back to new features, yah!

[1] http://refdbg.sf.net
[2] http://bugzilla.gnome.org/show_bug.cgi?id=525815
[3] http://bugzilla.gnome.org/show_bug.cgi?id=66513

2008/03 ========================================================================

The Linux Audio Conference 2008 was nice once again. Good talks, interesting
know-how exchange and of course opportunities for testing and hacking on
buzztard.

I have improved the playback engine a bit. It now uses less additional latency.
Still one get much lower latency by using jack, instead of pulse audio
(currently experimenting to lower latency there too).

The pattern editor got better gtk+ theme support (especially on dark ones) and
also tries to use the default monospace font and font-size to better match with
the overall look of your desktop. I implemented blending value ranges and
randomization of ranges. FSM implemented more keyboard shortcuts. I added value
descriptions to the status bar where the plugin supports it.

Also the sequence editor got some todo-fixing. The sequence was never
horizontally scrollable (adding columns would force the window to be wider). The
M,S,B buttons are now color shaded when pressed to give better visual clues.
Finally also the position unit switcher is functional (ticks/time) and the label
navigator gets properly updated. Lots of small things I never got around until
now

Level meters in sequence and analyzer windows are now more lively and precise.
Having several analyzers open now also produces the expected results.

The buzz song importer got further fixes. It seems to load all of my songs just
fine now.

Some improvements also on the buzz emulation side. More machines load and work.
We have a nice testsuite with html reports now. I spotted some issues which will
fix more machines. Will try to implement this next.

If nothing urgent comes up. I'll prepare the release in the coming days. Stay
tuned.

2008/02 ========================================================================

We're heading for a release. There is a few more features that we'd like to
finalize. Then its time for testing and this is were *you* can help.
Featurewise buzztard improved nicely this month. I improved stereo support.
We now have new look for the wires. They show animated volume levels and
panorama positions. Both volume and panorama can be adjusted via popup-sliders.I
like this a lot more that how it works in buzz. There it was a bit confusing in
some cases (not clearly indicating which connections a panorama setting would
affect). As an extra bonus, buzztard does stereo balance on stereo connections.

I also updated the buzz song importer to make use and correctly import panorama
and volume. Now also the master-volume is mapped to the scale used in buzztard.

FSM worked on the pattern widget. It supports variable cursor stepping (going
down several lines at once) and selection. I added column/group/all insert and
delete actions.

Finally Waffel wrote a jhbuild module set for buzztard [1].

http://www.buzztard.org/index.php/Building#Building_with_Jhbuild

2008/01 ========================================================================

I guess tracker-style music editors have to live with the heritage of tabular
pattern input. Some feature rely heavily on it. FSM started with such a widget
and I integrated it into buzztard. One can still switch between the previous and
the new one by setting a define. The widget works quite nice already. The only
missing feature is native scrolling support. To add that to an own widget
requires an ugly hack. I can't figure why gtk does not use an interface for it.

Patterns in buzz also carry volume and panorama events for the inputs of the
machine. This was totally missing in buzztard. Now we have quite nice support
for it. The volume control works and panorama/balance support is next on the
to-do list. While working on that I made master-machine patterns useful by
allowing to control master-volume,

The sequence view got more commands. Finally one can insert and delete rows in
all columns or only in the current track.

If that wasn't enough, we also did a round of maintenance. All code has been
moved to svn. The buildbot has been extended to build all modules now.
And finally I got around to port the code to not use the deprecated gtk tooltip
API if new gtk is available.

That's a great start for 2008 I'd say!

2007/12 ========================================================================

After porting some simpler machines last month, FSM and myself where looking at
infector. This already is a quite complex generator. Porting as such wasn't that
hard, but unfortunately it did not play. But with the sources at hand we could
figure out what the issues was and fix the problem. It was a generic problem in
the buzzmachine host emulation. This could potentially also make other machines
work. Note to myself - I need to re-test the blacklisted ones.
One outcome of the better machine compatibility is that some of the original
buzz song now plays with some extra manual help.

Some improvements on the UI side also. The spectrum analyzer window is now
re-sizable. We also have a workaround for a gtk+ bug [1], there is now an
accelerator to start playback.

Unfortunately my recent attempts to merge my preset iface [2] to gstreamer got 
stopped again. I need to try harder poking the other developers to review it.

That's it for this month - happy x-mas month to everybody.

[1] http://bugzilla.gnome.org/show_bug.cgi?id=131177
[2] http://bugzilla.gnome.org/show_bug.cgi?id=396779

2007/11 ========================================================================

Very good news for buzz lovers. Recently FSM joined #buzztard irc channel. He
gave us access to his buzzmachine sources and the okay to publish them under
LGPL. One thing that I had on my list for too long was to extend my
buzz-emulation layer to support natively built buzzmachines. Well now its in CVS,
A bml/gstbml rewrite to support native machines + initial 5 machines working.
Means approximately 900 to go. One thing that we still need to be able to port
some machines is a native implementation of buzz's dsplib. We will look into
that next and of course port more machines.

Some small progress also in the UI. I've added track reordering in sequence tab
and keymap independent note entering (y vs z mapping on different key layouts),

2007/10 ========================================================================

Before its getting even later, here is the monthly update. I worked a bit more
on the 'state persistence' - a song now tracks opened machine and analyser
windows. There are restored when loading the song. In continuation of previous
months efforts The machine view got some hot keys now too. 

Now that lcov-1.6 is released, I've added a configure check for it and use the
new options. The new version does not need to be patched anymore to generate
coverage reports for user-space apps. While testing the overage, I also added a
few more tests to increase it.

Waffel has updated our MediaWiki. Now we have opened it again. Unregistered
users have to solve a captcha every time they edit or when they register. I moved
our changes into a separate skin to ease further updates. I have tweaked the css
a bit - more to come if I find good inspiration.

2007/09 ========================================================================

The first big change this month came from berzerka. He wrote midi support for
the interaction controller subsystem. That required some extension of the
classes, specifically adding a learn mechanism. That is you click a machine
property, select learn, touch the midi-controller and done.

One important requirement for a power tool, is having keyboard shortcuts for
almost everything. For the main menu its easy to do so in gtk+. But then we
have context menus and toolbars. So I read API docs and code, wrote test
programs and files bugs and patches [1][2]. The fix for [1] is in svn now, but
the patch in [2] needs review, anyone? Generally the keyboard accelerator
functionality needs some updating, seems that this has been mostly taken from
gtk-1. At least I could not figure out how to e,g. define two accelerator to
e.g. select previous/next item in a combo on a toolbar. Sure most apps won't
need this, but for productivity tools this is quite mandatory. Finally I wonder
what is the policy for the media-keys and how to use them. My gdkkeysyms.h
include does not have symbolic names for them.

While we're talking about gtk, imho the GtkRuler widget is not that esoteric, it
would be quite useful if it would have some bugs fixed [3] and be more
customizable (non-linear scales, more units).

Last month I have started the song-recording UI. The command-line tool already
supported rendering songs to mixdown files. Now there is UI for it too. In
addition to render a mixdown it can also render each track to a separate file.
This is great for postprocessing in a multi-track editor like jokosher [4].
Ideally we could even create a project file for some editors -help is very
welcome. 

This month I also started to look into live song graph editing. Sounds scary?
Its is! GStreamer requires some extra care when adding or removing elements while
playing. I did this now for the wire-analyzer, that plugs spectrum analyzer and
level meter into a wire. With the changes it works reliable now and doe not kill
the playback. Next step is to do this for the song itself too. 

Waffel improved out wiki a bit. We now have geshi extension [5]  installed. This
adds syntax highlighting to sample code. Really nice. 

[1] http://bugzilla.gnome.org/show_bug.cgi?id=469374
[2] http://bugzilla.gnome.org/show_bug.cgi?id=131177
[3] http://bugzilla.gnome.org/show_bug.cgi?id=465041
[4] http://www.jokosher.org
[5] http://www.mediawiki.org/wiki/Extension:GeSHiHighlight

2007/08 ========================================================================

Quite late this month. Our son was born on the 26 of July and this of course
causes some priority shift. Be assure I won't abandon then project. Also
berzerka is back and started hacking on midi control support. Speaking of this,
I did a needed refactoring of the interaction-controller stuff. Controller
assignments wont disappear when closing the dialog anymore and they are now also
saved with the song and restored when loading. I also implemented unbind and
unbind-all commands.
One TODO item is greater ui state persistence [1]. When loading the song should
appear as you left it. One more item for this is done, the active tab is saved.
This is a relative easy one for people that would like to help.

Our testing buildbot is now again up and running. The system had a faulty
battery, which made the clock run way too fast. In seconds the clock was minutes
ahead. I used the occasion to refactor a lot of dialogs into separate classes.
This allows to write some basic unit tests for those and do automated
screenshots as well. Together with some more regular tests, this greatly
increased test coverage. It of course uncovered bugs which we fixed.

As a final step I started with song rendering ui. The ui is not perfect yet, but
it starts to work. It looks like I can prepare a 0.3 quite soon. Yay!

[1] http://www.buzztard.org/index.php/Ui_state_persistence

2007/07 ========================================================================

This month the ui (bt-edit) got improved. Editing pattern became usable - I
advance the cursor, triggers and notes can be editing as usual in a tracker. The
base-octave setting is implemented.

I also worked on the buzz song importer. One goal I set myself is to be able to
load and play some of the song initially shipped with buzz. Right now I try my
luck on Aenathron.bmx. The song is just 34 kbytes, but plays for more that 5
minutes. Geonik's primifun causes some headache for me as it imports a zillion
windows libs, thus I removed it from the song for now. To be able to load the
song I had to add support for old (< version 1.2) songs. The song loads, but
only produces cracks and pops so far :(.

Experimenting with loading various buzz songs also help to improve the machine
compatibility. More machine start to work. I have improved the logging in the
emulation module. the GStreamer buzzmachine wrapper go blacklist support to
disable those that are known to crash.

Unfortunately the recent changes need GStreamer form CVS again. One bug was a
silly copy'n'paste of mine, the other one got fixed by master-hacker Wim Taymans.

What else? More test work has been done. For release 0.3 I'd like to improve the
test coverage. Also kudos to Sebastian Dröge - Google summer of Code student. He
did a great job on the GstController improvements. We now have arbitrary control-
source support with backwards compatibility to the old limited API. A control-
source provides a time variant signal that modifies a GstElement parameter.
Right now there is a interpolation source, that provides a envelope and
triggers. Planned next is a LFO (low frequency oscillator).

2007/06 ========================================================================

Right after releasing 0.2 I hammered CVS with more changes. I fixed a long
standing bug, when request-pads in adder and tee where not handled correctly.
After disconnecting some elements the song never played again. I also added code
to guide format negotiation when using adder - it needs a caps-filter afterwards
that enforces audioconverts after all incoming source to the same format.

In bt-edit I totally rewrote the fake-selection handling in the pattern and
sequence view. I also added a gtk+-version dependent workaround for the cursor
navigation bug. Right now I work on improving the editing in the pattern view.

It was a short month as I also was on holiday in Germany. I rearrange the
release schedule [1] a bit and hope to release another version this summer. It
will improve stability and have some more code cleanups.

[1] http://www.buzztard.org/index.php/Roadmap

2007/05 ========================================================================

Lots of commit and bug tracker activity this month. As we're heading for the 0.2
release I spend most time doing bugfixing. Berzerka discovered that song-saving
was flawed. Editing the patterns did not always took effect. Removing machines
had leaks and ref-count problems. There were some long-standing gtk-warnings.
All fixed in CVS. Finally that loop-playing problem got on my nerves. I was
trying to fix that several times in the past already. Finally I found that it
was a small issue with GStreamers adder element. Many thanks also to Henri
Valta, who contributed several patches. All the new testing also lead to some
new and some re-enabled unit tests.

Beside fixing, I was also working a bit on the features. The interaction
controller now works for input devices (via evdev). I've tested it with a USB
joystick and the harddisk in my laptop (via hdaps). Control devices are detected
via HAL and shown in the menus. One can assign those to effect parameters. Using
the accelerometer in the harddisk, one can control e.g. filter-cut of and
resonance by tilting the laptop - how useless. There is one flaw to mention -
the bindings aren't yet persistent, close the window and there gone.

Finally in gst-buzztard we have a first working version of a fluidsynth
GStreamer source. Josh Green the author of swami [1] made the initial port.

I will now start to prepare the release. Should be out in the coming weeks.

[1] http://swami.resonance.org/trac

2007/04 ========================================================================

LAC 2007 was great. Was nice to meet all these people. The buzztard demo was
well received. I will try to make a screencast of the upnp remote control
feature. I could only demo it there at a second attempt as I didn't received the
wifi router which was needed for the demo. I have put the slides online [1] (if
someone knows how the get rid of the stripes that openoffice 2 produces when
exporting slides with a gradient in the background to pdf, I am listening). For
the slides I updated the architecture picture and put it on the wiki too [2]
The time there was good to fix a lot of small issues. I believe its a good time
to try the project now. If everything goes right we try to release a 0.2 end of
April.

First bigger change is the settings UI. We have icons there for the subpages and
there are two new subpages - for the playback controller (upnp via coherence)
and for the coming interaction controller. The settings of the playback device
is instant apply now (except when playing, it will be switched after stopping).
Speaking of the interaction controller - implementation has started there. This
is one thing I would like to get into 0.2 still. I'll explain in more detail
once it is done.

I also spend lots of time doing maintenance - the api docs have been updated,
extended and uploaded, thanks to some valgrinding sessions some memleaks have
been found and fixed and refdbg helped to track down more ref-count issues.
Also now 'make distcheck' runs through for the first time. Finally I could fix
one xlib warning, which broke playback when playing with realtime effects.

During and after LAC I also spend time to work one small, but annoying things.
First I refactored the missing machines dialog so that it can remember elements
it already warned about. Next items was the level meters, they now are more
reactive and show current as well as peak level. The ui should be a bit more
usable too. The keyboard shortcut for switching between patterns and sequence
(ctrl-enter) was broken. When adding a new src-machines it also creates a track
in sequence automatically. In pattern and sequence view bt-edit shows unused
patterns in gray color (in the menu/list).

Altogether a nice list of fixes and enhancements.

[1] http://www.buzztard.org/files/lac2007_buzztard.pdf
[2] http://www.buzztard.org/index.php/Architecture

2007/03 ========================================================================

February passed really quickly. I was quite busy preparing the FOSDEM talk.
Still I found some time to work on the project. Again I had to hunt some
refcount leaks and it took me days to track them down and fix them. We also had
more testers in the channel and could fix some build problems. Right now I am
working on some features for the LAC 2007 demo in Berlin. For those who can't be
there - I will write more about these new things next month.

Slomo and me are improving the audio plugins in GStreamer. He writes more
elements (like a compressor/expander) and I improved the existing ones to better
support float audio (32 and 64 bit). We now can play some more files and also
need to less often convert.

2007/02 ========================================================================

Last month I started to offer extensions from the buzztard project for gstreamer
inclusion [1][2][3][4]. I believe that the idea behind is generic enough to
support them. The discussion and interest has been relative low so far :( I'll
probably interpret this then as agreement and commit the changes. The preset
handling has been improved. The buzz presets can be saved now too and meta data
(comments) can be edited as well. The generic implementation also shapes up.

As my solution for [5] seems to be disliked I went for a hack :( I now hide the
treeview headers and simulate my own. Now the header widgets work. As some extra
sweetness the header have per track volume meters. While working on this I also
made the label-browser function. It allows to jump to labels in the timeline.
Wanna see how it looks?
<a href="http://www.buzztard.org/index.php/Image:Bt-edit-0.1.0-01.png"><img src="http://www.buzztard.org/images/thumb/2/2a/180px-Bt-edit-0.1.0-01.png"></a>

I also started to add some functionality to the wavetable page. Its now possible
to browse the files and preview the selected entry.

I was curious how well the buzz song import now works. Especially with the
better handling of missing machines. So I added a test script, similar to the
unit test in core, that runs over all your buzz songs, imports them and dumps
basic info into text files. Then it greps the text files to generate most wanted
machine top 10 :).

Last weekend I did a first rough port of buzztard for the N800. I have some of
the UI changes in place already. The GStreamer side was pleasant - no changes
needed. Unfortunately the gstreamer on the device is not the most up to date and
thus the app does not work too well.

[1] http://bugzilla.gnome.org/show_bug.cgi?id=396774
[2] http://bugzilla.gnome.org/show_bug.cgi?id=396779
[3] http://sourceforge.net/mailarchive/forum.php?thread_id=31560403&forum_id=5947
[4] http://sourceforge.net/mailarchive/forum.php?thread_id=31471237&forum_id=5947
[5] http://bugzilla.gnome.org/show_bug.cgi?id=338271

2007/01 ========================================================================

In last month news I wrote about the gst element check. Now we also have the
respective UI parts. The apps check if the have mandatory and optional elements
available. If elements are missing the user will see an explanation which are
missing and what for they are needed. For optional elements its up to the user
to decide if that is okay or if they should be installed. In the future we can
make use of the new gstreamer libgimmicodec mechanism, to download and install
missing elements on the fly.

I also continued working on the preset support. The interface got some default
implementation, e.g. to generate a randomized preset. The buzzmachine wrapper
implements most of the interface. We can load presets, rename and remove them.
The later two actions are not yet persistent - I need to implement saving still.
On the UI side I implemented the preset pane for the machine settings window. I
decided not to copy the buzz UI here. I should post a screenshot soon.

I also went over the todo: comments in the source once again and implemented
things here and there. Now one can add/removed tracks for polyphonic machines.
Also adding/removing tracks in the sequence is now working fine and updates all
UI items properly.

Right now I am also giving the dialogs an overhaul. All got a default action
(e.g. press enter to dismiss). They also get moved into a separate object each.
This helps to test them standalone and to auto-screen-shot them during the test
runs.

Finally I spend some time configuring our buildbot [1]. For the first time all
steps are green. The machine the test run on does not have X11 running. Still we
can run UI tests and do screenshots of all windows. The magic can be found in a
few helper methods that pick a free display number, spawn a Xvfb server and
setup a GdkDisplay for gtk+. The buildbot stuff definitely rocks! I hope we can
extend this in the future - anyone found a way to trigger builds from
sourceforge.net cvs commits (via commit hook)? Make me happy and mailto:
ensonic (at) users (dot) sf (dot) net.

[1] http://141.57.8.70:8010/

2006/12 ========================================================================

This month we fleshed out the planning for 0.2. From now on we like to release
often and regularly. We defined a lot of small gtk UI tasks. If you like to
help, we welcome you with open arms on irc://irc.quakenet.org/#buzztard.

First changes after the release are already in CVS. I worked on the buzzmachine
emulation. I can now handle some more plugins. We need to update and re-run the
coverage tests to get a clear picture. Regarding wrapper gst-elements we have a
bug in gstreamer bugzilla that needs some work [1].

I also worked on the UI a bit more. The machine preferences and properties now
have some reasonable size. Its not easy to get a default size for generated UIs.
Right now I clamp the height to the screen-height minus some extra. Would be
nice to have some way to figure how much space one should leave for upper/lower
panels. I also needed to add a workaround for the window-width wobble. If you
had sliders with labels in the UI, the width was dependent on the label with.I
can't really know the maximum width beforehand easily, so I had to set a default
width. Good enough for now.

I also started two new interfaces for gstreamer elements. First one is about the
help documentation of the element. Buzztard can show the docs of buzzmachines or
the gtk-doc of native element already. The second iface is about the preset
handling. Implementing that for the buzzmachines is next on the todo list.

Finally I also started to put some gstreamer element check into the core lib.
During configure we can't check for installed elements and it wouldn't make
sense anyway. So we are going to check for mandatory and optional elements at
application start. Checking works fine already. Now I need to add the UI dialog
for the missing elements report.

Have a nice christmas month - we'll get back to you next year.

[1] http://bugzilla.gnome.org/show_bug.cgi?id=350477

2006/11 ========================================================================

Finally! We did release 0.1 "genesis". In June 2002 we registered the project
and started thinking. For more than year nothing big happened. In February 2004
the first GStreamer example code landed in CVS. That was using GStreamer 0.8.
Then the metamorphosis began: using GObject, adding unit tests, API docs, user
docs and so on. In August 2005 came the switch to GStreamer 0.10. In summer 2006
our team grew from 2 to 4 developers. The whole project already contains 139000
lines of code.

Even though the current code is maybe a bit rough and the applications are not
that usable yet, we're confident that new releases will follow quickly and bring
the missing pieces. If you want it happen faster, join the project. We have lots
of tasks, some with a fleshed out concept, some merely ideas, some suitable for
not so experienced developers, so quite tricky. Give us a visit on
irc://irc.quakenet.org/buzztard.

2006/10 ========================================================================

Finally I found some time to work one one thing that was getting on my nerves.
For the unit tests we now have a BtTestSettings class. This allows us to
simulate all sort of settings. The other benefit is that we don't need to make
sure that we don't modify user settings during test runs. And we get not hit by
my favourite GConf nastyness anymore [1].

Next I did a lot more bugfixing in the UI - or lets call it implementing
previously unimplemented stuff. Added some more tooltips here and there, syncing
data displays and so on.

Waffel spend some time so set up a buildmaster and a buildslave. This way our
code gets rebuild every 6 hours. The 6 hours cycle has two reasons - our
cvshook-script (from fdo) does not run on sf.net and the sf.net anon-cvs has a
big delay. Anyway even the current setup revealed some bugs, where some of them
are already fixed.

Tommi fights with cairo to build a real pattern editor widget for us. Hope we
can post some screenshots from it soon.

[1] http://bugzilla.gnome.org/show_bug.cgi?id=316331

2006/09 ========================================================================

Lots of news this time. Also this time I welcome another team member on board -
Tommi 'nbd' Sakari Uimonen. His first action was a code review of the core lib
and a big patch that const'ified it more. By giving him a quick demo of the
application we also uncovered a lot of bugs. Next nbd will work on a pattern
editor widget.

Berzerka implemented song-length changing. The list will be dynamically expanded
as one scrolls down. Also keyboard shortcuts are coming to set length and move
the loop area.

While we were working on the sequence display, we fixed the step filtering for
different rhythms and also implemented many details for rhythm support (other
than 4/4). Speaking of the GUI - lots of changes there. The machine view looks a
bit nicer and has some zoom and layout fixes. Zoom fit was a bit harder than
expected and seems to be still not always be correct. The context menu to add
machines is now hierarchical. In the status bar we now show CPU usage. At least
during development this is quite useful.

Lots of code has been added to handle error situations better. If you load songs
with missing machines or samples, these components will be tracked. After
loading we present a report of missing elements. Later we can add machine
download or to specify a new location if the sample has been moved or renamed.

Many task were done to prepare a first release. We now have a nice about dialog.
It also shows the latest release notes. This dialog will always be shown once
after updating. The user guide is more complete. German language catalogues are
complete. Finally a lot of cruft code has been removed.

I also worked a bit on the buzz machine emulation. It now also support stereo
machines (need more work on the application side). The example buzz songs have
been fixed. The now all play again. The gstreamer buzzmachine plugin generates
better parameter names. It also maps some parameters to enums. Instead with a
slider, they are presented as a dropdown then.
