Lorsque l’on veut ne plus faire gerer ses sources par Subversion, il faut recuper le depot et supprimer l’ensemble des .svn contenu dans le projet. Ca peut etre un peu la galère… Heureusement la commande find fourni un mécanisme de recherche très efficace. Il suffit alors de la couplé avec un xargs et un rm pour en finir avec ces répertoires.
TYPE=$1
PATTERN=$2
find . -type $1 -name $2 -print0 | xargs -0 rm -R
On notera l’utilisation de -print0 conjointement a -0 de façon a ignoré de façon cohérente les espaces… on ajoutera aussi -i au rm si on veut etre sur de ce que l’on fait…
Voila, après quelques semaines d’absence, j’ai décider de stopper la diffusion du Tutorial concernant la conception d’un framework de réseaux de neurones en c++. Le projet en lui même ne va pas s’arrêter la. En fait, d’une part, le temps dont je dispose maintenant est beaucoup plus réduit et ca m’incite donc a ne plus déposer sur ce site que des posts “à dimension raisonnable” de façon a rester présent, et  d’autre part, j’aimerai lancer l’idée de la conception de ce framework de façon plus sur en le déposant sur une forge avec une licence adaptée que je n’ai pas encore définie d’ailleurs.
De toute façon, lorsque l’on y regarde d’un peu plus prés, les éléments présentés sont déjà  a mon gout suffisamment détaillés pour être poursuivi localement chez soit ou en collaboration. D’un autre coté aussi, le développement qui a été mené jusque la, a été surtout réaliser de maniéré ad hoc, impliquant en réalité déjà  un gap entre les éléments déjà  réalisé et les éléments décrit dans ce tutorial. Je pense quand même que celui qui voudra aller plus loin dispose avec ceci d’un bon début pour imaginer le reste de l’architecture.
Enfin, une dernière raison, technique ici, m’a poussé a vouloir reprendre le développement a la source est a mon avis la nécessité de pouvoir combiner les langages Java et C++ pour en tirer le meilleur partie des deux. Clairement, le manque de réflexivité de C++ est un frein pour permettre au réseau de neurones de s’adapter en changeant de configuration. A l’inverse, le Java manque de son coté de performance. Il peut être intéressant a mon gout de chercher a marier ces langages.
Voila donc prochainement, j’ouvrirai un compte dans une forge pour relancer ce projet qui me tiens a coeur malgré tout. Je donnerai des nouvelles a ce moment la.
Maintenant que nous avons l’ensemble des entités de base pour construire des reseaux de neurones, il nous faut les tester. Pour cela, on va employer la factory que l’on instancier par un chargement de dll. Voici donc le code permettant le chargement de la dll (comme defini dans le post Chargement de librairies dynamiques interdependantes en c++ sous linux et le post Définition et utilisation d’une librairie dynamique) :
int main() {
try{
void* hdll=DllLoader::LoadLibrary(“./Debug/libCNeuronalNetWork.so”);
DllBuilder appBuilder(hdll,”CreateBasicConceptFactory”);
BasicConceptFactory *app=appBuilder();
TestNeurone(app);
DllLoader::FreeLibrary(hdll);
}
catch(Exception& exception)
{
cout<<”void TestChargementNeuronalNetWork():”<<endl<<exception;
}
return 0;
}
(Lire la suite…)
J’avais dit que j’entrerai dans le detail des fonctions d’entrée et d’activation qui peuvent être implémentées. Nous avons vu que les fonctions d’entrées avaient pour objectifs d’effectuer une opérations sur l’ensemble des dendrites d’entrées (comprenant également le biais du neurone). Classiquement, deux possibilités s’offre a nous : soit les entrées ne sont simplement pas traitées comme dans le cas des cartes de Kohonen ou simplement elles sont sommées. On peut bien imaginer d’autres fonctions d’entrées pour par exemple effectuer leur produit, etc.
Dans le premier cas, on considérera une classe NoInputFunction héritant de la classe InputFunction dont l’implémentation de la méthode ExecuteWithParameter (qui doit etre surchargé dans toutes les fonctions) comme suit par l’envoie d’une Exception si elle est employée. On fera de même avec une classe NoActivationFunction.
double NoFunction::EvaluateWithParameter(FunctionList *) const{
double tmp=0;
throw new FunctionException(“NoFunction object cannot be Evaluate”);
return tmp;
}
Dans le second cas, on réalisera une classe SumFunction héritant aussi de InputFunction avec l’implémentation suivante:
double SumFunction::EvaluateWithParameter(FunctionList *) const {
double tmp=0;
iterator it=this->Begin();
for(;it!=this->End();it++)
{
tmp+=(*it)->Evaluate();
}
return tmp;
}
(Lire la suite…)
Dans la pratique, nous sommes assez rarement confrontés au problème d’avoir deux adresses réseau pour un même dépôt. Dans l’idéal, même s’il faudrait en fait faire un lien symbolique entre les deux adresses de façon a pouvoir permuter de l’un a l’autre sans problème, parfois il va être nécessaire de redéfinir l’url de notre copie local du dépôt selon que l’on utilise l’une ou l’autre adresse. (Ce cas se présente par exemple si il existe une adresse interne a un réseau privé et une adresse public définie par un routeur redirigeant vers l’adresse locale.)
Pour cela, on va employer la commande switch avec l’option –relocate de svn, en prenant bien soin de s’assurer que l’on travail sur la racine de notre copie locale et bien sur que l’opération soit récursive sur les sous répertoire (sinon gare a la catastrophe).
On utilisera donc la commande suivante:
svn switch –relocate svn://url_actuel/Nom_Depot svn://nouvel_url/Nom_Depot
Dans ce nouvel article, je vous propose de définir une commande latex permettant de construire une lettrine dans les règles typographiques de base. L’utilisation des lettrines est bien sur avant tout esthétique mais elles peuvent malgré tout rendre un document un peu plus attrayant. Entre autre, j’ai justement utilisé ce script pour la rédaction de mon manuscrit de thèse et il me semblait logique d’en faire profiter. Pour cela, je me suis inspiré du document Tout ce que vous avez toujours voulu savoir sur Latex sans jamais oser le demander (V1.0, sous licence Art Libre) qui propose aussi un script pour produire des lettrines au sein de vos documents.
Je ne m’étalerai pas dans les explications sachant que celles fournis dans le document cité précédemment sont des plus explicite et ne demande finalement pas de complément.
Tout le monde connait le site des petites annonces gratuites le bon coin. Ce site via une base de données très riches en thème divers permet de chercher un peu tout et n’importe quoi, cela va de la vente d’automobiles ou de motos à la vente de biens immobiliers en passant par les jeux et la recherche d’emploi (si si…). Le seul reproche que je pourrai faire à ce site, c’est de ne pas faciliter la recherche des annonces selon des listes de localités. Par exemple, il y a quelque mois j’étais à la recherche d’une moto. Il va de soit que je n’allais pas faire mes recherches en Bretagne en habitant Mulhouse… Heureusement, on peut effectuer sa recherche dans la région Alsace… cool me dis-je… Seulement voila… comment faire même a ce stade pour mettre en évidence dans la région Alsace les listes des motos pour certaines villes particulières (celles proches de ma localité) ou à l’inverse comme faire pour extraite des listes selon des modèles de moto particulières?
On va me rétorquer que ce besoin est un besoin quand même très spécifique car il est toujours possible de faire de multiples recherches sur le site pour reproduire ces différentes listes. Je dirais oui en effet… mais alors bon courage, vous allez y passer vos soirées…
Autre exemple… suite à un changement de Job, j’ai besoin de trouver un appartement dans la région Nord… ok sauf que la région Nord à beau ne pas être large, elle est étendue… mon emploi se situant sur Lille, je suis obligé de centrer mes recherches sur Lille… euh… et si je veux vivre à la compagne, je fais comment? Et Bien c’est simple, il faut refaire une recherche pour chaque localité susceptible d’être intéressante…
Bon je vais m’arrêter la pour justifier ce qui va suivre et vous dire qu’en fait la solution la plus simple (et que j’avais mise en oeuvre à  l’époque ou je cherchais une moto) et de faire un petit script Unix pré-calculant l’url des recherches de bases permises par le site leboncoin. De télécharger ensuite l’ensemble de ces recherches et à partir de cette mini base de données locale, de définir vous même des mots clefs filtrant vos recherches. Il va sans dire bien sur que pour chaque mot clef, un fichier html contenant les annonces intéressantes sera générées.
(Lire la suite…)
Tous les développeurs ou autres rédacteurs se sont un jour posé cette question. Si je réalise un document ou du code et que je veux le diffuser sur le net, qu’est ce qui va protéger ma réalisation ? Si cette question ne vous a même jamais effleurée l’esprit alors c’est qu’il y a un problème qu’il vous faut régler rapidement. Aujourd’hui, personne ne peut plus mettre de coté le problème du choix d’une licence pour protéger son travail. Donc pour cela, je vous invite à au moins lire la page consacrée à cet effet sur le site du zero et de lire également les informations proposées sur les licences GNU pour les gens désirant protéger leurs codes sources et le site Créatives Common pour les gens désirant protéger leurs  documents.
Bon en même temps je vous rassure. Par défaut, la licence utilisée est le droit d’auteur qui vous protégera au maximum : seul vous aurez le droit de modifier, de diffuser et d’exploiter le document. Les autres, juste de le lire. Par contre parfois il est plus utile de le partager a une communauté selon certaines restrictions un peu moins (ou encore plus) rigides. On utilisera pour cela une licence GNU (code) ou Creative Common (documentation).
Pour plus d’information, je vous invite a lire la page dédiée aux licences sur le site de Wikipedia ainsi que le document de Pierre-Paul Lemeyre, Les logiciels libres sous l’angle de la Responsabilité Civile, 2002
Je précise qu’ici le contenu (article et code source proposé) de ce site est soumis au droit d’auteur et donc qu’il ne peut être copier pour être modifié, diffusé, vendu sans mon autorisation, sauf précisions spécifiques données le cas échéant.