Application Usage Monitoring
Recently I’ve had a couple of ideas for a project (like I need another one of those). The goal would be to make a library which allows applications to easily track their user’s interactions and log them in a central location. Project maintainers/contributors could then look at the collected data to help them make decisions about what they should be spending time on. For instance, a media player might log what types of files are played or if it was synced to an iPod-like device.
As far as technical hurdles go, doing something like this is pretty easy. The main questions I have are around the kind of policies that should exist for such a thing. Obviously, participation should be opt-in. But should it be on a per-app basis, or per-user? Or both? If it is per-app, you would likely get bombarded with a prompt on the first run of every app that uses this system. If that is a small number it might be ok, but hopefully that wouldn’t be the case :). On the other hand, maybe you don’t want certain sensitive applications (email client?) ever sending info.
Then there’s the question of who should have access to the data. My feeling is that the user should always be able to see everything that he has sent. But should he also be able to see everyone else’s individual data? What about the aggregated data? That leads me to the next question. Should there be a cookie that identifies a single user throughout all applications? Or even a cookie per-application? I think having a cookie across all applications would definitely make the data more useful, but I’m not sure if people would be opposed to such a thing. Of course, this leads to yet another question. How do we keep personal information out? I don’t believe there is a technical solution to keep things like this from making its way in. Developers will need to be very careful, and that kind of bothers me. If all of the data on the server is available to everyone then maybe public scrutiny will help keep things in check, but who knows.
These are just a few of the questions I have come up with, and I am sure others can think of plenty more. Is it possible to come up with something that benefits the development community without infringing on user’s privacy? Even so, would users participate? Comments are open.
Living with KDE 4.0
Well, I've had KDE 4.0 on my machine for a day or so now, and I'm getting used to it. I've switched to running AIGLX so that I can use KWin's OpenGL mode instead of the XRender mode, and it's a lot more stable, although I can't run Google Earth any more. With the OpenGL rendering, the desktop look great, and the beauty of the desktop alone is probably enough to stop me switching back to KDE 3.5 at the moment. A few times I have clicked on a window only to have it completely disappear without warning - not sure what that's about. There are a few niggling little bugs in the behaviour of a few things, but I'm sure they'll get sorted in a minor release before too long. (Such as icon widgets not working with a graphics tablet, not being able to hide the plasma blob, konqueror not loading images or styles, etc.)
I am inspired to try writing some plasma applets to do things properly. And when I say properly, I mean how I want them to work. I've had a look at some of the source for existing stuff, and it looks relatively easy, so instead of writing any more of this, I'm now going to go off and write some code. Perhaps. If I can stop gazing at the beautiful desktop.
Giving 4.0 a go
And what are my first impressions? Well, the first impressions are that it has, again, improved over the previous pre-release. A nice new wallpaper, a slightly sleeker panel, and a number 4 instead of a 3.97 or something.
My second impressions are that it's still very unstable, very unpolished and, to be honest, somewhere between an alpha and a beta in quality. I had been expecting the lack of features, as that was well advertised, but I had at least expected the released features to work. Anyway, I'm going to stick it out - it's going to stay on my computer for the next week at least, and I'll start writing bug reports., and looking forward to 4.0.1, or whatever comes next.
Strigi irc meeting
Just giving more voice to original announce: Tomorrow, Saturday 12 January, at 17 UTC an irc meeting will take place on #strigi channel (it’s on freenode if you don’t know).
During the meeting Strigi developers will discuss about the future developments of Strigi.
Special guest: Aaron Aseigo. You’re all welcome.
Tyding up Strigi analyzers
As you may know, KDE4 will use Strigi for meta information extraction instead of the old KFilePlugin classes.
Since Strigi’s analyzer work in a different way, lot of code has to be ported. Unfortunately, after a good start, some relevant analyzers were still missing.
But in the last weeks Strigi gained support of:
- wave file
- avi files
- txt files
- dds files
- rgb files
- sid files
- ico files
I’ve also updated this summary page. As you can see there’s still some work to do, but don’t worry… I’ll try to do the best ;)
flashblock
Back in Fürth
KDE Project:
After almost one month, we're finally back in Bavaria. First I picked up my wife in Berlin, where she had a week of vacation. Then visited Rostock for almost 2 weeks and then drove back to Berlin on 26th where my mother married. Then we celebrated new year in the lovely St. Joseph's hospital because Felix got really, really sick and we had to wait over an hour for the blood values and it happened to be the midnight.
But meanwhile Felix is pretty much fine again. Just that he left his viruses on my throat, so now both our voices are pretty hoarse. Just that I can use all kind of medicine and Felix is getting warm milk all day and night (*shudder*)
But that boy got BIG:

