Older blog entries for freetype (starting at number 19)

Grosse Fatigue

I'm a father again. Alice was born on April 3rd this year. She's a magnificent baby, and more importantly, she's absolutely normal and doesn't have any of her sister's problems. Life is good, life is good. And Lucie doesn't even seem to be jealous at the moment.

On the other hand, Alice's still absolutely unable to sleep at night, and my wife and I have been seriously lacking any kind of decent sleep for more than a month now. I'm more lucky since I don't have to breast-feed her, but "a deep rest" is now a distant concept, at least for the next couple of months :-).

Language Wars

rmathew, you might want to take a look at the D Language: from my point of view, this is the best designed language currently available. The pros are:

  • All the niceties of C++ (OO, exceptions, templates, compiled, easy linking to C libraries) without the hurdles (atrocious syntax, atrocious compile times)
  • ultra fast compilation time, excellent execution times (easily beats C++ at many tasks)
  • dynamic arrays, strings, dictionaries and complex numbers as builtins, not ugly library/template hacks
  • the language is garbage-collected: the killer productivity enhancement. (Can be disabled if you want it).
  • built-in support for versioning, design-by-contract and much more.
  • much simpler and cleaner syntax.
  • a GCC Frontend is even available and works on Unix, Windows, MacOSX

There are still some cons at the moment though:

  • first of all, the language is still in beta, which means it's still slightly evolving.
  • the frontend isn't part of the standard GCC distribution, making it more difficult to distribute widely
  • GDB doesn't understand D name mangling yet, which makes debugging quite challenging sometimes. But you won't need it that much in my experience
  • Documentation exists but is scattered around several web pages.
  • It doesn't have the huge runtime libraries that come with Java or C# (though it can interface to C easily)

However, all these points can be solved in a short time frame. I predict this will happen once the language freezes. As for me, I've completely ditched C++ for my personal projects, it simply isn't worth the effort for what I do.

Hope this helps

1 Apr 2005 (updated 1 Apr 2005 at 12:37 UTC) »
Shared Libraries and Memory Usage on Linux

I've written a small program to measure the 'memory payload' of using shared libraries on Linux. What it shows is the amount of private process memory that is taken by the simple fact of _linking_ a program to a shared object. This corresponds roughly to the following data:

  • the specific position-independent-code tables, like the GOT, PLT and DLT. These are automatically generated by the dynamic loader. The more functions the library imports/exports, the bigger these tables are. They also explain why _any_ shared library uses at least 4 KB/process.

  • any writable static data used by the library itself.

  • finally, any absolute pointer constant found in the library, since these cannot be placed within PIC code. Any C++ shared library is going to have all of its vtables in the .data section for this reason.

Note that this does not include the memory used by the libraries when they're used (e.g. when allocating from the heap with 'malloc').

The code is available here. Python 2.1 or above required.

Results are interesting. On my work system (RedHat 7.3), the biggest "eaters" are the following:

 process     KB    KB per    library
   count  total   process
--------------------------------------------------------
       8   1312       164    /usr/lib/qt-2.3.1/lib/libqt.so.2.3.1
      59   1180        20    /lib/i686/libc-2.2.4.so
       8    768        96    /usr/lib/libkdeui.so.3.0.0
      18    576        32    /lib/i686/libpthread-0.9.so
       5    440        88    /local/dturner/opt/lib/libstdc++.so.5.0.5
      19    304        16    /usr/X11R6/lib/libX11.so.6.2
       8    256        32    /usr/lib/libkdecore.so.3.0.0
      59    236         4    /lib/ld-2.2.4.so
       8    224        28    /usr/lib/libstdc++-3-libc6-2-2-2.10.0.so
       4    192        48    /lib/libcrypto.so.0.9.6b
     ...
total payload = 10044 KB

This seems pretty reasonnable, though there are some surprises here (it's an XFCE desktop with only two KDE apps opened, no KDM !). I'd better run the script on more recent distributions to see how they compare however.

Dell Laptops

In October 2002, I was joking at the fact that Dell sells the same computer hardware with a slightly different casing for a lot more dollars. Well, it turns out that this is even more true than I imagined.

I discovered this because I wanted to buy a docking station for my Inspiron 8200, but couldn't find one at an affordable price. While at the same time, many companies on the web sell refurbished Latitude hardware for totally ridiculous amounts (and as you might guess, the Inspiron refuses to work when mounted on a Latitude station).

And then, I found this page which explains how to flash my laptop's BIOS to make it believe it is a Latitude C840. Following the steps detailed here, I could dock my laptop into a C/Port II that I bought for the shocking sum of 17€, shipping included (I'm not kidding) !!.

