Ikke's Blog

Archives for: December 2004

Dec 19
IBM RedBook on Linux Client Migration, and OpenOffice 2.0 forecast

IBM releases a RedBook on Linux client migration: Linux Client Migration Cookbook - A Practical Planning and Implementation Guide for Migrating to Desktop Linux. I did not read it yet, but I guess it's worth reading...

The Inquirer also got an article on OpenOffice 2.0, which is currently under development. Looks cool B-)

Friday night the annual VTK Galabal (Prom) took place at the Salons Montovani. It was a great party, got to know some new guys, had a couple of free drinks (and a couple of paid ones ;-)), which resulted in a bad stomach on saterday :-) Well...
My pictures are aviable here, maybe I'll put the movies I made online too. Official VTK pictures are here, here and here.

I'm trying to get Beagle (Planet) working on my Gentoo system, but fail to do so. ./configure requires some Mozilla/Firefox stuff I haven't got. Maybe I should really look into Ubuntu Linux, which has pre-built Beagle packages. Or try installing the complete Mozilla suite on my Gentoo system, which I wont do because of lacking harddisk space, and Mozilla taking too much time to compile on my poor system.

I definately want to learn Python coding, but can't do it now due to approaching exams, and lack of documentation/book.

Dec 16
Ivman awakened

Lots of commits by Rohan lately. This rocks :-) Now a new release should be made, so the guy that wanted to make Debian packages can go ahead :-)
Also Paul Archer wanted to code on Ivman too, more specificly Ivman's IvmConfig package. That's why I made a last pull of the ivman_ng SVN repository aviable, here.

Gentoo's Ivman package was also bumped (by Genstef), now Rohan's USB support patch is used when the "usb" USE-flag is set.

Someone just asked me if I was willing to become "godfather" (sp?) of their child. Tough one... It would be an opportunity to go to France, 'caus that's where they live, from time to time :-)

Ikke • Life, IvmanPermalink 2 comments
Dec 14
Bugs and X under Windows

Check this out :-)

Sometimes people want to use X apps on a remote server through X forwarding on a Windows box. Of course you can run a VNC server and the Windows client, but this could be usefull too. Guess I'll try it once at VTK.

Dec 13
Dec 12
Ivman code , life and blogging engines

Found this url in my referers list today. Looks like someone is coding on Ivman :) If you read this, please contact me!!! I can give you CVS access ;-)
I looked at the patch, but have to take a closer look later :oops:
It's true I don't have time to code on this project. Altough it's not only time that was lacking... :|

I have a love-hate relationship with Gaim 1.1. Sometimes it runs smooth, sometimes it just crashes (gets killed) when I e.g. close the last opened IM window. Besides, it almost continuously eats 15-30% of my CPU power, only dropping when other processes need the CPU cycles. And it still lacks Custom Emoticons support (like AMSN got). Maybe I'll try to code that last thing once I get time for it ;-)
I do love the new MSN icons tough :-) Finally you can see who is blocked by you.

Gaim MSN Icons

Looks I got listed on a new Planet, Planet JD, too. It's a big one :-)

I found out Guadec 2005 will be in Stuttgart, Germany this year, which is great news, except... the date. Exams start end May - begin June. No Guadec for me this year, again :-( Going to FOSDEM should be possible tough :-)

Forgot to mention I went to a performance by the Simoens trio on friday. Three sisters that perform pianotrio's (one piano, one cello and a violin). It was great to be there, if you like classical music and get a chance to see/hear them, don't hesitate.

I decided to start writing a new blogging engine, once I find a server that gives me web (PHP) hosting, a MySQL database, and a Subversion repository. I know there are lots of engines aviable nowadays, but all of them lack features I really like, like modularity. Both b2Evolution and WordPress are nice suits, but sometimes the code just isn't modular enough, or they use some hacked-together templating engine whith a lot of PHP code inside the template file, which is plain ugly.
My engine will be modular to the extreme (authentication|authorisation|(xmlrpc & web) input|all sorts of output, both html and xml (rss,...)|...), it'll use the PEAR packages wherever possible, and last but not least, Smarty as a templating engine. But this is a long-term project (university exams first).