The laughing cow
Went on a short visit to Dublin. Arrived totally knackered but went to a party. Felt like the sadly decorated christmas tree. When they put a red drink in front of me I took two sips and had to give up. Fortunately got a lift. The next two days I fainted at 8pm, but then I was fit on Tuesday to make my way to the pub. Arrived there after 1,5 h only to find out that I got the wrong one.
Lep' Inn doesn't really sound like Galloping Green, I suppose. My pub companions spotted me on the street though and like a remote controlled robot I was directed to the car and taken to the first pub. Then there was a second and a third where we played billard expertly. The next pubs' bouncers didn't allow us in for some reasons. So the others went on to someone's home. But I was too afraid to join them. My taxi driver nearly run a guy over, but I did arrive at the hotel. When I made my way to the aircoach the next day the sun was shining and there were many seagulls on the river and I didn't want to leave. But now I'm back and went Christmas shopping. What a yearly horror. Bought 5 presents, 2 out of which are for myself. Am curious about this book about the teddy bear who is put behind bars and interrogated. Liked the cover. It says it's not for everyone. Doesn't that sound promising?
MDC presentations available
Web Service Management On Rails
In the first one, WS-Management On Rails, covers the beauty of accessing WS-Management and WS-CIM functionality through Ruby. The code follows the DMTF Technologies Diagram and consits of- rcim for the CIM Infrastructure layer This implements the CIM metamodel of classes, properties and qualifiers.
- mofgen to generate WS-CIM bindings Mofgen is an extension to the Cimple MOF parser. It generates Openwsman client bindings for CIM classes from the class description contained within a MOF file.
- rwscim for the CIM Schema class hierachy This puts a wrapper around the bindings generated by mofgen, makes them available as a single Ruby module and ensures the correct class hierachy.
Web Service Management Application Enablement
Web Service Management Application Enablement is about using WS-Management as a transport layer for remote application access. Instead of implementing a separate daemon, protocol and data model, riding the WS-Management horse gives all of this almost for free. And its more secure. The dynamic plugin model provided on the Openwsman server side makes this particularly easy. The presentation shows how to plan and implement such a plugin and gives two examples. openwsman-yast for a simple, RPC-type approach and openwsman-hal which follows the WS-Management resource model.
Back to the binaries! Yeah!
Back to the binaries! Yeah!
After all this XML work the binary file formats are a different world. For the fields work I needed to analyze the “form field” structure of the binary .DOC format:
The header: Actually a misused PICT structure:
| b10 | b16 | field | Type | size | bitfield | comments |
| 0 | 0 | lcb | U32 | | | Count of bytes of the whole block. |
| 4 | 4 | cbHeader | U16 | | | Always 0x44 |
| 6 | 6 | | U8[62] | | | Contains zero. In fact this is the PICT struct, but since its not need we can fill it with zeros. |
The formfield payload (Unicode Variant)
| b10 | b16 | Field | Type | size | bitfield | comments |
| 0 | 0 | cUnicodeMarker | U8[32] | | | Contains {0xFF,0xFF,0xFF,0xFF} |
| 4 | 4 | fftype | U8 | :2 | 03 | Type: 0 = Text 1 = Check Box 2 = List |
| | | ffres | U8 | :5 | 7C | Result field for a form field. Values from 0 to N-1, where N is the number of \ffl entries. In case of check boxes: 0==unchecked; 1==checked. |
| | | ffownhelp | U8 | :1 | 80 | 1 if there is associated Help text, 0 otherwise. |
| 5 | 5 | ffownstat | U8 | :1 | 01 | 1 if there is associated status line text, 0 otherwise. |
| | | ffprot | U8 | :1 | 02 | 1 if this field is protected, 0 otherwise. |
| | | ffsize | U8 | :1 | 04 | Type of size selected for check box field: 0 = Auto 1 = Exact |
| | | fftypetxt | U8 | :3 | 38 | Type of text field: 0 = Regular text 1 = Number 2 = Date 3 = Current date 4 = Current time 5 = Calculation |
| | | ffrecalc | U8 | :1 | 40 | 1 if the field should be calculated on exit, 0 otherwise. |
| | | ffhaslistbox | U8 | :1 | 80 | 1 if this field has list box attached to it, 0 otherwise. |
| 6 | 6 | ffmaxlen | U16 | :15 | 7FFF | Number of characters for text field. Zero means unlimited. |
| | | | U16 | :1 | 8000 | Unknown. Set to zero. |
| 8 | 8 | ffhps | U16 | | | Check box size (half-point sizes). |
| 10 | A | xstz_ffname | Xstz_UString0 | | | Form field name |
| | | xstz_ffddeftext | Xstz_UString0 | | | Default text for field. Only if type==0. |
| | | ffdefres | U16 | | | Default resource for list field. Default value for check box (0=default unchecked; 1=default checked). Only if type!=0. |
| | | xstz_ffformat | Xstz_UString0 | | | Format for text field |
| | | xstz_ffhelptext | Xstz_UString0 | | | Help text |
| | | xstz_ffstattext | Xstz_UString0 | | | Status line text |
| | | xstz_ffentrymcr | Xstz_UString0 | | | Macro to execute upon entry into this form field |
| | | xstz_ffexitmcr | Xstz_UString0 | | | Macro to execute upon exit from this form field |
| | | cUnicodeMarker2 | U8[2] | | | Contains {0xFF, 0xFF}; Padding and/or indicator for Unicode? |
| | | fflLen | U32 | | | Num of ffls |
| | | ffl | Xstz_UString[fflLen] | | | Resource string for lists. |
An Xstz_UString has the following form:
| b10 | B16 | Field | type | size | bitfield | Comments |
| 0 | 0 | Len | U16 | | | Len of the String. |
| 2 | 2 | Unicode char | U16[len] | | | Unicode chars |
An Xstz_UString0 has the following form:
| b10 | B16 | Field | type | size | bitfield | Comments |
| 0 | 0 | len | U16 | | | Len of the String. |
| 2 | 2 | Unicode char | U16[len] | | | Unicode chars |
| 2+2*len | | Zero | U16 | | | Trailing “0” |
In case of non-Unicode encoding then the Unicode Marker disappear and the string chars have U8 size.
You might also want to take a look at the ffData element in OOXML ;-)