Categories: , ,
Posted by: bjb

I’ve ordered a new DSL supplier and have cancelled the old one — the transfer date is June 24. So if I go offline June 24, that might be why. I’ll be back.

I haven’t got my new static IP address yet, nor my new IPv6 subnet. Stay tuned! Hopefully I’ll find out what they are before June 24 (so I can put them in DNS on time).

NCF (National Capital FreeNet) has been great — but I wanted a native IPv6 supplier. So, I’m trying out TekSavvy. TekSavvy is NCF’s upstream, as it happens.

I will try to stay in touch with NCF by visiting the fora and asking/answering questions there, if I see anything I can respond to.

Categories:
Posted by: bjb

The ways that psql can be configured to connect to a different port:

  1. compiled in default
  2. PGPORT environment variable
  3. —port or -p option
  4. .pgpass setting

If you are running more than one version of PostgreSQL, you might wonder which one the psql client will talk to by default.

(DJANGO-1-3)bjb@spidy:~$ bash
bjb@spidy:~$ echo $PGPORT

bjb@spidy:~$ unset PGPORT
bjb@spidy:~$ ls -la ~/.pgpass
-rw------- 1 bjb bjb 0 May 20 17:33 /home/bjb/.pgpass
bjb@spidy:~$ locate psql | egrep bin
/usr/bin/psql
/usr/lib/postgresql/8.4/bin/psql
bjb@spidy:~$ /usr/lib/postgresql/8.4/bin/psql template1
psql (8.4.8)
Type "help" for help.

template1=> \echo :PORT
5432
template1=> \q
bjb@spidy:~$ exit
(DJANGO-1-3)bjb@spidy:~$ 

Voila. The psql in /usr/bin is a perl script wrapper for the real psql. To find the “compiled-in” default port number, you can run the real psql without the command-line arg to change the port number, --port 5555 or -p 5555, and you also need to unset PGPORT (if it’s set). I have a .pgpass, but it’s empty so I didn’t have to do anything special for that. If you have a non-empty .pgpass, you might copy it aside before running psql if you want to try this test. Don’t forget to put it back when you’re done.

On my work machine, I had two versions of PostgreSQL running: 8.4 and 8.3. 8.3 was listening on 5432 and 8.4 was listening on 5433. psql was configured to go to port 5432 by default (and therefore PostgreSQL 8.3).

Categories: , ,
Posted by: bjb

I found this very helpful. It worked great with Django 1.3, PostgreSQL 8.3 in 2011/06:

And the penultimate step (filling in the primary key in existing rows) took around half a minute for almost 200,000 records on a not-particularly well-endowed laptop.

Summary:

CREATE SEQUENCE rcvh7_id_seq;
ALTER TABLE rcvh7 ADD id INT UNIQUE;
ALTER TABLE rcvh7 ALTER COLUMN id SET DEFAULT NEXTVAL('rcvh7_id_seq');
UPDATE rcvh7 SET id = NEXTVAL('rcvh7_id_seq');
ALTER TABLE rcvh7 ALTER COLUMN id SET NOT NULL;
Posted by: bjb

I have a database full of strings where the accented characters have been replaced by their non-accented equivalents, and a spreadsheet full of strings with accents in them. I’m supposed to look up the info in the database given the info in the spreadsheet.

I found this great stackoverflow post that helped me out:

title = u"some string with accented characters in it like b\xe9cancour"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii', 'ignore')
'some string with accented characters in it like becancour'

Normalize with ‘NFKD’ will decompose each character in the string into its composing characters. For example, if there was an e with acute accent, it separates it into an e and an acute accent. The K part of NFKD ensures the ‘e’ is the simplest possible e (presumably if there is an ‘e’ in ASCII, it will prefer that one). Then the encode ('ascii', 'ignore') will drop all the non-ASCII characters, which by now are just the accents which have been separated from the rest of the letter.

Awesome. And it works in python 2.5.

Categories:
Posted by: bjb

Today is the day (starting from midnight GMT).

ipv6-test.com results for my web site — my results are no longer available, sorry

Some test sites:

Categories: , , ,
Posted by: bjb

identd provides the “auth” service (see /etc/services). On Debian, it can be provided by any of several packages, including ident2, nullidentd and oidentd.

If you want to have an identd that can talk IPv6, you can choose oidentd.

