federico is currently certified at Master level.

Name: Federico Mena-Quintero
Member since: N/A
Last Login: 2007-06-28 00:26:55

FOAF RDF Share This

Homepage: http://primates.ximian.com/~federico

Notes: I keep my diary here.

Projects

Recent blog entries by federico

Syndication: RSS 2.0

22 Apr 2008 »

Tue 2008/Apr/22

  • And now for a gratuitous baby picture.

    Luciana in the ladle

Syndicated 2008-04-22 10:50:00 from Federico Mena-Quintero - Activity Log

17 Apr 2008 »

Thu 2008/Apr/17

Syndicated 2008-04-17 15:26:00 from Federico Mena-Quintero - Activity Log

25 Mar 2008 »

Tue 2008/Mar/25

  • Projects for Summer of Code 2008

    This year I will mentor at most two of the following four projects:

    Making evolution-data-server's calendar smaller and faster (for GNOME). E-d-s was written in the very early days of Evolution, and it needs some profiling love. In this project you will profile the calendar part of e-d-s to make it use less memory, and be faster as well with an optimized query engine.

    Reducing memory fragmentation in GNOME (for GNOME). The GNOME platform libraries do many allocations of small objects. Your task will be to do an analysis of memory fragmentation, similar to what was done for Firefox 3.

    Making removable hard drives Just Work(tm) (for openSUSE). Currently, when you plug in a blank hard drive through USB, nothing happens. The device node gets created in /dev/sdb or whatever, but you don't see anything happen in your screen. Your task will be to improve things around HAL, PolicyKit, and gnome-volume-manager to detect this situation, and to make the right thing happen.

    Reliable unmounting of removable media (for openSUSE). When you want to unmount or eject a removable volume that is being used, you get a meaningless error message. There is no way to know which programs are still using the volume. Your task will be to make GNOME tell you which processes are using the volume, and give you a chance of killing them.

    If you are a student, please see GNOME's very nice page on information for students. This will be useful to you even if you choose one of the projects for openSUSE. Don't miss out on this great opportunity to become a well-recognized member of the free software community and win USD 4500!

Syndicated 2008-03-25 12:30:00 from Federico Mena-Quintero - Activity Log

19 Mar 2008 »

Wed 2008/Mar/19

  • Philip, you are looking at this from the viewpoint of email. Email, addressbooks, and calendars are pretty different beasts.

    Email has very particular access patterns, which are totally different from calendars and addressbooks.

    With email, the prevailing model is that you display a usually huge linear list of messages, and even the summarized information can be pretty big. Searching is Nontrivial(tm).

    In calendars, you almost always look at a subset of "events which occur in a certain range of dates", by virtue of the calendar's view (monthly/weekly/daily). Practically the only exception to this is when you want to do "show me events which contain $substring"; that's when you actually want to show a linear list of all the events that match.

    Evolution still doesn't get this right, by the way. If I'm thinking, "when did I meet with Joe?", I type "Joe" in the search box — but Evolution keeps showing the current monthly/weekly/daily view, and I have to manually fiddle with the date ranges to actually find which days contain the event I'm looking for. Substring searches should switch to the "list view" mode.

    Addressbooks are funny, because the access patterns for "my addressbook" and "my company's directory" are very different. Your addressbook contains at most a few hundred entries, and you may be able to deal with it comfortably by scrolling through a linear list, which is sorted by last name. You turn on searching when you don't remember a person's last name, so you type their first name in the search box.

    In contrast, your company's directory is potentially huge and you never want to show it as a linear list. You actually want to type a person's name in a search box, and then pick a match from a small list. (Something must be wrong somewhere, as people keep mailing me when they mean my colleague with the beautiful name).

    What does this have to do with evolution-data-server? E-d-s was always meant to be a local daemon to store your calendar and addressbook. It's the local Model in a Model/View split for all the processes which want to access your calendar/addressbook data. It was also meant to act as a local cache for remote calendars, which could be slow/huge/etc — that is, for stuff which is far away or not in the same scale as your own little appointments.

    I really don't know how much of that data gets duplicated in the daemon's clients, but if it is a lot, then the clients are doing something wrong. For example, a calendar event (VEVENT in iCalendar parlance) contains a lot of administrative crap: a UUID, a sequence number, a stringified timezone identifier, blah blah blah, in addition to the actual human-readable stuff that I can see in my calendar (summary, start/end times, alarms). Here's a complete VEVENT:

    BEGIN:VEVENT
    UID:20070925T174038Z-22251-100-1-25@cacharro
    DTSTAMP:20070925T174038Z
    DTSTART:20070926T160000Z
    DTEND:20070926T170000Z
    SEQUENCE:2
    SUMMARY:openSUSE project meeting #opensuse-project
    CLASS:PUBLIC
    TRANSP:OPAQUE
    CREATED:20070925T174109
    LAST-MODIFIED:20070925T174109
    BEGIN:VALARM
    X-EVOLUTION-ALARM-UID:20070925T174109Z-5309-100-1-13@cacharro
    DESCRIPTION:openSUSE project meeting #opensuse-project
    ACTION:DISPLAY
    TRIGGER;VALUE=DURATION;RELATED=START:-PT15M
    END:VALARM
    END:VEVENT
    

    That's 484 bytes of data, which is mostly fluff. These structures tend to explode in size when you parse them, but a neurotic calendar could keep the nice-and-small VEVENT string instead of a parsed structure, and re-parse it and re-generate it every time the event changes.

    And again: my local calendar, which goes back to 2001, only contains about 500 events, and is 670 KB in size. The craziest calendar I've seen is Michael's, which has a couple thousand events, but that's not even an order of magnitude larger than mine.

    Summary: there's no reason for e-d-s or calendar clients to have huge memory requirements; they are just doing something silly. You can keep a whole calendar, in memory, in less space than a fat JPEG from your digicam.

Syndicated 2008-03-19 13:30:00 from Federico Mena-Quintero - Activity Log

18 Mar 2008 »

Tue 2008/Mar/18

  • Ross posted about people wanting to write replacements for evolution-data-server, and I agree with him that doing so is a mistake.

    When we originally wrote Evolution, a lot of backend-ish things were left in a "we'll fix this later" state. It was more important to have a simple, working backend and a totally awesome frontend GUI, than to have a super-optimized backend and a shitty GUI.

    The code in e-d-s is a good example of something that could get a lot of easy love if people simply took the time to understand what is wrong with it in the first place.

    Some things that could be done to e-d-s reasonably easily:

    • Evolution-data-server has a reputation for becoming a very big process with a small resident size. On my box, pmap(1) says that e-d-s has a 14 MB heap with 12 MB resident. That's tiny by today's heap standards. However, there are 8 or so threads with an 8 MB stack each, which is of course not even used. An easy cure for people's fears of the total VM size would be to fix the size of the stack in the threads.

    • Avoid scanning the entire list of calendar events when someone makes a query. The most fundamental API in the e-d-s calendar is, "give me all the events that fall within $range_of_timestamps". For example, the Evolution calendar's week view will say, "give me all the events for the current week". E-d-s then goes and looks at all the events it knows about, sees if they intersect the specified time range (generating recurrences if needed), and builds a list of results. This makes each query run in O(num_events) time — nobody cleans up their old events, so this degrades pretty quickly over time!

      There are various ways to fix this. You could read the calendar.ics file into memory, but instead of storing a dumb linked list of events, you could store an interval tree based on the time range for events. An event that occurs only once has a range of [t1, t1 + duration]. An recurring event that repeats indefinitely has a range of [t1, ∞). If you are careful with the way you organize your data, you can avoid even looking at the memory pages for the event info, and just look at the pages where the interval tree is stored.

    • My calendar.ics file is 700 KB, and addressbook.db is 400 kb. So, why does e-d-s have a resident heap of 12 MB? "Use a database for the calendar" is total overkill, and less reliable than a simple text file. Someone needs to actually look at how much space e-d-s uses in memory for its various data structures, and then see why they become so big when loaded.

    When your bathroom becomes kind of dirty and gross, do you demolish it and build a new bathroom? No, you clean it up. It's a shame that software seems so easy to demolish and rebuild.

Syndicated 2008-03-18 14:38:00 from Federico Mena-Quintero - Activity Log

102 older entries...

 

federico certified others as follows:

  • federico certified federico as Apprentice

Others have certified federico as follows:

  • raph certified federico as Master
  • rconover certified federico as Master
  • notzed certified federico as Master
  • miguel certified federico as Master
  • lewing certified federico as Master
  • pat certified federico as Master
  • bertrand certified federico as Master
  • timj certified federico as Master
  • clahey certified federico as Master
  • martin certified federico as Master
  • stric certified federico as Master
  • vicious certified federico as Master
  • flaggz certified federico as Master
  • yosh certified federico as Master
  • Centove certified federico as Master
  • thunder certified federico as Master
  • sjburges certified federico as Master
  • Slow certified federico as Master
  • shawn certified federico as Master
  • bit certified federico as Master
  • ole certified federico as Master
  • kmaraas certified federico as Master
  • jamesh certified federico as Master
  • tigert certified federico as Master
  • terral certified federico as Master
  • uzi certified federico as Master
  • cameron certified federico as Master
  • mark certified federico as Master
  • andrei certified federico as Master
  • cipher certified federico as Master
  • johnsonm certified federico as Master
  • ber certified federico as Master
  • scromp certified federico as Master
  • werner certified federico as Master
  • Jody certified federico as Master
  • dieman certified federico as Master
  • federico certified federico as Apprentice
  • alan certified federico as Master
  • negro certified federico as Master
  • shillo certified federico as Master
  • beppu certified federico as Master
  • feldspar certified federico as Master
  • mjs certified federico as Master
  • harold certified federico as Master
  • bombadil certified federico as Master
  • mathieu certified federico as Master
  • neo certified federico as Master
  • temas certified federico as Master
  • dria certified federico as Master
  • mitch certified federico as Master
  • Ryan certified federico as Master
  • dcm certified federico as Master
  • zhp certified federico as Master
  • scottj certified federico as Master
  • gbritton certified federico as Master
  • listen certified federico as Master
  • blizzard certified federico as Master
  • goran certified federico as Master
  • DarkBlack certified federico as Master
  • gstein certified federico as Master
  • drc certified federico as Master
  • mkp certified federico as Master
  • jayc certified federico as Master
  • lupus certified federico as Master
  • matias certified federico as Master
  • anarch certified federico as Master
  • odaf certified federico as Master
  • sengan certified federico as Master
  • harvey certified federico as Master
  • bagfors certified federico as Master
  • green certified federico as Master
  • Darin certified federico as Master
  • anser certified federico as Master
  • phaedrus certified federico as Master
  • ettore certified federico as Master
  • Denny certified federico as Master
  • dsueiro certified federico as Master
  • nils certified federico as Master
  • BrucePerens certified federico as Master
  • ariel certified federico as Master
  • mtk certified federico as Master
  • harinath certified federico as Master
  • msw certified federico as Master
  • cactus certified federico as Master
  • hadess certified federico as Master
  • menthos certified federico as Master
  • lauris certified federico as Master
  • Aspuru certified federico as Master
  • rodrigo certified federico as Master
  • jpick certified federico as Master
  • docwhat certified federico as Master
  • jsheets certified federico as Master
  • gilbertt certified federico as Master
  • Gnrfan certified federico as Master
  • gord certified federico as Master
  • Fyndo certified federico as Master
  • wcooley certified federico as Master
  • juantomas certified federico as Master
  • Barbwired certified federico as Master
  • timg certified federico as Master
  • rtmfd certified federico as Master
  • jules certified federico as Master
  • vladimir certified federico as Master
  • Judith certified federico as Master
  • const certified federico as Master
  • kanikus certified federico as Master
  • kimusan certified federico as Master
  • rw2 certified federico as Master
  • nigelk certified federico as Master
  • lerdsuwa certified federico as Master
  • bratsche certified federico as Master
  • srn certified federico as Master
  • jtc certified federico as Master
  • nullspace certified federico as Master
  • mikeszcz certified federico as Master
  • timur certified federico as Master
  • ebizo certified federico as Master
  • hilaire certified federico as Master
  • dneighbors certified federico as Journeyer
  • lxhispano certified federico as Master
  • ariya certified federico as Master
  • jLoki certified federico as Master
  • bkuhn certified federico as Master
  • hgayosso certified federico as Master
  • fejj certified federico as Master
  • drjekyll certified federico as Master
  • rossigee certified federico as Master
  • monk certified federico as Master
  • MikeGTN certified federico as Master
  • cinamod certified federico as Master
  • nzkoz certified federico as Master
  • gleblanc certified federico as Master
  • juhtolv certified federico as Master
  • trow certified federico as Master
  • almer certified federico as Master
  • wardv certified federico as Master
  • epic certified federico as Master
  • olea certified federico as Master
  • mvo certified federico as Master
  • etumenba certified federico as Master
  • sl0th certified federico as Master
  • quentin certified federico as Master
  • ricardo certified federico as Master
  • typezero certified federico as Master
  • proski certified federico as Master
  • opiate certified federico as Master
  • redowl certified federico as Master
  • pau certified federico as Master
  • sulaiman certified federico as Master
  • wacky certified federico as Master
  • coder certified federico as Master
  • mharris certified federico as Master
  • sculptor certified federico as Master
  • roshan certified federico as Master
  • todd certified federico as Master
  • gka certified federico as Master
  • Rabbitt certified federico as Master
  • mascot certified federico as Master
  • modus certified federico as Master
  • Rockwalrus certified federico as Master
  • lkcl certified federico as Master
  • strider certified federico as Master
  • tanis certified federico as Master
  • bonzini certified federico as Master
  • cortezcarlos certified federico as Master
  • elanthis certified federico as Master
  • carol certified federico as Master
  • fxn certified federico as Master
  • rhestilow certified federico as Master
  • pencechp certified federico as Master
  • Mmarquee certified federico as Master
  • polak certified federico as Master
  • brouhaha certified federico as Master
  • juancpaz certified federico as Master
  • ebf certified federico as Master
  • domi certified federico as Master
  • mdupont certified federico as Master
  • rpelcastre certified federico as Master
  • byte certified federico as Master
  • shooby certified federico as Master
  • Fabian certified federico as Master
  • pasky certified federico as Master
  • garnacho certified federico as Master
  • alvaro certified federico as Master
  • freax certified federico as Master
  • carlosgc certified federico as Master
  • berthu certified federico as Master
  • mrcsparker certified federico as Master
  • simos certified federico as Master
  • derupe certified federico as Master
  • fagrspf certified federico as Apprentice
  • alfons certified federico as Master
  • mathrick certified federico as Master
  • yaubi certified federico as Master
  • rmolina certified federico as Master
  • ebassi certified federico as Master
  • pvanhoof certified federico as Master
  • zbowling certified federico as Master
  • bogart certified federico as Master
  • patux certified federico as Master
  • roozbeh certified federico as Master
  • beto certified federico as Master
  • karkul certified federico as Master
  • fbscarel certified federico as Master
  • madan certified federico as Master
  • behdad certified federico as Master
  • gpoo certified federico as Master
  • Sandino certified federico as Master
  • toxickore certified federico as Master
  • clubfan certified federico as Master
  • Aaaarti certified federico as Master
  • jmauricio certified federico as Master
  • everaldo certified federico as Master
  • zwnj certified federico as Master
  • lucasr certified federico as Master
  • imcsk8 certified federico as Master
  • masood certified federico as Master
  • okaratas certified federico as Master
  • eopadoan certified federico as Master
  • desrt certified federico as Master

[ Certification disabled because you're not logged in. ]

New Advogato Features

FOAF updates: Trust rankings are now exported, making the data available to other users and websites. An external FOAF URI has been added, allowing users to link to an additional FOAF file.

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!

X
Share this page