rss

Circ website & GIT mirror up

Category : C#, Circ

Just a quick note to inform everybody that I have set up a webpage and a GIT mirror for Circ, my IRC client written in C# blablabla…

The page is accessible both here on the blog and on an other server here.
The GIT mirror, generously provided by repo.or.cz (thanks for the service ;) ), is accessible here : http://repo.or.cz/w/circ.git.

On the side of development news I have begun to implement common missing features like nick auto-complementation, topic support and user list update. I will push these change on the mirror when it’s done and maybe release a real 0.1 version. The actual tarball provided on the website is what MS folks would call a « Technical Preview » since it connects itself to only one server : EpikNet. If you want to join a chan just type : /j #yourchan in the entry widget. ATM you have user list, color goodness (with hl support) and automatic tab creation for each channel. A friend of mine suggested me some new UI idea for connecting new server and for general presentation so stay tuned.

Drôle, coloré et pas cher

Category : General

Tel pourrait décrire la petite pépite qu’est Geekscottesnojhan racontent à travers des petites bandes dessinés des histoires ayant rapport de près ou de loin avec la culture OpenSource.

Quelque chose à voir donc, accompagné par nos amis :

  • Tux
  • Gnu
  • Wikipédia
  • Mozilla
  • Konqui

Some new stuff on MonoDevelop svn

Category : C#, Mono, Monodevelop

I guess I’m living on the bleeding edge these days, using Ubuntu Feisty when it’s still in alpha, compiling my favorite C# applications (Banshee yay !) from new version and now I’m even using MonoDevelop from daily Subversion checkout :D .

I remember that previously building Monodevelop was always a challenge because of conflicting version of Nunit on my box but now Monodevelop includes its own version so, while its a packager nightmare, it make our life easier ;) .

If you want to try yourself go ahead, just do a svn co svn://anonsvn.mono-project.com/source/trunk/monodevelop monodevelop-svn; cd monodevelop-svn; ./autogen.sh; ./configure --prefix=~/md-install --disable-monoquery; make; make install that will install everything in the folder md-install in your home directory, I also disable MonoQuery in the build since I don’t find any utility in it but you can do as you wish. To launch your new shiny MonoDevelop svn version just run ~/md-install/bin/monodevelop

So far the first thing I noticed was performance improvements, MonoDevelop now launchs faster, eats less memory and usage is generally smoother. There are several cosmetic changes too. For example take the main window after yesterday checkout :

New editor signs

As you can see tabs and newline are now represented by signs though I don’t know if it really helps readability. If you don’t want it you can disable the signs in Preferences > Editor > Second tab > Show control character (a small typo fix is needed there ;) ). Moreover Monodevelop seems to forget that you don’t like this hype feature so at each time you restart it the signs reappear. Just do the manipulation again and they should hide again.

A cool new feature is the revamped interface for deployment that you can access by right-clicking on Solution > Tools > Create a new package. It leads you to this wizard :

mdpackage.png

The « Tarball » target is just like before the autotooled version of your software, the « Archive of Sources » includes all your source + the .mdp and .mds files and obviously the last one include only the binary version with each dependency. The wizard then let you choose the project you want to include in the release and ask you for some informations like the destination path, the configuration (Release or Debug) of the target, and a button to remember these informations. Since yesterday I wanted to share a new version of Circ with a friend I really liked the possibility to do a source-only package and a standard autotooled version. Moreover the Autools extension now offer the possibility to create a wrapper script (very basic for the moment) to launch your application, very neat ! It cames under the new « Linux Deployment Settings » menu in the category Deployment of your project’s options (it also offer the possibility to disable the generation of .pc file when the project is a library).

I noticed also some a new « Rename » option on the context menu of each method and fields of a class but unfortunately it seems to be just a stub for the moment as of 05/04 it’s implemented (« announcement« ) :

Context Menu

From the svn ChangeLog I also saw that work was done on the Source Version Control addin but since I don’t use Subversion for my projects I didn’t test it.

Now on the bad part. MonoDevelop is still buggy (meaning it crash when you don’t expect it) but I must say that this kind of behavior is now concentrated on the designer part.  For example MonoDevelop sometimes crash when I »m manipulating some widgets, generally Notebooks widget in my case.

To conclude I heard somewhere (don’t remember exactly where though so don’t take it as a absolute truth :P ) (it has been announced officially) that some developpers of SharpDevelop were now working on MonoDevelop, so we can expect some cool new features in MonoDevelop in the future (why not for example some addins backport from SharpDevelop).

Yet another brainwave

Category : C#, Mono.Xna, Tao

Some times ago I noticed that the Tao website was revamped under Rob care to a new Drupal-based plateform which is actually cleaner and more « professional » than the plain Mediawiki-based wiki.

This lead me to the news of the Tao 2.0 RC2 release that I « quickly » downloaded. « Quickly » because even in the tar.gz package, which is supposed to be more for UNIX folks, Tao devs put every Win32 DLLs dependencies that they could find for Tao and moreover in two different places (14 Mo for nothing) ! (They were also OSX deps).

But well I’m not writing this post to complain on Tao strange relationship with dependencies ;) . Instead I want to point out several problems of Tao under Linux. As you (should) know Tao is P/Invoke wrapper around several multimedia-related libraries like OpenGL, OpenAL, GLFW, SDL etc… . It’s notorious that under Linux there has been always some problems. mine were almost always related to double-freed pointers or corrupted memory. Moreover there are always been some inconsistency in method prototype (bad parameter type generally). In fact only the Tao.OpenGL wrapper is generated automatically via a spec parser, that’s fine because OpenGL is a standard and under the governance of big companies (ATI, NVidia …) that’s why stuff are well done and why there is such thing as a spec file describing every function, enum, typedef and even vendor-specific extensions. But other projects don’t have the time, resources, or just the will to do such a thing. That’s why I had the idea to create a P/Invoke generator that would take a .h file and produce the corresponding P/Invoke .cs file. There is already a tool which do things like this : Swing but the problem is that it force to create c wrappers whereas the P/Invoke system is precisely designed to avoid such things.

