I treated Johnny

Johnny and me were discussing some Evolution plugin idea and I said, it would be nice, if we can do it in Python. It is easier to write, as well as to install than a rpm/binary. He told me that he will do it over night, and I said NOT POSSIBLE and I promised to treat him, if he does it over night. I also made it clear that if he fails to do, he would work the next day with out pay ;-)

Next day lunch…

Treat

I treated him. I went to office to see that I got a mail from Johnny at 5am attaching the patch for Python EPlugin loader and a hello-world python plugin.

Evolution 2.24 should feature it and it should be much really easier to write and share Python EPlugins. Thanks to Johnny for the cool thing. Now everyone ask Johnny, when he is gonna commit it ;-)

Evolution 2.22 released

I sent an announcement mail for Evolution 2.22. A sneak-peak of what we have done in 2.22

 Spam Improvements

  • Bogofilter as default spam filter
  • White list support
  • Junk detection based on server side spam headers (Faster as messages won’t be download)
  •  Junk/NotJunk flags stored on the IMAP Server (Second instance of Evolution detects spam automatically from stored  headers)

UI Improvements

  • New look Tango icons
  • Non intrusive error reporting and logging framework
  • Message tagging (Custom labels)

New Backends

  • Google calendar support

Memory Improvements

  • Major design change in memory handling in libical. EDS should take/have very less memory.
  • Loads of valgrind/memory leak fixes

GtkHTML Improvements

  • Frame/IFrame Anchor support
  • Saving embedded html image

General Improvements

  • Improved mime parsing. (Evolution parses much more than thunderbird)
  • Crash detection (Helps to disable preview pane, if the previous crash was due to last rendered email)
  • Experimental External Editor plugin
  • Plugin configuration support
  • Clean up of new mail notification configuration to plugin configuration
  • Password improvements (Now passwords are forgotten only for invalid credentials and not for all errors)

Bug fixes

  • Nearly 50 crash fixes
  • Some very important bug fixes
    • VFolder/trash/junk crashes
    • Itip-viewer crashes
    • Calendar/libical crashes
    • Summary/Folder mismatch
    • Exchange filtering crashes
    • Exchange connection lost fixes
    • GtkHTML rendering crash fixes

and nearly 450 bug fixes

Thanks a lot to every one who contributed patches/bug/debug informations/others for Evolution 2.22. Please have a look at the wiki for more information on what is coming up for Evolution 2.24.

Novell Hackweek #2

Last two days I have been working on deskice integration with Evolution Calendar and Tasks. It was all that fun at the end of day #1 to know that it is better to have a icecore server deployed locally otherwise I may end up hacking/fixing deployment bugs. I finally deployed one at localhost and using it. Now I have have a basic plugin, that

  • Creates an Calendar and Task accounts per every team the user is part of
  • Creates Calendar and Tasks folder under those accounts, mapping to the calendar/tasks of that team.
  • The calendar and tasks are web-calendar from icecore and the webcal url seems to be persistent and pubic.

With all these, when you login to deskice, your GNOME desktop would have calendar and tasks of your team into Evolution. You clock applet shows your meetings and tasks. It is just that it is all read only now. Yesterday I had a nice chat with Brady, who gave me more insights on this. Now I’m gonna hack at the web service api to give it a write support, so that I can create meetings, tasks in Evolution which would appear against your team/members in T+C icecore.

It is really great working with Michael Meeks, Brady and others. I wish Hackweek is more frequent.

Evolution MAPI (Exchange 2007) Preview

Johnny sent out a mail on the Evolution list about the availability of the preview build of the Evolution MAPI provider. Read the complete thread, to know what works and what doesn’t and other known issues. Currently we have rpms for OpenSUSE 10.3 and Fedora only. We would be providing rpms for Evolution 2.12 and 2.21.x for all the distros supported by OpenSUSE build service (OpenSUSE, SLED, Fedora, Ubuntu, Debian, …). The debs might need a bit of tweaking in the spec file, which isn’t yet done, but might be done next week. In a general note, it is not feature complete when compared with the current Evolution Exchange provider (OWA/WebDAV). We are aware of memory built-up/issues in the preview build and it not fully tested. But it should be pretty fast. It can connect to MS Exchange 5.5, 2000, 2003 and 2007 though we have been primarily developing and testing MS Exchange 2007. It is based on OpenChange’s libmapi-0.6 and many thanks to Julien and his team. The have been help us a lot, with the library, sample codes etc. They are working hard now libmapi-0.7 which would  give some important things for us to take the provider forward.

Unfortunately the Evolution MAPI provider won’t be shipped along with the Evolution 2.22/GNOME 2.22 release as the provider development schedule ends later than the GNOME release. So we would be releasing periodic standalone builds that can be installed on top of your Evolution/EDS installations and it should work seamlessly. We hope that various distros can pick these for their users later on. We are also thinking of nightly/weekly builds through build service, but that may take little more time, since we are now busy shaping the provider. Anyways try the preview build or build from source (EXCHANGE_MAPI_BRANCH of Evolution and Evolution-Data Server in the GNOME svn) and give your feedbacks on the wiki / mailing list as we don’t have much things for bugzilla now.

Evolution stacktrace hackfest

I just send an announcement mail to the evolution hackers list about the Evolution hackfest. We are planning to fix crashers that are marked with the ’stacktrace’ keyword on Tuesday Jan 22nd. The keyword typically mean that the crasher has good stack trace that will be useful for the developers to fix the bug.

How can you help us?

  • If you know of bugs/crashers that are easily reproducible and aren’t part of the list, please add to it to the wiki ( http://www.go-evolution.org/Hackfest ).
  • If you have filed crashers before and have good traces/debug information, but aren’t marked with stacktrace, please add keyword then.
  • You can hack with us and fix Evolution crasher bugs. We would be on #evolution on GimpNet working on Jan 22nd all through the day.

Thanks in Advance :)

Camel DB (Disk) Summary - Evolution memory improvements/thoughts

Finally I got my chance to use some of my ITO time (just 3 days this time). I decided to spend my time towards answering memory issues of Evolution Mail. Folder summary (Message list) is one of the biggest reason for Evolution’s high memory usage. The folder summary has Message infos. Every message info is nothing but headers like from/to/cc/sent-received date etc. Notzed (One of the Ex-Evolution/Camel Hacker) wrote a design/code on addressing the core issues. But unfortunately when he left Novell, the code/design wasn’t developed. It used libdb and had lots of new design/ways to access mail data. I was thinking on the same lines and decided to take some concepts from there and wrote a new design/thought . I had spent my 3 days and nights on improving my design and I have a fully working prototype. I used sqlite as the database for Camel Summary and message UID as the primary key. All over the summary code, I used sql queries like “select * from Inbox where uid=’342′” to access the data.

