This weekend I did a hack session with Alan McGovern on Monsoon. You don't know what Monsoon is? It's the sexy GTK# driven bittorrent client based on the MonoTorrent library developed by Alan McGovern.
I created debian packages for Monsoon and wasn't happy with some features and/or bugs so I thought I can contribute some love to it.
First thing I implemented was persistency of file priorities for torrents, so when you restart Monsoon it will restore all priorities. I also reported some bugs to Alan in MonoTorrent, like it was ignoring "do not download" flags, so it kept downloading all files of a torrent and the download progress of files were not correctly restored when it was resuming the torrent. He found and fixed the issues right away, great service ![]()
Then I implemented auto-start of torrents that were running when Monsoon is closed.
Monsoon will also now not flood your console with lots of debug stuff, as I added a -d / --debug parameter for that, which made my terminal unresponsible without it when downloading big torrents (~1000 files).
And this evening, I replaced the usage of Gnome.IconEntry and Gnome.IconSelection with Gtk.FileChooserDialog + a preview widget. Alan asked for this, as he wanted to drop the GNOME# dependency for memory usage reasons.
Allright, enough love for today! Now I am hungry....
PS: We have now an IRC channel for Monsoon: #monsoon on GIMPnet, if you are interested, please join!
Today I was checking how much diskspace is need when a small CLI (.NET) application like gfax is installed. The last 2 years I am optimizing the Mono packages in Debian to reduce dependency chains. Dependency chains can cause a small application to become very big (at least it looks that way) when they are installed, as modern Linux distributions automaticly install all required dependencies.
So first I worked against GUI dependencies for non-GUI applications, those are annoying for servers, you don't want to install a X server or other GUI libraries when you only serve webpages using ASP.NET.
Splitting CLI 1.0/1.1 vs 2.0 also seemed to be a very good candidate to split apart, as applications usually are target at 1.0/1.1 or 2.0.
Then I split Base-Class-Libraries that have dependencies on native libraries (via P/Invoke), as those packages must depend on those native libraries, like DB drivers.
Last but not least I split debug symbols in a different package, as those are not needed for normal production usage, and embedded systems don't have much diskspace. The mono-dbg package is 28.2MB in size when installed, that's alot.
The Mono source package in Debian is now building 67 binary packages, but thanks to APT nobody has to care for that, every part is installed when needed.
So today I was checking the results of it, how much will a small application download and install?
I am testing with a clean minimal Debian system, that way all dependency chains will show up very easily.
Installing GFax + required libraries today takes 43MB to download and 138MB on the harddisk. GFax is a small GNOME application, it uses libraries like: Mono, GTK#, GNOME#, Evolution#, GConf#.
So someone might say: "of course, it is based on that bloaty Mono virtual machine!", well let's check a different application.
What about a GTK# only application (no GNOME) like graphmonkey + required libraries? That will download 19.5MB and uses 56.4MB on the harddisk. That's alot less, isn't it? graphmonkey only uses Mono and GTK#.
So it's not Mono taking all no diskspace? Well after all my packaging optimizations, it's not Mono ![]()
So how big is a install of a minimal Mono runtime + all required libraries then?
Minimal as in enough to run famous the "Hello World".
It's 2.4MB to download and 7MB on the harddisk, yes you read it correctly, the super monster bloaty virtual machine just needs 7MB. Mono only has glib as dependency which will be replaced by the eglib library some day.
After I had this great result, I wondered how big other runtimes in Debian are.... like.... Java and Python? The results are interesting...
A minimal Python install takes 3.9MB to download and 13.4MB on the harddisk. Yes, that's almost double the size of Mono, I was surprised too.
Update: I got comments that Debian has a python2.5-minimal package available, which is true. So here the numbers of the smallest Python install you can get on Debian: 1.1MB to download, 3.2MB on the harddisk. So Mono is not smaller than Python
I also noticed that I could reduce the minimal install size of Mono by 2.7MB if I put the I18N libraries into a different package. That would make 4.3MB for a minimal Mono install then.
So and Java? Here it becomes a bit unfair as SUN's license is not allowing to ship parts of a Java runtime. So the Java package in a distribution must be one package. 34.5MB to download and 95.2MB on the harddisk. Yes, that's alot, but thats the smallest install you can get when you want to run anything on it.
Update: Please be aware that the package size + dependency sizes are considered, not just the naked software size.
So, if you want to run Hello World on a virtual machine: use Mono Python!
just kidding...
Small runtimes are important when it comes to acceptance and adaption of new technologies, as nobody wants to kill all his computer resources for it. And I often hear the replies on Linux IRC channels, when people ask which software they can use to do $task: "No I don't want o install 100MB just for $task" and they decide to try some other software with less dependencies and less resource usage.
Also for the embedded area, resources are very limited, every MB still counts there.
For the completeness of my report, here the naked numbers of other available Java runtimes packages in Debian: sablevm 22.0MB (63.2MB), kaffe 52.2MB (118MB), jamvm 28.3MB (65.4MB), cocoa 28.8MB (66.0MB).
This weekend was a great start for my 3 weeks vacation. On Saturday I was at the Hardstyle Germany Rave at Hamburg Messe-Hallen (exhibition halls). With the finest hardstyle techno music I couldn't stop dancing for 5 hours (did I mention that it was 25°C outside and probably 40°C inside?) 3000 techno fans where there and enjoyed the party. I encountered some fellow classmates from junior high school (Christoph and Fabian) at the party; it was nice to see them after such a long time ![]()
(click on the picture to see more pictures of the techno party)
The next morning, I woke up at 13 o'clock. After an hour, I went to the next party; it was a grill-party in the Hamburg Stadtpark (city park). Many Brazilians had attended, two of them had drums and performed Brazilian music. I didn't understand any of the Portuguese but it was a lot of fun. Brazilians are definitely party people, having it in their blood I guess ![]()
Now I really need 3 week vacation after this weekend, nah just kidding!
Actually the weekend is not over for me, it's like a 3 weeks lasting weekend
I have a lot to do, real-life tasks like getting the car in shape (fix exhaust pipe, remove rust), visiting finally a hairdresser, visiting doctors (the usual offline stuff).
For my online life things are much easier, smuxi will get my attention to finish the public beta release in this 3 weeks. Allright, time to hack!
It wasn't so easy as expected, as Cecil, stetic and the debian patches needed to be updated. Stetic was updated to SVN revision 74962 and I made a patch for Cecil so MonoDevelop 0.13.1 links against the older version 0.4.3 (sorry Jb Evain, but I will switch to your lovely 0.5 soon though!). I also had to update the nunit patch so it links against the nunit 2.2.6 debian package, which was pretty simple thanks to pkg-config.
I uploaded the packages to debian.meebey.net and the Debian/Unstable archive, which was my first upload as Debian Developer ![]()
So have fun with MonoDevelop 0.13.1, it really rocks, I like the constructor and method parameter code completion the most so far.
Lluis Sanchez you are doing a great job with MonoDevelop , keep it up!
I am not sure but I might found a regression in the nunit plugin. When a test-case contains the Explicit attribute and I run the all test-cases it stops at that method with "Internal error". But nunit-console has no problems with it.
Weeee, hottest email I got for a long time! So finally I am an official debian developer.
I am working now on packaging monodevelop 0.13, which is not that easy (again). It bundles now nunit 2.2.9 which I need to unbundle again for distribution in Debian, but the latest nunit in Debain is 2.2.8, maybe they are ABI or API compatible, will see. There is also stetic which I need to update from SVN, hopefully HEAD works with monodevelop 0.13, thats even more problematic than nunit. And the other bundled libraries like log4net or Cecil should be easy to link against the official packages. I can't promise anything when the packages will be ready, but as soon as they are I will upload preview packages as usual to debian.meebey.net and with a bit delay to Debian/Unstable.
Main
Projects
Powered by
Friends
Eduard Bloch (Zomb)Pablo Fischer (pabl0)
Gerfried Fuchs (Alfie)
Alexander Wirt (formorer)
Torsten Raudssus (Getty)
Preferences
Categories
26595 visitors have visited this site since 25 06 2005 - 22:21

