rss

Nouveau projet : Circ

Category : C#, Circ, Linux

Après avoir entendu tout le monde sur #sdz parler de choses tel que des bots, clients, serveurs… IRC je me suis dit pourquoi pas en fait ? Le principal client sous Linux/Gnome reste X-Chat (ou irssi pour les fana de la ligne de commande). La plupart du temps il me convient bien mais j’avoue que certaine chose me chagrine et je trouve intéressant de m’exercer sur un projet de ce type puisque pour l’instant mon action c’est plutôt limité à des bibliothèques sous Mono.

Donc voilà je vais essayer de me faire un petit client IRC que j’appellerais Circ (acronyme de « C# is really cool », petite dédicasse aux gens de #sdz ;) ) et qui grosso modo obéit à ce cahier des charges :

  • Le client devra suivre le modèle PAC et être construit suivant de bonne règle de design.
  • Il devra être facilement extensible à l’aide de plugin simple à concevoir et pouvant être coder dans n’importe qu’elle langage CLI. A une certaine extension toute les fonctionnalitées devraient être implémentées sous forme de plugin.
  • Il devra être hautement configurable.
  • Il ne devra pas être gourmand en mémoire et relativement performant en général.
  • Un des plugins devra fournir une interface D-Bus pour manipuler Circ.
  • Il faudrait prévoir une suite de plugin interargissant avec d’autres logiciels compatible D-Bus comme NetworkManager et Banshee par exemple.

Pour l’instant j’ai écrit la partie Plugin et gestion de ceux ci et là je vais m’atteler a modifié une bibliothèque IRC (SmartIRC4NET) pour mes besoins. Ensuite viendra le coeur du programme PAC et un backend GTK# et éventuellement à ce moment là une première release 0.1

Useless

Category : School

useless

Juste pour dire que j’ai eu 19 à mon contrôle de math et que j’en suis très content :)

Récap d'un Lundi pas comme les autres

Category : School

- 4H de math dans la même matinée
- Une professeur d’histoire complètement déboussolée :)
- Vincent qui boit en cachette à la cantine xD
- Jeanne qui mange une banane d’une façon très personnelle…
- Une bataille corse et une Anne-Laure inoubliable :D
- Un cours de philo avec une bonne tranche de rigolade ;)
- Sortie à 5h parce que la même prof d’histoire est parti alors qu’elle devait nous avoir de 5 à 6h (elle devait être complètement dans les choux :D )

Jouons avec le P/Invoke (et pourquoi Linux est en manque)

Category : C#, Linux, Mono.Xna

La plupart du code relié aux gamepads Xbox a été commité sur le SVN, néanmoins il reste une méthode qui n’a pas été implémenté car elle est assez complexe (i.e. fortement dépendante de la plateforme) : SetVibration().

Pour Mono.Xna nous utilisons SDL.NET qui est un wrapper au niveau de Tao.Sdl qui est lui même un binding de la bien connue bibliothèque SDL. SDL est utile dans le sens où elle abstrait les opérations, comme le support des joysticks, sur pas mal de système différent. Le revers de tout ça est que ce qui est permis est assez limité : une fois qu’on a passé le cap de l’état des bouttons on peut difficilement faire plus.

Ainsi pour cette opération très spéciale qu’est le maniement des retours de force du gamepad de la 360, il faut utiliser les API natives. Pour Windows pas de souci, un peu de Googling et j’ai trouvé la lib XInput qui a été visiblement créée pour être utilisé en interne par XNA. Du côté de MacOS X j’ai aussi trouvé quelques pistes dans la documentation mais le maniement est plus délicat (l’API semble permettre des choses puissantes, les vibrations y sont représentés par des effets qui sont paramétrables etc…, mais elle est plus complexe). Et comme tout bon Linuxien qui se respecte je me devais de faire marcher l’histoire sous le système Pingouin jusqu’à que je ne trouve… rien. Le kernel (et pas Xorg comme je le pensais au début) supporte bien les joysticks mais bizarrement c’est le même ordre de fonctionnalité que SDL (étrange, étrange :-P ). Pour être plus honnête il semble bien y’avoir une fonction obscure qui permet d’envoyer des informations bas niveau au joystick mais elle est tellement bas-niveau qu’il faut manipuler directement les bits ce que je ne peux pas faire vu mon peu d’expérience assembleur/système ou simplement le fait que je n’ai pas de contrôleur XBox 360 (si vous avez un cadeau à faire … ;-) ). Bref Linux de ce côté là est à mon avis en retard (vis à vis de ces concurrents Windows et MacOS X).

Top 3 des choses qui sux dans ma TODO list actuelle

Category : Quick note, School

- Finir le dossier d’anglais européen.
- Me rapeller si j’escaladais la piste d’escalade en pied gris-main violette ou le contraire.
- Réussir à faire un créneau correct la nuit quand y’a plein de gens.

Etat de SharpWidgets

Category : C#, SharpWidgets

Comme vous ne le savez surement pas, un autre de mes projets de codeur fou consiste à la création d’une bibliothèque de GUI multiplateforme (à l’image de wxWidgets ou Qt) qui profiterait de tous les avantages de la plateforme .NET (late binding, appels asynchrones, évênements…). Une page pour présenter le projet était disponible ici [en] ou ici [fr] mais ça fait longtemps que je ne les ai pas mise à jour, je n’ai, pour ainsi dire, pas commité de travail sur le SVN depuis au moins 1 mois ;-) .

Il n’empêche que j’ai eu l’envie de retravailler un peu dernièrement dessus et l’idée du jour consiste à transformer les appels GUI natif en méthode asynchrone ce qui devrais en tout logique amener de meilleure performance et un meilleur suivi des règles de PAC (Plateform Abstraction Controller : le design pattern derrière SharpWidgets). Comme ma précédente idée d’apporter de la laziness à SharpWidgets, cette idée-ci demande quelques tests et un changement assez radical dans l’organisation de la lib. Stay tuned donc ;-) .

Les structures, oui, mais avec modération

Category : C#

Je voudrais vous faire part des désagréments que je viens d’avoir en implémentant la partie Input de Mono.Xna. Si vous suivez le lien vous verrez que, à part les factory, l’ensemble est constitué de structures. D’un point de vue design c’est pas mal car ces objet sont faites pour êtres créés et consommées sur l’instant (dans la méthode Update() de Game généralement) et donc à la fin de Update() ces structures sont détruites automatiquement et sans intervention du GC.

Néanmoins les structures sont à contrario des classes beaucoup plus délicates d’implémentation. En effet de nombreux petits machins qui rendent la vie plus facile ne sont pas disponibles. J’en citerai trois qui m’ont énervé : absence d’initialiseur (vous savez quand vous mettez directement int foo = 500; dans vos classes), de constructeur par défaut (i.e. non seulement y’a pas d’initialiseur mais en plus on peut pas faire le travail d’initialisation dans un constructeur par défaut car c’est interdit par le compilo), et enfin il faut initialiser tous les champs d’une structure dans le constructeur avant de pouvoir utilisé quoi que ce soit (dans mon cas j’avais un champ qui dépendait d’un autre mais comme du coup l’ensemble n’était pas initialisé ça buggait soit à la compilation soit à l’exécution, un vrai foutoir >_< ).

Bref tout ça pour dire que vous aurez bientôt le support de souris/clavier/manette XBOX dans Mono.Xna.

Quick note

Category : Quick note, School

4 heures de devoir de philosophie un samedi matin, c’est quelque chose qu’il fallait tenter…

Avancement de Mono.Xna…

Category : Mono.Xna

… où comment deux trois stupides couleurs remontent le moral.

Ca y’est Mono.Xna est capable de faire quelque chose d’utile (« utile » est à relativiser ;-) ) grâce à super Rob :D . En effet la dernière version SVN fait tourner (de son petit nom) SimpleExample. Je vous ai mit une vidéo en bas (fait par moi donc très bof). Vous pouvez aussi allez voir le blog d’Alan.

Lien vers la vidéo.

PS : comme c’est fait avec VLC il se peut que ça marche qu’avec VLC ;)

QoTD (Quote of the day pour les ignares :p)

Category : QoTD

miguel_ : They changed the licence ?! What's the fuck ! That blows. Absofuckingtly blows.

– Miguel de Icaza sur #mono

Pour un peu resituer la citation, Miguel discutait la possibilité d’utiliser AGG pour implémenter WPF/E (Windows Presentation Foudation Everywhere) seulement, alors que cette bibliothèque était précédemment sous license MIT, la dernière news annonçait que le projet passait sous licence GPL ce qui rendait son utilisation inutilisable. Admirez tout particulièrement le magnifique « Absofuckingtly« . ;)