Mikael RANDY

Aller au contenu | Aller au menu | Aller à la recherche

16 juillet 2010

Gérer les connexions SSH distantes avec Mac OS X

Comme vous le savez si vous passez régulièrement sur ce site, que je viens de switcher pour utiliser MacOSX. Je suis donc dans une phase d'apprentissage, et de modifications de mes habitudes de Windowsien convaincu.

Comme je gère quelques sites personnels (dont celui ci), je dispose de quelques comptes sur des serveurs distants. Jusque là, pour gérer ces connexions, j'utilisais l'excellent Putty Connection Manager. Toutefois, depuis mon passage à Mac OS X, je n'avais pas trouvé de système équivalent me convenant.

Tout d'abord, comme Mac OS X est basé sur un système Unix, je dispose d'un terminal, et je peux donc utiliser la commande suivante pour me connecter en ssh sur un serveur distant :

ssh user@server

Toutefois, la limitation de cette pratique est qu'il faut se souvenir des mots de passe des serveurs. Or, cette approche me pose un gros soucis puisque j'ai pour (bonne) habitude d'utiliser des mots de passe compliqué pour mes comptes ssh (mélange de lettre, chiffre, majuscule, minuscule, caractères spéciaux, longueur supérieure à 50 caractères), et qu'il me faudrait donc avoir une liste de mes mots de passe quelque part.

Je me suis donc dit que c'était le moment de faire un truc qui est dans ma TODO depuis un moment : passer au système d'authentification par clé publique.

J'ai donc utilisé l'excellent tutoriel de nik0 sur l'installation de ce système. La seule difficulté a été que la commande ssh-copy-id n'est pas disponible nativement. Heureusement, la solution était simple

Couplé à la petite astuce de nik0 (fin du lien, section "Pour aller plus loin"), tout deviens assez simple. A partir de là, il me suffit de gérer mes connexions distantes, et tout roule

16 juillet 2010

Utiliser la commande ssh-copy-id depuis Mac OSX

Comment rendre la commande ssh-copy-id disponible sur Mac OS X

Lire la suite...

22 mai 2010

Histoire d'un nouveau switcher

Tenté par l'aventure Mac depuis quelques années, j'ai enfin réussi à me décider (et casser ma tirelire) pour passer le cap.

Voici le résumé de l'aventure, en quelques mots : Courant de l'année dernière, après mon déménagement, j'ai eu tout un tas de problème avec mon matériel informatique, le plus simple étant le PC qui refusait de reconnaitre l'imprimante qu'il reconnaissait pourtant très bien avant, au plus grave étant qu'étant en tour fixe, le déménagement dans un plus grand appartement, avec un bureau dédié créait une véritable séparation entre mon amie et moi. De plus, mon matériel étant plus que vieillissant, il fallait que j'agisse.

Ayant entendu parler de la sortie prochaine d'une nouvelle version de MacBook Pro, j'ai pris mon mal en patience quelques semaines (mois) pour attendre la bonne nouvelle de voir qu'Apple a enfin installé des i5 et i7 dans ses MacBook Pro. Du coup, le 06 mai, j'ai passé ma commande pour un magnifique MacBook Pro 15" i7 2,66Ghz. Comme j'ai demandé une configuration personnalisée (un disque dur qui tourne à 7200rpm au lieu de 5200rpm, un écran haute résolution mat, le changement de la RAM), je n'ai reçu la bête que jeudi dernier (20 mai) soit 15 jours après la commande.

Mais depuis, ce n'est (presque) que du bonheur. Bon, il faut s'habituer au clavier, et je ne parle pas que de la touche "pomme" qui doit être utilisé en lieu et place de la touche "Ctrl", mais également des touches F* qui sont par défaut configurée sur la fonction secondaire et qu'il faut faire "Fn + F*" pour récupérer la fonction que j'estimais comme native, ou encore du tilte (Alt +n), des accolades/crochets/... qui ne sont pas affichés sur le clavier.

