Compiler la librairie Qt sous un Windows x64 avec Visual Studio 2008

Pour compiler la librairie Qt sous un Windows x64 avec Visual Studio 2008, la manipulation peut être particulière. En effet, en compilant cette librairie, vous pouvez rencontrer cette erreur:

fatal error U1077: ‘C:/Qt/2010,04/qt/bin/moc.exe’: return code ‘0x1’

Pour remédier à ce problème, vous pouvez tenter les actions suivantes. Après avoir téléchargé la librairie, ouvrez le prompt de Visual Studio 2008 en version x64 (VS2008 x64 win64 Command Prompt), Dans le répertoire de Qt, lancez tout d’abord un clean:

nmake clean

Cela permet de supprimer tout fichier qui pourrait compromettre votre installation. Et même si vous venez de télécharger le dossier, n’hésitez pas à le faire pour être certain qu’aucun fichier malencontreux ne viendra faire échouer 4h de compilation.
Après la fin de votre clean, lancez la configuration avec les options suivantes.

configure -debug-and-release -opensource -shared -platform win32-msvc2008

Il n’existe pas d’option pour compiler votre librairie en x64, vous devez donc obligatoirement compiler en win32.
Après la fin de la configuration et avant de lancer la compilation, vous devez d’abord supprimer plusieurs fichiers du nom de mocinclude.tmp qui sont soudainement apparu dans plusieurs dossiers et qui sont vraisemblablement responsables de vos échecs. Supprimez donc tous les fichiers mocinclude.tmp dans les dossiers suivant :

src/script/tmp/moc/release_shared/
src/script/tmp/moc/debug_shared/
src/3rdparty/webkit/webcore/tmp/moc/release_shared/
src/3rdparty/webkit/webcore/tmp/moc/debug_shared/

Vous pouvez enfin lancer la commande nmake et vous occuper 4h le temps de la compilation.

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn

Gestion de la DropDownList en ASP.NET MVC2

Le Framework MVC2 de ASP. NET permet de créer des sites web en utilisant MVC. Avec cette architecture, la création du visuel est un peu particulière et pas forcément intuitive pour quelqu’un n’ayant jamais travaillé sur un framework MVC. Ici je vais expliquer comment créer une liste déroulante à partir de données provenant de la base et avec une liste fixe.

Pour la création d’une DropDownList avec des données de la base de données, ayons déjà un exemple de base de données. Un système de gestion pour une ludothèque par exemple : Une table Jeu (Games) à un et un seul développeur (Developers). Un développeur peut avoir fait plusieurs jeux.

Tables Game et Developers

Si le CRUD de Developers est basique, il est un peu différent pour Games. En effet, pour indiquer le développeur du jeu lors de la création et de l’éditeur, on ne va pas entrer le nom à la main dans une TextBox : Entrer un Id à la main n’a aucun sens et si c’était le nom qui était demandé, les erreurs possibles seraient trop nombreuses (fautes de frappe, entrée d’un développeur qui n’existe pas dans la base, etc). On va donc utiliser une liste déroulante dans les vues « create » et « edit » de Games pour permettre de sélectionner un développeur parmi ceux qui sont dans la base.

Pour cela, on va d’abord récupérer le contenu de la table Developers et afficher ce qui nous intéresse. On enregistrera ensuite l’Id du développeur sélectionné dans la table Games pour la clé étrangère developers_id.

Regardons d’abord le controller pour modifier la fonction en GET de create de Game :

GamesController.cs :

// GET: /Games/Create

public ActionResult Create()

{

MyBaseDataContext db = new MyBaseDataContext();
ViewData[« Developers_Id »] = new SelectList(db.Developers, « Id », « Name »);
Game game = new Game();
return View(game);

}

Au moment de la création de la vue « create », en plus d’envoyer un nouvel objet Game pour remplir ces différents attributs, on va également envoyer une SelectList contenant tous les objets de la table Developers via une ViewData. Lors de la création de la liste, on indique que les valeurs sont les Id des objets et le texte qui apparaitra dans la DropDownList sera le « Name ». Pour ce qui est de la variable db, elle peut être déclarée en haut de la classe si vous le désirez.

Modifions maintenant la vue Create. Là où l’on doit remplir les informations sur le développeur :

<div class= »editor-label » >

<%: Html.LabelFor(model => model.Developers_Id) %>

</div>

<div class= »editor-field » >

<%= Html.DropDownList(« Developers_Id »)%>

</div>