If you are running it from inetd, you should configure your inetd to respond to IPv6 as well. I’m using openbsd-inetd, and the lines in /etc/inetd.conf to make it listen on both IPv4 and IPv6 for the auth service are:

auth stream tcp4 nowait root /usr/sbin/tcpd /usr/sbin/oidentd -I
auth stream tcp6 nowait root /usr/sbin/tcpd /usr/sbin/oidentd -I

Note the protocol, which specifies IPv4 or IPv6. Also note the -I option to oidentd, to make it read from stdin and write to stdout and to exit after answering one request (needed for inetd operation).

I briefly considered nullidentd, but the description made it sound like it would only ever return one static string. Not quite what I was looking for, and I didn’t investigate further.

Categories: ,
Posted by: bjb

I was looking at django sessions and was a bit confused until I read the source code.

django/contrib/sessions/models.py
django/contrib/sessions/backends/base.py
django/contrib/sessions/backends/db.py
django/contrib/sessions/backends/cache.py
django/contrib/sessions/backends/cached_db.py
django/contrib/sessions/backends/file.py

You might think the interesting file to look at is django/contrib/sessions/models.py, but really the “toplevel” session object is defined in base.py. The object in base.py SessionBase. It is a base class for the various session implementations.

If you’re using a database-backed SessionStore, then you’ll be using base.py, db.py and session.py. db.py uses session.py for the database model and database interaction. In a view, the session object in the request object that is supplied by the session middleware is actually a SessionStore object. That is the object that has the methods get_expiry_age, etc.

I wanted to get some info out of every session in a batch mode including expiry age, so I needed to traverse SessionStore.objects.all(), not Session.objects.all().

Categories: ,
Posted by: bjb

None of my domains have expired yet, but the guy who was handling my domain names has changed the glue records to point back to the 1and1 “available” page for the .com, .net and .org domains. The .com and .net expire April 16 (a few days in the future as I write this) and the .org expires in July (a couple of MONTHS in the future as I write this).

Hmm, doesn’t sound like very ethical behaviour to me. Who knows when the .ca will disappear?

I’ve opened a case with the Better Business Bureau, for now, and I’m keeping my options open.

The case continues … unfortunately.

Categories:
Posted by: bjb

My garden is blooming.

2011 apr 7 picture of garden

The flowers actually in bloom are the snowdrops. They come up first (they are there when the snowbanks melt).

2011 apr 7 picture of garden

The other bits of greenery between the snowdrops are crocuses. They are blooming now, but weren’t blooming when the picture was taken.

2011 apr 9 picture of garden

The reddish bits are the tulip leaves coming up. The heftier green at the far corner of the garden are hyacinths.

I have very early blooming varieties of all these things. My garden if finished about when other people’s tulips are blooming. But by that time I can enjoy other people’s gardens — the same way that I hope my neighbours enjoy my garden before theirs is up.

Categories:
Posted by: bjb

I’m interested in the “Star Trek interface”. I want to talk to my computer instead of typing into it (that soon-to-be-arcane skill). So I’m starting to look into speech recognition. It seems that there are some commercial offerings that are pretty good, but the free offerings are suffering from a lack of a large “corpus” of spoken and matching typed samples — needed to make good quality acoustic models.

www.voxforge.org is aiming to collect a bunch of freely available speech samples. I encourage everyone to visit Voxforge and start contributing speech samples, a little every day, in order to build up the body of samples.

Here’s a little of what Voxforge has to say about it:

Acoustic Models are Closed-Source Most Acoustic Models used by ‘Open Source’ Speech Recognition engines are ‘closed source’. They do not give you access to the speech audio (the ‘source’) used to create the Acoustic Model. If they do give you access, there are usually licensing restrictions on the distribution of the ‘source’ (i.e. you can only use it for personal or research purposes).

The reason for this is because there is no free Speech Corpus in a form that can readily be used, or that is large enough, to create good quality Acoustic Models for Speech Recognition Engines. Although there are a few instances of small FOSS speech corpora that could be used to create acoustic models, the vast majority of corpora (especially large corpora best suited to building good acoustic models) must be purchased under restrictive licenses.

VoxForge hopes to address this problem by creating a repository of ‘source’ speech audio and transcriptions, and by creating Acoustic Models for each of the main Open Source Speech Recognition Engines (such as Sphinx, Julius, HTK and ISIP) .”

Once you’ve submitted all the prompt-sets they have, you can continue by reading public-domain books for librivox.org and add to the available collection of free audio books.