Older blog entries for aaronl (starting at number 45)

work
VA stuck an SMP server with a gig of ram in my cubicle for me to play with. How nice of them. As if the 100mbit internet connection wasn't enough to keep me happy ;-). Did I mention that they pay me too, in addition to all of this? :) It's so hard to believe that you would be payed to sit at a desk with a superfast internet connection and amazing computers, but I guess that's what VA is about.

play
I worked some more on the normal mode patch for AbiWord. After fixing up some annoying conflicts caused by the huge commit today for lists, I tried to make it hide the left ruler in normal mode. It's not easy. First, the view isn't created when the rulers are being created, so I guess I have to go with rulers on until the view comes to life and decides otherwise. The modification to the code is pretty simple. I wouldn't mind doing it once but due to the braindead Abi hierarchy each platform has pasted code for doing that same thing the same way with s/oldplatform/newplatform/g. So once I DO get it working on Unix I'll have to do it for windows, mac, qnx, beos, etc, and I'll have no way to test it on any other platforms. And hinding the left ruler is the easiest of it all, here's my TODO list as designed by Paul Rohr for the normal mode code:

Done:
- don't draw borders or background
- easy toggling between modes

Not sure:
- still print like the existing "page layout" view

TODO:
- no left ruler; top ruler starts at the left margin, not the left of the page
- format all content as inline blocks in series
- labelled dotted or dashed lines for section / column breaks (page breaks completed)

It's not going to be easy. Left ruler stuff is a nice challenge but nothing compared to doing the kind of hacks in the formater required to make it work right. Right now it is a tiny hack as hacks go and it does not work right: there are columns and several major bugs that don't let you move the cursor up or keep a huge margin at the bottom of the page when there should be none. And once the behavior is more correct, printing will probably be broken becuase it should use the current WYSIWYG behavior, so I will have to support both modes at the same time for different devices.

XEmacs looks beautiful in a terminal, but there it is limited to ASCII! The problem with this is that it can not pick up keysyms like Hyper that have become so valuable to me for customization.

As always, I found a solution.