La DropDownList va vous permettre d’afficher la liste des noms des développeurs. Pour cela, on appelle implicitement la ViewData « Developers_Id ». Au moment de la validation, le système va récupérer l’Id du développeur. Etant donné quel’objet Html a le même nom de l’attribut de l’objet, il sera insérer dans l’attribut developers_Id de l’objet.

Maintenant, comment gérer l’édition pour que le développeur de l’objet qu’on édite soit sélectionné par défaut dans la DropDownList ?

Dans le controller de Game, modifions la fonction GET de « edit » :

// GET: /Games/Edit/1

public ActionResult Edit()

{

Game game = new Game();
MyBaseDataContext db = new MyBaseDataContext();
ViewData[« Developers_Id »] = new SelectList(db.Developers,
« Id »,« Name »,
game.Developers_Id);
return View(game);

}

Ici, on récupère le contenu de la table Developers pour le mettre dans une SelectList de la même manière que dans le create. La différence est le nouveau paramètre « game.Developers_Id ». Cela permet d’indiquer dans le constructeur de la SelectList que la valeur sélectionnée est égale à developers_Id.

Pour la vue edit, le code est le même que pour la vue create :

<div class= »editor-label » >

<%: Html.LabelFor(model => model.Developers_Id) %>

</div>

<div class= »editor-field » >

<%= Html.DropDownList(« Developers_Id »)%>

</div>

Vous savez maintenant réaliser une liste déroulante avec des données de la base.

Maintenant, comment réaliser une DropDownList avec des données fixes non issues de la base. Prenons un exemple simple, une table Persons. Une personne a un prénom, un nom et un sexe.

Table Persons

Pour le sexe, vous n’allez pas créer une table pour la remplir des différentes possibilités ni remplir le sexe à la main via une TextBox(toujours trop de possibilité d’erreur entre les mots pouvant être employés et les fautes de frappe). On va donc créer une liste avec 3 choix possibles : « Non renseigné », « Femme », « Homme ».

Modifions d’abord la fonction GET du create dans le PersonsController.cs :

// GET: /Persons/Create

public ActionResult Create()

{

List<SelectListItem> items = new List<SelectListItem>();

items.Add(new SelectListItem
{

Text = « Non renseigné »,
Value = « Non renseigné »,
Selected = true

});
items.Add(new SelectListItem
{

Text = « Femme »,
Value = « Femme »

});
items.Add(new SelectListItem
{

Text = « Homme »,
Value = « Homme »

});
ViewData[« Sex »] = items;
Person person = new Person();
return View(person);

}

On crée une List<SelectListItem> contenant nos éléments sous la forme de SelectListItem. Le « Text » sera ce qui est affiché dans la DropDownList, « Value » sera ce qui est récupéré si la donnée est sélectionnée, « Selected » indique si c’est cette donnée sélectionnée. On envoie ensuite cette liste à la vue avec un ViewData.

La vue Create se présente comme précédemment :

<div class= »editor-label » >

<%: Html.LabelFor(model => model.Sex) %>

</div>

<div class= »editor-field » >

<%= Html.DropDownList(« Sex »)%>

</div>

Ensuite, pour l’Edit, la modification est légèrement différente :

// GET: /Persons/Edit/1

public ActionResult Edit()

{

Person person = new Person();
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem
{

Text = « Non renseigné »,
Value = « Non renseigné »,
Selected = (person.Sex == « Non renseigné »)

});
items.Add(new SelectListItem
{

Text = « Femme »,
Value = « Femme »,
Selected = (person.Sex == « Femme »)

});
items.Add(new SelectListItem
{

Text = « Homme »,
Value = « Homme »,
Selected = (person.Sex == « Homme »)

});
ViewData[« Sex »] = items;
return View(person);

}

La seule différence est au niveau du Selected. On teste si le sexe de la personne correspond. On sait que si c’est le cas, la variable sera mit à True. Il suffit enfin d’afficher dans la vue Edit de la même manière que précédemment :

<div class= »editor-label » >

<%: Html.LabelFor(model => model.Sex) %>

</div>

<div class= »editor-field » >

<%= Html.DropDownList(« Sex »)%>

</div>

Et vous avez enfin fini de créer vos DropDownList.

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn

Installation de Ruby On Rails sous Ubuntu

Ruby On Rails est un framework MVC basé sur Ruby afin de réaliser des sites web. Si l’installation n’est pas très complexe, il faut bien comprendre comment cela fonctionne.

