Older blog entries for fejj (starting at number 98)

Despite some trolling, pfremy had a few valid points in my opinion:

  • GNOME isn't very well componentised. My personal feeling is that this is a fault of bonobo being so complicated to use. Sure, it might not be that bad in python or whatever, but in C it is just a horrid nightmare. [1]
  • In an ideal world, Nautilus would have been properly designed such that writing a File Selection dialog could have used a Nautilus view component.

A few of the responses to pfremy claimed that gnome-vfs is used by gnome applications for file access. Since when? I'm not saying that apps shouldn't use it, but I was just not aware that it was being done. Evolution certainly doesn't use it for file i/o. The mailer used to use it for http access, but that has been removed in favour of soup mostly because we had a lot of problems (CORBA reentrancy, yay). I believe some other components still use it for ftp/http/etc access though (like wombat or the calendar or something).

[1] CORBA by itself is pretty complicated in C, the APIs are horrible. It just seems to me that it introduces more complexities than it solves and Bonobo on top of that seems to cause no end of pain to developers. Well, this is true at least on the Evolution team. But how many other projects use Bonobo? There are like 5 or 6 total. I think this is mostly because developers get scared away by it. I know I am.

Now, I'm no expert, but I think a component system could be made a lot simpler. Why not simply use something as symple as dlopen()? Let me elaborate:

First, we'll still need something similar to oaf - a way to query which .so's implement which interfaces and to request an object that implements the required interfaces. This could be done fairly simply: Each "component" .so can have a xml file or some other file format that describes its interfaces. The library that handles the querying could load these xml files and provide the following interfaces for querying:

get_component_by_name (const char *name)
list_components_implementing_iface (const char *iface)
get_default_component_implementing_iface (const char *iface)

There's 2 reasons for using the list(). The application may have an order of preference (ie, it may know about a few components that implement the iface it needs, but might have a preference as to which one it uses assuming that the module is available?). Second usage would be something like the Evolution Shell - it might query for all components implementing the evolution-shell iface so that it may load them all (this would include the mailer, the calendar, the addressbook, the summary, and possibly others). The application could then use get_component_by_name () to essentially dlopen() th library.

This makes writing components as easy as writing a shared library. It can't get much simpler.

Of course, there's still the problem of menu merging... but we could make that a required function for all modules have to implement. And it wouldn't even necessarily need to use xml like bonobo-ui and kparts do, you could just have a function that you pass in a menubar to (okay, this might not be ideal since we may want to merge toolbar stuff, and possibly add right-click menu item,s and so on).

The Fejj of Fashion

Okay, anyone who knows me knows that I don't have the slightest clue about fashion. My fashion sense is, well, I don't have any. Or so I thought...

<fade style=dream-like>

Back in highschool and my freshman year of college, I would alternate between my one or two pairs of jeans and my olive drab army BDUs. I was the only kid that wore them, pretty much a fashion freak (of nature that is). Well, to be fair - the ROTC guys wore them my freshman year of college too.

<skip to="two weeks ago">

Alas, my jean-wearing days are wearing thin (quite literally, unfortunately). I'm down to a single pair of jeans without holes in the knees and these are thinning fast. I've also worn them for a week now... what to do? I could do laundry - but I still have plenty of unmentionables. I can last at least another week without doing laundry... I reach into my closet and find... my olive drab BDUs! I'm saved!

<skip to="last night">

There I was at the mall, trying to find pants because, well, 2 pairs just won't cut it for long. Sears, JCrew, Old Navy, Abercrombie & Fitch? None have jeans that will fit me. No, I'm not obese. I'm just tall and thin. Apparently an impossible combo in the eyes of jean-makers everywhere. I start to walk out of Abercrombie & Fitch. What do I behold? No, no... other than the gorgeous register girl. Yes, we all see she's hot, but get past that for just one moment. I see racks upon racks of olive drab and camoflage army BDUs. Apparently they are "in style" now.

