May 2007


Today I worked on a Jelly script to import users to Jira. Such a script you can create automatically using a scripting language of your choice, in my case I try Python. The primary source for the users and groups data would be an organically grown LDAP of a public organization.

I had to find out that there is more about LDAP (Version 3) queries or filters (described in RFC 4515 ) then just the straight forward examples like:
(objectclass=inetorgperson)
- finds all entries with objectClass equal to inteOrgPerson
(cn=*Inter*)
- finds all entries with “Inter” appearing somewhere within the cn (common name) attribute
(!(cn=*Inter*))
- finds all entries without “Inter” appearing somewhere within the cn (common name) attribute
(&(ou=universit*)(l=Berlin))
- finds all entries with ou starting with “universit” AND l equal to Berlin (trying to find universities located in Berlin)
(&(|(ou=universit*)(ou=hochschule*))(l=Berlin))
- now we added an OR ( | ) to the query to find entries with “universit” or “hochschule” in ou (organizational unit), cause “hochschule” means literally “high school” in german, i.e. “almost” a university

I find useful to know:
(&(objectClass=inetorgperson)(mail=*))
- finds inetOrgPersons with nonempty mail attribute
(&(objectClass=inetorgperson)(!(mail=*)))
- finds the same but with an empty mail attribute

More complex queries (extensible match search):
(ou:dn:=bibliotheken)
- matches part of a dn (or better: treat attributes used within dn’s string as if they would be regular attributes of the entry) in that case entries like that: dn=…,ou=bibliotheken,dc=mydomain,dc=de
(ou:dn:=bibliotheken*)
- does not work!

General matching rules can be used (see RFC 4517) within the extensible match search. Match rules are identified by OIDs or names. So:
(uid:2.5.13.5:=John)
is the same as
(uid:caseExactMatch:=John)
And
(uid=John)
the same as
(uid:caseIgnoreMatch:=john)
or
(uid:2.5.13.2:=john)

To escape characters which have a special meaning use
‘*’ – \2a, ‘(‘ – \28, ‘)’ – \29, ‘\’ – \5c, ‘NUL’- \00, ‘/’ – \2f .
(cn=*\2a*)
- finds entries with “cn” attribute containing a value with the character “*” anywhere in it.

On my laptop with an ATI graphic card and kubuntu installed I am using either a dual-head configuration in xinerama mode (screen stretched over two monitors) or a simple one monitor setup.

Recently I messed around with the KDE system settings to get a projector working during a presentation. At home again, I wanted to run X in dual-head mode as usual and replaced the xorg.conf with the backuped xorg.conf.xinerama.
Big was my surprise that despite of this kde started in clone mode. So somehow there must be settings outside the xorg.conf file hiding itself in a cosy corner of my file system. Starting up KDE as an other user would show the correct screen.

Where KDE stores this user-related dispaly setting?

~/.kde/share/config/displayconfigrc

If you have got similiar problems – remove it and everything will be fine again!

Thinking about the design of a Persistent Identifier (PID) and resolution infrastructure based on the handle system for the Gemeinsamer Bibliotheksverbund (GBV), I came up with the following diagram, which is also an experiment how much graphics is possible just by using only plain HTML and CSS (tested with newest Opera and Firefox versions on kubuntu 6.10).

Ever wondered about regular “out of memory” crashes of Eclipse? One solution for you might be to set the Java Virtual Machine settings in case you use sun java (on linux)
eclipse -vmargs -Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

(Thats rather pessimistic numbers, but my computer has 1,5 GB memory, so I can afford it.)

The problem seems to be that suns virtual machine is not reserving enough permanent generation space and can not handle big amounts of loaded classes. More detailed explanation you can find in my excerpt (in german language) Java Virtuell Machine Setzungen für große Serveranwendungen anpassen
“The permanent generation is used to hold reflective of the VM itself such as class objects and method objects. These reflective objects are allocated directly into the permanent generation, and it is sized independently from the other generations. Generally, sizing of this generation can be ignored because the default size is adequate. However, programs that load many classes may need a larger permanent generation.”( Frequently Asked Questions
about Garbage Collection
in the HotspotTM JavaTM Virtual Machine
).
See also jmap – Memory Map, Eclipse Bug 92250.

A great explanation you can find at Frank Kieviet’s Blog:

More Virtuell Machine (Hot Spot) options at http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp and tuning tips at http://java.sun.com/docs/hotspot/gc/.