Looks like we found out what we'll do on New Years eve :)

Dec 12
Gegen Die Wand

Saw Gegen Die Wand yesterday, in Studio Skoop. Keywords are "suicide", "alcohol", "drugs", "integration of Turkish people in western civilisations", "place of the Turkish women in their family",... The movie wasn't that bad, altough sometimes too explicit IMHO (the suicidal and sexual scenes). I did like the photography tough. If you do like non-Holywood movies, you should check this one out, definately.

Lennert happened to be there too :-)

Ikke • LifePermalink 1 comment
Dec 9
Fedora Stateless disapointment, Python and Subversion

I'm starting to get disapointed by the Fedora Stateless project. We are unable to get the stateless-tools working without using X (which is, of course, not installed on our server). Is the project abandoned? It'd be a pitty, because the idea behind it is great, and it's very uefull in a lot of cases.

I re-read the Python tutorial I found once, and started to try writing some simple scripts. Python is getting bigger and bigger: it's used by Gentoo Linux, the Fedora Project and Ubuntu Linux as scripting language for a big part of their management tools, both X- and CLI-based, and also other applications use it. All new technologies like DBUS and HAL got Python bindings. And of course there's stuff like PyGTK.
One of those projects that got Python support is Subversion. Now I wanted to try to write some scripts using to make Subversion repository access somewhat more accessible for RCS-newbies, but didn't manage to get things working. API's seem to have changed (i.e., not conformant to the samples I found), I tried to hack on it a bit, but then got pointer errors (I guess thanks to Swig), altough AFAIK I can't work with pointers in Python?!?
In the end I gave up and created some of the scripts using good old Bash, with some help of PHP and Pear::Config for ini-file handling. The results are here, not completed yet!!!

I changed quite a lot on the Subversion setup on our server, using SVNParentPath and the authz_svn module now. Haven't updated the howto tough.

We had free (as in beer) Bicky Burgers this evening at VTK. It's the first time I ate one of these things. There was some sort of unofficial contest to eat as many of them as we could (there were like 96 of them), I ate 2 of them, which was on the average.

I'm tired and need some sleep, badly.

Dec 8
Santa Claus, the original one

We in Belgium know a guy called "Sinterklaas". He comes from Spain every year, brings "mandarijntjes" (picture) and gives every child that has been gentle last year some present on december 6. Here's what he looks like. He also got some workers called "Zwarte Pieten" (picture).

Yesterday, we had a "party" with VTK with "Sinterklaas" as theme, because yesterday *was* 12/06. First time this year I want to a so-called "Goliarde", and it was fun. Had some sort of camera-fight with Lode (no, not the laptop guy), had a few beers, but had to go home way too soon :-(

Pictures of the event are aviable here.

Sinterklaas, friend of all children:

Some other members of this blog were there too:




Even Santa Clause was there:

I need more RAM. By downloading these pictures from my camera, my machine just hang twice because I hadn't enough RAM (128Mb) and/or swap space (128Mb) aviable (well, I had X, Firefox, Gaim and some other apps running too). Bizarre.

Back to business: I wrote that Subversion Howto I talked about this morning. It is not finished (yet), but well... I'll try to LaTeX'ize it, which will be my first attempt at creating a LaTeX document :-)

Ordered 40 Ubuntu CD's today. 20 x86, 10 PPC and 10 AMD64. Ubuntu is one of those Linux distributions I'm going to try on the PC I should get once. Ordered all these CD's to spread them among friends and VTK members trough WVS. Ruben, once a big Gentoo fan, switched over to Ubuntu some time ago. I'll find out why he did so, and if what he did is the right thing to do :-)

Dec 7
Tech Humor, Subversion and some GNOME stuff

Here, on Monologue again.