Sinon, concernant le reste, c'est génial. La qualité du matériel est vraiment au rendez-vous : la coque unibody est légère, bien finie, donne une impression de solidité très rassurante. Le clavier retro-éclairé et l'écran qui s'adaptent seuls à la luminosité ambiante sont d'un confort exceptionnels. L'écran mat est génial. Concernant Mac OS X, ayant déjà eu l'occasion de m'y frotter, et de passer par la phase "je ne comprend absolument rien", puis par la phase "Ah mais si je ne cherche pas à faire comme Windows, ça marche beaucoup mieux", j''était déjà averti et un peu initié. Au final, je trouve, pour le moment, cet OS extremement ergonomique, tout me tombe sous la main en quelques secondes, sans effort intellectuel, et c'est très simple de prendre en main sa machine.

Toutefois, et bien que je ne sois pas le 1er, je passe quand même par l'étape d'appropriation de la machine, et je ferais donc certainement une série d'article sur ce qui m'a bloqué, et que je veux donc partager avec vous. L'article courant est donc le 1er de la nouvelle catégorie "Mac"

Et pour ceux qui se demanderais la signification du titre, un "switcher", dans le monde Mac est un utilisateur qui quitte Windows pour Mac ;)

1 mars 2010

Auto-complétion des commandes Symfony

J'ai découvert au fil de mes flux RSS un petit script qui permet d'obtenir l'auto-complétion du mode CLI de Symfony. Je tente, de cet article, de vous expliquer en quoi il est pratique, et comment l'installer sur votre serveur.

Lire la suite...

21 février 2010

Symfony 2 reloaded

Ce mercredi 17 février 2010, en clôture du Symfony Live 2010, Fabien Potencier a présenté Symfony 2 qui porte le nom de code de "Symfony reloaded". En voici un retour en quelques points clés.

Lire la suite...

29 janvier 2010

Créer une classe parent pour tout le modèle avec Doctrine

Pour qui a déjà utilisé Doctrine de manière un tant soit peu avancé, une problématique a dû se poser à un moment où à un autre : Comment faire pour définir un comportement pour tout mon modèle ?
Dernièrement, j'ai voulu mettre en place un système loguant toutes les suppressions, pour des besoins de tracabilité. La solution la plus simple me semblait être de pouvoir surcharger la méthode de suppression générique au niveau de mon projet.

Or, lorsque l'on regarde d'un peu plus près l'arborescence de classe généré par Doctrine, on peut se rendre compte qu'il manque d'une classe générique à tout le modèle, au niveau du projet et qui permettrait de faire ce que je cherchais à faire.

Le fonctionnement de base de Doctrine

Doctrine gère 2 types de classes, qui ont chacune une arborescence bien spécifique : les classes de tables et les classes d'entités.
Les classes de tables permettent de gérer les collections, c'est à dire les groupes d'enregistrements
Les classes d'entités permettent la gestion des unités, c'est à dire chaque enregistrement indépendamment.

Si votre projet nécessite la présence, par exemple, de 2 tables : "User" et "Right", Doctrine va générer l'arborescence de classe suivante : doctrine-diagrame_model_1.png

Comme on peut le remarquer, toutes les classes qui se trouvent dans le projet sont gérées indépendamment, et la 1ère classe générique se trouve au niveau du coeur de symfony. Dans le sfDoctrinePlugin, pour être précis.

Ajouter un niveau de classe avec Doctrine

Afin de pouvoir disposer d'un niveau de classe supplémentaire, au niveau du projet, il est possible de configurer Doctrine pour que les classes "Base" et "BaseTable" héritent d'autres tables que celles par défaut (respectivement sfDoctrineRecord et Doctrine_Table).
Pour agir sur la configuration de Doctrine, il vous faut éditer le fichier "config/ProjectConfiguration.class.php" comme suit :

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    // ...
 
    // custom builder options for doctrine
    sfConfig::set('doctrine_model_builder_options', array(
      'baseTableClassName' => 'MyDoctrineTable',
      'baseClassName' => 'MyDoctrineRecord'));
  }
}

