Ajouter de la swap à la volée

Comment ajouter 10 go de swap à la volée sans refaire ses partitions ni même redémarrer ? Et bien voilà !

sudo fallocate -l 10g /mnt/10GB.swap
sudo chmod 600 /mnt/10GB.swap
sudo mkswap /mnt/10GB.swap
sudo swapon /mnt/10GB.swap

Évidemment ce changement n’est pas permanent et il vous faut de la place sur votre disque dur afin de pouvoir héberger le 10 go en question. Comment le rendre permanent ?

Ajouter cette ligne à la toute fin de votre fichier /etc/fstab et redémarrez.

/mnt/10GB.swap  none  swap  sw  0 0

Merci AskUbuntu !

P.S. Peut-être que ça marche sur OS X aussi qui sait.

Rotation matricielle en PHP

Voici une classe qui permet la rotation matricielle simple en PHP.

class Matrix {
    function rotateClockwise90( $matrix ) {
        $newMatrix = array();
 
        foreach( $matrix as $line ) {
            foreach( $line as $k => $v ) {
                if( !isset( $newMatrix[ $k ] ) ) {
                    $newMatrix[ $k ] = array();
                }
                array_unshift( $newMatrix[ $k ], $v );
            }
 
        }
        return $newMatrix;
    }
 
    function rotateClockwise180( $matrix ) {
        return $this->rotateClockwise90( $this->rotateClockwise90( $matrix ) );
    }
 
    function rotateClockwise270( $matrix ) {
        return $this->rotateClockwise180( $this->rotateClockwise90( $matrix ) );
    }
}

Un exemple d’utilisation:

function displayMatrix( $matrix ) {
    foreach( $matrix as $line ) {
        echo implode( ',', $line ) . PHP_EOL;
    }
}
 
$matrice = array(
    array( 'A','B','C' ),
    array( 'D','E','F' ),
    array( 'G','H','I' ),
    array( 'J','K','L' )
);
 
displayMatrix( $matrice );
echo PHP_EOL;
 
$matrix = new Matrix();
$matrice = $matrix->rotateClockwise90( $matrice );
 
displayMatrix( $matrice );

Résultat avant la rotation:

A,B,C
D,E,F
G,H,I
J,K,L

Résultat après la rotation:

J,G,D,A
K,H,E,B
L,I,F,C

Maintenant, vous me direz: « Qu’est-ce que je peux bien faire avec ça ? »… à suivre.

Premier Linux-Meetup à Lévis

Voici venu le temps (des cathédrales) du Premier Linux-Meetup Lévis tel que je le mentionnais dans un précédent article. Vous êtes donc tous cordialement invité: entrepreneur, gestionnaire, professeur, administrateur de systèmes, ingénieur, programmeur, retraité, étudiant, designer graphique, maman au foyer. Nous voulons vous entendre parler de votre expérience. Chacun d’entre vous a intérêt à connaître, utiliser et partager le libre afin d’être compétitif et performant dans chacun de vos champs d’expertises respectifs.

Venez donc discutez avez nous de « vos affaires » ! Les rencontres sont gratuites et ouvertes à tous !
Au plaisir de vous rencontrer demain le 12 juin 2012 à compter de 18h30 à La Microbrasserie Le Corsaire (qui fête d’ailleurs son 4e anniversaire aujourd’hui même!)

Pour plus de détails et signaler votre présence visiter la page Facebook de l’événement où du groupe.

P.S. N’oubliez pas vos cartes d’affaires !

PDO ou ADOdb5 en 2012 ?

Cette article s’inspire de l’article de Tony Landis. Dans un nouveau projet PHP est-ce que vous privilégiez l’utilisation de PDO ou d’ADOdb5 ? Personnellement, je croyais qu’ADOdb était mort et enterré. Mais en me rendant sur le site du projet, j’ai pu constater que ce n’était pas du tout le cas et qu’il y avait une version récente du projet. Il est intéressant de constater que la plus récente version à été réécrite en PHP 5 et supporte un plus grand nombre de pilote que PDO. Évidemment, si on utilise une seule source de données, il n’y a aucun bénéfice à en tirer.

Mon expérience