Okay, so what was the point of my story? I'm several years ahead of fashion. What does this mean? It means I shape the future of the fashion industry. What does this mean for you? Start buying Ximian monkey-button t-shirts now, because in a few years everyone will be wearing them.

julian: I feel the same way every now and again (in fact, I have been feeling that way for the past week or so). What I usuaully try to do is get away from computers when at home (can't do that at work so much ;-)

bytesplit: when did I say it gave me the right to "verbally dispose" of a user? I never said that. I just said that I believe I have a God-given right to say "No" and that these users should respect that.

Don't get me wrong, I don't have a problem with all users - most users are fine, but there are just enough that get on my nerves. And unfortunately these are the most vocal. They seem to constantly feel the need to remind me of how much better mutt or Outlook are and/or that Outlook or mutt can do this and/or that and Evolution can't. After a while it starts to get annoying. And sometimes their comments can be quite hurtful. My guess is that many of them don't even realise how hurtful they are being, but that doesn't make it any better. Hopefully none of them are purposely being cruel, but ya never know.

In other news... I released GMime 1.0.6 last night which should fix up support for 64bit systems. Just needed to change the type of a certain variable in gmime-stream-filter.c to size_t instead of int. Doh! I'm guessing that the reason this caused a bus error on SPARC64 (built with gcc -m64) was that int must have been 32bit while size_t was 64bit? *shrug*

ncm: yea, unfortunately working for a company means that somehow I have forefeited my right to tell them to send me a patch (or so some of these users seem to think based on their attitude in the past when I've requested a patch, even though they aren't paying customers).

Today I had a pleasant interaction with a user who requested inline-pgp support in Evolution. I told him that we were only interested in supporting PGP/MIME but that I would accept a patch. He replied and said that he would look into it though he said he would not guarentee he'd get to it. Fair enough - in fact, this is the kind of response I like to hear. Unfortunately it seems so rare these days.

Maybe it's because so many users these days are ex-Windows users who are used to making demands and not used to someone refusing. I think they are forgetting that in Windows land, you are *paying* for products and as such you have the right to complain (at least in my opinion you do - if I pay for something, I sure as hell feel I should have the right to complain about stuff). Conversely, in Free Software land, you aren't paying the developer and so I feel the user doesn't have that implicit right to complain. It doesn't matter if said developer is being paid for his efforts or not (unless said user is the one paying the developer).

I guess it boils down to: if you aren't paying the developer, then you have no right to make demands. You can politely ask for a feature, but keep in mind that this is asking a favour and as such, the developer has the right to refuse.

I think the world would be a happier place if users kept this last bit in mind. I know I'd certainly be happier. And when I'm happy, I'm more likely to implement your feature :-)

Today when I went to Il Giardino's (a small Italian restaurant down the street from Ximian's office), I noticed that the atmosphere was pretty nice (actually, I always notice this but for the purpose of this example, lets pretend I noticed it for the first time today). Anyways, I noted that customers used "please" and/or "thank you"'s and were generally polite. I also noticed that when you order a sub or a slice of pizza, people generally say "Can I have a slice of pizza and a coke?" and then a "Thanks" and sometimes even a "Have a nice day". Bugzilla reports and evolution@ximian.com requests rarely are made in such a polite manner. They are usually more like a demand than a request and I'm wondering if it is because people forget that real people are on the other end of the mailing list and/or bugzilla.

bytesplit: I hope my comments above answer some of your questions.

As an aside, I've also noticed that it seems bugzilla requests on bugzilla.gnome.org are more polite than those on bugzilla.ximian.com. This brings me back to the theory that people feel that they have a right to make demands if a company is backing a project - regardless of whether or not they are paying for the software.

Also note that I am not against making software easier to use for simpleton users (not meant as derogatory), I just want the respect that I feel I deserve. Perhaps I shouldn't take their rudeness and/or complaints so personally but that's just the way I am. Maybe that means I have a low self-esteem or something. I don't know. I just know my feelings are hurt. I've spent a *lot* of time hacking on Evolution and I take a lot of pride in my work.

