|
Posted
almost 15 years
ago
As there was no project news over x-mas, I have a slightly
longer one this time. Before I dive into the usual code
changes, something else - tadaa - we have a new webpage. The
previous page was a mediawiki with a few customizations. Now
we
... [More]
use a combo of wordpress-3 and mediawiki. Both use a
similar theme (based on the arch linux one).
Wordpres gives as news, forum, social-network features and
much more. The first days I was suffering a lot from
wordpress account creation spam. Luckily this seems to be
under control now. The concept and a lot of the work was
done by Joe Pea. We both have quite a few more things on the
todo list. One of the next items is single sign in for
wordpress and mediawiki. Stay tuned.
In the last two month I improved the song-recovery workflow.
The recovery is now giving better feedback to the user and
we're properly cleaning up afterwards. The machine machine
and pattern view do now have almost full undo/redo.
Quite several times already I had to deal with a dialog
containing a treeview showing a list of items. The latest
example is the song-recovery dialog. Giving such a dialog a
nice good initial size is tricky. The treeview usually goes
into a scrolled window. By default one can see the headers
and maybe one line. Of course one can resize the dialog a
bit, but as the line height is not easy to figure it is
still not easy. One approach I came up with is to grow the
dialog to show all lines until it would exceed a certain
limit. The limit would be e.g. half of screen or window
height. The code for that is quite simple:
list=gtk_tree_view_new();
g_signal_connect(list,"size-request",G_CALLBACK(on_list_size_request),NULL);
...
static void
on_list_size_request(GtkWidget *widget,GtkRequisition *requisition,gpointer user_data)
{
gint max_height=gdk_screen_get_height(gdk_screen_get_default())/2;
gint height=2+MIN(requisition->height,max_height);
/* make sure the dialog resize without showing a scrollbar until it would
* reach half screen height */
gtk_widget_set_size_request(gtk_widget_get_parent(widget),-1,height);
}
Another thing in gtk that I wonder if it has a better
solution is the disposal of popup-menus. The problem is that
gtk_menu_popup is not taking ownership of the menu, but
there seems to be now event when the menu is done, so that
one can unref it. The only solution I can see is the pre-
create the menu and ref-sink it. When the entity that owns
it is disposed it can destroy and unref it.
As we're quite gtk related in this time anyway one more
discovery. Listening for key-press-event instead of key-
release-event and widgets makes key-repeat work. Have added
that to the gtk api docs.
Beside all the things above a couple of bug-fixes went in
(make preferences in machines work (e.g. choosing fluidsynth
instruments). I did some refactoring on midi controller
handling; one can use the pitchwheel now and continuous
controllers work better. Finally the dialogs warning about
unsaved changes are more user-friendly; they now show the
time passed since last saved/created in addition to the
timestamp.
50 files changed, 2402 insertions(+), 1183 deletions(-) [Less]
|
|
Posted
almost 15 years
ago
GObject reference counting
Last month I made good progress on the undo/redo. I am now
running the undo/redo
in sync with the object lifecycle. The downside of this is
that undo/redo fails
when you have ref-count leaks. This now makes them
... [More]
more
apparent. When trying to
debug them I noticed that refdbg is not working
anymore since quite a while.
I was googling what other people use for such problems.
Well, apparently
everybody hates ref-count issues. Also most of the info you
find is how to get
traces for refcount activity. That is what refdbg does also.
As this did not work
for me anymore I've tried systemtap. Unfortunately right now
its not useful for
user-space work on most distros (except fedora) - bugs
filed. Next step:
gdb scripting. I
managed to get a gdb
script running. Now even for simple cases you
quickly end up with a log of 150 backtraces. That is a lot
to manually review. I
went one step further and wrote a
script to filter the traces. Over time I
got the trace-log down to 20 entries. This is practical.
Unfortunately the gdb
script only work for tracing the lifecycle of one particular
object. If I extend
it to work for all refcounting activity I hit a gdb
limitation to not allow
nested commands :/. Back to refdbg :) I finally figured why
it does not work and
have started to
fix it up. Lets see how far I get next month.
Buzztard
Naturally this used most of my hacking time. Still I managed
to make some progress there as well. The buzztard
irc channel was much
more active this month. People reported small things here
and there and most of
it got fixed right away. The manual got some more love too
to help people to get
started and improve the description of several concepts.
Finally all the
refcount-debugging leads to a lot of code reviews. I found
several areas with
lots of needless refcount activity - fixes are in the
repository.
81 files changed, 2682 insertions(+), 817 deletions(-)
[Less]
|
|
Posted
about 15 years
ago
gstreamer projects
In October I had not much time for buzztard. I went to the
GStreamer conference and the CELF Europe. There I gave a
talk about the "MeeGo multimedia
stack".
I also hacked on two GStreamer tool projects; gst-tracelib
and
... [More]
gst-mediainfo.
In tracelib I worked on a UI to monitor gstreamer pipelines
on the fly. My approach to use libgvc (graphviz) for the
layout seems to challenge it a bit though - I get very
mysterious failures. At some point
realloc is failing to e.g. allocate 96 bytes and the lib
calls abort().
mallinfo() from libc is telling that the process uses 200 mb
and valgind has nothing serious to complain about. That's
weired as I was suspecting a corrupted memory list. I have
to put that aside for a while until I get some new ideas for
tackling it.
gst-mediainfo is the UI for the new discoverer API in
GStreamer. I'll make a first release when the current
gstreamer core and base is out as it depends on them.
In buzztard I mostly worked a bit on the crash recovery and
did some bug fixing. Hopefully will have more time in November.
14 files changed, 325 insertions(+), 166 deletions(-)
[Less]
|
|
Posted
about 15 years
ago
buzztard
After all the initial work for journaling of edit events in
the editor, I wanted
to get a first proof of concept that everything fits
together. And that I just
got. The pattern editor implements a change-logger
interfaces. It grabs
... [More]
the
changelog singleton instance and logs all changes together
with the undo action.
The redo-action gets serialized and written to the
changelog. The ui can
undo/redo activities by using the change-logger interface.
Upon startup the ui
checks for leftover change logs, auto-cleans a few of them
and offers a dialog
for deleting/replaying them. I can now load a song, make
changes in the pattern
editor, ctrl-c/kill the app and replay the log when starting
it again. There are
a couple of details that need to be cleanup and some things
need a bit more
thinking: Next I will implement this in larger scale also.
As a continuation from last month I changed the whole editor
UI to use
G_DEFINE_TYPE and co. Boring work, but good to have it done now.
I had some strange crashes in the test suite - all pointing
to gconf and only
happening with the commandline client. After adding lots of
extra logging there
I still could see nothing wrong. Then I remember the hack I
added to get a
eventloop into the app - I run it as a new thread. By doing
that I was doing
gconf bits from different threads too and it does not seem
to like it. I have
now done the mainloop stuff more properly and get no more
crashers. While
looking into this problem, I cleaned the settings classes
and the gconf backend
a bit. It now does more stuff only as needed, improving the
startup time of
buzztard app a little further.
In GStreamer next core release will have extra metadata on
element factories.
This mechanism allows me to kill the one-property help
interface. I rewrote all
the code to use that conditionally and will remove it in a
year or so.
As a last bigger task I migrated from deprecated HAL to
GUdev. I have still
conditional support for both, but will kill the HAL code
once everything works
nicely. I was using hal to discover input devices
(joysticks, wiimotes,..) and
midi-devices that can be used to control effects. Most of
the conversion was
straight forward. I spent a bit more time on getting nice
names of the found
devices for the UI and to classify midi-devices. For the
midi-device
classification I copied the matching rules from HAL - after
all they seemed to
do the trick there. For the ui names HAL was actually
grepping through various
files (e.g. /proc/asound/cards) for soundcard names. That I
did not really
wanted to copy. I got some great help from the udev people
and learned that udev
devices have properties like ID_VENDOR. One just needs to
walk the device tree
to get to the root device and grab the names there.
119 files changed, 3377 insertions(+), 1953 deletions(-)
[Less]
|
|
Posted
about 15 years
ago
tracking down udev hangs
I still face some problems on my new computer system. One of
them iswas that udev was hanging in 8/10
cases at bootup.
Thanks to great support from the udev folks I learned how to
track it down. I previously tried to
... [More]
add options to
/etc/udev/udev.conf (e.g. to raise the log level), but one
can actually just add them to the kernel options.
This has the great advantage that they don't persist. Things
you want to add to debug are:
udev.log-priority=info udev.children-max=1
udev.exec-delay=1
This logs a lot of things (the boot can go from 30 second to
minutes, so be patient).
The option children-max is turning parallel event execution
off and exec-delay is delaying run actions.
With those I saw that the system hangs when loading the
cdrom.ko kernel module.
As I had some problems with the drive as well I swapped it
and now bootup is fine.
[Less]
|
|
Posted
about 15 years
ago
working on multimedia for MeeGo at Nokia
If you like to work on free software and like snow - we're
having a few open positions:
GStreamer Developer
GStreamer
Developer/Architect
Specialist, GStreamer
Camera
PulseAudio Developer
Ping me on irc (ensonic @ freenode/gimpnet) if you have
questions.
|
|
Posted
about 15 years
ago
buzztard
After some more work bt-dec starts to works better. I can
now play buzztard songs in totem, banshee and co. I still
see some issues with seeking though.
I have be going through my pending gtk bugs and patches. I
can see a lot of
... [More]
activity in gtk+ these days. People have
been helpful reviewing and commenting the changes. I could
close two of my bugs with patches to code and docs
committed. At the same time I also understand a few things
better and reworked the focus handling on the tabs. Instead
of listening to focus notifies and then grabbing the primary
widget on the page, I am now overriding the focus vmethod
and grab there. The disadvantage of the previous method was
that the widget has to be realized and mapped, but when you
receive the notify for the tab switch,
it is not necessarily the case yet.
There were some changes on the logging in gstreamer. I had
to adjust some parts of my tests that where intercepting log
messages.
I've started to migrate all modules to use G_DEFINE_TYPE,
G_DEFINE_INTERFACE and GST_BOILERPLATE macros to shorten the
code. I hope I can finish it next month.
At the same time I have cleaned-up my gobject use:
remove dummy vmethod implementations (empty property
setters/getter)
no need to check for dispose/finalize in parent class
(just chain up, they always exist)
I improved the error handling in the commandline client and
also in the ui (when
rendering to disk). It catches and handles missing element
messages now. Before
the processing could hang if that happened :/
While doing more work on the changelog I noticed that I
could also use that to
show last save date when warning about unsaved changes. The
change log uses UTC
timestamps, so I had to convert them. I haven't found any
nice API for this
(like give a date and tell what tz it is and ask to convert
to local or any
other tz). The startup check for old change logs does now
some auto cleanup and
sanity checks. Next I'll add some ui for picking one for
recovery.
I recently upgraded on machine to suse 11.3. After that all
machine icons where
in the wrong size. After some digging I noticed that the
gnome/index.theme
misses all the 'scalable' entries and that seems to break my
svg icons. I have
added a workaround, but with that I get 48x48 png scaled up.
Readding the
missing entries works. I filed
a bug, but nobody feels responsible so far :/
Bored from all the refactoring and bug fixing I hacked a bit
on the spectrum
analyser. Its now using cairo (no more gdk_draw_*) and thus
is ready for gtk3
and looks
much nicer. In addition is can do log plots and one can
increase
the resolution.
While playing with orc for gstreamer and googling for simd
information, I can
across some info about the gcc autovectorizer. One can ask
for quite verbose
reports of gcc attempting to use simd for loops. I could
improve the performance
in a few place based on the reports. Unfortunately the only
places where the
vectorization finally succeeded where those where I just
should have used
memset() :/
78 files changed, 4300 insertions(+), 1832 deletions(-)
[Less]
|
|
Posted
over 15 years
ago
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
... [More]
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.
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(-)
[Less]
|
|
Posted
over 15 years
ago
buzztard
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
... [More]
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(-)
[Less]
|
|
Posted
over 15 years
ago
buzztard
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
... [More]
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 minimize 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(-)
[Less]
|