We @VTK also need to start using Subversion, lost some code yesterday thanks to the stupid "write-code-on-testing-server-then-move-to-live-server-using-some-cgi" method we're forced to use. Unfortunately AFAIK I'm the only one in there who ever worked with Subversion, knows how to set up a repository (on Apache), how to add files, commit stuff, get diffs,... I was planning to create a nice HOWTO today anyway, guess I should get started. It's not th

Dec 4
Blogging fun and Dell problems

Still no usefull information to solve our PowerEdge 2400 problem :'(

2 new blogs created today: one for Publino, a writer (here, it's Dutch), another one which should show progress we make on getting Fedora Stateless Linux to run at out university. More info on this project here. The pygtk dependency of stateless-snapshooter is very strange |-| Guess I'll have to take a close look at it.

I hop I'll be able to make even more guys/girls/man/woman happy by offering them an blog :-D Rules are simple: no ads, stick to the netiquette, and no pr0n and/or illegal content.
New skins can be installed on a simple request, like london, moonrise and wpc_splat today (you can see them by pointing your browser to http://blog.eikke.com/index.php?skin=[skinname] ).

While looking for a Linux replacement for w.bloggar, after I couldn't get Gaim-Blogger working, I tried both Gnome-Blog and BloGTK. None of them could satisfy my needs, tough :-( Too bad. Maybe I'll have to code one myself using Mono and GTK# :-)

I started to use BlogLines again, after some months. Fortunately there's a "Mark all as read" button. Sorry guys :oops:

No coding work done today, I studied some more geometry. Still don't like this subject tough ;-)

Spent some hours in front of my screen today, so I'll give my poor eyes some rest now and poweroff the machine (yeah, even tough it runs Linux ;-)). 'night all.

Dec 3
Gentoo Portable #2, PHP code generator pt. 3, and pictures

Lode's laptop is almost done. He got a working xorg-x11 installation currently running Fluxbox, but emerging Gnome, gensplash support, all services necessary for a decent base system (hotplug/coldplug, pcmcia, HAL,...), FAM was replaced by Gamin, I got him to love Torsmo,... I even got his IPW2200 WiFi link working, jay! Today was a good day ;-)

One more thing on the todo list tough: get lm-sensors on his Intel 825200 or whatever chipset... Anyone got this working? B-)

I worked some more on the PHP LDAP Class generator. Actually, this isn't an LDAP based project anymore, rather a bundle of libs I'm creating to write out PHP class files, and I'm using that work to do the LDAP stuff.

Member functions were done, which means at the moment you can:
- Create a class, define it's superclass (optionally), and add required files
- Add member variables
- Add member functions

Only getMemberFunction and setMemberfunction are implemented (like:

$g = getMemberFunction( "_test" );
echo $g->toString();

will output

function getTest() {
        return $this->_test;

Watch the underscore handling :-)

A setMemberFunction does +- the same thing, only it generates code to set a specific member variable.
The functionwriter still needs to write out PHPDoc function information. The necessary member variables are in the class, but the toString() function doesnt generate it yet.

Once that's done, two thing left to do: add Class PHPDoc information, and testing of course.

I'm quite certain this functionallity could be usefull for other people too, so maybe I'll release the code once I think it's mostly "done".

Finally I installed Coppermine. It's quite nice to work with, altough I couldn't find any theme I really like, and it has some more issues (like, not reading EXIF data on a batch import). You can check it out here.

I think I'll get my dad's old PC (an HP P4 1.9) this weekend, finally :-D This implies I'll be able to run Gentoo and more generally Linux on a decent machine :-) I hope I'll be able to start some more development again (after my exams @ university, of course). I got a long list of thing's I'd like to see working in Linux/Gnome ;-)

Dec 2
Some work, and code generation part 2

- Lennert got his own blog in here. Check it out.
- Installed 2 new themes, and modified them a bit to my needs: wpc_rubric and Stockholm.
- Tried to get Gaim-Blogger to work with this Blog, I couldn't get it working tough.
- Re-installed my phpOpenTracker visitor tracker. jpGraph currently refuses to work tough ;-(

I worked some more on the PHP code generation stuff. Now there's "memberVariable" class, which can be used inside "classBuilder", so the member variables are abstracted and can easily be added to a classBuilder forged class by the application. I'm also working on memberFunction classes (like getMemberFunction, setMemberFunction and complexMemberFunction) that define class member functions. The first and second one create standard get and set methods, the third one can create custom methods.

Generating classes representing all objectClasses and attributeTypes defined in core.schema, cosine.schema, inetorgperson.schema and nis.schema takes 3.6 seconds, which is not too slow. It's the "Connecting to LDAP Server" and "Fetching schema information" parts that take the longest time, class generation is pretty quick.

One more new feature: all generated memberVariables get PHPDoc compliant comments. The memberFunctions should get it too (when I finish the classes, almost done in fact), and in the end classes should get their documentation too.

I'm trying to help Lode getting Gentoo on his brand new laptop. Not an easy one. Those damn cheap Medions :roll:

Dec 2
Let PHP write code for you

I'm working on a project. A neat new server. Well, the server itself (you know, that PowerEdge 2400 I talked about yesterday) seems to be, well, screwed somehow, but I wanted to *do* somethin anyway.

The magic word is LDAP. We want everything into an LDAP directory where possible. System users, quota, email aliases, Horde preferences, mailing list members, Samba as a PDC using LDAP as userbase/password backend, everything. I was able to set all of this up on my workstation, so that won't be a big problem.

There is one major issue tough: frontends. We were not able to find any decent frontend suited to our needs. Of course there is PhpLdapAdmin, which is a great tool to browse your tree and edit base-level stuff, but it's only usefull for directory administrators. You cannot expect a normal user to use PLA to change his password.

So we have to write everything ourself. Because we'd like to give the user both webbased and CLI interfaces for all administration tasks, PHP was chosen as development platform, using PEAR's Net_LDAP modules, which is kinda neat. You can use it to retrieve LDAP Schema information, which is what I need here.

The objective is simple: create classes in PHP that represent an LDAP objectClass. So if a user in LDAP is an "inetOrgPerson", I need a class in PHP called "inetOrgPerson", like $ikke = new inetOrgPerson( "uid=ikke,dc=test,dc=com");

Because LDAP supports objectClass inheritance, this should be reflected in the PHP code too. LDAP supports multiple inheritance, a PHP class can only inherit from one class, but normally this isn't a big issue, because most objectClasses only SUP one parent objectClass.

Writing PHP files with classes representing all possible attibuteTypes and objectClasses by hand didn't look like a pleasant foresight to me, so I wanted to automate things. Of course I could write everything by hand once, but then if new schema's would be added to the LDAP server, I'd have to write more classes, change inheritance,... which is just plain stupid.

So I started to write PHP classes and functions that create PHP class files for me, based on data it retrieves from the LDAP server. At the moment, attributeTypes and objectClasses are only represented using member variables and (read) accessor functions, so something like the example I gave is not possible (yet), but it shouldn't be too hard to get that working too.

This is what it looks like now:

* schemaItem
        * atributeType inherits schemaItem
                * homeDirectory inherits attributeType
                * uid inherits attributeType
                * ...
        (attributeType inheritance isn't supported)
        * objectClass inherits schemaItem
                * top inherits objectClass
                        * person inherits top
                                * organisationalPerson inherits person
                                        * inetOrgPerson inherits organisationalPerson
                                * ...
                        * ...

Every attributeType is represented by (attributeTypeName).class.php in a certain directory, and every objectClass as (objectClassName).class.php in some other directory.

Some classes provide the factory methods to create these class files: there is the base classBuilder class, which provides the following functions:

- classBuilder( $name, $super = null )
     Constructor. $name is the name of the class to "build", $super is an optional base class $name should extend.
- addRequire( $req )
     Add a "require_once( $req )" to the output file.
- addVariable( $type, $name, $private = false )
     Add a member variable of type $type (mentioned in a comment), with name $name, to the class.
     $private is not used yet, but could be used in the future to force prefixing private variables using an
- addVariableValue( $type, $name, $value, $vartype = VARIABLE_TYPE_STRING, $private = false )
     Add a member variable which has a predefined value. $type, $name and $private are the same things as in
     addVariable(3). $value is the standard value this variable should have, and $vartype defines the
     type of the variable: STRING, INT or BOOL, so strings can be written like 'var $test = "test"',
     integers like 'var $test = 1', and booleans like 'var $test = true' (watch the quotes).
- writeFile( $filename )
     Finally writes the class structure to file $filename.

Next to these there are some more private functions, like one to generate a PHP-syntax-compatible representation of an Array (also multi-dimensional arrays because the function can call itself, I think it's pretty nifty :)) )

As you can see it is not possible to add member functions to classes, which should not be necessary, because the base classes ("schemaItem", "attributeType" and "objectClass") provide the necessay ones.

Next, I got Writer classes for every type I got:

* schemaItemWriter inheits classBuilder
        * attributeTypeWriter inherits schemaItemWriter
        * objectClassWriter inherits schemaItemWriter

These classes take data from the LDAP server to give classBuilder all the information it needs to generate the class files for all objects.

This could sound very obscure, but actually it isn't. I have to admit the code is not documented tough :oops: The PhpDoc tags are there (thank you Vim and the Vim PHPDoc plugin), but the correct data isn't in there ;)

Now the results:

cat attributeTypes/email.class.php

require_once( "attributeType.class.php" );

class email extends attributeType {
        //Type: String
        var $_oid = "1.2.840.113549.1.9.1";
        //Type: String
        var $_name = "email";
        //Type: String
        var $_equality = "caseIgnoreIA5Match";
        //Type: String
        var $_substring = "caseIgnoreIA5SubstringsMatch";
        //Type: String
        var $_syntax = "{128}";
        //Type: Integer
        var $_maxLength = 128;
        //Type: Array
        var $_aliases = array("0" => "emailAddress","1" => "pkcs9email");


cat objectClasses/top.class.php objectClasses/person.class.php

require_once( "objectClass.class.php" );

class top extends objectClass {
        //Type: String
        var $_oid = "";
        //Type: String
        var $_name = "top";
        //Type: objectClass (Must)
        var $objectClass;



require_once( "top.class.php" );

class person extends top {
        //Type: String
        var $_oid = "";
        //Type: String
        var $_name = "person";
        //Type: Array
        var $_supClasses = array("0" => "top");
        //Type: sn (Must)
        var $sn;
        //Type: cn (Must)
        var $cn;
        //Type: userPassword (May)
        var $userPassword;
        //Type: telephoneNumber (May)
        var $telephoneNumber;
        //Type: seeAlso (May)
        var $seeAlso;
        //Type: description (May)
        var $description;
        //Type: Bool
        var $_structural = true;


ls attributeTypes objectClasses | wc -l

Generating these files manually would be a PITA ;-)

As you can see this code is not ready (yet): for the objectClasses, there should be validator functions (are all Must attributes set?), accessor functions for all attributes, and last but not least, pulling and pushing data from/to the LDAP directory...

I'm very happy with the current results. Once all schema information is pulled from the server by Net_LDAP, the parsing of this data and creation of class files is very fast. Adding the other necessary functions should be a breeze (well, not really ;-)) now.

Once this is done, we need to write some simple backend for everything (an abstraction layer between the frontends and the actual objectClasses etc, something the user nor the frontend scripter should be aware of), and of course the frontends. PEAR Console_Getopt looks usefull :-)

I'm at university at the moment: there is a LanWar night going on (I'm not gaming, but well...).


Who's Online?

  • Guest Users: 405


XML Feeds

What is RSS?