Roma

[[Britain](http://www.guardian.co.uk/society/2010/jul/27/dale-farm-essex-travellers-eviction)]:

Dale Farm is the largest Romany Gypsy and Irish Traveller site in the UK, and part of it is due for demolition.

A number of Gypsies and Travellers have lived at Dale Farm entirely legally since the 1960s. Over the years, more families came to join them after councils began shutting down public sites and Travellers were forced to look for permanent places to settle.

France:

French President Nicolas Sarkozy on Wednesday (28 July) announced his government is to order police to round up allegedly illegal migrants of Roma ethnicity for expulsion from French territory and destroy their encampments.

The announcement was the result of a cabinet meeting dedicated to the subject called after officers shot and killed a gypsy youth in the Loire Valley, provoking a riot by others of his community.

More books

In a chart of changes over the last decade, this must be the most impressive:



Books published in 2000 in the US:

282,000


Books published in 2010 in the US:

1,053,000


yeahconsole

Xmonad is my window manager. I’ve had it configured to use dmenu as an ersatz command-line, but have been fairly unimpressed by its slowness, and by the difficulty of getting any notification of errors.

So I’m turning to yeahconsole. This is a drop-down terminal, something similar to

yakuake

, and hearking back ultimately to the headsup terminal in quake. To use: Ctrl-Alt-y to bring it up, type/run your command, M-A-y again to hide it.

I leave outstanding two jobs, one easy and one hard. Easy one is integrating it with xmonad, to launch on M-p. Hard one is making it vanish after executing a command; from a glance at the docs it seems this will only be possible by futzing with the source directly

Firefox: TINA

Becoming increasingly infuriated by firefox eating up a disproportionate amount of my computer’s time. Alternatives, though, seem limited:

– Chromium: best of the alternatives, but has largely-dysfunctional text searching.

– Opera: still around, still not very good on a small screen

– flock: built on firefox, but with more stuff on top of it

– galeon: not even installable in ubuntu, for some reason

– uzbl: nice idea, gaping usability/discoverability problems

..and so I return grudgingly to firefox
:(

Untitled

I doubt very much _why is a Randian, but something in his self-annihilation reminds me of The Fountainhead. There’s something scary about the vigorous assertion that your creations are yours to destroy — something that’s uncomfortably on the border of right and wrong, in an intense and personal way.

Untitled

JSFiddle is a useful tool for editing javascript in a browser window. Raphael puts pretty pictures there. together, they make for a pretty decent learning interface.

Saving firefox

further to earlier grumbling about firefox, it seems the main culprit is the restore-session facility. This is something I hated anyway, even without realising that it was shutting down my hdd every 10 seconds to churn through all my tabs. Solution: go to about:config. browser.sessionstore.interval controls how often firefox stores its tab data. The default is 10 seconds; setting it to a long string of nines has sped up my computer no end.

and so, firefox is saved for another day.

also of note: the vimkeys plugin, providing j/k scrolling.

Webmontag 19.7.10

At Web Monday. Presentations:

  • First Trimester, blogging for doctors. Apparently while there are a lot of web projects targetting patients, there aren’t many blogs aimed at providing professional information for doctors.
  • Yourcent, a micropayments system
  • Feed Magazine a free german-language (paper) magazine about the online world. Now at issue 0

Nested dictionaries in python

Python’s defaultdict is perfect for making nested dictionaries — especially useful if you’re doing any kind of work with json or nosql. It provides a dict which returns a default value when a key isn’t found. Set that default value an empty dict, and you have a convenient dict of dicts:


>>> from collections import defaultdict
>>> foo = defaultdict(dict)
>>> foo['x']
{}

But it breaks down when you go more than one layer deep:


>>> foo['x']['y']
Traceback (most recent call last):
File "", line 1, in 
KeyError: 'y'

You can get another layer by passing in a defaultdict of dicts as the default:


>>> bar = defaultdict(lambda: defaultdict(dict))
>>> bar['x']['y']
{}

But suppose you want deeply-nesting dictionaries. This means you can refer as deeply into the hierarchy as you want, without needing to check whether the intermediate dictionaries have already been created. You do need to be sure that intervening levels aren’t anything other than a recursive defaultdict, mind. But if you know you’re going to have your content filed away inside, say, quadruple-nested dicts, this isn’t necessarily a problem.

One approach would be to extend the method above, with lambdas inside lambdas:


>>> baz = defaultdict(lambda: defaultdict(lambda:defaultdict(dict)))
>>> baz[1][2][3]
{}
>>> baz[1][2][3][4]
Traceback (most recent call last):
File "", line 1, in 
KeyError: 4
>>>

It’s marginally more readable if we use partial rather than lambda:


>>> thud = defaultdict(partial(defaultdict, partial(defaultdict, dict)))
>>> thud[1][2][3]
{}

But still pretty ugly, and non-extending. Want infinite nesting instead? You can do it with a recursive function:


>>> def infinite_defaultdict():
...     return defaultdict(infinite_defaultdict)
...
>>> spam = infinite_defaultdict() #defaultdict(infinite_defaultdict) is equivalent
>>> spam['x']['y']['z']['l']['m']
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {})

This works fine. The __repr__ output is annoyingly convoluted, though:



>>> spam = infinite_defaultdict()
>>> spam['x']['y']['z']['l']['m']
defaultdict(, {})
>>> spam
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {'x':
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {'y':
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {'z':
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {'l':
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {'m':
defaultdict(<function infinite_defaultdict at 0x7fe4fb0c9de8>, {})})})})})})




A cleaner way of achieving the same effect is to ignore defaultdict entirely, and make a direct subclass of dict. This is based on Peter Norvig’s original implementation of defaultdict:


>>> class NestedDict(dict):
...     def __getitem__(self, key):
...         if key in self: return self.get(key)
...         return self.setdefault(key, NestedDict())
>>> eggs = NestedDict()
>>> eggs[1][2][3][4][5]
{}
>>> eggs
{1: {2: {3: {4: {5: {}}}}}}