But this is not all. For some reason, the graphics card in my laptop had previously melted. Very fortunately, I could find someone to sell me a used graphics card for the laptop. It happens that this new card if a Quatro, instead of a GeForce. Because of this, and because I have more than 512 Mb of RAM, the new BIOS believes the machine is now a Precision M50, the "ultra-high-end" "version" of this computer when they were released.

Apparently, these things are known facts, but it's always pleasant to perform a little magic on this kind of hardware. This laptop is now used as a desktop computer, except that it's a lot more silent than the latest bunch of PCs :-)

gilbou, I think you didn't understand the sentence. Guillermito has only been fined for copyright infringement ("contrefaçon"), because he used a pirated copy of Viguard to do its research. This has nothing to do with the fact that he did publish a proof of concept that effectively showed that Tegam's marketing was essentially bullshit ("protects from 100% of all viruses, past, present and future").

Moreover, he has only been sentenced to a "sursis", which means he won't have to pay the 5000 euros, unless he's caught in the act of contrefaçon again. That's not exactly the most severe sentence you could imagine, even though there are still things that do not please me in this affair (but I prefer to see the final judgement before expressing myself on this).

One of the problem however, is that Guillaume Tena himself has a silly attitude where he claims that full disclosure is now illegal in France. This certainly not what has been judged here.

For more details, go to this page

2 Mar 2005 (updated 2 Mar 2005 at 16:54 UTC) »
FreeType & GTK/Gnome heap usage reduction

I've mostly finished optimizing FreeType memory usage when dealing with TrueType fonts, and the results are really interesting. In order to quantify the improvement, I run a fraction of the FreeType benchmark program "ftbench" to time various operations like face open/close, loading glyphs and parsing the charmap. The command itself is:

ftbench -p -b aij fontfile

heap usage was measured with FreeType's internal memory debugger, so the numbers only correspond to heap blocks allocated by the font engine.

The following are respectively the source font file, its size in bytes, and the number of heap bytes saved by the optimization:

  • vera.ttf (65,932 bytes): 53,483 bytes
  • arial.ttf (367,112 bytes): 159,016 bytes
  • times.ttf (409,280 bytes): 162,334 bytes
  • arialuni.ttf (24,131,012 bytes): 1,452,573 bytes
  • batang.ttf (15,619,828 bytes): 2,818,329 bytes

Please note that:

  • I'm comparing FreeType 2.1.9 and FreeType CVS, with memory-mapped files, which are used by default by FT2 when compiled on Unix platforms that support them.

  • The tested program loads all glyphs in a given font, and thus tends to use a lot more heap than typical GTK applications (especially when displaying CJK text). The savings displayed here are probably higher bounds, rather than averages.

  • The optimizations have only been performed on the TrueType and SFNT drivers of the font engines. This means that all other formats are probably eating too much memory. For example, the BDF driver starts by allocating a 64Kb block before reading the file. Even when the file to read is tiny. The Type 1 driver is known to be hungry as well...

I'm a bit ashamed by these numbers :o) I've tried to see if upgrading FT2 to the CVS version on my Mandrake 10.1 machine would result in any visible global memory usage reduction; Surprise, it didn't break it !! it's been unfortunately impossible to get any kind of stable numbers through 'free', 'top' and others. I suspect there is a 200-300 Kb global reduction when starting a fresh KDE 3.2 from boot (without any opened application), but that might come from something completely different. If anyone knows about a good way to measure this, I'd be extremely interested.

If you want to test it yourself on your machine, grab the latest CVS according to the following instructions. using the freetype2 module name, compiling as usual with ./configure --prefix=/usr --disable-static, then make and sudo make install. Then restart your X session. If this crashes, you can recover by following these instructions as root:

  cd /usr/lib
  rm -f libfreetype.so libfreetype.so.6
  ln -s libfreetype.so.6.XXX libfreetype.so
  ln -s libfreetype.so.6.XXX libfreetype.so.6
  restart X

Where XXX is the library minor number corresponding to the your existing installation. Mine was '7' on Mandrake 10.1, and the CVS installs '8' so just changing back the symlinks is enough to get back in a sane state.