Bon, personnellement, j’avais développé une mini couche d’abstraction par dessus les fonctions natives de MySQL en prévision de pouvoir l’étendre facilement à d’autres pilotes un jour, mais après 8 ans de développement, je peux dire que c’était inutile. L’ajout de PDO à mon cadre de développement (framework) m’apporterait plusieurs avantages. Premièrement, cela me permettrait de me débarrasser de la maintenance de cette partie de code et des lacunes associées. Deuxièmement, les performances de PDO semblent surpasser celles des fonctions natives de MySQL. Enfin, cela me permettrait de pouvoir utiliser enfin les transactions ainsi que les requêtes SQL préparées, fonctionnalités qui n’étaient pas présentes dans mon cadre de développement. C’est le cas classique quoi ! Qui n’a pas réinventé la roue ? Il me resterait donc par la suite à me débarrasser de mon cadre de développement personnel. 🙂

Application existante

Je dois continuer à faire évoluer une application de 8 ans d’âge dont l’auteur originel avait fait le choix d’utiliser ADOdb. À l’époque PDO n’existait pas. Serait-il plus intéressant de remplacer le vieux ADOdb par PDO ou bien par ADOdb5 ? En terme de performance, je pense que PDO doit être supérieur puisque natif au langage alors qu’ADOdb5 est une surcouche écrite en PHP. Par contre, il ne faut pas négliger le temps requis pour adapter le code à PDO. Pour cette raison, je crois qu’il serait plus rapide et aisé de migrer vers ADOdb5 dans une première étape.

Données utilisées

Afin de s’amuser un peu, j’ai profilé PDO versus ADOdb5 juste pour avoir une idée de la différence de performance. J’ai utilisé les données de la base de données d’adresses IP relatives aux pays. Notre version en place n’était pas la plus récente à ce jour et elle contenait 151532 enregistrements.

Code utilisé

Code utilisé pour profiler PDO.

$db = new PDO( 'mysql:dbname=iptocountry;host=127.0.0.1', 'root', '****' );
$start = microtime( true );
$rs = $db->query( 'select * from iptocountry' )->fetchAll(PDO::FETCH_ASSOC);
foreach($rs as $r) {}
$end = microtime( true );
echo 'RESULTS PDO: ' . ( $end - $start ) . PHP_EOL;

Code utilisé pour profiler ADOdb5.

require_once( 'adodb5/adodb.inc.php' );
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = NewADOConnection( 'mysql://root:****@127.0.0.1/iptocountry' );
$start = microtime( true );
$rs = $db->Execute( 'select * from iptocountry' );
foreach($rs as $r) {}
$end = microtime( true );
echo 'RESULTS ADO: ' . ( $end - $start ) . PHP_EOL;

Résultats du profilage

  PDO ADOdb5
1 0.55663919448853 1.273540019989
2 0.56437802314758 1.2905249595642
3 0.56191086769104 1.2566349506378
4 0.56436491012573 1.2649390697479
5 0.55612802505493 1.2778210639954
6 0.54797792434692 1.2488679885864
7 0.55668902397156 1.2327320575714
8 0.5615439414978 1.2574291229248
9 0.55743288993835 1.2485709190369
10 0.56768417358398 1.2800159454346
MOYENNE 0.5594748974 1.2631076097

On peu donc affirmer que PDO est environ 2.2 fois plus rapide que ADOdb5. Par contre, pour les besoins actuels, je dois considérer le temps requis pour faire les changements nécessaires à l’application pour supporter PDO versus ADOdb5. J’irai donc tout de même avec ADOdb5.

Qu’elle est votre expérience avec ces deux outils ? Avez-vous trouvé mieux ?

GIMP 2.8 après 3 ans de développement

Après 3 années de développement, GIMP 2.8 arrive dans un dépôt près de chez vous ! WOW ! C’est une sortie majeure avec des fonctionnalités qui feront sourire les plus récalcitrants pro-photoshop-man. Vous savez les: « Ouin, mais dans photoshop… bla bla bla » ? GIMP n’a rien à envier à Adobe Photoshop. Les concepts sont différents, le modèle de développement aussi ! C’est un logiciel libre avant tout ce qui lui confère les quatre libertés intrinsèques à tout logiciel libre suivant:

  1. Liberté d’exécuter le programme, pour tous les usages;
  2. Liberté d’étudier le fonctionnement du programme et de l’adapter à ses besoins;
  3. Liberté de redistribuer des copies du programme (ce qui implique la possibilité aussi bien de donner que de vendre des copies);
  4. Liberté d’améliorer le programme et de distribuer ces améliorations au public, pour en faire profiter toute la communauté.

Vous ne savez pas ce que tout ça veut dire pour vrai ? Ne ratez pas la chance de venir vous en informer lors de la première édition du Linux-Meetup Lévis.

