Mono Hackfest & fosdem

Last week, I enjoy to meet few mono guy during the mono hack fest. That was pretty cool.

We have worked on a lot of new stuffs. So here is a quick summary of the mono hack fest:

1) Create a cover view for movies/Tv-shows for banshee. The current extension allow you to regroup all your tv-show under the same dvd cover. Cover and info is takken from few webservice (theMovieDb, theTvDb). And you can see more information for the video on the context panel (actors, guest star, homepage url, trailer url, studios, summary, …)

So now I have 2 patchs waiting for approval on banshee (dvd support and this new video view)

I have worked on the Alan’s GObject introspection for mono to improve GTK bindings. Code is here.

To sum up, we parse the new GIR files (xml) to produce the gapi one we used to generate binding.  So we will have easily the GTK 3 bindings with that.

Else you can have more details about the week here for day 1 and here for day 2 and 3

It was really a pleasure to meet other people around (Alan, Jeremy, Tim, Rodrigo, David, Ruben and Bertrand).

Another beautiful hack is the one done by Tim. He has worked to remove old C code (effect) from f-spot and replacing it by Pinta effect.  It is really a great idea because it will simplify f-spot build and allow a common work for effect in Pinta/f-spot.

Posted in banshee, Mono, open source, Pinta | Leave a comment

Pinta cool things

As usual it is a very long time that I do not blog some things.

So, I have let a little bit MonoTorrent library to help on pinta which is a drawing tool witch try to be as user friendly as Paint.net. It is a really cool project and very interessting to learned cairo and drawing things.

I have start with easier thigns as zoom tool and pan tool even if my pan tool was not takken in main git.

I have code a lot of things on 0.3 release:

few tools as text tool, gradient, magic wand and few effects. Effects are just translated from last open source Paint.net release.

Some part of this tool is taken from Paint.net. Some tools are convert from PDN code and some others are build from scratch. But even convert code of PDN take a lot of time…

Cairo is a pretty cool lib but a lot of things is missing to build a real drawing tool.  For example, you have only linear and radial gradient (no conical gradient). You can not combine selection (union, minus, xor). And sometime performance is very bad with Cairo. so we take some code from Paint.net to improve global performance and get Cairo missing features.

Effect and Pixel grid is basicly just a translation from Paint.Net code.

So I want to thank very much the Paint.net team to have let the code open source even if now it is closed for some other reason…

Anyway, it is not just translate code from Paint.net and we have made lot of things with GTK/Cairo as point picker, angle chooser, … and converting code from paint.net change so much the code that some time it is hard to see the original code.

The last thing, I have work on is the multi document support. There are still some bugs. For example, I have just found one: I forget to resize the image size between document switching.

For moment, it only switch history and layer.

The design is quite the same than Paint.net but nothing come from PDN for this part.

To support multi document in Pinta, I create a new control that show thumnails of open images. You can click to select the current one. You have two arrow on side to navigate between thumnails when you have open too much images that you have not enough space to display all images… When you select an thumbnail, it switch the layer and history panel.

So here are screen shots. You see the multi document control on upper right part.

0.4 release will touch core part to be more flexible:

addin system, i18n, translation system and of course multi document support ;). I think we will have more image supported too.

Addins will made the project easier to imroove by providing addon before including new tool/effect in core part.

I guess all effect, tools and image loader/saver will be in addins.

Some thread have ever start to ask for new features as healing tool,…

We can imagine a lot of other addins : image format converter, automatic image merger, image rotation, image corner transfert, ….

The project is moving so fast. So, feel free to take the last git version and build beautiful tool/effect…

Posted in .NET | Leave a comment

xaml designer for monodevelop

Long time, I have not blog… So I will pop up some news!

First, I have worked on monoTorrent to fix some bug on DHT, clean code, support for nodes segment in torrent file and use it. This last part is not on svn yet but will be soon. (Alan is reviewing it) Go Alan go! 0.80 of monoTorrent will follow soon after that and I hope that 1.0 will not been so far ;).

The second point is a xaml designer plugin for MonoDevelop. I am working on it for 1 month.
You can found it here:
I have start by converting the lunar eclipse to use the  MoonlightHost GTK widget which replace the old GtkSilver.

I add a zoom system to zoom with wheel from the mouse cursor position. But, I am not happy of it because it is a drawing system in canvas but I miss a designer mode to add controls on container and all things like stetic done on MonoDevelop.

So, I have start to write a glu between lunar eclipse system and MonoDevelop view part. Now, I start to work on the designer part to drag and drop item from toolbox on the xaml designer.

I am far from the end and it is still very buggy but here are some screenshots!

First, you see the new button designer when you work on xaml file!

switch design mode

Here the code is loaded in the designer and now we get that :
designer

Now, you see that I have adapt the code from stetic gtk designer to have this beautiful combo-box with the tree of the xaml document:
combo box

Now, you have 2 modes:

  • one for drawing with toolbox as gimp :

drawing mode

  • and the 2cd one for designer with all control that you can drag and drop!

designer mode

The drag and drop is still not working and if people understanding the gtk system can help me on that, I will be happy ;)

Posted in Mono | 7 Comments

theora decoder

Since MonoTorrent is quite features complete. I look for new challenge ;)