Coucou

It's been more than a year since my last post, and this is a cool oportunity to recap what happened to me during all this time. Of course, it's not like anybody's supposed to be interested in this kind of things ;-)

Personal

We moved back to Paris, since my wife wanted to come back to work, since our daughter was getting extremely well (much sooner than the doctors planned). We couldn't both of us spend 3 hours a day in the train and correctly raise our kid, so we said goodbye to the countryside and went back to our 2-room.

After a few months, we found a larger appartment, which we paid a fortune for. Fortunately, the old one was sold at an even higher rate per square meter. Basically, 5 years of savings of two engineers will buy you an additionnal room and a small parking location in a basement in Paris. I think that's no so bad; and we have no mortage to pay. Neat

All in all, we moved three times in a little more than one year, and boy, this is exhausting. I hope we won't be moving until at least a century or two :-)

Now, all I need is a new PapaMobile to drive the family which is going to receive a new girly member in April.

FreeType

It is clear that I had very little time for FreeType this year, and was mostly absent from the mailing list during this period. My family and work, plus all the casualties of the movings (including looking for the new apartment) took all my time.

Things are slowly settling down now that we're "in the place". However, I don't know how things will be in the next few months when we'll have to handle two babies at the same time. Asking people about that is funny, some people will tell you that it's easier than one, others will tell you that it's 4 times more work. I guess it's a sort of lottery depending on the children's characters. Alea jacta est.

We're in the process of moving the FreeType server to different machines. That's mainly because the old server crashed due to a hardware failure, and our current sysadmin doesn't have the time to properly setup everything again on a different machine.

We've decided to move most things on Savannah. In one hand, it's very convenient for us, on the other, CVS is no awfully slow; fortunately, it's not like we need to perform checkouts and commits every half hours :-)

GTK/GNOME memory usage reduction

I've begun to tune the FreeType 2 code in order to reduce its heap usage as much as possible. This should benefit many desktops if done correctly. Interestingly, there are far more optimization opportunities that I initially though, and most of these are easy to do with rather immediate results. I'm however concerned about two things:

  • the first one is that I don't want to sacrifice performance for marginal heap usage gains. this isn't too difficult though.

  • the second one is that I'm modifying internal structures of the library, that are normally never accessed by client applications and libraries. Unfortunately, some popular libraries like fontconfig or Pango do peek at FreeType's internals to achieve various results.

What the second point means is that simply upgrading the library on your system with the new optimizations may break your system by making fontconfig and Pango behave erratically. Until complete testing has been performed, I'm unsure that the optimizations will be enabled by default in the next release of the code.

Of course, the correct thing to do do is fix Pango and fontconfig by mandating that they only use public APIs to do their stuff (and if they lack some API, they can ask for them, we already include some XFree86-specific stuff for example). I suppose that Owen and Keith didn't do that until now because they didn't want to depend on a too recent release of FT2. If you look at the Pango source code, you'll see that it does some pretty weird stuff to compile differently depending on the version of FreeType detected at compile time...

I suppose I'll finish by providing the right patches myself. Oh well...

Work

It's official, the company I work for has been sold to the competition. More exactly, to two distinct competitors. As for myself, I'm now one of Darth Rupert's minions. I can tell you that Microsoft doesn't look that evil from there :-)

22 Jan 2004 (updated 22 Jan 2004 at 14:19 UTC) »

Happy new year to everyone. I'm feeling that 2004 could hardly be worse than 2003 for most of us :-)

Life

Lucie got her second corrective surgical operation, and she's now an absolutely normal 11-month baby. Yep, yep, yep. It seems that the morphin she took at the hospital did disturb her sleep cycles though, and she can hardly fall asleep before midnight these days. I can live with that :-)

Books

Since I've been spending 3 hours a day in a train since last July, I had the time to read a lot of books lately. I have thus tried so far:

  • my father's collection (espionnage, crime, sci-fi). these are mainly "best-sellers" you'll find at airports and train stations. E.g. Ludlum / Crichton / Cornwell. Most of these books are midly entertaining, predictable, and lack humor. Oh well.

  • trying to ressurect my old sci-fi collection. This really means the whole works of Philip K. Dick :-) Also bought a few used books from Robert Heinlein (The Puppet Masters, and Starship Troopers). I recommend these because they're funny, and much better than the films that were written out of them.

  • trying to complete my collection of beloved French authors like Pennac or Benacquista. By the way, I recommend this book to any Frenchman that reads me. It's simply hilarious

  • finally, I've been hunting for new blood. I have discovered James Ellroy and fell in love with it (to the point that his books were the only thing I asked for Xmas :-). I'm currently completing my seventh book: I was expecting the novelty to wear off after some time, but I'm still stick on it.

