binforge 0.2.0 released

avril 20th, 2009

Eh bien ça m’aura pris du temps !

Comme je l’expliquais dans le dernier billet, j’ai énormément de travail ces temps-ci (la fin du semestre approche) et je ne trouve pas toujours du temps pour bosser sur binforge. J’ai tout de même écris la lib de gestion des sockets ainsi que que la lib de gestion de threads. Par la même occasion, j’ai commencé à travailler sur les programmes qui découlent de binforge (bf), à savoir binforge server (bfs) et binforge client (bfc). Pour l’instant (juste epour les tests), seulement deux actions sont possibles : vérifier si un package existe (via son id) et lister les packages disponibles. Les prochaines versions devraient essentiellement apporter des fonctionnalitées supplémentaires (ajouter un package, le mettre à jour, le télécharger, etc.), peu de changements seront faits à bf donc, je vais me concentrer sur bfs et bfc. Je ne veux pas me presser sur ce projet pour atteindre une certaine qualité, mais il serait temps que bf devienne pleinnement fonctionnel, même s’il n’est pas encore très développé.

J’en profite pour faire un appel à testeurs. Le debug prend déjà beaucoup de temps, et les tests en prennent encore plus. Si vous avez du temps de libre, je vous invite à me contacter pour avoir plus d’infos sur les tests à faire. Si vous avez l’habitude, vous pouvez tout aussi bien mener vos propres tests et m’envoyer vos résultats. Dans les deux cas, vous serez d’une grande aide !

Téléchargement: binforge_0.2.0_src.zip

Breaking news

avril 8th, 2009

Hello !

Cela fait un bout de temps que je n’ai pas posté de billet (des exams à n’en plus finir…) mais je n’oublie pas binforge pour autant. Comme prévu, la lib de gestion de sockets est en cours d’écriture, ou plus précisément en phase de debug. Ce n’est donc plus qu’une question de jours avant la prochaine release. J’en profite aussi pour annoncer que le projet sera développé avec Code::Blocks à partir de maintenant, et que donc le code source sera distribué sous forme de projet C::B.

A dans quelques jours :)

Deuxième cap: les sockets.

mars 14th, 2009

Maintenant qu’une base est prête il va falloir s’attaquer à la partie client/serveur du projet, ce qui -je l’avoue- ne sera pas de tout repos. Ecrire un library pour les sockets, définir un protocole de communication, l’implémenter, sécuriser le tout, faire des tests, etc.

Pour l’instant je vais commencer par écrire une library générique de gestion de sockets en attendant que j’écrive un protocole de communication. A moins que je n’opte pour de l’HTTP ou du FTP (qui ont chacun des avantages et des inconvénients).

En tout cas voici les besoins primaires identifiés pour le moment :

  • Récupérer la liste des packages
  • Télécharger un package

Je parle ici des besoins d’un client, l’administrateur doit être sur la machine en question pour effectuer les opération de gestion (pour le moment, hein, par la suite il est évident qu’une interface à distance sera dispo pour les administrateurs).

Voici donc les grandes tâches à réaliser avant commencer à distribuer binforge sous forme binaire :

  1. Interface client/serveur basique pour récupérer les packages.
  2. Implémenter un repository intermédiaire (récupère les packages pour les redistribuer).
  3. Mettre en place un système de gestion de sources (fichier contenant la liste des serveurs auxquels se connecter pour récupérer des packages, à la sources.list).
  4. Développer une interface administrateur à distance.

Au travail ! :D

PS : Je vais bientôt commencer à publier des binaires, juste pour les tests. Leur usage doit rester exclusivement dans une optique de test/débug, car la compatibilité entre les versions 0.x.x n’est pas assurée pour l’instant.

binforge 0.1.2 released

mars 14th, 2009

Il y a deux jours je publiais la version 0.1.1, et voici la 0.1.2 qui arrive déjà. Ca commence à prendre forme : les commandes fonctionnent sauf preuve du contraire (je fais des tests mais on ne sait jamais, si vous trouvez un bug laissez moi un commentaire), la structure de la base de données me semble satisfaisante pour le moment, les opérations de base (oui bon vraiment la base de la base ^^) sont écrites, que de bonnes nouvelles :) . Une fois de plus, pas de binaires dans le dépôt pour cette version, mais le code fonctionne et peut être compilé/utilisé sans soucis.

Pour plus d’information sur les changements, ouvrir le fichier TODO.h contenu dans l’archive (que je devrais renommer en CHANGELOG.h d’ailleurs…).

