Ctrl-A with Ctrl-T. This sounds
perfect for usage on my low performance laptops, where I have small
screens and usually also no virtual desktops in use.
There’s only one thing which annoys me in ratpoison: If I use a mostly
mouse driven application like e.g. a webbrowser with ratpoison, I have
no problems to click on links, even if the webbrowser is not in the so
called “current frame”. But if e.g. click into an input field, I
usually notice much too late that while the mouse works fine in the
browser, keyboard focus is still in some other window. Currently they
all use flwm, the
Fast and Lite Window Manager.
So what I would need is a tiling and keyboard focused window manager
but with “focus follows mouse” politics. And since the
laptops on which I intend to use such a window manager, all have a
touchpad or thumbstick, the mouse there counts as keyboard focused,
too somehow, doesn’t it? :-) I wonder, if an
ion3 could be configured to use the same keybindings as
ratpoison. That would probably fulfil this desire.
On the other hand, there are browsers which are fine without
mouse. lynx or links2 for example, so the focus problem I have with
ratpoison wouldn’t occur. But what if I need or want a keyboard driven
and full blown webbrowser? Ok, Firefox as well as Opera are not that
bad in keyboard only use, but they still are focused on the mouse
using user.
But Gecko wouldn’t be Gecko, if there wasn’t some Gecko based browser
with this features: On the ratpoison website I found a link to a very
interesting Firefox plugin which makes Firefox a complete new browser,
a keyboard driven webbrowser named Conkeror. It has no toolbars
at all, no (visible) tabs, no menus, no nothing — it shows only
the website in fullscreen, a status line and a multipurpose command
line — exactly like the mini-buffer of GNU Emacs.
But not only the layout, even the keybindings are very emacsish:
C-x C-f opens an URL in a new buffer -eh- tab, C-x
5 C-f opens an URL in a new frame (window), C-x
C-v opens a new URL in the current tab (buffer) with the
current URL as editable default value, C-x b switches to
another tab, C-x k kills -eh- closes a tab, C-x
C-b lists all open tabs, l goes back (remember the Emacs info
reader, eh?), C-g quits accidently requested dialogs or
stops loading a web page, Ctrl-s and Ctrl-r give you forward and
backward i-search, C-n, C-p,
C-f and C-b scroll, etc. Even
M-x works, e.g. will M-x revert-buffer
reload the web page. (Unfortunately Esc-x doesn’t
work. Yet.) And for vi freaks, there is even M-x
use-vi-keys. There’s even one lynxish keybinding:
\ lets you view the source.
And although it’s one of the strangest webbrowsers I saw yet, I
somehow like it and also would like to see it in Debian as package,
since it is the perfect companion for ion or ratpoison. Looking
through apt’s package cache as well as the wnpp bugs, I haven’t found
any hint on somebody already packaging it, so I’ll have a look on it and on
how to to package a Firefox extension for Debian.
BTW: While looking through the wnpp bugs, I found bug #335459, which is the ITP
flock, an also Gecko
based browser with a lot of cool features for blogger who like social
network tools.
Another nice thing I found today in Debian was the xfonts-artwiz package whose small fonts are very suitable for small
resolution screens, especially if a tiling window manager is used with
a e.g. 800×600 resolution. Unfortunately they aren’t available in a charset
with German umlauts.
Apropos tiling window managers: Anyone tried pconsole with an automatically tiling and resizing window
manager? I wonder if it’s usable. At least on MacOS X with its
cascading window positioning algorithm, pconsole is a pain. — But even without cascading
windows, MacOS X is a pain for keyboard users. Just think of its
default behaviour when using the tab key inside a form mask: It will
skip all buttons, all checkboxes, all radio buttons and all select
boxes. Argh!
Once, when I filed suite to get the Labor Department to enforce the child labor laws for 16- and 17-year olds, kids whom they do not even pretend to protect, I got nowhere. I met with the Solicitor who told me: Look, suppose I agree with you. How would I ever get the money to enforce it? He was right. If I had won and they had issued regulations, it would have only been worse. In Labor, as in agency after agency, we have a vast complex body of law which would take mandarin to learn that no one enforces.. The law is there. On paper. Indeed, it is a lot of paper. How much paper? Fifty volumes, in paperback in total. I know because I counted. But as to big chunks in these volumes, there is no one there to enforce it. p. 48Lots of paper I think can make people comfortable in thinking that famous Virginia Slims Slogan, We’ve come a long way, Baby, when it fact, it can often just means what it literally looks like, “Damn, that’s a buttload of paper.” There is a lot more packed into this tiny book, covering the deep gulf between left and right, the stagnation of an old constitution that is impossible to revise, the loss of accountability in all branches of government, the redrawing of districts, and the slight expansion and curbing of of majoritarian voting in the last hundred years. It gets a little shrilly by the end, but you know, it is all pretty upsetting stuff and it is good to shrill from time to time. Though he never refers to neoliberalism, capitalism, or postmodernism, this book is also a great companion to a class of this literature on the rise of fragmentation and instability in social and cultural life brought forth by changes in the economic system (thinking here of David Harvey, Fredric Jameson, etc). In fact, I think it does a much better job than at relaying how it is that vast sectors of society experience fragmentation, instability, and frustration.
Jan-Marek and Florian talked us through their setup. They're using
FAI to automate
installation of systems, along with LDAP to store
lots of configuration information and GOsa as a user-friendly front-end
to that configuration. They've integrated these to enable some very
clever management features so that all aspects of the city-wide system
can be maintained from one central point. As new machines are
introduced onto the network, they can be configured into one class or
another: simple desktop clients up to so-called "depot" servers, used
as seeds for further clients. Individual user profiles can be tweaked,
giving users access to new applications as they are needed. Shared
resources like network storage and printers are set up automatically
from the LDAP database. Access to USB storage devices can be
controlled on a per-device, per-user basis for security.
That's quite an impressive feature list. Most of the work has been
in configuration and systems work rather than custom packages on the
clients themselves - the vast majority of the packages installed come
straight from the standard Debian archive, with some backports (like a
newer version of KDE). Building on top of standard packages means that
they have access to a huge amount of Free Software without having to
do all of the work themselves. A small team (10-ish at the moment,
growing to 100 or so in the future) can effectively deploy and manage
desktops and associated servers for a huge number of
users - they're expecting to be supporting on the order of 30,000
systems 2 years from now.
The team have just recently made their first stable release and are
starting to roll it out across the city, one department at a
time. There are the familiar issues involved in the deployment, of
course. For example, users don't want to help test pre-release
versions to help nail bugs, but then complain loudly when they find
bugs in the first release. And in such a large project to migrate from
predominantly Windows (NT4!) desktops to KDE on Linux, a major part of
the effort needed is in user training. There is quite a bit of support
and custom work needed to convert people's MS Office macros over to
working on top of OpenOffice. And there are still quite a number of
users who will remain using Windows for specific applications that
still don't have Linux equivalents yet. Apparently the "Wine Cellar"
group will help on that front. *grin*
In terms of collaborating with Debian, the LiMux team are expecting
to help in a few ways. As bug reports are filed against their
applications (apparently very few so far), they'll be pushed upstream
along with (hopefully) fixes for them. They will also be devoting some
full-time developer effort to security work; it would be good for both
sides if this effort can be shared.
It was quite striking to see Tux, the Linux penguin, as a visible
logo in local government offices! The team have clearly made some
excellent progress on this exciting project, and I'm sure that I can
speak for all of Debian in wishing them the best of luck in the
future. I'll be watching with interest...
This has definately made my day. I would like to thank my sponsor and advocate, Anibal Monsalve Salazar, the Debian Cyrus Team (especially Sven and Henrique) and especially my AM, Cl ment Stenac (Zorglub). I couldn’t have asked for a better AM; he answered every mail within a day as far as I remember, was extremely supportive and helpful. I remember when I sent him the last T&S response he appologized on IRC that he couldn’t write the recommendation until that evening, whereas some AMs have taken months to do it.Dear Benjamin Seidenberg! Your account ‘benjamin’ has just been created in the central LDAP database of the Debian project. Please note that it needs a bit of time until this information is synced with all developer-accessible machines. You should be able to login or upload packages after about 30-60 minutes. The password for this account can be found appended to this message, encrypted with your GPG key. Email sent to benjamin@debian.org will be forwarded to astronut@dlgeek.net, to change this visit http://db.debian.org/forward.html.
IP postfix.34245 > DNS.domain: 3448+ MX? example.com. (32)
IP postfix.34261 > DNS.domain: 50123+ A? example.com. (32)
IP postfix.34675 > DNS.domain: 29942+ MX? example.com. (32)
IP postfix.34675 > DNS.domain: 33294+ A? mail.example.com. (37)
Seeking on compressed streams is a little like reading sectors from a harddisk; to read one byte requires reading a much large sectors. Two things are needed, the sector size and the sector length. On a hard-disk the sector length is nominally 512 with the mapping between an offset and sector start often as simple as: $offset >> 9. In compressed streams, the relationship between stream position and sector start is non-linear. Using a non-linear mapping is more involved as searching a lookup table is required. Mapping between an uncompressed position instead cannot be calculated and a 'zmap' table listing all sector start position and corresponding on-disk points needs to be created. The size of a sector must be determined aswell. Bzip2: It is fairly easy to seek on compressed bzip2 streams. In a Bzip2 stream, each block is totally separate and self contained---have a look a the 'bzip2recover' program. 'bzip2recover' scans through a bzip2 stream locating each block/'segment' (normally 900kB of input, so ~200kB of compressed output), then copying each segment to separate bzip2 file. Gzip: Seeking on gzip streams is somewhat more involved; Gzip uses a dictionary design where back-references are made to uncompressed data within the last 32kB ("the window"). The only safe place to start reading a 'sector' in a gzip stream is somewhere where that the dictionary size is zero. An empty dictionary occurs at the start of a stream, or where the stream has been 'reset'. Gzip resets: A gzip 'sector' (the length required to be read, to safely decode a byte) could be the full length of the file-size, or could occur more frequently. A gzip sector start occurs when the stream is reset---resetting the stream more frequently leads to more sector starts, but a reduction in compression thanks to less use of the sliding dictionary. Trade-off. The "gzip --rsyncable" is an example of stream resetting; in this case the stream is reset (and the dictionary closed) each time that the sum of the last 4096 octets of input data, modulo 65536(?) equals a magic number (zero normally). In exchange for the extra reset/start points, you get a size increase of 4-5%, but a better "hit rate" for random access. Gzip reset point lookup tables: More likely you'd want to reset the stream every eg. 4096kB of input, then save the corresponding position of the output stream for a give input position. This lookup table of start positions needs to be stored somewhere. 'squashfs' does in a separate file; 'zsync' in the zmap. (If you wanted to define a standard, these reset points could be stored in the 'extra' or 'comment' fields at the start of a gzip file; storing them with a suitable header would enable some degree of seeking for sufficiently intelligent readers---files could be post-processed to add this data). Storing a LUT takes space; adding extra reset points and storing the LUT data for these extra points takes more space---but I found storing the LUT as a set of double-deltas cut it down; could be gzipped aswell. Gzip partial resets: A gzip stream doesn't just contain 'reset' points, but also 'partial reset' points, a partial resets the huffman tables, but doesn't reset the dictionary. It's safe to stop reading at a partial reset (which effectively shortens the sector length). Whilst not normally possible, partial reset points /are/ able to be used as a starting point /if/ you can populate the previous uncompressed 32kB that forms the dictionary window from another source---'zsync' does this when reconstructing a file, however 'zsync' only does construction in a linear fashion, from the start of a file. Further Reading: Magic words to search for: zsync, squashfs, apt-sync, succinct Succinct is my unfinished project. Succinct involves many parts, one of which covers what you're doing. It might be good to break separate off seeking of compressed streams into a separate project---many small pieces make big problems easier! What I might do is store the LUT in the EXTRA field of the gzip header (limited to 64kB though). Though, within 64kB it would always be possible to construct a useful LUT; based on the final length of the input data, it would be possible to reduce the granularity of the LUT such that it only mentioned 50%, 30%... even 5% of reset points. The LUT itself could be gzipped for extra gain. Hope that's useful, -Paul PS. In all the cases (except one) that I mentioned gzip, I probably meant 'zlib' or 'deflate'! :)
BTW, in my search around a bit later for something I turned up two more things that might be interesting: dictzip, examples/zran.c in the zlib source 'dictzip' is a similar idea to what I suggested at the end of the previous email. A lookup table is built and stored in the EXTRA section at the start of the gzip file and the utilities ('dictzcat' et al) then use this look-up table for random-access on the data. 'dictzip' are still slightly wide of the mark, forcing a flush/chunk every 58969 bytes. That number is chosen so that even in the worst case, the compressed version will never be more than 216 in length. However I think their math is slightly wrong as even in the worse case, gzip only generates 5 bytes per 32kB for an uncompresed store. -> ~65514 by my reckoning. Squashfs uncompressable chunks by setting the top bit of the file offset to indicate a true store. Their lookup table format appears to be flexible enough that I /might/ be able to create a table by scanning an existing stream rather than re-encoding. Depends about the 64kB limitation. Mmm.
Debian is indeed a more balanced 'organisation' than it appears to be from its mailing lists. That doesn't actually surprise me, but it's nice to have it affirmed.Yes, many of us don't just care this much about politics, but about our users and Debian itself. Being free is a highly valued ideal; getting a release "as free as possible while still being useful" is the real goal we're after. On an somewhat related note, icedove just replaced thunderbird.]
Randomly play music under the ~/music directory that were added in the past week:
randomplay --newer-than 1W ~/music
Play in order music that is from before this year:
randomplay --norandom --older-than '1/1/2006'
Give a list of filenames of music that were added in the past 6 months, but haven't been played in the last three months:
randomplay --names-only --newer-than 6M --days 3M
Play, but don't record in the playing history, music added in the first three months of 2004:
randomplay --noremember --newer-than '1/1/2004' --older-than '4/1/2004'
Unfortunately, this new feature is pretty slow, because it stats each file individually on the initial spidering of the directories to be played. In fact, the startup is always fairly slow if you are searching a large directory hierarchy, since randomplay does not preserve any file index but checks anew on each execution. If you are searching tens of thousands of tracks over NFS (as I do), this can take a minute or so. Suggestions for improving the perfomance of the file modification time detection or of the whole startup are welcome. At some point, I will probably implement an indexing feature, but I like the simplicity of it now where it works basically like the shell find command.
Version 0.60 should show up in Debian unstable shortly.
Search Keys lets you go to search results by pressing the number of the search result instead of clicking. For example, pressing 1 takes you to the first result. Hold Alt (Windows/Mac) or Ctrl (Linux) to open results in new tabs, or Shift to open results in new windows.This is a great example of the sort of feature you never even knew existed before, and then you can’t live without.
Next.