Ainsi, avec ces configurations, on demande à Doctrine de faire en sorte que toutes les classes "Base" héritent de la classe "MyDoctrineRecord" et que les classes "BaseTable" héritent de la classe "MyDoctrineTable", comme illustré dans l'exemple suivant : doctrine-diagrame_model_2.png

Ces classes là doivent bien entendu elles même se remettre dans l'arborescence de classe.
Les squelettes de base de ces classes doivent donc être les suivants :

class MyDoctrineTable extends Doctrine_Table
{
    // ...
}
 
class MyDoctrineRecord extends sfDoctrineRecord
{
    // ...
}

A partir de là, il suffit de régénérer le modèle pour que la nouvelle arborescence soit disponible :

symfony doctrine:build-model

Et, de cette manière, il est donc possible d'agir sur toutes les opérations réalisées par le modèle depuis ces classes.

22 décembre 2009

Enregistrer une collection d'objet, avec contrôle de fonctionnement

Ce jour, un de mes développeurs a fait une découverte sympathique sur Doctrine.

Le besoin de base était le suivant : On manipule une liste d'objet (création, affectation de contenu) dans l'optique de les sauvegarder.

La syntaxe que nous tout un chacun est tenté de faire est la suivante :

try
{
  for($i = 0; $i < 10; $i++)
  {
    $item = new Item();
    $item->setValue($i);
 
    $item->save();
  }
} catch (sfException $e) {
  echo "An error occurs while data saving"
}

Or, le soucis, avec cette méthode, c'est que si une erreur intervient au cours de la sauvegarde, par exemple, pour l'item n°5, eh bien en base, nous aurons les items correctement enregistrée (entre 0 et 4), mais il manquera la fin (de 5 à 9).

La solution est simple, me direz vous, il suffit d'ouvrir une transaction avant, et de la fermer après. Eh bien oui, vous avez raison, mais j'ai trouvé encore plus élégant : les collections Doctrine (Doctrine_Collection). Si vous êtes un habitué de Doctrine, vous avez déjà croisé cette classe puisque Doctrine remplace les tableaux par des instances de celle-ci.

Toujours est-il que l'équivalent du code précédent, mais en prenant en compte la transaction, et en utilisant les Doctrine_Collection est le code suivant :

$items = new Doctrine_Collection('Item', 'id');
try
{
  for($i = 0; $i < 10; $i++)
  {
    $item = new Item();
    $item->setValue('value ok');
    if($i == 5)
      $item->setValue('error value');
 
    // Add item into Doctrine_Collection
    $items->add($item);
  }
 
  // Save collection content, in a SQL transaction
  $item->save();
 
} catch (sfException $e) {
  echo "An error occurs while data saving"
}

Je trouve ça tellement plus pratique et élégant que je suis tombé sous le charme de cette méthode.

26 novembre 2009

Reprise du site

Bonjour à tous,

Me voici de retour pour un énième démarrage.

Cette fois-ci, je compte bien être plus présent ici pour mettre sur ce site un petit peu tous ce qui me passe pas la tête.

J'entends au fond de la salle qu'on me demande combien de temps je vais tenir cette fois ci. Eh bien je vous avouerais sincèrement que je n'en sais rien ...

L'exercice de blogger est nouveau pour moi. Je suis friant de lecture de pas mal de blog, mais je ne me suis encore jamais rompu à l'exercice de maintenir mon propre site d'actualité. Du coup, je vais tout d'abord me lancer pour quelques temps, avant de voir si je me laisse entrainer ou pas dans l'aventure.