I hope this provides insight into "what makes fejj tick" ;-)

16 Oct 2002 (updated 9 Jan 2007 at 15:29 UTC) »

much frustration, sigh.

Bought new inline skates (K2 Enemy) last week, figured I'd give aggressive skating a try. Started out just skating around a bit to get a feel for them and tried a few jump/spins. Turns out that this isn't such a good idea on Boston sidewalks as the tiles tend to not be flush with each other but rather tend towards random jutting here and there. I managed the 180 but my right skate landed right where one tile jutted upwards a bit (not much, but enough) and "tripped" me throwing me off balance. Now, normally when I catch myself I land open-handed, but this time for some reason I caught myself with the back of my middle three fingers on my right hand and pretty much got the skin sanded right off.

(Note: aggressive skates have wheels much smaller than normal inline skates (55mm vs ~80mm), so getting tripped up by small rocks/sidewalks jutting up etc is much easier/more of a problem).

Lesson to be learned: don't pull a fejj.

20 Sep 2002 (updated 20 Sep 2002 at 02:21 UTC) »

I don't practice Santeria
I ain't got no crystal ball
Well I had a million bugs and I, I fixed them all
If I could find that Hanna and that bug she's found
Well I'd pop a cap in that bug and slap her bare behind

Evolution: Well, I fixed that optimisation patch from yesterday (turns out there was a way in which I was naming the cache files that broke it) and so now everything works. Whoo! So loading an IMAP folder for the first time in Evolution is now on the order of 2 to 3 times faster.

Tell that bug that if he knows what's good for him, he best go run and hide
cuz daddy's got a new .45!
Believe me when I say that I've got something for his punk-ass

Show me what it's for, make me understand it. I've been crawling in the dark looking for the answer

Evolution: Argh! Every damn time I try to write an optimisation for the current IMAP implementation I get bitten in the ass because the logic in the current IMAP codebase is Broken By Design (tm) and so whenever you make a seemingly fine change in one part of the code, another part completely breaks because of its dependency on the broken side effects of the function you changed. *sigh*

20 Jul 2002 (updated 20 Jul 2002 at 04:47 UTC) »

GNOME Summit: Whoohoo, god did not strike me down today! I actually made it, though I did get lost in the tangle of corridors between building 77 and building 33. Apparently I was supposed to go through doors marked "DO NOT OPEN! THIS IS A FIRE EXIT AND ALARMS WILL GO OFF" :-)

Luckily I met up with ettore, lewing and Anna Dirks and we went out for lunch/sight seeing before heading back around 2pm for more talks.

Plan9's 'plumber': Niiiice. For those that didn't attend the Plan9 talk, Rob Pike talked about his plumber library which originally started out as the Acme shell-type thing. You can check out some documenation at http://plan9.bell-labs.com/sys/doc/plumb.html. Someone else explained it in their diary entry, but from their description, it doesn't sound all that great - sounds like just a hyperlink. You really need to read the docs to get a feel for the awesomeness of it.

Afterwards I went up to the hacking lounge and was assaulted with questions/pokes/prods/etc by a number of people. I might even use the word "pelted". Keith Packard wanted more than 5 "Labels" which is a new feature in Evolution. "Why hard code to only 5? What's the point in that?" I dunno! I swear! I just copied Mozilla's interface! I figured if Mozilla felt 5 was good then it was good enough for me (not to mention everyone who begged me for this feature pointed me to Mozilla's implementation). Anyways, shouldn't be too hard to expand this to use a linked list of labels.

A few thoughts on the Plan9 plumber:

First, what to do if there are multiple viewers for something listening on the socket? Which window does the info go to? Obviously this'd be a problem in the Real World that Robe Pike's implementation doesn't seem to solve (although his implementation seems to be more a proof-of-concept rather than the final solution).

On second thought, maybe it doesn't really matter? If plumb only allowed one "connection" per destination socket then the locking problem is solved too.

Secondly, ...I sem to have lost my train of thought.

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