Dans un premier temps, il faut installer les packages ruby et ruby-dev qui permettent de réaliser du développement Ruby. Vous pouvez sélectionner la version de Ruby que vous désirez installer. Sachez que le package ruby-dev est dépendant du package ruby, ils doivent donc être de la même version. Sachez également que si vous ne précisez pas la version, la version qui sera installer par défaut à l’heure où j’écris ses lignes sera la 1.8.7. Et enfin, vous pourrez trouver jusqu’à la 1.9.1 dans les dépôts par défaut de Ubuntu. Pour installer ces deux packages, rien de plus simple:

sudo apt-get install ruby ruby-dev

Pour permettre d’utiliser des protocoles sécurisés avec ruby, nous allons installer le package pour openssl. Il faut taper cette commande:

sudo apt-get install libopenssl-ruby

Après cette installation, vous devez installer un nouveau package un peu particulier: rubygems.
Rubygems est un programme qui permet d’installer des packages écris en Ruby appelés des gems. C’est aussi grâce à ce programme que l’on a la possibilité d’installer le framework rails. Pour installer Rubygems, il suffit simplement d’exécuter cette commande:

sudo apt-get install rubygems

Afin de pouvoir utiliser rubygems proprement et sans se compliquer la vie, il va falloir faire quelques modifications dans le fichier ~/.gemrc. Il est possible que ce fichier caché n’existe pas à votre dossier personnel. ça n’est pas grave, nous allons le créer et nous allons y ajouter une ligne pour préciser où doivent être installer les gems et aussi préciser à gems qu’il ne doit pas installer les docs (qui sont très longue à installer en plus d’être lourdes). Pour cela, ajouter simplement la ligne:

gem: ––bindir /usr/local/bin ––no-ri ––no-rdoc

En précisant que l’on doit installer les gems dans un dossier bin, cela vous permet d’utiliser les gems après installation sans modifier le $PATH. Vous pouvez installer les gems dans un dossier à part si vous le désirez mais sachez que vous devrez dans ce cas soit indiquer le chemin complet de l’application soit ajouter le dossier où se trouve les gems dans votre $PATH.

Enfin, nous arrivons à l’installation de rails. Rails est un package gem, d’où l’utilité de rubygems. Pour l’installer, rien de bien compliqué:

sudo gem install rails

A partir de là, vous avez installé Rails, mais cela ne signifie pas qu’il est encore utilisable: Il manque une base de données.

Pour réaliser une application en Rails, on peut utiliser différents types de bases de données sans que cela n’influence le code. La seule chose qui changera sera un fichier de configuration du nom de database.yml Il vous faudra par contre installer le gem de liaison entre la base de données et rails.

Pour cette exemple, nous allons utiliser une base de données MySQL. Pour cela, nous allons l’installer:

sudo apt-get install mysql-server

Au cours de l’installation, renseignez un mot de passe administrateur de votre choix. Lorsque l’installation est fini, il va falloir faire quelques configurations. Ces configurations ne sont pas pour Rails et sont à faire pour n’importe quel projet. En effet, actuellement, vous ne pouvez créer et utiliser les bases de données qu’avec l’utilisateur ‘root’. Cette utilisateur sert à la gestion de votre système MySQL, pas pour l’utilisation d’une base de données via un projet (en plus, vous donneriez le mot de passe root à tous vos développeurs ainsi, ça n’aurait plus rien de sécurisé). Afin d’utiliser la base de données de façon propre, nous allons donc créer un utilisateur et une base de données pour notre projet Rails.

Dans un premier temps, il faut se connecter à Mysql:

mysql -u root -p

Donnez votre mot de passe lorsqu’il vous le demande. L’option -u permet d’indiquer l’utilisateur avec lequel on désire se connecter au système. L’option -p indique que l’on va fournir un mot de passe. Cette option est inutile si l’utilisateur n’a pas de mot de passe. Ne l’oubliez pas dans le cas contraire ou votre connexion échouera.

Une fois connecté, on désire créer un nouvel utilisateur avec un mot de passe.

CREATE USER « my_user »@ »localhost » IDENTIFIED BY « password »;

Bien entendu, modifiez le nom de votre utilisateur « my_user » et son mot de passe « password » par ce que vous désirez. Pour ce qui est du localhost, tout dépend si vous désirez que la base de données soit accessible avec cette utilisateur via votre serveur directement ou depuis des ordinateurs distants. Vous pouvez indiquer le nom de l’ordinateur du réseau si vous désirez que l’utilisateur ne soit accessible que de ce poste, d’une adresse IP, d’un réseau, d’un domaine ou depuis n’importe quel ordinateur. Bon, cet article n’étant pas là pour décrire la configuration complète de MySQL et qu’il s’adresse aux débutants en Rails, je ne vais pas m’étendre dessus et si vous voulez en savoir plus, vous pouvez vous référer à la documentation de MySQL. Sachez simplement qu’en mettant « localhost », l’utilisateur ne sera accessible que si l’on s’y connecte depuis le serveur.