So I have start to work on dirac but I skip it quickly because we have first to work on a more flexible system in for media stream source in moonlight.

I have start to code something where I get out of ogg media stream source the vorbis code and try to make ogg accept other codec as dirac or theora.

I come to conclusion that before done glue I need to have more codec to see all the needs of differents codecs. So I start to code a theora decoder from specification of xiph.

If you want to help, I code on my own branch here:

http://anonsvn.mono-project.com/viewvc/branches/cscodec/

Anyway, it is just a start so do not expect to read a single video, it need a lot of work to achieve it!

Posted in .NET | 3 Comments

udp tracker and distributed search

WOW, long time I have not blog about my life…. (2 years)

But today, I want to talk because a lot of great things append:

  • First, I have complete this week the udp tracker code for monotorrent library.  The goal is to reduce overhead. I know that UDP is an ugly protocol (No IPv6 support, no field to represent the user agent,…)
  • I have compose an idea of a distributed search engine, I will send it to bittorrent.org but I need feedback before sending it. This mean that with meta-data exchange support and DHT, we can be fully tracker less.

This mean that we are close features  full. We will not code the azureus support because utorrent extension have the same features. I hope Alan will release the 1.0 soon.  Monotorrent have a new website with a wiki with all you need to know to use monotorrent library. We still need to improove some documentation, so fill free to edit/add page in wiki…

Monotorrent.com is still an 404 error but we have the site.

Alan have done a beautiful work with this library and I have help him a bit on few part and I am really happy of it.

Alan have refactored a lot of module to make it very flexible, so do not just think to bittorrent client GUI (as monsoon). This library can be used in many other ways. In fact every time you need to spread data, you can think to it. Direct download is quick when you have only few downloader but when you need to spread a lot of data bittorrent is the best. So it can be used to spread patch among a a lot of client as done on World of Warcraft.  And do not forget that this can be used cross-plateform.

Just for fun, here is the list of current features in MonoTorrent library:

  • Encryption
  • Dht
  • Peer Exchange (uTorrent style)
  • Local Peer Discovery
  • Web Seeding (getright style)
  • Magnet Links / Metadata download
  • IPV6
  • FAST Extensions
  • Sparse files (NTFS file system)
  • Multi-tracker torrents
  • Compact tracker responses
  • IP Address white listing / black listing
  • Fast Resume
  • Initial Seeding (super seeding)
  • Selective downloading
  • Prioritised downloading
  • Full bittorrent tracker
  • Dynamic request queue size
  • Memory Cache
  • Endgame mode
  • Per torrent and global rate limiting
  • Individual file relocation
Posted in .NET, Mono, monotorrent | Tagged , | Leave a comment

monotorrent api is great !

Monotorrent is really great thanks to the beautiful work of Alan.
I have read the code and it is really easy to understand.

Thanks to this beautiful Api it was very easy to add a lot of features to the core api.

So here is what I have added during the last month (with the help of Alan):

  • super-seeding (also known as the initial seeding) it permit to be faster when you have made a torrent and start to broadcast it on net…In this mode the rules to choose where I send piece are different
  • uTorrent peer exchange: exchange with the swarm the peers.
  • web seeding (getright specification only) This specification allow to download on web site with HTTP and FTP and do not need any script on server side (just a regular link). This specification contain a bonus which is just a nice to have : gap management but I have not implemented it. There is just some basic code on my branch in piece picker class.
  • libtorrent metadata support: you can receive the other metadata contain in the torrent file from other peer with this message. this features allow monotorrent to be tracker less. You just download the infohash with a magnetlink and get from other peers the torrent file.

I have code some other things which are not on trunk :

  • magnet link: this features is like the edonkey link. It is link to the libtorrent metadata features.
  • a basic work for gap management in piece picking process (getright specification)
  • Event and function to have chat message usable in lib. This will evolve to support Azureus chat message protocol
  • azureus protocol: I have just started it and it is far from compilable but will be soon ;) I need to do the negotiation protocol too!

In the big next TODO there are

Here you have a list of extension in protocol:

http://wiki.theory.org/BitTorrentSpecification#Reserved_Bytes (technical view)
http://www.bittorrent.org/beps/bep_0000.html#draft-beps (official draft)

Posted in .NET, development, Mono, monotorrent, open source | 3 Comments

A managed OS

We have ever heard about singularity the Microsoft project to make an OS in managed language. Most is done in managed mode but some part are done in asm.

And now, we have 2 projects in open source which try to make it all in manged way SharpOS and Cosmos

Both project have succeed to boot with virtual machine.

Cosmos have made a compiler which convert the IL(intermediate language) code in assembler code. So code is compile just in time but ahead of time. (The mono compiler can ever done it). I do not know if there are differences between mono AOT and Cosmos one…

SharpOS use another way. They build a PE file with MultiBoot header.

SharpOS have a great documentation to explain how it work, especially on boot time.

If you want to learned how work an OS there is another good project named SOS for Simple OS (fork from KOS) which is lead by a French Linux magazine. This is in C/C++ but you have a lot of documentation which come from articles in the magazine freely available. All article are in french but it can help if you want to help SharpOS or Cosmos and know nothing about kernel.

sharpos

Posted in .NET | 3 Comments