Un logiciel libre n’est pas forcément gratuit, mais GIMP l’est ! 3 années de développement redonnées à la communauté ! Vous imaginez le travail colossal ? C’est quand même impressionnant ce qu’on peut faire en travaillant ensemble et en se partageant le fruit de son labeur. Mon article était sensé porter sur les nouvelles fonctionnalités mais je vous en remet donc aux lien incluent dans cet articles. Ils en traitent bien mieux que ce que j’aurais pu en faire !

Est-ce que vous utilisez ou prévoyez utiliser GIMP 2.8 ?

Autres sources:
http://fr.wikipedia.org/wiki/Logiciel_libre
http://www.pcworld.in/news/six-good-reasons-try-gimp-28-70592012
http://libregraphicsworld.org/blog/entry/what-hasnt-happened-to-gimp-2.8

Ubuntu 12.04 LTS « Precise Pangolin » est sortie !

Et bien voilà! La sortie que j’attendais avec impatience ! J’ai hâte d’essayer la nouvelle fonctionnalité « Head Up Display », HUD pour les intimes tel que j’en parlais dans mon article HUD le menu intelligent d’ubuntu 12.04. Est-ce que vous êtes comme moi et allez installer la dernière mouture d’Ubuntu maintenant ou bien vous allez attendre ?

WordPress 3.3.2 est là !

L’équipe de développement WordPress annonce la sortie de WordPress 3.3.2. Cette version une mise à jour de sécurité. Alors, allez hop ! Mettez vos sites à jour !

Cette mise à jour corrige principalement:

  • Correctifs de sécurité pour le téléversement des médias (Plupload, SWFUpload)
  • Correctifs de sécurité pour SWFObject utilisé pour l’intégration de contenu flash
  • Correctifs de sécurité pour des failles de type XSS (Cross Site Scripting)

VIM: Modifier un fichier directement dans une archive ZIP

Dans la série « Est-ce que votre éditeur de texte (code) peut en faire autant ? » voici une fonctionnalité vraiment cool de VIM. Vous pouvez ouvrir automatiquement une archive .ZIP, naviguer dans la liste des fichiers qu’elle contient et les modifier. Vous n’avez donc plus à extraire vos fichiers de l’archive pour effectuer des modifications. Que de temps sauver! Est-ce que votre éditeur peut en faire autant ?

Merci à Steve Hogue pour le signalement de la fonctionnalité.

HUD le menu intelligent d’ubuntu 12.04

Pangolin
Attribution: Piekfrosch de de.wikipedia.org

Bientôt arrivera Ubuntu 12.04 LTS « Precise Pangolin« . Ou bien, si vous préférez, Ubuntu 12.04 « Pangolin Précis » version à support longue durée (LTS). Je n’ai pas fait le tour de toutes les nouveautés mais une a captée mon attention plus que les autres. Il s’agit d’un nouveau menu intelligent appelé HUD pour Head-Up Display. Ce menu qui s’intègre dans la plupart des applications et au bureau de travail permet de chercher et d’exécuter des fonctions de menu. Par exemple, pour imprimer un document dans LibreOffice, vous taperiez le raccourci clavier pour faire afficher la zone de recherche HUD et vous taperiez les premières lettres du mot « imprimer ». HUD vous suggèrerait des choix d’actions en rapport avec le mot clé saisi. Voyez ce que ça donne:

Selon moi, avec un peux d’entrainement, cette fonctionnalité peux sauver pas mal de temps et ceci à tous les jours. J’ai donc vraiment hâte de la tester sur mon propre portable. La reconnaissance vocale, fera son apparition au coeur de ce menu intelligent dans les prochaines années à venir. C’est indéniablement une façon ingénieuse de piloter et de maîtriser enfin son logiciel préféré. Fini les millions d’icones inutiles qui ne nous disent rien.

En tant que fan de VIM… j’ai bien aimé cette citation tirée de l’article de Mark: “every GUI app now feels as powerful as VIM” ou « Toutes les applications GUI se sentent maintenant aussi puissante que VIM ». Un peu de VIM dans nos applications de tous les jours ne nous fera pas de tord.

Je vous invites donc à visiter les liens en références pour de plus amples informations sur cette nouvelle fonctionnalité. Pourquoi ne pas en profiter pour me donner vos commentaires au passage. Il y a un seul hic à mon avis et c’est que cette fonctionnalité est disponible seulement avec Unity. À quand pour Gnome ?

Sources:
http://www.markshuttleworth.com/archives/939
http://www.omgubuntu.co.uk/2012/01/hud-new-unity-feature/
http://www.unixmen.com/201201-hud-the-new-smart-menu-for-ubuntu-mark-shuttleworth-announcement/
http://www.webupd8.org/2012/01/hud-ubuntus-new-smart-menus-announced.html