Ensuite, on désire donner des droits à cet utilisateur et indiquer sur quelle base. Pour cela, créons déjà la base que l’on va utiliser dans le projet Rails:

CREATE DATABASE MyDatabaseRails_Development;

Ici le nom que j’ai donné à la base est à rallonge, vous pouvez bien entendu lui donner le nom de votre choix. Sachez juste que dans un projet Rails, vous pouvez avoir 3 bases de données: Une pour la développement, une pour les tests et une pour la mise en production. Donnez leur un nom en conséquence pour ne pas vous tromper. La longueur importe peu (tant que vous ne dépassé pas la limite de MySQL), il sera nécessaire de ne l’indiquer qu’une seule fois dans le projet.

Une fois la base créée, on donne tous les droits à notre utilisateur sur cette base:

GRANT ALL ON MyDatabaseRails_Development.* TO « my_user »@ »localhost »;

Pour expliquer rapidement, cette ligne donne tous les droits (lecture, création, suppression, modification) à l’utilisateur « my_user » sur toutes les tables de la base « MyDatabaseRails_Development ». Si vous désirez modifier les droits de votre utilisateur de manière précise, je vous invite à vous rendre sur la documentation de MySQL. Une fois toutes ses modifications apportées, il manque encore le gem pour lier MySQL à Rails. On va donc l’installer. On installe d’abord le package qui permet de faire du développement avec MySQL:

sudo aptitude install libmysqlclient-dev

Puis on installe le gem permettant d’utiliser MySQL avec Rails:

sudo gem install mysql

Si vous désirez utiliser une autre base de données, il vous faudra installer le gem correspondant à la base. Référez vous au wiki de Rails pour cela.

Enfin, pour installer des pluggins en .git sur Ubuntu, il faut au préalable installer le package git-core. Git est un logiciel de version, comme cvs ou svn mais décentralisé contrairement à ces derniers. De nombreux plugins pour Ruby On Rails sont installable facilement via Git. Vous pourrez donc les installer simplement en utilisant une ligne de commande. Cela est surtout utile pour les plugins qui ne sont pas dans le dépôt officiel et que vous ne pouvez installer autrement qu’à la main en réalisant un copier-coller.

sudo apt-get install git-core

Enfin, pour une raison que j’ignore, le gem rake ne s’est pas installer lors de mon installation alors que je pensais qu’il l’était par défaut. Ce gem permet de gérer bon nombre d’actions, notamment au niveau de la base de données. Si lors du développement, vous rencontrez le même problème que moi, il vous suffit d’installer le gem rake:

sudo gem install rake

Voilà pour ce premier tutoriel pour l’installation de Ruby On Rails sur Ubuntu. J’espère que celui-ci vous aura aidé. Je ferais peut-être d’autres tutoriels pour la création de projet en Rails.

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn

La Libuntu (Ubuntu Party de Montréal), c’est fini

Et voilà, la Ubuntu Party de Montréal est finie. Ce fut un weekend constructif et bien rempli pour présenter Ubuntu et le Libre à tous les visiteurs. Fatiguant également. Au final, une centaine de personnes seront venues nous voir, des débutants et des moins débutants, venu assister aux conférences ou installer et tester Ubuntu. Le samedi a été un peu chaotique, les premières conférences ayant trop débordé nous avons dû fusionner la démonstration d’Ubuntu et l’accessibilité et annuler la présentation d’OpenOffice.org et Mozilla Firefox. Le processeur de l’ordinateur que nous utilisions pour présenter Ubuntu et son installation nous a lâcher en pleine conférence et on a dû finir sur une VM étant donné que j’utilise Fedora. Et faute d’avoir pu faire sa conférence OpenOffice.org, Ludovic aura improvisé un petit atelier crêpes qui aura eu son succès.
Le dimanche, malgré le manque de monde (maudit beau temps) qui nous a fait réorganiser les conférences, elles auront toutes eu lieu et auront toutes trouvé leur public. Et comme il fallait finir la journée en beauté, nous avons fait découvrir en plus un très bon bar aux personnes qui étaient restés jusqu’à la fin 🙂