Une autre inconnue risque d'être la popularité de ce site. Tant que j'écrirais dans le vent, la motivation s'émèchera vite, et j'espère donc que ce site trouvera son public.

Et puisque nous en sommes à parler de public, il y a surement une question que vous vous êtes posés en arrivant sur ce site : "de quoi parle-t-il ?"

Jusque là, je n'était pas tout à fait tranché, mais maintenant, je sais ! Je compte utiliser ce support pour mettre toutes les astuces techniques, les tutos intéressants, les découvertes que je fait au cours de mon travail de responsable technique pour une SSII lyonnaise (Prestaconcept).

Je pense que le fil rouge de mes articles sera symfony, puisque c'est lui qui m'occupe la plupart du temps, mais nous aurons aussi Ubuntu (ma distribution Linux préférée), Apple (iPhone, Ordinateur portable), Shell et autres joyeusetés.

Il ne me reste donc plus qu'à acquérir le réflexe de prévoir un article ici pour les découvertes importantes que je peux faire au quotidien, et de prendre le temps de rédiger de beaux articles pour vous donner envie de les lires ;)

16 juin 2009

Ubuntu sur Sun VirtualBox

Aujourd'hui, lassé par les incessants aller/retour entre mon boot Windows XP et mon boot Ubuntu (mademoiselle ma chérie ne veut pas essayer Ubuntu :@ ), je me suis lancé dans une nouvelle aventure : l'installation d'Ubuntu 9.04 "Jaunty Jackalope" sur une machine virtuelle, dont le support sur mon XP est assuré par Sun VirtualBox.

Bon, il faut bien que j'avoue que j'ai été poussé vers cette solution par le fait que la mise à jour de 8.10 à 9.04 ai planté mon serveur X, visiblement un problème de compatibilité des drivers de ma carte graphique NVidia. Je n'ai pas cherché plus loin, cette excuse a juste été le déclencheur d'un truc que je voulais faire depuis longtemps.

Je doit tout de même avouer que VirtualBox est très bien fait, il est très graphique, trés ergonomique. Du coup, il est très simple de mettre en place, configurer et utiliser les machines virtuelles.

6 mars 2009

Loi "Création et Internet" : le backout du net

La quadrature du net lance une opération "Blackout sur le net français" pour dénnoncer le projet de loi "Création et Internet"

Lire la suite...

27 février 2009

De l'humour au quotidien

De retour après 8 mois de silence absolu, je profite de ce jour de fin de semaine où je me rappelle de l'existence de ce blog pour écrire un petit article qui sort un peu de l'informatique.

Donc, voilà, j'aime bien rire, et j'aime bien commencer mes journées de travail par une notre légère. J'ai, dans cet état d'esprit, trouvé 2 humoristes aux profils très différents mais dont j'aime beaucoup le style : Snut et Navo

Snut

Il s'agit d'un humoriste caricaturiste que j'aime beaucoup pour plusieurs raisons : il fait très souvent mouche là où le bât blesse, et ça, j'adore. Dans ce monde où il est plus important que plaire que d'être efficace, donc de toujours faire en sorte de montrer le bon côté de ce que l'on fait, que certains s'acharne à montrer "l'autre côté" me ravi. Il s'agit d'un artiste que j'ai vu naître (je pense être l'un de ces 1er lecteurs, même si le flux RSS aidant, je ne me rend que rarement sur le site pour poster un commentaire), que je trouve très très proche de ses lecteurs puisqu'a chaque variation de style (crayonné, couleur, ...) il demande l'avis à son lectorat et prend en compte les avis tout en se justifiant. Je pense qu'il ira très loin, puisque parti d'un petit blog, il a par la suite été invité à dessiner pour différents journaux, mais il entretiens une relation privilégiée avec PCImpact.

Navo

Navo est son pseudo, mais son oeuvre se nomme la "bande pas dessinée", un concept de bande dessinée qui ne contient que les textes. Ce concept permet donc des BD courte (3 bulles) chic et choc.