I modified the entire design of Evolution/Camel to store use only UID where ever required. When ever the Message info is required it queries the DB and gets the the data and frees when not required. It could mean that we don’t need to keep the visited folders in memory for the sake of trash/junk. We don’t need to keep the vfolder’s sub folder in memory. It could mean that just the viewed folder (why this also?) can be in memory rest could be just in data base and queried as and when required. I made a prototype with this in mind and I was able to achieve what I thought. (Asking when I’m gonna commit this? Hmm, I have made a prototype. Folder Summary listing works, Junk/Trash works, Search works, VFolders works. But there are lot of things that I can/ need to optimize since I have the flexibility with DB. Since this will break ABI and add more APIs and deprecate a few, I need to design the APIs with lots of things in mind like (remote view, Mails part of EDS, etc). I was discussing with Fejj (another Mail/Camel hacker) on friday and he gave nice thoughts/inputs on my design, like having a LRU implentation to decide what message infos to keep in memory and what not (He gave the code for LRU from GMime). These optimization would reduce huge memory for users having lots of vfolders and folders. Unfortunately this may not have any effect on users lying around just one folder (Just Inbox) and huge mails in it.And after all this optimization of memory, there isn’t be any performance drop, infact, it is a bit faster now with indexed tables. But vfolders was a bit slow, but having persistent summary for vfolders, it is going to be faster than the current implementation (I haven’t prototyped this though). Achieving all this in a cleaner way will be my first target milestone and might take as close as a month. (If I’m allowed to work on this, to go full stretch on this for a month).

In current Evolution, you wont see that memory drop
Note: The drop in memory, is something you won’t see in the current Evolution. Junk/Trash keeps those last visited foders in memory.

Of course there are next levels to this. Remote view & Search-in-disk

Remote View: Currently after my first target, only the viewed folder’s message list is going to be in memory. Now we can have a custom model store, that just maps viewed message list’s infos and may be a buffer of 50/100 above and below the message lists view. We can have a cursor in the db that just moves maps the view+head/tail to memory. It means that when you have a folder of 100,000 mails and the message list shows 50 mails and the head/tail buffer is 50, you would have just 150 mail’s message info on the memory and nothing else. It may be a bit slow, if you do page down/up faster or scroll using mouse. But can make Evolution run on any machine with low memory or mobile devices (Nokia 800/810 etc… Of course you can do a optimized design to over come the performance issue with huge scroll. (Sqlite is pretty fast and possible that you may not notice it most of the times). Also it requires lots of things like sorting/threading etc needs to be built inside the tables and the cursor needs to be mapped to the message list/etree. There is no prototype/data for this, but this is possible for sure after my first milestone. This will be the second mile stone

Search-in-disk: Currently for search, the entire folder summary is brought in memory (anyways in my first milestone only this is in memory). But if we implement a remote view, it may not be so efficient to it this way. We can extend the search to be done inside the data base and just retrieve the uids or use the cursor to map the contents to the message list. Effect: It will be super fast and again on low memory consumption.

I’m not doing much for the second or the third milestone right now. But I want to work on the first milestone for Evolution 2.23.1/2 (Sorry not for GNOME 2.22, too late to bring such a huge design change) The second and the third mile stone might not bring much ABI/API changes if it is designed well in the first mile stone and can be taken/done at any point with out much disturbances to the stability IMO. I wish I w(c)ould on all this.

Annoying popups with Evolution? hmm…No more

Lots of people have been complaining about annoying popups with Evolution saying “Ping failed”, “Name lookup failed” etc.. I started writing a design/interface in the wiki few months back and had a test code which I showed it to a few people at Guadec 07. Since then, I was busy with too many other things and  never had  time to relook at this. Last week my wife and my son had left to my parent’s town and since then, I seem to have too much free time and during the last weekend I thought, I’ll give it for Non-Intrusive Error reporting framework and so It is part of Evolution 2.21.4 release. I’m sure that it is gonna change a lot of things and give more fine-grained control over Evolution to the user. Some of the high lights are…

  • In general every operation that the user performs is executed in a thread in a asynchronous fashion. For every such operation, there will be a status indication of that in the status bar, with a option to cancel it. It means that (Assume that you don’t have few messages cached locally) when you click a message to view, it would start fetching from the server and you realize that you wanted to click the next one and you click that too. Unfortunately till the first operation ends, the second won’t start as most backends sequence the tasks. Since each of them is represented as a task with ‘x’ - cancel button you can cancel the first one alone and so the second can pick up. This is just one simple example and I’m sure that it will be more useful in lot other scenarios as well.

task.png

  • This is about non-intrusive reporting. Every such task that goes on a asynchronous fashion, can pop up a error. Now the status bar messages are persistent and timed. Every task representation is converted to a error, if the task ended with a error. Which means “Refreshing folder…” when the error occurs would change to “Error while Refreshing folder” with a ‘!’ icon on the status bar. The user can click the icon (tool icon) to view the actual error dialog. If the user ignores it, it hides from the status bar after a specified time (configurable) with a log (Yes, Evolution features a log view along with this)

error.png

  • Evolution now features a log viewer, where all the log messages of the session are stored. The UI has provisions for Error, Warning and Debug/Info messages. But all of them aren’t yet implemented and only error logging is only done. I hope that I would do the rest in the upcoming weekends.

debuglog.png

Note: The dialog is bit outdated. It now sorts on time/descending order and has nice spacing and border and scrolled window as well.

Now the base framework is done and it is integrated with the mail thread operation, I’m hoping that I would extend my framework to most of the other operations in mailer and then in the next release I would integrate Calendar and other components.

Milan Crha extended Sankar’s work on custom labels/message tagging and the base code has hit the trunk for 2.21.4. Few more patches are still waiting and in together it is gonna make it really cool. Apart from that lots of bug fixes and some important crash/performance patches also made to 2.21.4. For a more detailed entries and release notes, see my announcement mail.

Evolution doc issues

Andre posted a mail on the hackers list about the state of Evolution docs. The doc team here at Novell uses FrameMaker to manage documentation. So the master copy that we use is frame files which can only be exported to XML and no way to import/sync from xml. So any commits that happen for the XML file on the svn needs to be manually synced. At times, some patches are XML fixes which are auto-generated by FrameMaker. In which cases, the commit from Frame files to svn would overwrite them. This is a big issue. One solution that came our is hand editing XML files for documentation. Definitely hand editing the files isn’t going to be easy (it is 8K lines file with almost 1K modification every release). It can be more prone to errors than now. I really want to know how other projects over come this?. Are there any other tools or process other projects use? Or just hand edit XML files? Any better suggestions to me? I would be happy to hear any suggestions/processes that already other projects use.

Evolution 2.22 progress updates

I just released Evolution 2.21.3 (Yes we synced Evolution with GNOME version) and send a update to the evolution hackers list. Some highlights of that. Till now, we have committed

  • Google Calendar support (Read/Write - You can create meetings)
  • External Editor support for composer - You can use Vim or Emacs for composing
  • Lots of bug fixes

I hope that I should be able to get

  • Exchange Smart card support
  • Non-intrusive error reporting
  • Matt’s new look composer to trunk
  • UAM (Unified account management) - This is the base work required to do split.

We are spending lot of effort on MAPI based Exchange connector developed in a branch (evolution and evolution-data-server). I’m not sure, if we can make it to 2.22 but surely, it can be added as a plugin later on. This connector should be able to connect to Exchange 5.5, 2000/2003/2007 servers. It is based on OpenChange’s libmapi.
I hope that things would be much clearer after a few weeks.

I don’t feel like doing anything

For the past 2 months, either me or my wife or my son was sick and down with cold and flu. My son had recurring 3-4 days of flu for almost three times over the last month and I almost took 2 week vacation to get him better. I was back from my vacation during last week. Just a few days after I returned from my vacation, his flu started again (last friday, Nov 23). Till now he was down with fever and yesterday I got him hospitalized him at Apollo. All the tests related to flu failed and the doctor concluded that it is FUO (Fever of Unidentified Origin) and then the doctor requested for an abdominal CT Scan and that too turned to be all fine and finally we did a chest x-ray to see that it is some sort of Pneumonia. I was so worried he had non-stop fever of 102+ F  for almost 8 days and no signs of coming down. Just after the test, the doctor started an anti-biotic and I’m hoping that his fever should come down in a few days. Doctor advised us to keep him at hospital for atleast 5 days. I don’t feel like doing anything :(