Doctrine pour les quiches-Chapitre 1 : premiere approche et creation de tables
(parce pour les nuls c'était déjà pris)
Qu'est ce que c'est?
Vous avez certainement entendu parler de Doctrine, surtout si vous êtes utilisateur de Symfony. Vous vous doutez peut-être aussi que ça a un vague rapport avec les bases de données.
Et bien oui : il s'agit d'un ORM, pour Object Relational Mapping (mapping objet-relationnel en presque bon françois). Ce qui signifie que cette librairie fait le lien (mapping) entre des objets (un utilisateur, un service, une voiture, whatever, …) et une base de données relationnelles.
En clair cela signifie qu'en utilisant Doctrine pour votre application en php, vous n'aurez affaire qu'à des objets, et non à des requêtes SQL.
Un exemple en dit plus long qu'un long discours :
// on crée notre objet (ici un article)
$monArticle = new Article();
// on donne des valeurs à ses attributs
$monArticle->titre = 'Une bonne nouvelle';
$monArticle->texte = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
// on le sauve dans la base de données
$monArticle->save();
?>
Ce court script à lui tout seul va (à l'aide de Doctrine évidemment) enregistrer une nouvelle entrée dans la table article.
Il s'agit de se que l'on appelle une couche d'abstraction, vous n'avez plus à vous préoccuper (à moins que vous ne le vouliez) de mettre les mains dans le cambouis (du sql, quelque soit la base)
n.b. : J'ai pris le parti de montrer la méthode d'utilisation la plus simple de Doctrine (i.e. avec des fichiers de configuration yaml, une méthode 'full-php' existe présentée ici )
Installer Doctrine
Téléchargez la dernière version stable (à l'heure où j'écris ces lignes c'est la 1.2.1) sur http://www.doctrine-project.org/. Ne prenez pas la sandbox, enfin, remarque si vous voulez mais moi pour l'exemple, je prendrais la version standard, ne venez pas vous plaindre si vous êtes perdu.
- créez un répertoire 'tuto_doctrine' sur votre répertoire de projets php habituel
- Dézippez le fichier tgz (avec http://www.7-zip.org/ par exemple sur vous êtes sous Windows)
- copiez dans 'tuto_doctrine' le dossier 'lib' contenu dans 'Doctrine'
- dans ce même répertoire 'tuto_doctrine', créez un fichier index.php ansi qu'un fichier schema.yml
On va maintenant passer à la structure logique des données, en yaml, s'il vous plaît.
Qu'est que le yaml?
YAML est un langage de sérialisation de données, il permet de la stocker sous une forme lisible pour un humain.
Un exemple :
columns:
id_post:
type: integer(4)
unsigned: true
primary: true
autoincrement: true
title:
type: string(255)
content:
type: clob
Pour le lire, il faut utiliser les tabulations. Si on devait le traduire comme un tableau php, ça donnerait quelque chose de ce goût là :
Ce qui, même en indentant, reste tout de même moins lisible.
Tips :
- l'alignement est primordial
- la tabulation conseillée est de 2 espaces (pas de tabulations)
- un espace après les ':', les ',' et les '{'
- un espace avant les '}'
type: integer(4)
unsigned: true
primary: true
autoincrement: true
et
Pour plus de renseignements : http://fr.wikipedia.org/wiki/Yaml
Un exemple complet et simple:
Cet exemple ne comporte que 2 tables liées par une relation 1-n (ah oui, ce tuto suppose d'avoir un minimum de connaissances en bases de données relationnelles http://fr.wikipedia.org/wiki/Base_de_données_relationnelle)
Des messages qui auront chacun un utilisateur comme auteur.
Ce qui nous donne le fichier suivant.
columns:
id_user:
type: integer(4)
unsigned: true
primary: true
autoincrement: true
username:
type: string(255)
password:
type: string(255)
mail:
type: string(255)
Message:
columns:
id_post:
type: integer(4)
unsigned: true
primary: true
autoincrement: true
title:
type: string(255)
content:
type: clob
user_id:
type: integer(4)
unsigned: true
notnull: true
relations:
User:
local: user_id
foreign: id_user
type: one
Rien de bien sorcier donc à part les relations (et encore)
'realtions' nous indique qu'il s'agit d'une relation 1-n (type:one d'un côté et type:many de l'autre)
n.b. : renseigner la relation uniquement d'un côté devrait normalement suffire mais j'aime m'embêter pour rien
Generer les modeles et les tables
Il faut au préalable se créer une base de données 'tuto_doctrine' sur notre serveur sql préféré (assurez vous de possèder les droits pour drop, create, insert)
Remplir le fichier schema.yml avec le contenu de la Config1 et le fichier index.php avec le Script 1
Script 1
require_once 'lib/Doctrine.php';
spl_autoload_register(array('Doctrine_Core', 'autoload'));
// DSN : Data Source Name : définit la source des données, ici la base.
// Format type_base://user:password@adress/database
$dsn = 'mysql://root:myroot@localhost/tuto_doctrine';
// on crée une connexion avec le DSN
$connexion = Doctrine_Manager::connection($dsn);
// on supprime la base existante
Doctrine_Core::dropDatabases();
// puis on la recrée
Doctrine_Core::createDatabases();
// on génére les fichiers contenant les modèles sous forme de classe dans le fichier 'models'
Doctrine_Core::generateModelsFromYaml('schema.yml', 'models');
// on crée les tables
Doctrine_Core::createTablesFromModels('models');
?>
Si tout va bien (et si vous n'avez pas fait n'importe quoi) , en allant sur votre page index.php, vos tables seront créées. Elle est pas belle la vie?
Dans le prochain épisode : insérer et manipuler des données.
Pour en savoir plus si vous êtes du genre impatient :
http://www.siteduzero.com/tutoriel-3-197048-utilisation-d-un-orm-les-bases-de-doctrine.html
(merci de signaler tout problème ou toute proposition de modification dans les commentaires)
Étonnamment, le script fonctionne très bien à la base du serveur (var/www) mais pas du tout avec un virtualhost (l'autoload semble ne pas marcher). Si quelqu'un peut éclairer ma lanterne à ce sujet...
Article sous licence Creative commons CC-by-nc-sa http://fr.creativecommons.org/
Geany, un IDE super leger et multiplateformes

C'est en cherchant un IDE pour Python il y quelques mois que je suis tombé sur cette petite pépite.
Geany est libre, basé sur GTK2 (Gimp ToolKit, un bibliothèque graphique conçue au départ pour GIMP) et donc multiplateformes.
Ses avantages ?
- Il gère la coloration pour de très nombreux langages, anciens comme Pascal ou Fortran mais aussi évidemment des plus récents comme Ruby, Python, C# ou même YAML (utilisé pour Symfony)
- Il est rapide : il met a vue d'œil environ 4 fois moins de temps à s'ouvrir que Gedit, le bloc note fourni avec Ubuntu
- C'est bien un IDE : il possèdes de fonctions comme une console, l'appel aux compilateurs, gestion de projet, explorateur de dossiers, etc
Il offre une solution plus légère qu'Eclipse, mais plus complète qu'un basique bloc-notes.
Idéal pour apprendre un langage, modifier des fichiers rapidement,...
La meilleure façon de vous faire une idée, c'est de l'essayer : téléchargement

Des Basterds qui tapent dur

Je ne vais pas vous refaire le pitch du film, vous le connaissez..
On a ici a faire a une bonne cuvée QT 2009 :
Des personnages haut en couleur, des dialogues croustillants, du scandaleux et même du jouissif. Je vous le conseille si vous aimez l'humour noir et la violence (pas si) gratuite.
Pour comparer, je je trouve au dessus de Boulevard de la mort et de Kill Bill, mais ça n'engage que moi...
Mais juste trois choses essentielles à rappeler :
- Ce n'est PAS un film de guerre. Une comédie noire, un film d'action, oui mais pourquoi le qualifier de film de guerre? (comme on peut le voir sur Wikipédia ou allocine) Parce qu'il se déroule pendant la guerre? Parce qu'on y voit des uniformes? Il n'y a pas une seule vraie bataille dans le film, des fusillades, des embuscades, des massacres oui mais ce qui se rapproche le plus d'une bataille se trouve dans le film qui est dans le film («La fierté de la nation») et est finalement assez ridicule (bien que tourné par Eli Roth, réalisateur de Hostel et jouant aussi dans le film).
- Ce film n'a pas l'ambition de dépeindre une quelconque réalité. La deuxième guerre mondiale sert ici juste de décor pour un western-revanche à la Tarantino, prétexte aux dialogues quasi-surréalistes et la violence.
- Allez le voir en VO, non parce que franchement la VF pue des pieds, vous y perdrez au moins de 30 à 50% de l'intérêt du film, sa force principale se trouvant dans les personnages et les situations (Aldo Raine-B. Pitt- essayant de passer incognito à la première du film vaut son pesant de cacahuètes). De plus, même dans la VO, on y parle autant Français et Allemand qu'Anglais. Donc pas d'hésitation à avoir.
Juste une chose qui trotte dans la tête : pourquoi cette fixation de Tarantino pour les histoires de vengeances de filles blondes?
À la decouverte de WarHammer, un jeu de batailles fantastiques
C'est avec mon armée de Nains, gracieusement prêtée par le chaotique seigneur Alex que j'abordais ce weekend consacré aux "batailles fantastiques".
Préparation
Ma première tâche fut d'écrire ma feuille d'armée.(définition en fin d'article) Pour 1500 points j'étais à la tête de :
-
2 x 10 Arquebusiers
-
20 Marteliers
-
20 Guerriers
-
2 Thanes (Héros)
-
1 Canon
-
1 Canon orgue
Première bataille : Nains contre Elfes Noirs
Malgré une défense acharnée, les Elfes Noirs du Sieur Doudou menaient à la fin de la partie, mes nabots n'ayant pu venir à bout que de quelques unités.
Fair-play, mon adversaire m'accorda le match nul, car nous avions oublié de prendre en compte une relance de dés autorisée par une de mes runes magiques.
Ces gros vicelards d'Elfes Noirs
Deuxième bataille : Nains contre Guerriers du Chaos
Ce fut plus une tentative de survie qu'une bataille à proprement parler : mon adversaire étant vicieux, bien préparé et surtout très au fait des faiblesses des nains, étant la personne m'ayant prêté son armée. Je n'ai pu pulvériser qu'une unité de cavalerie légère avant de devoir m'avouer vaincu. C'est suite à cette défaite que je décide, sous les conseils avisés d'Alex, de modifier ma feuille d'armée.
-
2 x 10 Arquebusiers
-
20 Marteliers
-
20 Brise-Fer
-
2 Thanes (Héros)
-
11 Mineurs
-
1 Canon orgue
Mon arquebusier en bien mauvaise posture
Troisième bataille : Nains contre l'Empire
C'est avec cette nouvelle armée, plus équilibrée et efficace, que j'affronte les troupes de l'Empire, dirigées par le Sieur Benjamin. Le résultat fut satisfaisant malgré un déploiement en demi-teinte. Ce fut ma meilleure bataille de la journée. À la fin de la partie, au bout du sixième et dernier tour, nous avons décidé de ne pas compter les points, même si pour adversaire, la victoire me revenait. Mes nains, notamment les arquebusiers et le meurtrier canon-orgue ont tenu bon.
Des cavaliers de l'Empire
Ce weekend de découverte de Warhammer fut très instructif, j'ai pu découvrir plus en détail les mécanismes de jeu qui rendent la bataille vivante et obligent les joueur à faire preuve de stratégie et d'anticipation. Les Nains sont un bon choix pour un débutant : plutôt défensifs, durs à démoraliser, pas vraiment de magie à gérer, très résistants aux sorts … Leur seul grand défaut est un manque de mobilité empêchant toute manœuvre-surprise.
J'ai également pu apprécier le travail de «hobby» : peinture et confection d'unités, un travail de précision qui paye (voir photos).
Il me reste maintenant à savoir si je me lance dans la construction d'une armée et si oui laquelle?
Jouer un morceau avec Spotify sous Linux à partir d'une Url
On a (depuis peu), accès à Spotify sous Linux via Wine, mais ne pas pouvoir utiliser les url de playlist ou de morceau donnait un peu l'impression de ne pas pouvoir entièrement profiter de bel outil.
À partir de la solution de Korben (qui n'a pas vraiment marché pour moi), j'ai bricolé ma solution : un raccourci personnalisable contenant la commande :
wine /home/matt/.wine/drive_c/Program\ Files/Spotify/spotify.exe /uri adresse
Il suffit de remplacer l'adresse par celle souhaitée et it's done.