Tag Archives: mit

Updates

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/stuff.html

Various, unrelated news:

Thanks to Marvin Stark my project syrep is now
available in Debian. As you might know all the cool kids have written their
own distributed revision control systems. This is my contribution on this
topic. Although I started to work on it four years ago syrep is still unrivaled
and unbeaten in its specific feature set. (Which is admittedly very different
from the feature set of most other software in this area.)

Thanks to CJ van den Berg and Sjoerd Simons (and a few others from
#pulseaudio) PulseAudio is now available in
Debian
, the auxiliary GUI tools like pavucontrol seem to
be still missing. Nonetheless: it’s now easier then ever to try PulseAudio:

sudo aptitude install pulseaudio \
    pulseaudio-module-hal \
    pulseaudio-esound-compat \
    pulseaudio-utils \
    libgstreamer-plugins-pulse0.10-0 \
    pulseaudio-module-gconf \
    pulseaudio-module-x11 \
    pulseaudio-module-zeroconf

For the next months I will focus on my Diplomarbeit (German equivalent of a master thesis). Due to this I passed maintainership of Avahi to Trent Lloyd and of PulseAudio to Pierre Ossman. I hope to resume maintainership of both projects in January.

My first non-trivial kernel patch has been merged into Linus’ kernel, although the 2.6.19 merge window was already closed. I take this as birthday present from Linus.

If you have a laptop (such as the MSI S270) with Ricoh SD/MMC
interface (not one of the new controllers which are SDHCI compatible, but the
old ones where the SD/MMC is a virtual PCMCIA slot identifying itself as
Bay1Controller), then please support me in writing a Linux driver for
it and request the necessary documentation and datasheets from Ricoh. For more
information on this issue see this
posting on the s270-linux mailing list
, and this followup.

That’s all for now.

avahi-autoipd Released and ‘State of the Lemur’

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-0.6.14.html

A few minutes ago I released Avahi 0.6.14
which besides other, minor fixes and cleanups includes a new component avahi-autoipd.
This new daemon is an implementation of IPv4LL (aka RFC3927, aka
APIPA), a method for acquiring link-local IP addresses (those from the range
169.254/16) without a central server, such as DHCP.

Yes, there are already plenty Free implementations of this protocol
available. However, this one tries to do it right and integrates well with the
rest of Avahi. For a longer rationale for adding this tool to our distribution
instead of relying on externals tools, please read this
mailing list thread
.

It is my hope that this tool is quickly adopted by the popular
distributions, which will allow Linux to finally catch up with technology that
has been available in Windows systems since Win98 times. If you’re a
distributor please follow these
notes
which describe how to integrate this new tool into your distribution
best.

Because avahi-autoipd acts as dhclient plug-in by default,
and only activates itself as last resort for acquiring an IP address I hope
that it will get much less in the way of the user than previous implementations
of this technology for Linux.

State of the Lemur

Almost 22 months after my first SVN commit to the flexmdns (which was the
name I chose for my mDNS implementation when I first started to work on it)
source code repository, 18 months after Trent and I decided to join our two
projects under the name “Avahi” and 12 months after the release of Avahi 0.1,
it’s time for a little “State of the Lemur” post.

To make it short: Avahi is ubiquitous in the Free Software world. 😉

All major (Debian, Ubuntu, Fedora, Gentoo, Mandriva, OpenSUSE) and many
minor distributions have it. A quick Google-based poll I did a few weeks ago
shows that it is part of at least 19 different
distributions
, including a range of embedded ones. The list of applications
making native use
of the Avahi client API is growing, currently bearing 31
items. That list does not include the legacy HOWL applications and the
applications that use our Bonjour compatibility API which can run on top of
Avahi, hence the real number of applications that can make use of Avahi is
slightly higher. The first commercial hardware appliances which include Avahi are
slowly appearing on the market. I know of at least three such products, one
being Bubba.

If you package Avahi for a distribution, add Avahi support to an
application, or build a hardware appliance with Avahi, please make sure to add
an item to the respective lists linked above, it’s a Wiki. Thank you!
(Anonymous registration without Mail address required, though)

avahi-autoipd Released and ‘State of the Lemur’

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-0.6.14.html

A few minutes ago I released Avahi 0.6.14
which besides other, minor fixes and cleanups includes a new component avahi-autoipd.
This new daemon is an implementation of IPv4LL (aka RFC3927, aka
APIPA), a method for acquiring link-local IP addresses (those from the range
169.254/16) without a central server, such as DHCP.

Yes, there are already plenty Free implementations of this protocol
available. However, this one tries to do it right and integrates well with the
rest of Avahi. For a longer rationale for adding this tool to our distribution
instead of relying on externals tools, please read this
mailing list thread
.

It is my hope that this tool is quickly adopted by the popular
distributions, which will allow Linux to finally catch up with technology that
has been available in Windows systems since Win98 times. If you’re a
distributor please follow these
notes
which describe how to integrate this new tool into your distribution
best.

Because avahi-autoipd acts as dhclient plug-in by default,
and only activates itself as last resort for acquiring an IP address I hope
that it will get much less in the way of the user than previous implementations
of this technology for Linux.

State of the Lemur

Almost 22 months after my first SVN commit to the flexmdns (which was the
name I chose for my mDNS implementation when I first started to work on it)
source code repository, 18 months after Trent and I decided to join our two
projects under the name “Avahi” and 12 months after the release of Avahi 0.1,
it’s time for a little “State of the Lemur” post.

To make it short: Avahi is ubiquitous in the Free Software world. 😉

All major (Debian, Ubuntu, Fedora, Gentoo, Mandriva, OpenSUSE) and many
minor distributions have it. A quick Google-based poll I did a few weeks ago
shows that it is part of at least 19 different
distributions
, including a range of embedded ones. The list of applications
making native use
of the Avahi client API is growing, currently bearing 31
items. That list does not include the legacy HOWL applications and the
applications that use our Bonjour compatibility API which can run on top of
Avahi, hence the real number of applications that can make use of Avahi is
slightly higher. The first commercial hardware appliances which include Avahi are
slowly appearing on the market. I know of at least three such products, one
being Bubba.

If you package Avahi for a distribution, add Avahi support to an
application, or build a hardware appliance with Avahi, please make sure to add
an item to the respective lists linked above, it’s a Wiki. Thank you!
(Anonymous registration without Mail address required, though)

Avahi 0.6.13 released

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-0.6.13.html

Avahi Logo

I am happy to bring you yet another release of Avahi, everyone’s favourite Zeroconf stack.

Add a new D-Bus method for changing the mDNS host name during
runtime. This functionality is only available to members of the
UNIX group “netdev”, which is the same access group that is
enforced by GNOME’s NetworkManager daemon. Since NM will probably
be the most prominent user of this new method, we decided to limit
access to the same group. The access group can be set by passing
–with-avahi-priv-access-group= to “configure”. If you need more
sophisticated access control you can freely edit
/etc/dbus/system.d/avahi-dbus.conf.
Add a new utility “avahi-set-host-name” which is a command line
wrapper around the aforementioned SetHostName() method.
Bonjour API compatibility library:

Implement DNSServiceUpdateRecord()
Allow passing NULL as callback function for DNSServiceRegister()
Implement subtype registration in DNSServiceRegister() in a
way that is compatible with Bonjour.
Update to newer copy of dns_sd.h

If the host name changes update names of static services wich
contain wildcards.
Don’t build documentation about embedding the Avahi mDNS stack into
other programs by default. This is a feature used only by embedded
developers. Pass –enable-core-docs to “configure” to enable
building these docs, like in Avahi <= 0.6.12.
Build Qt documentation only when Qt support is enabled in
the configuration. Same for GLib.
Change algorithm used to find a new host name on conflict. In
Avahi <= 0.6.12 a conflicting host name of “foobar” would be
changed to the new name “foobar2”. With 0.6.13 “foobar-2” will be
picked instead. This follows Bonjour’s behaviour and has the
advantage not confusing people with regular host names ending in
digits.
Don’t disable all static services when SIGHUP is recieved.
Fix build when Avahi is configured without Gtk+ but with Python
support
Fix build on MacOS X
Support using Solaris DBM instead of gdbm for the service type
database. The latter is still recommended
Minor other fixes and documentation updates

The relevant NetworkManager bug about SetHostName() is #352828.

And our bug tracker is back to only two open bugs for Avahi. That’s a good feeling, I can tell you!

Avahi 0.6.13 released

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-0.6.13.html

Avahi Logo

I am happy to bring you yet another release of Avahi, everyone’s favourite Zeroconf stack.

  • Add a new D-Bus method for changing the mDNS host name during
    runtime. This functionality is only available to members of the
    UNIX group “netdev”, which is the same access group that is
    enforced by GNOME’s NetworkManager daemon. Since NM will probably
    be the most prominent user of this new method, we decided to limit
    access to the same group. The access group can be set by passing
    –with-avahi-priv-access-group= to “configure”. If you need more
    sophisticated access control you can freely edit
    /etc/dbus/system.d/avahi-dbus.conf.
  • Add a new utility “avahi-set-host-name” which is a command line
    wrapper around the aforementioned SetHostName() method.
  • Bonjour API compatibility library:
    • Implement DNSServiceUpdateRecord()
    • Allow passing NULL as callback function for DNSServiceRegister()
    • Implement subtype registration in DNSServiceRegister() in a
      way that is compatible with Bonjour.
    • Update to newer copy of dns_sd.h
  • If the host name changes update names of static services wich
    contain wildcards.
  • Don’t build documentation about embedding the Avahi mDNS stack into
    other programs by default. This is a feature used only by embedded
    developers. Pass –enable-core-docs to “configure” to enable
    building these docs, like in Avahi <= 0.6.12.
  • Build Qt documentation only when Qt support is enabled in
    the configuration. Same for GLib.
  • Change algorithm used to find a new host name on conflict. In
    Avahi <= 0.6.12 a conflicting host name of “foobar” would be
    changed to the new name “foobar2”. With 0.6.13 “foobar-2” will be
    picked instead. This follows Bonjour’s behaviour and has the
    advantage not confusing people with regular host names ending in
    digits.
  • Don’t disable all static services when SIGHUP is recieved.
  • Fix build when Avahi is configured without Gtk+ but with Python
    support
  • Fix build on MacOS X
  • Support using Solaris DBM instead of gdbm for the service type
    database. The latter is still recommended
  • Minor other fixes and documentation updates

The relevant NetworkManager bug about SetHostName() is #352828.

And our bug tracker is back to only two open bugs for Avahi. That’s a good feeling, I can tell you!

Polypaudio 0.9.0 released

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/polypaudio-0.9.0.html

We are proud to announce Polypaudio
0.9.0
. This is a major step ahead since we decided to freeze the
current API. From now on we will maintain API compability (or at least
try to). To emphasize this starting with this release the shared
library sonames are properly versioned. While Polypaudio 0.9.0 is not
API/ABI compatible with 0.8 it is protocol compatible.

Other notable changes beyond bug fixing, bug fixing and bug fixing
are: a new Open Sound System /dev/dsp wrapper named
padsp and a module module-volume-restore have been
added.

padsp works more or less like that ESOUND tool known as
esddsp. However, it is much cleaner in design and thus works
with many more applications than the original tool. Proper locking is
implemented which allows it to work in multithreaded applications. In
addition to mere /dev/dsp emulation it wraps
/dev/sndstat and /dev/mixer. Proper synchronization
primitives are also available, which enables lip-sync movie playback
using padsp on mplayer. Other applications that are
known to work properly with padsp are aumix,
libao, XMMS, sox. There are some things
padsp doesn’t support (yet): that’s most notably recording,
and mmap() wrapping. Recording will be added in a later
version. mmap() support is available in esddsp but
not in padsp. I am reluctant to add support for this, because
it cannot work properly when it comes to playback latency
handling. However, latency handling this the primary reasoning for
using mmap(). In addition the hack that is included in
esddsp works only for Quake2 and Quake3, both being Free
Software now. It probably makes more sense to fix those two games than
implementing a really dirty hack in padsp. Remember that you
can always use the original esddsp tools since Polypaudio
offers full protocol compatibility with ESOUND.

module-volume-restore is a small module that stores the
volume of all playback streams and restores them when the applications
which created them creates a new stream. If this module is loaded,
Polypaudio will make sure that you Gaim sounds are always played at
low volume, while your XMMS music is always played at full volume.

Besides the new release of Polypaudio itself we released a bunch of
other packages to work with the new release:

gst-polyp
0.9.0
, a Polypaudio plugin for GStreamer 0.10. The
plugin is quite sophisticated. In fact it is probably the only
sink/source plugin for GStreamer that reaches the functionality of the
ALSA plugin that is shipped with upstream. It implements the
GstPropertyProbe and GstImplementsInterface
interfaces, which allow gnome-volume-meter and other
GStreamer tools to control the volume of a Polypaudio server. The sink
element listens for GST_EVENT_TAG events, and can thus use
ID3 tags and other meta data to name the playback stream in the
Polypaudio server. This is useful to identify the stream in the Polypaudio
Volume Control
. In short: Polypaudio 0.9.0 now offers first class
integration into GStreamer.

libao-polyp
0.9.0
, a simple plugin for libao, which is used for audio playback by tools like ogg123 and Gaim, besides others.

xmms-polyp
0.9.0
, an output plugin for XMMS. As special feature it uses the
currently played song name for naming the audio stream in
Polypaudio.

Polypaudio Manager 0.9.0, updated for Polypaudio 0.9.0

Polypaudio Volume Control 0.9.0, updated for Polypaudio 0.9.0

Polypaudio Volume Meter 0.9.0, updated for Polypaudio 0.9.0

A screenshot showing most of this in action:

Polypaudio Screenshot.

This screenshot shows: the Polypaudio Manager, the Polypaudio
Volume Control, the Polypaudio Volume Meter, the XMMS plugin, the
GStreamer plugin used by Rhythmbox and gstreamer-properties,
pacat playing some noise from /dev/urandom,
padsp used on MPlayer. (This screenshot actually shows some
post-0.9.0 work, like the icons used by the application windows)

Polypaudio 0.9.0 released

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/polypaudio-0.9.0.html

We are proud to announce Polypaudio
0.9.0
. This is a major step ahead since we decided to freeze the
current API. From now on we will maintain API compability (or at least
try to). To emphasize this starting with this release the shared
library sonames are properly versioned. While Polypaudio 0.9.0 is not
API/ABI compatible with 0.8 it is protocol compatible.

Other notable changes beyond bug fixing, bug fixing and bug fixing
are: a new Open Sound System /dev/dsp wrapper named
padsp and a module module-volume-restore have been
added.

padsp works more or less like that ESOUND tool known as
esddsp. However, it is much cleaner in design and thus works
with many more applications than the original tool. Proper locking is
implemented which allows it to work in multithreaded applications. In
addition to mere /dev/dsp emulation it wraps
/dev/sndstat and /dev/mixer. Proper synchronization
primitives are also available, which enables lip-sync movie playback
using padsp on mplayer. Other applications that are
known to work properly with padsp are aumix,
libao, XMMS, sox. There are some things
padsp doesn’t support (yet): that’s most notably recording,
and mmap() wrapping. Recording will be added in a later
version. mmap() support is available in esddsp but
not in padsp. I am reluctant to add support for this, because
it cannot work properly when it comes to playback latency
handling. However, latency handling this the primary reasoning for
using mmap(). In addition the hack that is included in
esddsp works only for Quake2 and Quake3, both being Free
Software now. It probably makes more sense to fix those two games than
implementing a really dirty hack in padsp. Remember that you
can always use the original esddsp tools since Polypaudio
offers full protocol compatibility with ESOUND.

module-volume-restore is a small module that stores the
volume of all playback streams and restores them when the applications
which created them creates a new stream. If this module is loaded,
Polypaudio will make sure that you Gaim sounds are always played at
low volume, while your XMMS music is always played at full volume.

Besides the new release of Polypaudio itself we released a bunch of
other packages to work with the new release:

  • gst-polyp
    0.9.0
    , a Polypaudio plugin for GStreamer 0.10. The
    plugin is quite sophisticated. In fact it is probably the only
    sink/source plugin for GStreamer that reaches the functionality of the
    ALSA plugin that is shipped with upstream. It implements the
    GstPropertyProbe and GstImplementsInterface
    interfaces, which allow gnome-volume-meter and other
    GStreamer tools to control the volume of a Polypaudio server. The sink
    element listens for GST_EVENT_TAG events, and can thus use
    ID3 tags and other meta data to name the playback stream in the
    Polypaudio server. This is useful to identify the stream in the Polypaudio
    Volume Control
    . In short: Polypaudio 0.9.0 now offers first class
    integration into GStreamer.
  • libao-polyp
    0.9.0
    , a simple plugin for libao, which is used for audio playback by tools like ogg123 and Gaim, besides others.
  • xmms-polyp
    0.9.0
    , an output plugin for XMMS. As special feature it uses the
    currently played song name for naming the audio stream in
    Polypaudio.
  • Polypaudio Manager 0.9.0, updated for Polypaudio 0.9.0
  • Polypaudio Volume Control 0.9.0, updated for Polypaudio 0.9.0
  • Polypaudio Volume Meter 0.9.0, updated for Polypaudio 0.9.0

A screenshot showing most of this in action:

Polypaudio Screenshot.

This screenshot shows: the Polypaudio Manager, the Polypaudio
Volume Control, the Polypaudio Volume Meter, the XMMS plugin, the
GStreamer plugin used by Rhythmbox and gstreamer-properties,
pacat playing some noise from /dev/urandom,
padsp used on MPlayer. (This screenshot actually shows some
post-0.9.0 work, like the icons used by the application windows)

Polypaudio 0.8 Released

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/polypaudio-0.8.html

The reports of Polypaudio’s death are greatly exaggerated.

We are proud to announce the release of Polypaudio
0.8, our networked sound daemon for Linux, other Unix-like operating
systems, and Microsoft Windows. Since the last official release, 0.7,
more than a year has passed. In the meantime Polypaudio experienced
major improvements. Major contributions have been made by both Pierre
Ossman and me. Pierre is being payed by Cendio AB to work on
Polypaudio. Cendio distributes Polypaudio along with their ThinLinc Terminal
Server
.

Some of the major changes:

New playback buffer model that allows applications to freely seek in
the server side playback buffer (both with relative and absolute indexes) and to synchronize
multiple streams together, in a way that the playback times are guaranteed to
stay synchronized even in the case of a buffer underrun. (Lennart)

Ported to Microsoft Windows and Sun Solaris (Pierre)

Many inner loops (like sample type conversions) have been ported
to liboil, which
enables us to take advantage of modern SIMD instruction sets, like MMX or SSE/SSE2. (Lennart)

Support for channel maps which allow applications to assign
specific speaker positions to logical channels. This enables support
for “surround sound”. In addition we now support seperate volumes for
all channels. (Lennart)

Support for hardware volume control for drivers that support
it. (Lennart, Pierre)

Local users may now be authenticated just by the membership in a
UNIX group, without the need to exchange authentication cookies. (Lennart)

A new driver module module-detect which detects
automatically what local output devices are available and loads the
needed drivers. Supports ALSA, OSS, Solaris and Win32 devices. (Lennart, Pierre)

Two new modules implementing RTP/SDP/SAP based multicast audio
streaming. Useful for streaming music to multiple PCs with speakers
simultaneously. Or for implementing a simple “always-on” conferencing
solution for the LAN. Or for sharing a single MIC/LINE-IN jack on the
LAN. (Lennart)

Two new modules for connecting Polypaudio to a JACK audio server
(Lennart)

A new Zeroconf (mDNS/DNS-SD) publisher module. (Lennart)

A new module to control the volume of an output sink with a LIRC supported infrared remote
control, and another one for doing so with a multimeda keyboard. (Lennart)

Support for resolving remote host names asynchronously using libasyncns. (Lennart)

A simple proof-of-concept HTTP module, which dumps the current daemon status to HTML. (Lennart)

Add proper validity checking of passed parameter to every single
API functions. (Lennart)

Last but not least, the documentation has been beefed up a lot and
is no longer just a simple doxygen-based API documentation (Pierre, Lennart)

Sounds good, doesn’t it? But that’s not all!

We’re really excited about this new Polypaudio release. However,
there are more very exciting, good news in the Polypaudio world. Pierre
implemented a Polypaudio plugin for alsa-libs. This means you
may now use any ALSA-aware application to access a Polypaudio sound
server! The patch has already merged upstream, and will probably
appear in the next official release of alsa-plugins.

Due to the massive internal changes we had to make a lot of modifications to
the public API. Hence applications which currently make use of the Polypaudio
0.7 API need to be updated. The patches or packages I maintain will be updated
in the next weeks one-by-one. (That is: xmms-polyp, the MPlayer patch, the
libao patch, the GStreamer patch and the PortAudio patch)

A side note: I wonder what this new release means for Polypaudio in
Debian. I’ve never been informed by the Debian maintainers of
Polypaudio that it has been uploaded to Debian, and never of the
removal either. In fact I never exchanged a single line with those who
were the Debian maintainers of Polypaudio. Is this the intended way
how the Debian project wants its developers to communicate with
upstream? I doubt that!

How does Polypaudio compare to ESOUND?

Polypaudio does everything what ESOUND does, and much more. It is a
fully compatible drop-in replacement. With a small script you can make
it command line compatible (including autospawning). ESOUND clients
may connect to our daemon just like they did to the original ESOUND
daemon, since we implemented a compatibility module for the ESOUND
protocol.

Support for other well known networked audio protocols (such as
NAS) should be easy to add – if there is a need.

For a full list of the features that Polypaudio has over ESOUND,
see Polypaudio’s
homepage
.

How does Polypaudio compare to ALSA‘s dmix?

Some people might ask whether there still is a need for a sound
server in times where ALSA’s dmix plugin is available. The
answer is: yes!

Firstly, Polypaudio is networked, which dmix is
not. However, there are many reasons why Polypaudio is useful on
non-networked systems as well. Polypaudio is portable, it is available
not just for Linux but for FreeBSD, Solaris and even Microsoft
Windows. Polypaudio is extensible, there is broad range of additional
modules
available which allow the user to use Polypaudio in many
exciting ways ALSA doesn’t offer. In Polypaudio streams, devices and
other server internals can be monitored and introspected freely. The
volume of the multiple streams may be manipulated independently of
each other, which allows new exciting applications like a work-alike
of the new per-application mixer tool featured in upcoming Windows
Vista. In multi-user systems, Polypaudio offers a secure and safe way
to allow multiple users to access the sound device
simultaneously. Polypaudio may be accessed through the ESOUND and the
ALSA APIs. In addition, ALSA dmix is still not supported properly by
many ALSA clients, and is difficult to setup.

A side node: dmix forks off its own simple sound daemon
anyway, hence there is no big difference to using Polypaudio with the
ALSA plugin in auto-spawning mode. (Though admittedly, those ALSA
clients that don’t work properly with dmix, won’t do so with our ALSA
plugin as well since they actually use the ALSA API incorrectly.)

How does Polypaudio compare to JACK?

Everytime people discuss sound servers on Unix/Linux and which way
is the right to go for desktops, JACK gets mentioned and suggested by some as a
replacement for ESOUND for the desktop. However, this is not
practical. JACK is not intended to be a desktop sound server, instead
it is designed for professional audio in mind. Its semantics are
different from other sound servers: e.g. it uses exclusively floating
point samples, doesn’t deal directly with interleaved channels and
maintains a server global time-line which may be stopped and seeked
around. All that translates badly to desktop usages. JACK is really
nice software, but just not designed for the normal desktop user,
who’s not working on professional audio production.

Since we think that JACK is really a nice piece of work, we added
two new modules to Polypaudio which can be used to hook it up to a
JACK server.

Get Polypaudio 0.8, while it is hot!

BTW: We’re looking for a logo for Polypaudio. Feel free to send us your suggestions!

Update: The Debian rant is unjust to Jeff Waugh. In fact, he had informed me that he prepared Debian packages of Polypaudio. I just never realized that he had actually uploaded them to Debian. What still stands, however, is that I’ve not been informed or asked about the removal.

Polypaudio 0.8 Released

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/polypaudio-0.8.html

The reports of Polypaudio’s death are greatly exaggerated.

We are proud to announce the release of Polypaudio
0.8, our networked sound daemon for Linux, other Unix-like operating
systems, and Microsoft Windows. Since the last official release, 0.7,
more than a year has passed. In the meantime Polypaudio experienced
major improvements. Major contributions have been made by both Pierre
Ossman and me. Pierre is being payed by Cendio AB to work on
Polypaudio. Cendio distributes Polypaudio along with their ThinLinc Terminal
Server
.

Some of the major changes:

  • New playback buffer model that allows applications to freely seek in
    the server side playback buffer (both with relative and absolute indexes) and to synchronize
    multiple streams together, in a way that the playback times are guaranteed to
    stay synchronized even in the case of a buffer underrun. (Lennart)
  • Ported to Microsoft Windows and Sun Solaris (Pierre)
  • Many inner loops (like sample type conversions) have been ported
    to liboil, which
    enables us to take advantage of modern SIMD instruction sets, like MMX or SSE/SSE2. (Lennart)
  • Support for channel maps which allow applications to assign
    specific speaker positions to logical channels. This enables support
    for “surround sound”. In addition we now support seperate volumes for
    all channels. (Lennart)
  • Support for hardware volume control for drivers that support
    it. (Lennart, Pierre)
  • Local users may now be authenticated just by the membership in a
    UNIX group, without the need to exchange authentication cookies. (Lennart)
  • A new driver module module-detect which detects
    automatically what local output devices are available and loads the
    needed drivers. Supports ALSA, OSS, Solaris and Win32 devices. (Lennart, Pierre)
  • Two new modules implementing RTP/SDP/SAP based multicast audio
    streaming. Useful for streaming music to multiple PCs with speakers
    simultaneously. Or for implementing a simple “always-on” conferencing
    solution for the LAN. Or for sharing a single MIC/LINE-IN jack on the
    LAN. (Lennart)
  • Two new modules for connecting Polypaudio to a JACK audio server
    (Lennart)
  • A new Zeroconf (mDNS/DNS-SD) publisher module. (Lennart)
  • A new module to control the volume of an output sink with a LIRC supported infrared remote
    control, and another one for doing so with a multimeda keyboard. (Lennart)
  • Support for resolving remote host names asynchronously using libasyncns. (Lennart)
  • A simple proof-of-concept HTTP module, which dumps the current daemon status to HTML. (Lennart)
  • Add proper validity checking of passed parameter to every single
    API functions. (Lennart)
  • Last but not least, the documentation has been beefed up a lot and
    is no longer just a simple doxygen-based API documentation (Pierre, Lennart)

Sounds good, doesn’t it? But that’s not all!

We’re really excited about this new Polypaudio release. However,
there are more very exciting, good news in the Polypaudio world. Pierre
implemented a Polypaudio plugin for alsa-libs. This means you
may now use any ALSA-aware application to access a Polypaudio sound
server! The patch has already merged upstream, and will probably
appear in the next official release of alsa-plugins.

Due to the massive internal changes we had to make a lot of modifications to
the public API. Hence applications which currently make use of the Polypaudio
0.7 API need to be updated. The patches or packages I maintain will be updated
in the next weeks one-by-one. (That is: xmms-polyp, the MPlayer patch, the
libao patch, the GStreamer patch and the PortAudio patch)

A side note: I wonder what this new release means for Polypaudio in
Debian. I’ve never been informed by the Debian maintainers of
Polypaudio that it has been uploaded to Debian, and never of the
removal either. In fact I never exchanged a single line with those who
were the Debian maintainers of Polypaudio. Is this the intended way
how the Debian project wants its developers to communicate with
upstream? I doubt that!

How does Polypaudio compare to ESOUND?

Polypaudio does everything what ESOUND does, and much more. It is a
fully compatible drop-in replacement. With a small script you can make
it command line compatible (including autospawning). ESOUND clients
may connect to our daemon just like they did to the original ESOUND
daemon, since we implemented a compatibility module for the ESOUND
protocol.

Support for other well known networked audio protocols (such as
NAS) should be easy to add – if there is a need.

For a full list of the features that Polypaudio has over ESOUND,
see Polypaudio’s
homepage
.

How does Polypaudio compare to ALSA‘s dmix?

Some people might ask whether there still is a need for a sound
server in times where ALSA’s dmix plugin is available. The
answer is: yes!

Firstly, Polypaudio is networked, which dmix is
not. However, there are many reasons why Polypaudio is useful on
non-networked systems as well. Polypaudio is portable, it is available
not just for Linux but for FreeBSD, Solaris and even Microsoft
Windows. Polypaudio is extensible, there is broad range of additional
modules
available which allow the user to use Polypaudio in many
exciting ways ALSA doesn’t offer. In Polypaudio streams, devices and
other server internals can be monitored and introspected freely. The
volume of the multiple streams may be manipulated independently of
each other, which allows new exciting applications like a work-alike
of the new per-application mixer tool featured in upcoming Windows
Vista. In multi-user systems, Polypaudio offers a secure and safe way
to allow multiple users to access the sound device
simultaneously. Polypaudio may be accessed through the ESOUND and the
ALSA APIs. In addition, ALSA dmix is still not supported properly by
many ALSA clients, and is difficult to setup.

A side node: dmix forks off its own simple sound daemon
anyway, hence there is no big difference to using Polypaudio with the
ALSA plugin in auto-spawning mode. (Though admittedly, those ALSA
clients that don’t work properly with dmix, won’t do so with our ALSA
plugin as well since they actually use the ALSA API incorrectly.)

How does Polypaudio compare to JACK?

Everytime people discuss sound servers on Unix/Linux and which way
is the right to go for desktops, JACK gets mentioned and suggested by some as a
replacement for ESOUND for the desktop. However, this is not
practical. JACK is not intended to be a desktop sound server, instead
it is designed for professional audio in mind. Its semantics are
different from other sound servers: e.g. it uses exclusively floating
point samples, doesn’t deal directly with interleaved channels and
maintains a server global time-line which may be stopped and seeked
around. All that translates badly to desktop usages. JACK is really
nice software, but just not designed for the normal desktop user,
who’s not working on professional audio production.

Since we think that JACK is really a nice piece of work, we added
two new modules to Polypaudio which can be used to hook it up to a
JACK server.

Get Polypaudio 0.8, while it is hot!

BTW: We’re looking for a logo for Polypaudio. Feel free to send us your suggestions!

Update: The Debian rant is unjust to Jeff Waugh. In fact, he had informed me that he prepared Debian packages of Polypaudio. I just never realized that he had actually uploaded them to Debian. What still stands, however, is that I’ve not been informed or asked about the removal.

Avahi Gains Compatibility Layers for Apple Bonjour and HOWL

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-compat.html

A short while ago I checked in to SVN two API/ABI compatibility
modules which implement the HOWL and the Apple
Bonjour (dns_sd.h)
DNS-SD/mDNS APIs on top of Avahi’s
native API. Effectively this means that you can run *all*
Zeroconf-enabled software that is available for free operating systems
seamlessly on top of Avahi. Or at least the software that uses the
limited subset of API functions we support. Missing functions will be
implemented on an on-demand basis. Gnome-VFS/Nautilus works
perfectly, as does Gobby, which are the only real-world applications
we tested until now.

The list of supported/unsupported functions is available from SVN for HOWL and for
dns-sd.h.

The compatibility layers are actually pretty interesting pieces of code: for
compatibility with the way HOWL/Bonjour integrates with event loops we had to
hook up the timeout and I/O watches D-BUS depends on to a single file
descriptor. This involves all kinds of ugly things like threading and
“creative” ways to use the event loop abstraction Avahi provides. Some might
call this “cracktastic”, but it actually works pretty well.

The compatibility layers are not intended to be long term solutions. For
every session object we create a background thread that polls for events and a
DBUS session object. This is an utter waste of resources, especially on
dns_sd.h where every basic operation uses a session object of its own.
In addition, our compatibility layers are incomplete. We do not offer the full
set of functions or the full semantics. Our compatibility is just good enough
to make most Zeroconf-aware programs work with Avahi right now.

We consider neither dns_sd.h nor the HOWL API a “well designed”
API and encourage people to port their programs to our more powerful native
API. To stress this the two modules will warn the user about their usage and
write a warning line to STDERR and syslog. Hopefully this will annoy
people sufficiently that Avahi adoption speeds up a little.

To our own surprise we actually support at least one API function more than each of the
reference implementations! From dns_sd.h we support
DNSServiceEnumerateDomains() which is actually unsupported by
Apple Bonjour on POSIX/Linux systems. The documented HOWL function
sw_ipv4_address_decompose() is actually a NOOP in the
reference implementation, but isn’t in our compatibility layer.

Since dns_sd.h is the only file licensed under a BSD license in the otherwise APSL-licensed
mDNSResponder distribution, we were able to copy it into our sources untouched.

Here’s a screenshot of
Nautilus and Gobby
running on top of Avahi through the HOWL compatibility
layers.

Avahi Gains Compatibility Layers for Apple Bonjour and HOWL

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-compat.html

A short while ago I checked in to SVN two API/ABI compatibility
modules which implement the HOWL and the Apple
Bonjour (dns_sd.h)
DNS-SD/mDNS APIs on top of Avahi’s
native API. Effectively this means that you can run *all*
Zeroconf-enabled software that is available for free operating systems
seamlessly on top of Avahi. Or at least the software that uses the
limited subset of API functions we support. Missing functions will be
implemented on an on-demand basis. Gnome-VFS/Nautilus works
perfectly, as does Gobby, which are the only real-world applications
we tested until now.

The list of supported/unsupported functions is available from SVN for HOWL and for
dns-sd.h.

The compatibility layers are actually pretty interesting pieces of code: for
compatibility with the way HOWL/Bonjour integrates with event loops we had to
hook up the timeout and I/O watches D-BUS depends on to a single file
descriptor. This involves all kinds of ugly things like threading and
“creative” ways to use the event loop abstraction Avahi provides. Some might
call this “cracktastic”, but it actually works pretty well.

The compatibility layers are not intended to be long term solutions. For
every session object we create a background thread that polls for events and a
DBUS session object. This is an utter waste of resources, especially on
dns_sd.h where every basic operation uses a session object of its own.
In addition, our compatibility layers are incomplete. We do not offer the full
set of functions or the full semantics. Our compatibility is just good enough
to make most Zeroconf-aware programs work with Avahi right now.

We consider neither dns_sd.h nor the HOWL API a “well designed”
API and encourage people to port their programs to our more powerful native
API. To stress this the two modules will warn the user about their usage and
write a warning line to STDERR and syslog. Hopefully this will annoy
people sufficiently that Avahi adoption speeds up a little.

To our own surprise we actually support at least one API function more than each of the
reference implementations! From dns_sd.h we support
DNSServiceEnumerateDomains() which is actually unsupported by
Apple Bonjour on POSIX/Linux systems. The documented HOWL function
sw_ipv4_address_decompose() is actually a NOOP in the
reference implementation, but isn’t in our compatibility layer.

Since dns_sd.h is the only file licensed under a BSD license in the otherwise APSL-licensed
mDNSResponder distribution, we were able to copy it into our sources untouched.

Here’s a screenshot of
Nautilus and Gobby
running on top of Avahi through the HOWL compatibility
layers.

Avahi Gains "Wide-Area" Support

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-wide-area.html

Yesterday in the late evening I commited “Wide Area” support to
Avahi SVN, i.e. “DNS-SD over Unicast DNS”. Only browsing, no
“Long-Lived Query” support and no publishing for now, but it is a
start.

To show off how cool this is, here is a “screenshot” of
avahi-browse showing all services defined in the domain
0pointer.de:

$ avahi-browse -a -d 0pointer.de
Browsing domain ‘0pointer.de’ on any.-1 …
Browsing for services of type ‘_http-rss091._tcp’ (Web Syndication RSS 0.91) in domain ‘0pointer.de’ on any.-1 …
Browsing for services of type ‘_http-rss20._tcp’ (Web Syndication RSS 2.0) in domain ‘0pointer.de’ on any.-1 …
Browsing for services of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1 …
Found service ‘Lennart’s Blog’ of type ‘_http-rss091._tcp’ (Web Syndication RSS 0.91) in domain ‘0pointer.de’ on any.-1.
Found service ‘Lennart’s Blog’ of type ‘_http-rss20._tcp’ (Web Syndication RSS 2.0) in domain ‘0pointer.de’ on any.-1.
Found service ‘Lennart’s Homepage’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1.
Found service ‘Avahi mDNS/DNS-SD’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1.
Found service ‘Lennart’s Photos’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1.
Found service ‘Lennart’s Blog’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1.
Service data for service ‘Lennart’s Blog’ of type ‘_http-rss091._tcp’ (Web Syndication RSS 0.91) in domain ‘0pointer.de’ on any.-1:
Host 0pointer.de (217.160.223.3), port 80, TXT data: [‘path=/blog/index.rss’]
Service data for service ‘Lennart’s Blog’ of type ‘_http-rss20._tcp’ (Web Syndication RSS 2.0) in domain ‘0pointer.de’ on any.-1:
Host 0pointer.de (217.160.223.3), port 80, TXT data: [‘path=/blog/index.rss2’]
Service data for service ‘Lennart’s Homepage’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1:
Host 0pointer.de (217.160.223.3), port 80, TXT data: [‘path=/lennart/’]
Service data for service ‘Avahi mDNS/DNS-SD’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1:
Host freedesktop.org (131.252.208.82), port 80, TXT data: [‘path=/Software/Avahi’]
Service data for service ‘Lennart’s Photos’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1:
Host 0pointer.de (217.160.223.3), port 80, TXT data: [‘path=/photos/’]
Service data for service ‘Lennart’s Blog’ of type ‘_http._tcp’ (Web Site) in domain ‘0pointer.de’ on any.-1:
Host 0pointer.de (217.160.223.3), port 80, TXT data: [‘path=/blog’]

Avahi Gains "Wide-Area" Support

Post Syndicated from Lennart Poettering original http://0pointer.net/blog/projects/avahi-wide-area.html

Yesterday in the late evening I commited “Wide Area” support to
Avahi SVN, i.e. “DNS-SD over Unicast DNS”. Only browsing, no
“Long-Lived Query” support and no publishing for now, but it is a
start.

To show off how cool this is, here is a “screenshot” of
avahi-browse showing all services defined in the domain
0pointer.de:

$ avahi-browse -a -d 0pointer.de
Browsing domain '0pointer.de' on any.-1 ...
Browsing for services of type '_http-rss091._tcp' (Web Syndication RSS 0.91) in domain '0pointer.de' on any.-1 ...
Browsing for services of type '_http-rss20._tcp' (Web Syndication RSS 2.0) in domain '0pointer.de' on any.-1 ...
Browsing for services of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1 ...
Found service 'Lennart's Blog' of type '_http-rss091._tcp' (Web Syndication RSS 0.91) in domain '0pointer.de' on any.-1.
Found service 'Lennart's Blog' of type '_http-rss20._tcp' (Web Syndication RSS 2.0) in domain '0pointer.de' on any.-1.
Found service 'Lennart's Homepage' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1.
Found service 'Avahi mDNS/DNS-SD' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1.
Found service 'Lennart's Photos' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1.
Found service 'Lennart's Blog' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1.
Service data for service 'Lennart's Blog' of type '_http-rss091._tcp' (Web Syndication RSS 0.91) in domain '0pointer.de' on any.-1:
        Host 0pointer.de (217.160.223.3), port 80, TXT data: ['path=/blog/index.rss']
Service data for service 'Lennart's Blog' of type '_http-rss20._tcp' (Web Syndication RSS 2.0) in domain '0pointer.de' on any.-1:
        Host 0pointer.de (217.160.223.3), port 80, TXT data: ['path=/blog/index.rss2']
Service data for service 'Lennart's Homepage' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1:
        Host 0pointer.de (217.160.223.3), port 80, TXT data: ['path=/lennart/']
Service data for service 'Avahi mDNS/DNS-SD' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1:
        Host freedesktop.org (131.252.208.82), port 80, TXT data: ['path=/Software/Avahi']
Service data for service 'Lennart's Photos' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1:
        Host 0pointer.de (217.160.223.3), port 80, TXT data: ['path=/photos/']
Service data for service 'Lennart's Blog' of type '_http._tcp' (Web Site) in domain '0pointer.de' on any.-1:
        Host 0pointer.de (217.160.223.3), port 80, TXT data: ['path=/blog']

Finished Thesis

Post Syndicated from Bradley M. Kuhn original http://ebb.org/bkuhn/blog/2001/01/22/masters-complete.html

My thesis is nearly complete. I defend tomorrow, and as usual, I let
the deadline run up until the end. I just finished my slides for the
defense, and practiced once. I have some time in the schedule tomorrow to
practice at least once, although I have to find some empty room up at the
University to do it in.

I’ll be glad to be done. It’s been annoying to spend three or four
weeks here sitting around writing about perljvm, and not hacking on it. I
have a Cosource deadline coming up this week, so now’s a good a time as
any to release the first version of the Kawa-based perljvm.

I am really excited about how Kawa works, and how easy it is to massage
perl’s IR into Kawa’s IR. I got more excited about it as I wrote my thesis
defense talk. I really think great things can happen with Kawa in the
future.

Larry Wall is here, and we’ve had two dinners for the Cincinnati
GNU/Linux Users’ Group (who paid Larry’s way to come here). I was there,
and Larry was asking some hard-ish questions about Kawa. Not hard exactly,
just things I didn’t know. I began to realize how much I have focused on
the Kawa API, and I haven’t really been digging in the internals. I told
him I’d try to have some answers about it for my defense, and I will
likely reread Bothner’s papers on the subject tomorrow to get familiar
with how he deals with various issues.

It’s odd having Larry on my thesis committee. I otherwise wouldn’t be
nervous in the least, but I am quite worried with him on the
committee.

Anyway, so I defend tommorrow, then it’s into perljvm hacking again
right away on Tuesday to make the Cosource deadline, and then I have to
finish preparing my Perl tutorial for LinuxExpo Paris.

Finished Thesis Document

Post Syndicated from Bradley M. Kuhn original http://ebb.org/bkuhn/blog/2001/01/18/thesis-document.html

Tonight, I finished the actual document of my Master’s thesis. I had to
vet it by reading it out loud, about three times. I have a real hard time
finding subtle grammar errors. I believe that when I read, I parse them
out in my head. Reading out loud usually helps, but it wasn’t working so
well this time. (The first draft had many errors, even though I read it
out loud.)

This time, I went through it twice, reading it out loud while bouncing
the mouse along each word. This seemed to help a lot, as I was catching
errors left and right. I hope I got them all.

I sent the final document off to the committee. I haven’t heard from
Larry Wall, whose an external member of my committee, at all. I haven’t
heard from since we set up the plane tickets months ago. I am sure he’s
insanely busy, and that’s likely why. No big deal, I suppose, I am just
overly nervous.

I really need to get to the actually hacking on perljvm. I have lost
three weeks working on the thesis document, which is really only
describing things, not hacking. While I’ll be glad, I’m sure, to have the
Master’s thesis done, but perljvm needs some hacking done on it,
especially considering that I have a Cosource deadline to meet soon.