Rob Bradford: Oyster card
So, if i’ve put my Oyster card through the wash does that mean i’ve broken the money laundering rules? And, more importantly, is it still going to work?
JAVA_HOME=/usr/lib/jvm/java-gcj CLASSPATH=/usr/share/java/esd.jar:/usr/share/java/jsch.jar jh_build weirdx.jar srcThis command will compile all the Java files under src , set the classpath in the manifest and build it all into weirdx.jar. A couple of other options are worth mentioning. If this jar contains an application rather than a library then the -m or --main option can be used to set the Main-Class attribute in the manifest which will allow the resulting jar file to be be executed jh_build also provides a --clean parameter which should be called in the clean target of debian/rules . jh_libs For library packages Debian Java policy currently requires that the libraries be installed to /usr/share/java in a versioned format and with an unversioned symlink. jh_libs will take a jar and correctly install it. As with debhelper programs, this can either take a jar as a parameter, or read a list of jars from a file in the Debian directory. It also follows the -p , -i and -s semantics of debhelper for selecting which packages to install the jar to. When operating on a package, jh_libs will read the list of library jars from debian/package.jlibs or debian/jlibs . The jlibs file is a list of jars to install, one per line, and works exactly the same as listing them on the command line. Each jar is installed to debian/package/usr/share/java/ in the appropriate versioned and unversioned forms. jh_depends jh_depends works like dpkg-shlibdeps, but for jar files. For each jar in the package it takes the jars on which it depends and finds the packages to which they belong. These are included in the debhelper substvars as $ java:Depends . The control file can then just list that variable which is filled in automatically. This is done by reading the Class-Path attribute from the manifest of each jar. Jar files should include this attribute to prevent applications which use them from needing a full recursive classpath in their startup scripts and to prevent unneccessary transitions when the library changes its dependencies. If the package is not built with jh_build and the upstream build system doesn't set it correctly then jh_manifest can be used to fix this. If the application uses executable jars (see Runtime support below) then jh_depends will also add the appropriate depends on jarwrapper and the correct Java runtime. jh_manifest Many upstream build systems do not set the Class-Path attribute in the jars they create. This leads to several unwanted problems, such as expanding the classpath which applications have to use and introducing unneccessary transitions. They also may not set the Main-Class attribute. Both of these are required for running jars with the -jar parameter. jh_manifest can fix the manifest files of jars. It can either read from a manifest file in the Debian directory or run in a mode which updates all the jars with the CLASSPATH environment variable. The manifest files can either be debian/package.manifest or debian/manifest . The format of this file is a list of jars and indented below each one a list of manifest elements to set:
usr/share/weirdx/weirdx.jar: Main-Class: com.jcraft.weirdx.WeirdX Debian-Java-Home: /usr/lib/jvm/java-gcjjh_exec The Runtime support section below describes running executable jars directly. jh_exec will scan package directories for jars in the paths, or symlinks to jar from the paths, and ensure that they have been set executable if necessary. jh_makepkg jh_makepkg will create template Debian packages for Java programs and libraries similar to dh-make . It should be run in the source directory and it will create the orig.tar.gz and most of the files in the Debian directory, which need only small changes neccessary to build the package. java-propose-classpath Some upstreams have complicated classpaths which may not be obvious to the packager when using jh_manifest to set the Class-Path attribute. java-propose-classpath will unpack a jar and look at the symbols imported to the class files, then scan all the jars in /usr/share/java . This shouldn't be run in the build since it is slow, and there may be ambiguities that the packager must resolve. It is still very useful for the packager as most of the time it will get it right automatically. Runtime support Javatools also provides some runtime support. Unlike compiled programs, or purely interpreted programs with hash-bang lines, Java programs cannot be directly executed. Many upstreams expect them to be run using java -jar jarname or java classname . This is not generally acceptible in systems which expect to just be able to run the command or launch it from a menu. As a result, many packagers are writing wrapper scripts which just call java with the correct classpath, jar and main class. jarwrapper There is an alternative to wrapper scripts, however. The binfmt_misc kernel module allows the kernel to call out to a program in userspace to execute specific types of file. jarwrapper registers itself as a handler for executable jars. This is done by reading values from the manifest file. In order for executable jars to work the following attributes must or may be defined in the manifest. These attributes can be set using jh_build and jh_manifest .
Source: jsch Section: libs Priority: optional Maintainer: Matthew Johnson Build-Depends: debhelper (>= 5), javahelper, java-gcj-compat-dev, libzlib-java Standards-Version: 3.7.3 Homepage: http://www.jcraft.com/jsch/ Package: libjsch-java Architecture: all Depends: $ java:Depends , $ misc:Depends Description: Java secure channel JSch is a pure Java implementation of SSH2. JSch allows you to connect to an sshd server and use port forwarding, X11 forwarding, file transfer, etc., and you can integrate its functionality into your own Java programs. JSch is licensed under a BSD style license.debian/rules
#!/usr/bin/make -f export JAVA_HOME=/usr/lib/jvm/java-gcj export CLASSPATH=/usr/share/java/zlib.jar build: build-stamp build-stamp: dh_testdir jh_build jsch.jar src touch $@ clean: dh_testdir dh_testroot jh_build --clean dh_clean rm -f build-stamp jsch.jar install: build dh_testdir dh_testroot dh_clean -k dh_installdirs binary-arch: build install # Java packages are arch: all, nothing to do here binary-indep: build install # Create the package here dh_testdir dh_testroot dh_clean -k dh_install -i dh_installdocs -i dh_installchangelogs -i dh_javadoc -i --sourcedir=src jh_libs -i jh_depends -i dh_compress -i dh_fixperms -i dh_installdeb -i dh_gencontrol -i dh_md5sums -i dh_builddeb -i binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary installdebian/libjsch-java.jlibs
jsch.jarSample Application Packaging debian/control
Source: salliere
Section: misc
Priority: optional
Maintainer: Matthew Johnson
Build-Depends: debhelper (>= 5), java-gcj-compat-dev, fastjar,
libmatthew-debug-java, libcsv-java,
libitext-java, javahelper
Standards-Version: 3.7.3
Package: salliere
Architecture: all
Depends: $ java:Depends , $ misc:Depends
Description: Short Description
Long Description
debian/rules
#!/usr/bin/make -f export JAVA_HOME=/usr/lib/jvm/java-gcj export CLASSPATH=/usr/share/java/csv.jar:/usr/share/java/debug-disable.jar:/usr/share/java/itext.jar build: build-stamp build-stamp: dh_testdir # Build the package jh_build salliere.jar src touch $@ clean: dh_testdir dh_testroot jh_build --clean dh_clean rm -f build-stamp salliere.jar install: build dh_testdir dh_testroot dh_clean -k dh_installdirs binary-arch: build install # Java packages are arch: all, nothing to do here binary-indep: build install # Create the package here dh_testdir dh_testroot dh_clean -k dh_install -i dh_installdocs -i dh_installchangelogs -i jh_manifest -i dh_link -i jh_exec -i jh_depends -i dh_compress -i dh_fixperms -i dh_installdeb -i dh_gencontrol -i dh_md5sums -i dh_builddeb -i binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary installdebian/salliere.install
salliere.jar usr/share/sallieredebian/salliere.links
usr/share/salliere/salliere.jar usr/bin
In just over a month (1 month and 1 day, to be precise), it's FOSDEM
again. The Debian Developers Room schedule is almost complete, and some
interesting things are being published around it.
Such as the pre-FOSDEM beer event. In previous years, this always
happened at the "Le Roi d'Espagne", a bar at Grand Place in Brussels.
This was a nice place for many years, because it's easily found, and
they have this backroom where quite a lot of people would fit in.
Unfortunately, "quite a lot" does not equal "a huge number", with the
amount of people going to the pre-FOSDEM beer event more and more
approaching the latter than the former as the years go by. Last year, it
finally became too crowded, and it was decided that the pre-FOSDEM beer
event would change bars this year.
Which has now happened. This year, the pre-FOSDEM beer event will be
at the Delirium Caf , which is
not at the Grand Place anymore, but just 100m away from it; the FOSDEM
website has more
information. A nice feature of the Delirium Caf , besides the fact
that they are much larger, is the huge amount of
different beers they have. Over 2000 of them, which you can query
online!. And that's not even considering the soft drinks or waters
or whatever, which they also have on their menu.
Another novelty this year is the streaming; the main tracks that will
be held in Janson will be streamed out of the event, and the Debian
video team is also planning to do some streaming. Meaning, even if you
can't make it to FOSDEM, you'll still be able to follow some of
it. You won't be able to follow everything, especially not the hallway
track which at FOSDEM is a very important one; but at least
you'll be able to sample some bits, which is nice.
Other than that, not much will change. There'll be a key signing party, organized by yours
truly. There'll be Lightning talks,
there'll be the Main track, and
there'll be a number of Developer rooms,
including the Debian
one—which, occasionally, is also organized by yours truly.
This conference has always been my favourite (even though I haven't
been to many conferences besides FOSDEM); I've never missed even one
edition ever since the very first one back in 2001 (when it was still
called OSDEM). And since a few years, I've also been offering crashing
space at our office, for
international geeks who don't mind roughing it a bit (it's an office,
there no shower, there's only floor space). This year, perhaps I haven't
been spamming enough for that, but for now I only have two people who're
interested in sleeping over (and they're not even sure); if you're going
to FOSDEM and still need a place to sleep, you're (probably ;-) welcome.
Send me an email.
On the Debian front, things are going well, for the most part. The
list of speakers for the Devroom is nearing completion, leaving me with
little more to do than to start assigning times. We've been assigned a
booth as well, but there I still need to figure out how to organize it,
and what to do with it. There will of course be the regular UK T-shirts,
and probably some other merchandizing, but I also want something
involving some computer device. We've had this d-i "babelbox"
installation running a few times now, which was nice; but I do think we
need some variation, too. The only problem with that approach is that I
don't really know what that variation could be. Suggestions are
welcome!
And so time goes on, and FOSDEM draws nearer. At some point it'll
eventually happen, and then it will be over before one can say
"blueberry pie". Sometimes I wonder whether all these months of
preparation are actually worth it. But when FOSDEM is actually here, I'm
sure I'll find that it is, indeed, worth it...
It bothers me that my Tor usage is less than I'd like because it is just so fiddly.
When it comes to privacy I want to keep things simple, I want to use tor, but I dont want to use it for things that aren't sane.
In practise that means I want to use tor for a small amount of browsing:
# don't forward by default. forward-socks4 / . # don't forward by default, even more so for HTTPS forward-socks4 :443 . # but we do want tor on these three sites: forward-socks4 a.com/ 127.0.0.1:9050 . forward-socks4 b.com/ 127.0.0.1:9050 . forward-socks4 c.com/ 127.0.0.1:9050 .I'm using absolutely nothing else in my Privoxy configuration, so it seems like overkill. I'd love to hear about a simple rule-based proxy-chaining tool - if there is one out there then I'd love to know about it lazyweb. If not it shouldn't be too hard to write one with the Net::Proxy & Net::Socks module(s).
<global> listen 1234 no-proxy </global> <sites> hostname one.com port != 443 proxy socks localhost 8050 </sites> <sites> hostname two.com port != 443 proxy socks localhost 8050 </sites> <sites> hostname foo.com port = 80 proxy localhost 8000 </sites>
Following my rebuild of all packages using /bin/dash as /bin/sh, we now have a nice list of bugs.
Those bugs are cool:
Well, this is being written on my broken HP laptop and from within GNOME at that. The problems that I anticipated last time are truly ugly : trying to manage a system that uses repositories from Mepis, Ubuntu and Debian are as horrendous as most Debianites would expect. Debian-based is not an easy balance and this is something that I will revisit within Emdebian. It would be easier if I didn't insist on Debian being added to the mix.apt-cache policy $foo and apt-get install $foo=$debian_version, due to dependency problems from having mixed distros. The end result of these was that all of KDE had to be removed - presumably due to upgrading libc6 but didn't worry about trying to put it back.www.debian.org and wiki.debian.org to be
ikiwiki-powered could be one, and see how it goes.
Me, I think that having www.debian.org use a markup language, and have
wiki.debian.org (or www.debian.org/wiki) live in a real VCS (us
being Debian people, after all) would be two big pluses.
The www instance would be only editable via the repository, either by
the current group or DD-wide, and would have stuff like htmlscrubber
disabled. And the wiki would be another setup/instance, with the normal
setup for an ikiwiki wiki setup, backed up by a real e.g. Subversion
repository open to all DDs, and possibly contributors at request. I
believe that would be very very cool. Plus web edits as usual.
This could also be used as a fresh start, and maybe as an opportunity to
accomplish the long-awaited re-design of the site: if this job is done
by making a live paralell copy, able to update itself from the current
webml repository, and MoinMoin as well, it would give an interesting
playground for experimenting, and could be adopted later on, when it’s
truly polished, if ever.
apt-get update will display a status
at the bottom that will look something like:
DebTorrent: 837MiB left at 319 KiB/s (46m03s)
You may not be able to see it all if there are multiple updates to
different mirrors under way. In aptitude, the status will appear on
a line by itself at the bottom of the list of downloaded files. The
status line will update about once per second, and should give a
good indication of how much time is really left. The other
(incorrect) status information presented by apt/aptitude will still
be there but you can ignore it. I've only tested apt and aptitude,
so I'm not sure how (or if) synaptic, adept or gnome-apt will
display these messages, though they are general apt status messages,
usually used for displaying the status while logging into an FTP
server.
This should also fix another problem that debtorrent can have
with downloading large files (usually on slower connections). Since
apt can't see the download happening for a long time, the connection
would sometimes time out. With these status updates the connection
is constantly active, so the timeouts shouldn't be a problem when
downloading large packages (although they may still occur when doing
an apt-get update, as there are no status updates during that
process).
I did implement a better solution, as suggested by
Micha Politowski on the wiki. This solution uses the
creation of sparse files to let apt know how much of a file has
actually been downloaded. However, apt doesn't understand how a
single process can download multiple files in prarallel, so it only
follows the last file that was started, and complains when a file
finishes that was not the last one that started. I've disabled that
for now while I see if it's possible to modify apt to work better in
this situation.
Here are the changes for debtorrent:
I missed this one when it happened earlier
last month, but I'm still putting it on
my 2007 page of Bad Technology.
Thanks to a colleague for pointing it out.
Apparently MSN's Santa-bot made inappropriate
comments to children and was exposed in
Microsoft's
sex-obsessed RoboSanta spouts filth at children The
Register
After that, it was almost inevitable that it
would be taken off-line, even if just for a
short while, so I think the next headline
could have been predicted:-
Microsoft
kills Santa Claus The Register
What surprised me was the ham-fisted PR
attempt described in
Microsoft
accuses kids of bullying Santa into sex chat The
Register
If it was a mistake, then admit it. How did
it happen? Unruly programmers wanting
easter eggs
at Christmas, did someone
make the Santa-bot by modifying a porno-bot,
or was it a learning bot finally corrupted
by all the abuse it was sent - like Arnold on
UEA/tsw's #pubfood IRC?
Truly bizarre.
amarok has one that is really excellent: jakdaw.
Jakdaw does a good job of both following and representing the intensity of
the music. And it generates an amazing display of colors.
But even with a good visualization a lot of music is not all that interesting
to watch. Over the last month or so I've occasionally been "looking" through
my music collection. The visualizations are surprisingly varied for different
artists. And though a lot of them are nice to watch, some artists
consistently produce much more varied and artistic displays than others.
To some degree it is predictable, but not always. Quite often the visualization
is a lot less interesting than you'd expect and especially some slower or
quieter songs produce much more interesting displays than you'd expect.
A blanket of sound does not produce a very interesting display, but strong
accents and mood changes do. As is often the case in art, the real challenge
in composing music seems to be leaving things out and to have individual
instruments play their own tune instead of having everything move together.
The two artists that really stand out so far are Björk and Faithless.
Both consistently produce visualizations that are at times stunningly
beautiful and also show a lot more detail in the music than others.
For Björk It's Oh So Quiet (from Post) and Violently Happy (from Debut)
are very nice, but two songs that really stand out are Hunter (from Homogenic)
and Hyper Balad (from Post).
For Faithless songs like We Come 1 and Tarantula (from Outrospective), and
Salva Mea and Insomnia (from Reverence) are truly worth watching.
Spamassassin supposedly can precompile rules to allow faster operation. It
compiles an optimized matching automaton that will process all the regular
expressions in parallel.Anyway, in order to use it, you need to manuall install some dependencies.
They probably can't be introduced as real dependencies to not enforce them
upon people who don't want to use this feature. So far, I've identified
aptitude install re2c gcc libc6-dev makeI'm aware that many people will have the libc6-dev and gcc stuff already installed, and the re2c dependency is well-documented. But I actually had removed the C compiler from my mail server.
A Debian package is uniquely identified by its name and version; there is no further information taken into account by dpkg.
This keeps the packaging system rather simple, but has the disadvantage that all information that would otherwise be placed in extra data fields has to be encoded into these two fields. As the names of all binary packages generated from a single source package need to be known when building the .dsc file, no substitutions are allowed in the package name.
Back in the Good Old Days, the only extra bit of information in the name field used to be the SONAME from the library in the package (thus implicitly saying that each library should have its own package), which meant that the maintainer had to adapt the debian/control file every time a library's ABI changed. This being the Good Old Days, people writing libraries actually thought about things, so ABI changes were few and far between.
These days, libraries are stacked on top of each other, re-exporting the underlying libraries' ABI. The SONAME system could in theory handle these situations if the SONAME of every library whose ABI is re-exported is encoded into the SONAME of the newly built library. So if my own ABI version is "2", and some of the functions I export use types defined in glib, then after building against glib1.2, my SONAME would be somewhat similar to "2+glib1.2".
For languages that don't have a well-defined ABI (i.e. anything but C), the version of the language ABI(s) used will also have to be added.
Obviously, this would also have to be encoded into the package name, which is where trouble starts during transitions. The last C++ ABI transition had all C++ library maintainers add a suffix to the package name; dependent ABIs are not handled at all in Debian right now (which led to the libpng mess).
The existing encoding rules are not entirely formalized, and it is not guaranteed that they are bijective. For example, packages used together with cross compilers have been following the convention of using the name that the native package would use, followed by a dash, the target architecture name, another dash and the word "cross". There is no guarantee that the architecture name does not contain a dash, however, so we cannot simply take the second to last word as the architecture name if the last word is "cross" (think "libgcc1-kfreebsd-i386-cross"), which makes it difficult to write a plug-in to apt that would automatically download the binary for the target architecture and convert it using dpkg-cross.
I've decided to nonetheless go ahead with my request that the "-*-cross" part of the package name space be reserved for packages related to cross compilation; it will work for the time being.
Next.