M-p and Hyper are now synonymous. I wish I could do a better hack, but this works. Grab the .emacs or try the awesome M-x load-file RET /anonymous@ftp.vitelus.com:/pub/dot.emacs RET trick discussed in an earlier post (it probably wont work though... GNU emacs in the console dies with it right no w :().

Someone sent a patch to the abiword-dev mailing list with windows linebreaks. This was not at all usable to me. So I wrote a mini-flame to the mailing list praising CVS as a diffing tool and critisizing the idea of doing development against released sources. I guess I am in a bad mood tonight, despite what I said in the message.

In other news, I had to send out an invoice which was quite overdue. I would be doing it in AbiWord if it printed tabs correctly. After realizing that Word doesn't print tab characters correctly either (WTF? Just becuase it's Normal Mode doesn't mean it should suck!), I finally got it right on the third printout. Then I spent an hour looking for an envelope, I wrote a rant on a sticky note asking my father to mail the message. As I was walking away, I found an envelope. That pissed me off. So I spent another hour looking for a stamp. I didn't find a single one. This time my rant spanned several sticky notes and proclaimed that the postal office was a "tyranical, authoritarian orgainization that practiced stamping-cum-censorship" (or something like that). It's not hard to hate the post office after reading about several supreme court cases about 30 years ago against the post office for banning the mail of things like "publications intended for homosexuals" and certain contraversial books. The idea that the postmaster general could have so much control to define ethics in the context of communication really sickens me. I'm glad that I control my own mailserver.</a>

I commited 3 patches today. But I realized that all of them subtract code, and don't add a single line! I did fix bugs, though. Weird.

I didn't code today. But I did go to an awesome party. That's all I can say while keeping this post rated G (with due disrespect to the MPAA).

I've been forgetting to post for a few days in a row now. I'll post all of these diary entries in one.

22 Jun 2000
I tried fixing a bad drawing bug. I tried very hard. I wasn't able to. So I went and worked on my .emacs file. The new version doesn't read the "desktop" file if it is only being reloaded, and the customizations for scheme and comint are bettter. It's available at the usual place, but now also on FTP. The idea is that I could take advantage of EFS so that at school or at a foreign computer I can type M-x load-file RET /anonymous@vitelus.com:/pub/dot.emacs RET. This works beautifuly and will drastically change the emacs behavior :).

21 Jun 2000
I stayed up late working on a job ( :( ). Once I was done with that work I was really lazy and played a lot of XEvil and listened to MP3's. Not much to report. Except that I fixed a few bugs in AbiWord like #919 (on UNIX) during the day.

20 Jun 2000
Went on a really cool run that made me feel totally out of shape. The main work that I accomplished this day was that I did a major hack to fix a bug in AbiWord where toggling Bold on/off or changing the font while nothing was selected would cause the file to be marked "dirty", but no acutal changes would appear in the file because no text was there to assume those new properties. I fixed this by doing some rather unorthodox fiddling with the save version counter, and implementing a flag to know when to keep it in sync.

19 Jun 2000
I finally fixed that Postscript printing bug. It wasn't easy. It took 2 days and a night. Basically most accented characters were unbound and therefore not included in the widths array. I hacked the code to make a unicode-indexed width array and use that. Gnome-print's sources were helpful with figuring this out, and since I had to make a large mapping table that a comment in the gnome-print source said was a TODO, I sent it off to their mailing list. I certainly hope my work prevents someone else from spending 45 minutes hacking together such a table.

I woke up this morning to find out that I had won the $299 AbiWord patch prize! Thanks to all the people at SourceGear who made it possible for me to have so much fun working on AbiWord. According to the wee kly news, I tried to lose the prize by reversing an old consensus. I'd better calm down with these contraversial changes :/.

One of the only problems of the week from AbiWord that is still not completed is the Printing accented characters on UNIX challenge. I made some significant progress in debuging the code today. It has been very confusing since I know that gnome-print works with accented characters, and when I dropped in its parseAFM implementation the problem still existed. The conclusion that I am forced to draw is that either something is wrong with our font metrics files or that AbiWord doesn't use the widths tables correctly. Right now I am persuing the first theory. From the code of gnome-print, I've observed some differences between how it calculates character widths and how AbiWord does. They're pretty minor differences but I'm slowly checking them all out. However, it is possible that this is a bug in parseAFM that weirdly enough is affecting AbiWord but non gnome-print. If anyone knows any other GPL-compatible implementations of parseAFM, I want to try them! The misprinting of accented characters is a big problem that hits me whenever I print out French homework and I like to fix problems that affect me a lot more than those that don't. I also have a strong hatred towards all of the anti-WYSIWYG bugs - I'm not a big fan of WYSIWYG, especially Page Layout mode, but when it claims to be WYSIWYG and is not, I'm not very happy. The most infamous of these bugs is #514. It is another one that affects me a lot because I use tabs for outlines and this bug has forced me to manually break lines early to prevent disasterous print results. Maybe I will tackle this if/when I resolve the PostScript accents problem.

Cool thing of the day:Vapour. I always thought that OS's would always have the same design. Today I talked to the author of this slick, operating system that's in development on EFNet #lisp. I found his design for this operating system amazing. Essensially, rather than a trusted kernel in memory, there is a trusted compiler in memory. You feed LISP sources into the compiler, and it produces a native binary in the linear address space of the computer's RAM. Since LISP has no pointers, it cannot arbitrarily touch memory. There are a few mallicious things that could be done with LISP but I imagine that the compiler will be very strict about these. Everything runs in supervisor space since the compiler only lets things that wouldn't crash the computer run anyway. These binaries that the compiler produces are not really excecutable binaries, but there is one binary per function that any process can use. I use the word "process" losely, as processes on Vapour are more like threads running off the operating system. All functions are stored in memory and unused ones are swapped out, making the disk a giant swap partition. The OS will be completely self-hosting, and will be writen in its own native langauage (a dialect of Scheme). Of course, device drivers will need more permission than normal functions, and this will be handled by a form of superuser (this is my understanding but I may be wrong).

You may ask why this design would be any better than a monolythic kernel. Aside from being a very interesting architecture where all code can be shared and the system can guarentee that processes are safe to run, the author claims that such a system would cause a massive speed boost of about 8x in I/O, and there would be better IPC. Also, if you like LISP, this OS would turn your PC into the ultimate LISP machine.

I'm really looking forward to seeing how this project turns out. I was told "Give us 6 months to get the compiler self-hosting. That's the hard part." Once this becomes bootable for interested hackers, I'll have to give this a whirl. Right now the compiler r

I forgot to post yesterday. Yesterday I resurected my normal mode patch from about a year ago. It's a major hack and it's not working. I also tried resurecting the tabs dialog in AbiWord. I don't understand how it's supposed to work.

Today, I spent from the time I woke up until dinner working on the Normal mode patch. The radical hacks I made are completely crazy and didn't help at all because I didn't and don't understand the cause of the problems. The hacks are best exemplified up by this comment:

// m_hackPP is a pretty gruesome hack. The idea is that we want whoever
// is trying to find out about attributes and properties to hear our
// our version of them - for example, the way margins are displayed on
// the screen rather than in the document. This is the kind of stuff
// that is necessary for non-WYSIWYG display like Normal mode. We could
// write into **ppAP the margins that we display, but since ppAP is a
// handle to the actual properties and attributes for the document,
// it would actually change the margins in the document. That's bad.
// So, we have m_hackPP which is a PP_AttrProp that is a copy of the one
// representing the attributes and properties of the document but with
// the margins and etc. changed. The reason why we can't just create a
// new PP_AttrProp everytime getAttrProp is called is because the caller
// believes it is getting a pointer to the document's PP_AttrProp and it
// wouldn't dare free that. So, we have to keep one in the view that all
// callers can share. I hope there are never any situations when they
// should be different. I told you it was gruesome.

All that hackishness for nothing. From 10PM to 4AM I worked on making dependencies work in AbiWord's crazy build system, which currently requires you to make clean whenever you change a header file. They still don't work. They still are not close to working. Understandably, I am in a bad mood because I just restled with make for hours. I want to convert the build system switched to autoconf even though I hate autoconf too.

Just spent 2 hours on IRC tracking down a horrible bug. As usual it's all my fault.

mishan asked in his diary entry why so many people bash perl. The answer is because perl sucks :). You probably should read the definative guide to why perl sucks.

Now for the rant. There is so much magic in perl that it is an extremely complicated language. To read perl code, you need to learn the meaning of any character, expression, regular expression code, and construct. As a result, perl code is generally unreadable to anyone but the perl expert. By contrast, languages like C and Lisp have simple, consistant syntaxes that are built on by libraries rather than syntastic features.

My other main gripe about perl is the craziness of escaping characters. In a regular expession, or just out in a string, so many characters have special meanings and need to be escaped. You need to memorize exactly which characters need to be escaped, and escaping every non-alphanumeric character makes strings be unreadable very often.

Scoping is pretty messed up, but I have not used perl extensively enough to give a detailed report on scoping in it.

Perl also has many other disadvantages in the implementation, such as code being interpreted every time a script is excecuted. In this post, I am focusing on the language itself.

36 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!