GnomeMeeting Supports Avahi

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

Sebastien successfully completed porting GnomeMeeting to Avahi. Therefore I declare him the first one to port a “real world” application to Avahi. Hurrah! Screenshot here.

Shortly after, Sebestien – not lazy – announced his new Zeroconf service browser applet based on Avahi. It contains a drop down menu with all Zeroconf services found on your LAN. If you select a menu item the applet will execute the application that has been defined as Gnome URL handler for the specific protocol.

s-d-a

GnomeMeeting Supports Avahi

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

Sebastien successfully completed porting GnomeMeeting to Avahi. Therefore I declare him the first one to port a “real world” application to Avahi. Hurrah! Screenshot here.

Shortly after, Sebestien – not lazy – announced his new Zeroconf service browser applet based on Avahi. It contains a drop down menu with all Zeroconf services found on your LAN. If you select a menu item the applet will execute the application that has been defined as Gnome URL handler for the specific protocol.

s-d-a

Avahi on Linux Weekly News

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

Seems today’s edition of LWN features a front page story about Avahi. It’s actually quite nice, even though I missed an emphasis on the fact that Avahi’s mDNS stack itself is embeddable into applications via a shared library.

I guess you’ll have to wait a week if you want to read the article without subscription.

Avahi on Linux Weekly News

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

Seems today’s edition of LWN features a front page story about Avahi. It’s actually quite nice, even though I missed an emphasis on the fact that Avahi’s mDNS stack itself is embeddable into applications via a shared library.

I guess you’ll have to wait a week if you want to read the article without subscription.

Avahi 0.1 Finally Released

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

We finally released Avahi 0.1. Full release announcement here. Avahi comes with a powerful DBUS API. Just two show off the coolnes of that interface a Python example:

import avahi, dbus, gobject

bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)

def new_service(interface, protocol, name, type, domain):
print “Found service ‘%s’ of type ‘%s’ in domain ‘%s'” % (name, type, domain)

def remove_service(interface, protocol, name, type, domain):
print “Service ‘%s’ of type ‘%s’ in domain ‘%s’ disappeared.” % (name, type, domain)

path = server.ServiceBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, “_http._tcp”, “”)
b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, path), avahi.DBUS_INTERFACE_SERVICE_BROWSER)
b.connect_to_signal(‘ItemNew’, new_service)
b.connect_to_signal(‘ItemRemove’, remove_service)
gobject.MainLoop().run()

This short program will connect to running avahi-daemon and browse for web services.

Avahi 0.1 Finally Released

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

We finally released Avahi 0.1. Full release announcement here. Avahi comes with a powerful DBUS API. Just two show off the coolnes of that interface a Python example:

import avahi, dbus, gobject

bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)

def new_service(interface, protocol, name, type, domain):
	print "Found service '%s' of type '%s' in domain '%s'" % (name, type, domain)

def remove_service(interface, protocol, name, type, domain):
	print "Service '%s' of type '%s' in domain '%s' disappeared." % (name, type, domain)

path = server.ServiceBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "_http._tcp", "")
b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, path), avahi.DBUS_INTERFACE_SERVICE_BROWSER)
b.connect_to_signal('ItemNew', new_service)
b.connect_to_signal('ItemRemove', remove_service)
gobject.MainLoop().run()

This short program will connect to running avahi-daemon and browse for web services.

Avahi 0.1 Finally Released

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

We finally released Avahi 0.1. Full release announcement here. Avahi comes with a powerful DBUS API. Just two show off the coolnes of that interface a Python example:

import avahi, dbus, gobject

bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)

def new_service(interface, protocol, name, type, domain):
	print "Found service '%s' of type '%s' in domain '%s'" % (name, type, domain)

def remove_service(interface, protocol, name, type, domain):
	print "Service '%s' of type '%s' in domain '%s' disappeared." % (name, type, domain)

path = server.ServiceBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "_http._tcp", "")
b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, path), avahi.DBUS_INTERFACE_SERVICE_BROWSER)
b.connect_to_signal('ItemNew', new_service)
b.connect_to_signal('ItemRemove', remove_service)
gobject.MainLoop().run()

This short program will connect to running avahi-daemon and browse for web services.

Simplified "Draft" Plugin for pyblosxom

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

The pyblosxom plugin registry links a plugin which allows hiding “draft” stories before publishing them, so that only you can see them. Unfortunately the link to this plugin is broken. So here’s my (simplified) reimplementation:

def cb_prepare(args):
request = args[“request”]
query = request.getHttp().get(‘QUERY_STRING’, ”)

if not query.endswith(“&ignore”) and not query == “ignore”:
data = request.getData()
data[“entry_list”] = filter(lambda e: not e.has_key(‘ignore’), data[“entry_list”])

To mark a story as “draft” simply insert this at line #2:

#ignore yes

To browse unpublished stories simply append ?ignore (or &ignore) to your blog URL.

Simplified "Draft" Plugin for pyblosxom

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

The pyblosxom plugin registry links a plugin which allows hiding “draft” stories before publishing them, so that only you can see them. Unfortunately the link to this plugin is broken. So here’s my (simplified) reimplementation:

def cb_prepare(args):
        request = args["request"]
        query = request.getHttp().get('QUERY_STRING', '')

        if not query.endswith("&ignore") and not query == "ignore":
                data = request.getData()
                data["entry_list"] = filter(lambda e: not e.has_key('ignore'), data["entry_list"])

To mark a story as “draft” simply insert this at line #2:

#ignore yes

To browse unpublished stories simply append ?ignore (or &ignore) to your blog URL.

Simplified "Draft" Plugin for pyblosxom

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

The pyblosxom plugin registry links a plugin which allows hiding “draft” stories before publishing them, so that only you can see them. Unfortunately the link to this plugin is broken. So here’s my (simplified) reimplementation:

def cb_prepare(args):
        request = args["request"]
        query = request.getHttp().get('QUERY_STRING', '')

        if not query.endswith("&ignore") and not query == "ignore":
                data = request.getData()
                data["entry_list"] = filter(lambda e: not e.has_key('ignore'), data["entry_list"])

To mark a story as “draft” simply insert this at line #2:

#ignore yes

To browse unpublished stories simply append ?ignore (or &ignore) to your blog URL.

Linking pyblosxom to SVN

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

If you run a pyblosxom blog with auto-copied stories from SVN you are
probably interested in getting stable story dates that don’t change every time
you update a story. The date of the initial SVN log entry of a story is
something like the “day of birth” of a story, so it’s a good value to use.
Christopher Baus implemented a plugin for pyblosxom, which looks
overly complicated to me: it depends on memcached and comes in two large python
scripts.

To simplify things I wrote this minimal replacement:

import pysvn, os, sys, anydbm

from config import py

def get_mtime(fname):
cache_fname = os.path.join(py[‘datadir’], ‘SVNDATES’)
cache = anydbm.open(cache_fname, “c”)

if cache.has_key(fname):
d = float(cache[fname])
else:
client = pysvn.Client(fname)
l = client.log(fname)

if len(l) > 0:
d = l[0][‘date’]
cache[fname] = str(d)
else:
d = -1

del client

del cache
return d

def cb_filestat(args):
args[“mtime”] = list(args[“mtime”])
d = get_mtime(args[“filename”])
if d >= 0:
args[“mtime”][8] = d
return args

Since accessing SVN logs is quite slow the script caches the “date of birth”
in a dbm file. Make sure that your web server has enough priviliges to access
that database file which is stored in $datadir/SVNDATES by
default.

Linking pyblosxom to SVN

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

If you run a pyblosxom blog with auto-copied stories from SVN you are
probably interested in getting stable story dates that don’t change every time
you update a story. The date of the initial SVN log entry of a story is
something like the “day of birth” of a story, so it’s a good value to use.
Christopher Baus implemented a plugin for pyblosxom, which looks
overly complicated to me: it depends on memcached and comes in two large python
scripts.

To simplify things I wrote this minimal replacement:

import pysvn, os, sys, anydbm

from config import py

def get_mtime(fname):
        cache_fname = os.path.join(py['datadir'], 'SVNDATES')
        cache = anydbm.open(cache_fname, "c")

        if cache.has_key(fname):
                d = float(cache[fname])
        else:
                client = pysvn.Client(fname)
                l = client.log(fname)

                if len(l) > 0:
                        d = l[0]['date']
                        cache[fname] = str(d)
                else:
                        d = -1

                del client

        del cache
        return d

def cb_filestat(args):
        args["mtime"] = list(args["mtime"])
        d = get_mtime(args["filename"])
        if d >= 0:
                args["mtime"][8] = d
        return args

Since accessing SVN logs is quite slow the script caches the “date of birth”
in a dbm file. Make sure that your web server has enough priviliges to access
that database file which is stored in $datadir/SVNDATES by
default.

The collective thoughts of the interwebz

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close