Since I didn’t want to create a full-featured C parser in C# I had three possibilities :

  • Use some well crafted and illegible Regex to fetch function prototype and struct scheme. The main problem is that they are complicated stuff to look for, like typedef and #define directives.
  • Use the same process that before but on a preprocessed source file thus eliminating some difficulties. Problem : the typedef case stays the same.
  • Use a dedicated compiler which produce something readable instead of machine code. Fortunately there is a tool out there which do just that : GCC-XML. GCC-XML is a full featured gcc compiler that output XML representing the internal of GCC during the compilation (the GIMPLE tree I think). Personal problem : even if I can use the big facilities of the .NET framework regarding XML support, the output of GCC-XML is still, hum, barely readable for a limited human being like me :P . But since the common good is more important I decided to go with this solution :D .

If you are curious here is a sample code that I use like a test for the parser, and here is the result returned by GCC-XML (without options). As you can see there are all possible informations in the XML file like the length of the structure, the alignment, the offset …

I have started to write the XML parser right now so let’s see if the result will be convincing. Stay tuned ;) .

"Setting up Feisty for speed howto"

Category : Quick note

Today I stumbled on this howto released under a Creative Commons licence.

It sums up some of the best speed tips&tricks from the Ubuntu Forums and other sources. It includes the neat trick I described on this blog some times ago. Check it out if you are interested by a smoother Ubuntu experience :-D .

(Btw, the download links have a .doc extension but it has nothing to do with Microsoft Word documents. Just remove this extension and replace it with .tar.bz2 as the end of the name suggests.)

Mono.Xna's follow up

3

Category : C#, Design, Mono.Xna

Hey I don’t know why I wouldn’t also blog about Mono.Xna since things there are also moving on.

So as Miguel said on his blog, Mono.Xna is now « mature » enough to run Rob’s Pong.

As the  »  » suggests, I’m not comfortable anymore with the idea that Mono.Xna is getting more and more mature. In fact it’s totally the contrary : I’m more and more suspicious towards Mono.Xna. Even though there are great people behind it (Antti, Alan, David Hudson…) the project lack a consistence IMHO. Still now I don’t really know who is the « Game Master » behind Mono.Xna nor did I see the skeleton of a real organization behind it. Actually Mono.Xna appears to me more like a big mess than a shiny piece of code. Things are quickly (doesn’t influence the patch length though ;-) )  hacked upon the stubs without a common talk or a design plan from the team. What I fear is that all this work will ultimately result in nothing because of its crappiness (writing unit tests isn’t sufficient). Maybe at some point we will be able to just stop the « hackers folly », design a correct infrastructure and fork the existing code where possible in the new design.

For the moment things are still easy because SDL.NET helps a lot (I’m still unconvinced that tying Mono.Xna so deeply in SDL.NET is a good idea but that’s another matter). But things will get exponentially harder when the Content Pipeline, for example, will need to be implemented.

Circ's followup

Category : C#, Circ, Design

I have done a little more work on Circ. First of all I added the missing LGPL headers in the main git branch. I have also refractored a little the Presentation part doing a UI redesign of the GTK# frontend. In fact I’m redesigning it to follow as closely as possible the Gnome HIG.

Reading the HIG made me realize that today, with all this 3D interfaces buzz, things are getting a lot less accessible for people who suffers from some deficiency. That’s why I want to implement some stuff from ATK in order to provide maximum accessibility for these people who deserve to be able to communicate on IRC like any other geek. I may also use AT-SPI but the main interface to it seems to be only Corbra/Bonobo ATM which is far from being efficient in C# code even though there is apparently some work to get a D-Bus binding which would be better and simpler for me to implement.

Definitely, I think that Accessibility must be one of the key feature of Circ. Integrating libcontrast in contrast was already a smallish step towards that goal but there is more work to be done before telling that Circ is accessible.

Lazy mode activated

Category : Circ

Comme je me sens en forme (cf le titre) je sens bien un petit post en anglais

As the title suggest I’m now in Holidays (17 days doing nothing :D ) and I’m currently in the garden, lying on a long chair with the sun, the birds and of the course the computer on my knees ;) .

Ok apart from that I wanted to say that Circ is almost finished and if nothing go wrong (I hate to give schedule and then to not follow them) I should have a beta something soon. From the buzzy point of view I have added some nice things : dropped my homemade plugin system for the newly released Mono.Addins, ported the interesting libcontrast to a managed C# version one (in action on the screenshot), and mostly tuning the thing in accordance with the ouput of FxCop and Gendarme. As a screenshot is worth all word here it is :

Screenshot_Circ_16-04

I just have to adapt a little the Controller code, do some UI improvements (any input would be nice :) ) and it will be mostly finished (I would like to re-work on the Tapioca backend too but that will be for a later time).

On a side note, Miguel announced that Mono will ship a so-called cross-plateform GUI (I say « so-called » because IMHO a NCurses thing isn’t really the first class GUI you would expect from a modern language/plateform :D )

 EDIT: Here it is after 3 hours of more works :) :

monologue_fonctionnel.jpg

Damn I had to add a little Thread.Sleep in the presentation thread to avoid a randomly bad assertion (the parameter of gtk_text_attributes_ref was detected to be null oO, still now I don’t understand what the purpose of this function) and the corresponding segfault.