Life

These last months have been incredibly intensive. Lucie got her first surgical operation to repair her palate. It's been a bit hard but everything's well now. The next one is scheduled in 6 months. Apart from that, she's a really cute baby, and we love the way she smiles in the morning when waking up :-)

Moved

We finally left Paris, to move to my grand-parents house in the country. Preparation has been tedious, so was moving and installation, but we're happy at last. I need vacations though, and an ISDN line too :-)

Fonts

Didn't have the time to do anything on FreeType or anything else. I'd like to answer mslicker's latest rant by saying that font anti-aliasing has nothing to do with usability or legibility, since it's purely an aesthetics and technical question. Consider that:

  • anti-aliased fonts look cool. that's why games have been using them years before our desktops could support them, even though these were hand-drawn by artists

  • properly designed bitmaps are nice, but they are simply unable to scale gracefully, hence the advent of scalable fonts.

  • scalable fonts look atrocious in monochrome mode without adjustments, hence the invention of font "hinting" and "grid-fitting". A small number of high-quality TrueType fonts produce results that are similar to hand-tuned bitmaps at small character pixel sizes, but they require a lot of work from font designers. Apart from these, most scalable fonts still look "ugly" in monochrome mode.

  • Most of these ugly fonts look better when anti-aliased. Moreover, it's easier to get correct to good results when automatically hinting fonts for anti-aliased rather than monochrome output.

  • certain things like device-independent display are fairly better supported when using anti-aliased rendering, especially when disabling hinting.

Note that for some reason (aesthetics), people tend to have very strong opinions regarding fonts, be it from pundits, Slashdot readers or ordinary users.

Life

Lucie turned 2 months and she's beginning to be real fine at last. March has been real hell, but we could remove her gastric tube last week. Seeing her drinking from the bottle like any normal baby is a great joy. And she started sleeping whole nights, which makes our life much more enjoyable :-)

Work

Oh joy, my rusty Ultra-5 has been replaced by a shiny new Linux PC. Everything feels much faster, the keyboard doesn't suck, NFS is twice more responsive, the shell utilities are not broken (e.g. "patch" and "diff"), and I could get rid of CDE for Gnome 2 (which cannot be used on Solaris without installing system-level patches). This makes a real difference.

I have also discovered Synergy, a very cool little program to share a keyboard and mouse between two computers, independent of their OS. I'm really impressed by it, its automatic cut-and-paste management already saved me many hours, and it allows me to use my mouse wheel on both machines, even if one of them only has a "normal" mouse. If you're using several machines on the same desk, you should really consider this. And it's GPL !

Life

I'm glad to announce that Mounira and I are the happy parents of a little angel called Lucie, since February the 26nd 2003 :-) She suffers from a small medical condition that prevented here from correctly breathing when she came; she was thus transfered in emergency to another hospital about 20 minutes following her birth, which was quite a shock to us. She's still in intensive care as I write now, but going much better now, and we're confident that we'll get her home at the end of next week.

Her breathing is now completely normal, in all positions, and we've been confirmed that she didn't lack oxygen at birth. Lucie cannot eat normally though, her tongue being a bit too small/backwards, so she only drinks about half of its milk bottles, the rest is given through a gastric tube and a pump. That was impressive the first time, but we're getting used to the idea right now. And we're still experimenting with custom feeders (pluckers ?). Very hopefully, her syndrome will completely disappear when shell' be one or two years old; she'll then be a perfectly normal baby, though will require a lot of extra care from us until then.

While this latest month has been very hard for us, we had the opportunity to reconsider a lot of our life choices, like the place/city we live in, our work and our hobbies. I still don't know if I'll have much time for open-source in the coming years...

FreeType

I have already announced to the FreeType mailing lists that it may be a good idea to find a new commited guru for the project, since "retirement" is a serious option for me right now. In the meantime, I'm trying to get 2.1.4 released as soon as possible, but small annoying bugs kept appearing lately :-). Hopefully, it's now a matter of days, if not hours. Should be a nice release in terms of features and rendering quality too.

