Archive for the ‘Linux Fun’ Category
On Saturday, I was in NIE, Mysore to give a talk on ‘Open Source & Careers’. The event was organized by “OBSCURA Open Source Club“. The purpose of the talk was to let students know that there are good career options in FOSS.
All I tried to do was project some statistics to show that they can pursue their contributions in FOSS as their career. As usual, they had doubts on FOSS business model and lots of questions on “How to get started?”. Thanks to Sankar (Our SUSE Goodies guy ! ;-) ), I gave out DVDs of openSUSE 10.3.
I enjoyed the day. First thing I noticed in Mysore was very less traffic and wide roads ! :) . Went to my favourite restaurent in mysore, “Gufha” for lunch. Thanks to Bipin, was with me the whole day ( Geeky chats ! ). And i learnt little about night photography !
Almost over a month back we started writing a MAPI based provider in Evolution for MS Exchange connectivity. libmapi from OpenChange.org which provides APIs for native MAPI calls, is the base library for this provider. Currently we are using libmapi 0.6.
Advantage of this provider among others are
- works with MS Exchange 2007 servers. (this is the main motivation behind this work )
- has compatibility with older exchange servers (*this is not tested yet!*)
- Simple implementation in EDS/Camel. (No exchange-storage process to manage. This will be similar to Groupwise provider architecture.)
Most of the common code (servers/mapi) is almost completed. And we have started working on the backends for all the components. All the components have some basic working code which will evolve into a solid provider. Currently ,
- Calendars can fetch and display appointment/meetings.
- Contacts can fetch/display/modify/create items.
- Mailer currently has some hacky code running which can fetch folder list / mails. More work to be done in handling cache.
MAPI Provider is planned to be merged into trunk by end of March. There are some challenges :
- libmapi depends on some samba4 libraries (ndr, ldb, talloc, samba-config, dcerpc, dcerpc_samr and some more) which are under heavy development.
- libmapi itself is under heavy development. libmapi 0.7 (PHASER) is scheduled to be released soon.
Currently all work is going on in these branches :
Meanwhile we are planning to do incremental releases of this provider as a plugin RPM (RPMs for the distributions supported by OBS) using OpenSuSE Build Service. I have a placeholder for this in my Build Service Repo.
Lot of learning / Fun wrt to Camel for me ! Yipee !
Everybody knows (i mean most of the users) that a Linux box is haunted by mysterious daemons. They are invisible, invincible and sometimes do a lot of weird stuff!.
Recently i’ve been facing “No disk space” problem with my $HOME. It happens every two weeks after i cleanup. I’ve been using the same $HOME for around 1.5 years (3-4 upgrades/installation). I cleaned up all the unused applications “.$application” directories.. nope .. not much changed. Then when i was cribing about this to srinidhi over lunch, he suggested me to take a look at “.beagle” . And yes he was right ! I have a 25GB /home and “.beagle” was using 11 GB of it :( . Looks like it maintains a mirror of my $HOME!!
Bad daemon beagle ! There should be a option to set the maximum cache size that beagle can use or some interface to check how much diskspace beagle is using for cache !
Itz a bit late. But before my amazing MMU decides to put this event into swap, I just want to write it out. Here goes :
- Introduction into practical real-time programming in userspace on Linux : Lennart Poettering
- This is one of the best talks that i was in. Very practical. Now if i want to write a real-time process in linux, I know where / what to look for.Enjoyed it !
- talloc: The Power of C : Rusty Russell
- This was very usefull since we are using talloc in the mapi provider for evolution which we are writing now. And also how the underlying talloc works over malloc.
- How and Why You Should Be a Kernel Hacker : James Morris
- zero technical information in this one. Probably thatz the reason i (and almost all) enjoyed this talk. His talk was a very casual narrative of his experience on how he became a kernel hacker. I would dub this talk as “The spirit of a open source hacker.”
- The PulseAudio Sound Server : Lennart Poettering – Red Hat
- Basically a demo of pulse audio. How it works. and some internals. Now i know why it rocks and it is called ‘compiz for sound’ or ‘ear candy’.
Those are some talks that i really enjoyed listening to. And some others too that i was in like ‘open moko’ / ‘mozilla’ / Danese Cooper’s ‘treking with elephants’ and some more :)
FOSS.IN/2007 was designed to inspire new contributors. It is very clear that they (the organizers – Team FOSS.IN) didn’t want this to be very technical (Ulrich Drepper commented that his talk was rejected beacause it was `too technical` and he had to redo something else :) ). Hope to see more technical talks (and the right balance for beginners ) in the coming years.
Overall it was fun ! Great work ‘Team FOSS.IN’ !! Looking forward for FOSS.IN/2008 .
The registration queue wasn’t so long like last time. Probably because the main conference is on 6th. Almost all the halls were full (atleast the GNOME hall was)
I was disappointed with the GNOME project day since most of the talks were for beginners with/without any knowledge/experience with GNOME. I was waiting for Andrew Cowie’s talk “The challenges and opportunities of properly writing multi-threaded GTK based GNOME programs “. Again disappointed : Very basic information and a demo of java-gnome bindings !
- There was a session on GNOME Translation. Some interesting discussion/questions came up.
- hunting bugs – Ritesh Khadgaray : Probably the worst of the day. The talk was a big joke! He sounded like “the guy who hates GNOME .. but forced (paid) to work on it” . And his false claims on Evolution and other GNOME products revealed his immature brain!
- Clutter: Fun with opengl interfaces : Shreyas Srinivasan . This one was nice.probably the best in the GNOME session.
I’ll be there for GNOME project day.
Some the talks i’ll probably sit through… are :
- talloc: The Power of C : Rusty Russell – IBM
- Introduction into practical real-time programming in userspace on Linux : Lennart Poettering – Red Hat
- User to hacker in 90 minutes: the tools and techniques needed to actually contribute to Open Source: Andrew Cowie – Operational Dynamics
- Trekking with White Elephants : Danese Cooper – Intel Corporation
- The Virtuous Cycle: Sun’s FOSS Philosophy and Strategy : Simon Phipps – Sun Microsystems
- The PulseAudio Sound Server : Lennart Poettering – Red Hat
- GCC Internals: A Conceptual View into GCC : Abhijat Vichare – Indian Institute of Technology, Bombay
- How and Why You Should Be a Kernel Hacker : James Morris – Red Hat
- Contributing to the Basic Runtime – UlrichDrepper – Red Hat, Inc.
- The Mozilla Project : Mitchell baker – Mozilla Corporation
- Panel Discussion: Corporate Opensourcing: Team FOSS.IN
- And jump into some lightning talks. :-)
Realized the importance of backups of your data (code / patches / local repo branches ). My laptop was sick for a whole day. So i had to spend my time waiting for it to recover. Sitting in your cubicle and doing nothing ( of course i was reading blogs / news / man pages ) is very frustrating. So i came back to office on a saturday to setup my backup machine (still in progress).
I use GIT for my work on GNOME and other projects. I setup a public git repo on my test machine and pushed (git-push) my repo there. Then I edited the GIT’s ‘commit’ hook in my laptop so that as soon as i commit locally on my laptop, the changes gets pushed to my backup machine.
End of the week i felt very low on energy. So i dropped / canceled (at the last minute :( and sorry.)
- Lunch at my brother’s house (missed yummy fried fish !)
- XBOX 360 Gaming (Gears of War) session (at ConSoul/ Java City) with Srinidhi.
- Shopping with Kalyan.
- Meet with my travel agent.
- 10.3 DVD delivery and some nice conversation with Bipin.
Having fun with killzone liberation. Can’t wait to get my hands on SOCOM: Tactical Strike Demo . I’m having trouble downloading it from store.playstation.com
Lesson Learnt this week : Being sleep deprived can make you sound like a arrogant idiot !
Some of the workflows i like (and use) is something like this :
- Interrupted workflow (taken from git-reset man page)
- Suppose you are interrupted by an urgent fix request while you are in the middle of a large change. The files in your working tree are not in any shape to be committed yet, but you need to get to the other branch for a quick bugfix.
$ git checkout feature ;# you were working in "feature" branch and $ work work work ;# got interrupted $ git commit -a -m 'snapshot WIP' (1) $ git checkout master $ fix fix fix $ git commit ;# commit with real log $ git checkout feature $ git reset --soft HEAD^ ;# go back to WIP state (2) $ git reset (3)
Isn’t that wonderful ! I was trying out svn + quilt. But very hard to manage.
Some resources :
- http://git.or.cz/course/svn.html – For SVN users : Understanding GIT.
- Fredrico : http://www.gnome.org/~federico/misc/git-cheat-sheet.txt
- git-svn man page : http://www.kernel.org/pub/software/scm/git/docs/v184.108.40.206/git-svn.html
- Nice starter git-svn tutorial : http://tsunanet.blogspot.com/2007/07/learning-git-svn-in-5min.html
- https://wiki.bnl.gov/dayabay/index.php?title=Synchronizing_Repositories#GIT_and_SVN (good one ! )
- http://youtube.com/watch?v=4XpnKHJAok8 – Linus talk ‘on’ GIT in Google (*not* how to use GIT)
My GIT Ref Card :
# Initialize a repo (like git init):
git-svn init http://svn.foo.org/project/trunk
# Fetch remote revisions:
# Create your own branch to hack on:
git checkout -b my-branch remotes/git-svn
# Merging in master.
git merge --squash foo-branch-name
# Do some work, and then commit your new changes to SVN, as well as
# automatically updating your working HEAD:
# Something is committed to SVN, rebase the latest into your branch:
git-svn fetch && git rebase remotes/git-svn
GIT is fast (super fast) ! and git-svn helps you if you are _stuck_ with svn !
Now GIT has moved out of my ‘staging area’ to everyday use. Yay!! I use it for GNOME/Evolution (and GNOME just moved to SVN a few months back ;-) )
Note : Writing this post so that i don’t forget. ppl know very well about my memory. ;-)
After OpenSuSE’s HackWeek , Attachment Reminder made it to evolution/trunk and made it to Evolution 2.12.
People appreciated that and somebody (on irc) promised to send me some chocolates and bear (didn’t get it though!) :-) .. Even though code wise itz simple to write. Anyway … it made it to Novell Open Audio (PodCast) , OpenSuSE News :-) and GNOME 2.20 Release notes.
- Novell OpenAudio(PodCast)
- OpenSuSE News
- GNOME 2.20 Release Notes
- Evolution Maintainer – Srnivasa Raghavan’s blog (a.k.a srag)
- My HackWeek Video Report.
- Idea.OpenSuSE.org Page
Now gotta improve that code. I Love working on GNOME !! :-)
There were times when you edit code or a document and wish that you could go back to the previous version. Yep ! Thatz one of my serious issues. So I take cron’d back up diffs which is not so straight forward. Even when doing that you could miss some versions. Revision Control System (svn , cvs , bzr … ) may be the solution, but again you have to manually write / save it to the repository (commit). So i was little frustrated and planned to write my own simple versioning filesystem using FUSE.
Googling led me to CopyFS. Its a filesystem in userland using FUSE. I’m currently running OpenSuSE 10.2 and it took a few minutes to download and get it running.
Quoting from CopyFs HomePage :
CopyFS aims to solve a common problem : given a directory, especially one full of configuration files, or other files that one can modify, and which can affect the functionning of a system, or of programs, that may be important to other users (or to the user himself), how to be sure that a person modifying the files will do a backup of the working version first ? This filesystem solves the problem by making the whole process transparent, automatically keeping versionned copies of all the changes done to file under its control. It also allows a user to select an old version of the files, for example to repair a mistake, and allows him/her to continue edition from this point. CopyFS is distributed under the terms of the GNU GPL.
Project page : http://freshmeat.net/projects/copyfs/
Home Page : http://n0x.org/copyfs/
There is a HowTo / Usage document on the CopyFS home page
There is a catch here . Currently When you save a file it maintains a full copy for each version. So diskspace will become a issue here. But I guess it’ll be fixed to maintain diffs ( deltas ) in which only the changes are saved and maintained.
Currently I dont have any data on performance. But I created test mount point and tried it out. So we have some storage data. Following are the data on-disk (copy-fs-storage-area) and copyfs (copy-fs-mounted )
jjohnny@trantor:~> du -h copy-fs-mounted/
-rwxr-xr-x 1 root root 9504 2007-07-11 23:32 a.out
-rw-r–r– 1 root root 85 2007-07-11 23:33 main.c
-rw-r–r– 1 root root 0 2007-07-11 23:30 test.txt
jjohnny@trantor:~/copy-fs-mounted> copyfs-fversion main.c
File main.c (‘*’ is active) :
v1.0 : -rw-r–r– root root 43 Wed 11 Jul 2007 11:31:51 PM IST
v2.0 : -rw-r–r– root root 73 Wed 11 Jul 2007 11:32:15 PM IST
v3.0 : -rw-r–r– root root 85 Wed 11 Jul 2007 11:33:35 PM IST [*]
jjohnny@trantor:~> du -h copy-fs-storage-area/
00000001.4913 00000001..main.c.swp 00000002.4913 00000002.test.txt 00000003.test.txt metadata.4913 metadata..main.c.swp
00000001.a.out 00000001..main.c.swx 00000002.a.out 00000002.test.txt~ 00000004.4913 metadata.a.out metadata..main.c.swx
00000001..command-line.swp 00000001.test.txt 00000002..command-line.swp 00000002..test.txt.swp 00000004.a.out metadata..command-line.swp metadata.test.txt
00000001..command-line.swpx 00000001.test.txt~ 00000002.main.c 00000003.4913 00000004.test.txt metadata..command-line.swpx metadata.test.txt~
00000001.main.c 00000001..test.txt.swp 00000002.main.c~ 00000003.a.out dfl-meta.a.out metadata.main.c metadata..test.txt.swp
00000001.main.c~ 00000001..test.txt.swx 00000002..main.c.swp 00000003.main.c metadata. metadata.main.c~ metadata..test.txt.swx
Too many files !!. There is a modifed version of CopyFS available here : http://mattwork.potsdam.edu/projects/wiki/index.php/CopyFS
Still no diffs. Sounds like a good project to contribute to .. :-)
Gonna have some WiFi Hacking ( two weeks later, as my buddy wants it to run as such for atleast a week .. without screwing things up :) )