Téléchargement: binforge_0.1.2_src.zip

binforge 0.1.1 released

mars 12th, 2009

Le changement de structure de la base de données est en cours. Je n’ai toujours pas inclus le champs description mais ce sera fait prochainement. J’en ai profité pour corriger 2/3 erreurs et inclure deux nouvelles commandes : print qui prend un id en paramètre et affiche le package correspondant, et exists qui vérifie si le id passé en paramètre existe bien dans la base de données.

Code source dispo sur le FTP :)

Structure de la base de données

mars 9th, 2009

Comme annoncé dans le précédent billet, la structure de la base de données ne me semble pas idéale.

struct PACKAGE_S {
int id; /* id unique pour chaque package*/
char name[250]; /*nom du package*/
char version_s[50]; /*version du package (string)*/
int version_i[4]; /*version du package (sous forme d'integers)*/
int size; /*taille du package sur le disque dur*/
time_t released_on; /*date de publication*/
};

Le premier problème est que la structure actuelle ne prend pas en compte le nom du fichier (qui est copié dans le repository avec comme nom de fichier l’id du package). Un deuxième problème est qu’il n’y a qu’un seul champs pour la date, alors soit on garde la date de publication, soit la date de mise à jour. Je pense qu’il serait bien d’ajouter deux autres champs filename et updated_on. Aussi, il est inutile de stocker la version sous deux formats différents. Garder l’array version_i (renommé version) est suffisant. Enfin, donner une description du package permettrait de faire découvrir de nouvelles applications aux utilisateurs curieux et d’instaurer un système de recherche par mots-clés. Voici donc la nouvelle structure de la base de données :

struct PACKAGE_S {
int id; /* id unique pour chaque package*/
char name[256]; /*nom du package*/
char filename[256]; /*nom du fichier*/
char description[512]; /*description du package*/
int version[4]; /*version du package (version majeur . version mineure . correction . build)*/
int size; /*taille du package sur le disque dur*/
time_t released_on; /*date de publication*/
time_t updated_on; /*date de dernière modification*/
};

Je pense aussi instaurer un système de gestion des dépendances. Je laisse cette idée dans un coin pour le moment.

First release

mars 6th, 2009

J’ai le plaisir d’annoncer la sortie de la toute première version du code source :D !!! Elle est dispo sur le ftp (Dépôt) dans la section « sources ». Quelques changements sont à venir (notamment concernant la base de données, je pense qu’il faut repenser sa structure). Les actions disponibles pour le moment sont l’ajout, la mise à jour de packages, ainsi que l’affichage des packages enregistrés dans la base de données. Je vais maintenant ajouter la suppression, la recherche et l’extraction de packages.

Pour cette version, pas d’exécutable (le code source est trop jeune). Vous pouvez compiler/exécuter le code, mais les fichiers générés ne seront surement pas compatibles avec la prochaine version.

Publication du code source

mars 5th, 2009

J’ai décelé un bug durant les tests (concernant l’ajout et la mise à jour de packages). J’attends donc de le corriger avant de publier la first release.

First Entry

février 26th, 2009

Bonjour !

Ceci est donc le premier billet posté sur le blog du projet binforge. Ce projet est destiné à développer un système de distribution de logiciels et mises à jour sous Windows, un peu dans le même esprit que le fameux apt-get. Les dernières releases seront publiées sur un premier serveur, qui les distribuera à ses membres, qui à leur tour les redistribueront jusqu’à se qu’ils arrivent chez l’utilisateur final. Cela permet, d’une part, de s’assurer que les packages téléchargés sont sûres (car l’utilisateur choisit depuis quel serveur télécharger ces packages), et d’autre part de réduire la concentration de demandes sur un nombre réduit de serveurs pour éviter qu’ils ne se retrouvent surchargés de requêtes (on observe toujours un pique de consommation à la sortie de nouvelles versions, évidemment, car tout le monde les veux en même temps).

Ce projet, en l’état actuel, n’est pas encore fonctionnel. Une première partie du code est écrite concernant la gestion de la base de données ainsi que la gestion des packages sur le disque dur. Prochaine étape, écriture d’une bibliothèque pour la gestion des sockets.

Pourquoi publier un code qui n’est pas encore fini ? « Release early, release often ».

Je vous souhaite une bonne naviguation :)

Younes.

PS : La first release arrivera dans quelques jours.