X11/XFree86

I hadn't seen it coming, which isn't very surprising since I don't follow development of XFree86/Gnome/KDE very closely anyway. I really don't know what will come out of this, but here are a few random comments on the X11 and XFree86 situation:

  • Is X11 slow ?

    When it comes to bare rendering performance, that's certainly not true. However, my opinion is that when most users say that they feel that X11 apps are "slow", they really mean that the apps are a little bit too unresponsive for their taste, i.e. that they take too long to react to a single button click, or drag a window. We're speaking of latencies in the order of 1/10th of a second. That may seem short, but users are very sensitive to this, ask any Mac developper :-) I have no definitive answer on the subject, but I get the feeling that some of the design of X11 is here to blame: specifically, the fact that the window manager runs as an independent process makes several trivial operations a lot longer than necessary. For more details, I recommend reading Why X Is Not Our Ideal Window System. Notice that this document is 13 years old, but that few problems seem to have been even touched !.

  • Is X11 too old ?

    Maybe, maybe not, it really depends on what you want to do. As a matter of fact, all recent development on Gnome and KDE seem to focus on non-standard features of XFree86 that are not part of X11 itself, i.e. fontconfig, Xft1/2, Xr, RandR, etc... Apart from that X11's rendering model is very dated (logical operations like AND/XOR/OR on pixel values aren't exactly useful today, the client must handle many or all possible visuals which is just a royal pain in the ass), the font model is one of the most stupid engineering thing I've seen in my programming life (and I'm not even thinking about XLFD :-) I guess that if all you need is Xterm and Emacs, it doesn't sound so bad...

  • Is X11 bloated ?

    The core X11 protocol is relatively lean and mean, but a lot of things have been implemented either as extensions, or on top of it like ICCC (the specification that states how applications should interact with each other, like clipboard management).

    Optional extensions are a pain for developers, they require you to double some of your code, which requires double testing, double code paths, and double potential sources of subtle bugs in an asynchronous environment; this is however not the rule, since some extension writers have been intelligent enough to provide client-side libraries that perform this automatically in an intelligent way (think Xft2 which works with or without the RENDER extension on the server, which allows you to run your apps with anti-aliased text on stock Sun machines, even if slowly). I would thus not directly blame X11 for these "problems". However, a lot of these extensions should go and have nothing to do on a typical build of XFree86 on my Linux machine.

    The ICCC is a mess, but very fortunately most of it can be ignored by applications, or simply abstracted. I wouldn't be surprised if advances performed by Free Desktop would make it irrelevant in a relatively near future.

  • Can DirectFB/Snap/Whatever replace X11 ?

    They're different things. DirectFB, Snap, GGI and many other things are really APIs to access the graphics hardware on a given machine through a unified API that is rich enough to enable advanced features like alpha composition, or video overlay; some of them even support hardware double and triplle buffering, as well as VSYNC synchronisation !. You can perfectly build a conformant (i.e. network-enabled) X11 server on top of them (e.g. XDirectFB), just like you can build a X11 server on top of the Win32 GDI or many other graphics APIs. Even extensions like RENDER and RandR can be implemented as long as the protocol is sufficiently clear.

    What's at stake here is to determine who controls the graphics hardware on a Unix workstation. The current state of the art for Linux and FreeBSD is that XFree86 controls anything, all other projects be damned. That has been understandable for some time, since X11 was the only "real" graphics interface for Unix for a long time. However, many people are seeing its limitations and can't stand them anymore, they're thus willing to experiment with different schemes to get the best possible performance for the kind of uses they envision.

    One good, but too unheard, example would be the still unfinished E17 whose Canvas can speak directly to OpenGL, literally smoking X11 in all tests while providing smooth alpha blending at all levels.

    There are very little reasons why XFree86 couldn't run well on top of a good accelerated graphics API which would allow to share the hardware with other applications and graphics system. Apple just did it with their own blend of XFree86 that runs on top of Quartz, this even allows you to "genie" X11 windows, since everything is stored in an OpenGL surface anyway. And why can't I run games in full-screen on most Linux installations I've tried ?

    Of course, this would go against the control-freak nature of the XFree86 core team which seems to believe that you must control the hardware to make a good X11 server.

I really wonder who's gonna control the hardware on my machines in the coming years. How well, this is long, maybe I should have started an article :-)

10 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!