Je ne sais pas d'où il tire son inspiration, surement de sa vie privée (si c'est le cas, il va falloir arreter les photos de charmes et les films classés X), mais la grosse majorité de ses créations me font mourir de rire. Voici 2 exemples de BD qui m'ont tout particulièrement plu : J'adore cet humour, n'est-ce pas flo ?

A replacer dans le contexte politique, à savoir que Sarko, quelques jours avant avait "égaré" un reportage photo de lui aux états-unis passant de superbes vancances pendant que la grogne commencait à monter en France.

Je suis abonné aux flux RSS de ces 2 petits gars tout plein d'avenir et je peut vous assurer que même le jour où j'ai bossé jusqu'à 3h et que je n'ai dormis que 4h, je retrouve la pêche après avoir lu mes flux RSS.

3 juillet 2008

Firefox 3 : 8.002.530 téléchargement en 24h ; 10% en 3 semaines

Le 18 juin 2008, Mozilla sortait la dernière mouture de son produit phare, Firefox, 3ème du nom.

La technique de promotion qu'aura décidé de mettre en place la compagnie Mozilla est de lancer une tentative de record du monde du nombre de téléchargements en 24h. Outre gratter dans le sens du poil les millions de Mozilliens (dont je fais à moitié parti), je pense que cette annonce n'est aucunement une réelle tentative de record du monde, mais un moyen retentissant d'annoncer la sortie de FF3 et de pousser les plus fervents utilisateurs de convaincre les moins fervents de changer de version.

Aujourd'hui, le chiffre officiel est sorti : 8.002.530 téléchargements sur une durée étalée sur 24h.

Parallèlement, quelques chiffres de l'implémentation de Firefox dans le paysage des navigateurs sont sortis :

  • Parts de marché en Europe (mai 2008) : >30%
  • Parts de marché dans le monde (03 juillet 2009) : 19% contre 14.5 il y a un an
  • Parts de marché de Firefox 3 en Europe : 10%

Concernant mon analyse sur le produit, je le trouve bien évidemment beaucoup plus abouti que la précédente version (ne serait-ce que pour l'utilisation mémoire), mais je trouve qu'il n'y a rien de révolutionnaire dans les idées implémentées sachant que d'autres, dont Opéra, les utilisent déjà. Dans cette liste, je trouve :

  • la barre d'url intelligente qui, à la frappe, propose les liens dont l'url, le titre de la page ou les mots clés contiennent les mots tapés.
  • le système de téléchargement indépendant qui permet d'éteindre le navigateur et de reprendre les téléchargements, d'arrêter ou de reprendre les téléchargements, de recommencer un téléchargement terminé ou encore de rechercher dans les téléchargements.

Enfin bref, beaucoup de foin, énormément de modifications, mais rien de révolutionnaire selon moi. J’attends maintenant de voir si Microsoft va suivre le mouvement, et qu'on pourra commencer à voir des navigateurs de qualités pour tous.

3 avril 2008

Conférence AFUP du 03 avril 2008

Le 3 avril 2008 s'est tenue une conférence AFUP à Lyon, portant sur les apports de PHP6 et sur les architectures matérielles

Lire la suite...

21 mars 2008

Ouverture du site

Bonjour à tous.

Comme vous pouvez le constater, mon site viens d'ouvrir ses portes.

Il se sera passé 1 an entre l'ouverture de l'hébergement et l'achat du nom de domaine. Il aura fallu quelques 8 mois supplémentaires pour que je me décide enfin à installer un dotclear.

Comme il s'agit de ma 1ère expérience avec un dotclear, ne vous étonnez pas de voir le site évoluer régulièrement, car je compte le personnaliser. Ma 1ère intervention sera vraisemblablement la création d'un template "made by moi".

Je ne vous en dit pas plus, comme ça, vous serez obligé de revenir ;)