Je voulais remercier par ailleurs toutes les personnes qui nous ont aidé à organiser cet évènement:
Aurélien bien sûr avec qui j’ai co-organisé.
Hayat et Claudette pour nous avoir permis d’utiliser les locaux de Supinfo et nous avoir conseillé.
Fabian Rodriguez pour nous avoir conseillé et aidé et nous avoir apporté des cds de la dernière version.
Tous les conférenciers: Fabian, Miguel, Ludovic, François, Joe, Thomas, Jean-François et Félix.
Les différentes personnes qui nous ont beaucoup aidé: Tristan, Laurent, Julie, Joe de nouveau ainsi que tous ceux qui était là pour le bon déroulement du weekend.

Je remercie aussi les visiteurs d’être venu et d’avoir été fort sympathiques 🙂

Et pour la prochaine, on vous informe 😉

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn

Ubuntu Global Jam à Montréal

La version d’Ubuntu Lucid Lynx (ou 10.04 pour ceux qui ont du mal avec tous ces noms bizarres) arrive très bientôt _d’ici fin avril pour être plus précis_ et il est temps pour la communauté d’accompagner sa venue. Afin de participer plus activement au développement de cette nouvelle version, la communauté Ubuntu organise les Ubuntu Global Jam du vendredi 26 mars au dimanche 28 mars à Montréal (et ailleurs dans le monde) pour découvrir la nouvelle Ubuntu en beta 1, la tester, débugger, traduire et j’en passe. Une bonne manière pour des développeurs, administrateurs et traducteurs débutants d’entrer dans un projet libre d’envergure où ils pourront profiter de l’expérience et du savoir faire des plus vieux 🙂

Si vous êtes intéressés, vous pouvez avoir plus de détails sur le wiki d’Ubuntu. Vous pouvez également tester la version d’Ubuntu 10.04 en Beta 1 en la téléchargeant sur ce site.

Venez nombreux 😉

Badge de l'Ubuntu Global Jam

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn

Visual Studio ne reconnait pas les fichiers .aspx

Bug pas très fun dans Visual Studio 2008. En créant un WebSite en asp.net, vous vous apercevez que vos fichier.aspx ne sont pas reconnus. Pas de couleurs syntaxiques, pas d’auto-complétion et impossible d’exécuter votre programme, vous avez droit à un joli message d’erreur vous informant que visual ne reconnait pas le type de fichier:

« Make sure the application for the file type (.aspx) is installed »

Même si vous manipulez toutes les options possibles et imaginables dans visual, pas moyen de régler le problème. Bref, que du bonheur.

Plutôt que de réinstaller Visual comme un gros bourrin, ce qui en plus pourrait ne rien régler, tentez plutôt ceci:

Ouvrez le prompt de Visual Studio soit en utilisant la recherche windows de votre Vista ou Seven pour trouver « Visual Studio prompt command » soit en allant simplement dans:

Menu démarrer->Tous les programmes->Microsoft Visual Studio 2008->Visual Studio tools->Visual studio command prompt

Une fois le prompt lancé, allez dans le répertoire C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE (pour les noobs du prompt, c’est la commande « cd » qui permet de se déplacer dans les dossiers en ligne de commande, et ce, que ce soit sous Windows ou sous GNU/Linux. Il suffit donc de faire simplement « cd C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE » pour arriver directement dans le dossier IDE).

et lancez les deux commandes suivantes:

D’abord: devenv.exe /setup

Puis: devenv /resetskippkgs

La première commande permet, selon le site de Microsoft à « Forcer Visual Studio à fusionner les métadonnées des ressources qui décrivent les menus, barres d’outils et groupes de commande de tous les packages VS disponibles. » Et la deuxième commande permettrait d’ « Effacer toutes les balises SkipLoading ajoutées aux packages VS par les utilisateurs souhaitant éviter les problèmes de chargement des packages VS.  »
Vous n’avez rien compris? Tant mieux, moi non plus. Par contre, toujours selon le site de Microsoft, la commande devenv permet pas mal d’action en ligne de commande dont la compilation d’un projet. Toujours intéressant de savoir ça en cas de problème.

Une fois cette petite manipulation effectuée, votre visual devrai reconnaître vos page aspx 🙂

Fiche technique de la commande devend: http://msdn.microsoft.com/fr-fr/library/xee0c8y7.aspx

PS: Si y’a des personnes prêtes à expliquer les commandes en langage courant, ça peut être intéressant.

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn