CentOS 6 – Installer APC

Linux Aucun commentaire »

centosApres avoir installé et configuré correctement votre environnement LAMP sous CentOS 6 vous souhaitez installer APC.

Ce dont vous avez besoin avant de commencer :
- PEAR,
- les interfaces de développement de PHP, Apache & PCRE,
- un compilateur C & l’outil Make.

yum install php-pear php-devel httpd-devel pcre-devel gcc make

Ensuite, on lance la compilation de l’extension APC.

pecl install apc

Voici les questions qui vous seront posées, personnellement j’ai utilisé les valeurs par défaut.

Enable internal debugging in APC [no] : 
Enable per request file info about files used from the APC cache [no] : 
Enable spin locks (EXPERIMENTAL) [no] : 
Enable memory protection (EXPERIMENTAL) [no] : 
Enable pthread mutexes (default) [yes] : 
Enable pthread read/write locks (EXPERIMENTAL) [no] :

On active l’extension PHP

echo "extension=apc.so" > /etc/php.d/apc.ini

Et on redémarre Apache.

service httpd restart

Vous pouvez vérifier que vous avez correctement installé APC via phpinfo().

Aussi, n’hésiter pas à utiliser le script PHP d’administration de APC.
Ici, nous le copions dans notre répertoire HTTP.

cp /usr/share/pear/apc.php /var/www/apc.php
Mots-clefs :, , , , , ,
 

Doctrine 2 & i18n

Doctrine, Zend 1 Commentaire »

Doctrine 2 est dépourvu – en natif – de système de traduction.
Grâce au système d’extension, des contributeurs dont certains membres de l’équipe de développement Doctrine ont développés Gedmo, un pack d’extension pour Doctrine.

Cette extension inclue :

  • Tree
  • Translatable
  • Sluggable
  • Timestampable
  • Loggable
  • Sortable

Nous nous intéresserons à Translatable qui nous permettra de traduire nos données.

Travaillant avec le Framework Zend, les exemples seront orientés pour cette architecture, il est à noter que cela n’est pas un pré-requit et que cela fonctionnera avec ou sans Zend Framework.

Fonctionnement

Le module i18n de Gedmo fonctionne grâce à l’utilisation d’un table annexe contenant la traduction de certaines propriétés de vos Entités.
La table de traduction contient donc le nom du champs traduite, la langue, la valeur, le type d’objet ainsi qu’une reference vers cet objet.

Par défaut, l’extension aura besoin de la table : ext_translations
Les champs suivant seront ainsi necessaire :

  • id
  • content
  • field
  • locale
  • foreign_key
  • object_class

Voici un jeu de donnée qui vous permettra de mieux comprendre l’utilisation de ce type de structure :

  • content : Un día me voy a comprar el mundo
  • field : title
  • locale : es_es
  • foreign_key : 3
  • object_class : \Entity\Article
  • content : Un jour j’achèterai le monde
  • field : title
  • locale : fr_fr
  • foreign_key : 3
  • object_class : \Entity\Article
  • content : Le monde semble être à l’agonie, que pouvons nous faire pour le sauver.
  • field : description
  • locale : fr_fr
  • foreign_key : 3
  • object_class : \Entity\Article

A noter, que les données relatives à la langue par défaut de votre application sont stockés au sein de la table gerant directement votre entité.
Par défaut, nous utilisons la langue « en_US« , ce qui signifie que la table ext_translations ne contiendra pas de traduction pour « en_US ».
Dans mon exemple, ces données seront stockés dans la table « articles » de l’entité \Entity\Article

Ainsi, l’extension stockera l’ensemble des traductions de votre application au sein d’une même table.
Attention, le champs « forien_key » ne correspond pas à une clé étrangère pour votre base de donnée relationnelle.
Une des possibilités de l’extension consiste à pouvoir définir une table spécifique à la traduction d’une Entités, ainsi vous pourrez définir une vrai clé étrangère au sein de votre RDBMS.

Exploitation

Au niveau de l’exploitation des données,
Vous définirez la langue utilisée au sein de votre application lors de l’execution, cela correspondra normalement à la langue de l’utilisateur.
Il ne restera plus qu’a utiliser votre application comme vous en avez l’habitude.

Nous partons du principe que votre environnement Doctrine est correctement configuré et fonctionnel.

Voici la configuration minimum a définir :

$classLoader = new \Doctrine\Common\ClassLoader( 'Gedmo', APPLICATION_PATH . '/../library/');
$classLoader->register();
 
$config 	= new \Doctrine\ORM\Configuration();
 
$driverChain		= new \Doctrine\ORM\Mapping\Driver\DriverChain();
$entityDriver 		= new \Doctrine\ORM\Mapping\Driver\XmlDriver ();
 
$translatableDriver = $config->newDefaultAnnotationDriver( APPLICATION_PATH . '/../library/DoctrineExtensions/Gedmo/Translatable/Entity');
 
$driverChain->addDriver ($entityDriver,		'Entity\Article');
$driverChain->addDriver ($translatableDriver, 	'Gedmo\Translatable');
 
$config->setMetadataDriverImpl($driverChain);
 
$eventManager		= new \Doctrine\Common\EventManager();
$translatableListener 	= new \Gedmo\Translatable\TranslationListener();
 
$translatableListener->setTranslationFallback( true );
$eventManager->addEventSubscriber($translatableListener);
 
$entityManager = \Doctrine\ORM\EntityManager::create($conn, $config, $eventManager);

Ensuite, il faut configurer vos entités.
J’utilise le XML Mapping, vous trouverez facilement l’équivalence pour YAML / Annotation.

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
      xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping">
	<entity name="Entity\Article" table="articles">
		<id name="idArticle" type="integer" column="id_article">
			<generator strategy="AUTO" />
		</id>
		<field name="title" type="string">
			<gedmo:translatable/>
		</field>
		<field name="description" type="string">
			<gedmo:translatable/>
		</field>
	</entity>
</doctrine-mapping>

Nous avons simplement ajouté le noeud XML gedmo:translatable à notre champs afin de spécifier que celui-ci peut-être traduit.
A noter qu’il faut inclure l’espace de nom xmlns:gedmo.

Voici un exemple d’utilisation avec Doctrine

//En utilisant la langue par défaut qui est l'anglais,
$article 	= $entityManager->find('\Entity\Article', 3);
$article->getTitle (); 
//One day I'll buy the world
 
//En spécifiant la langue espagnole,
$translatableListener->setTranslatableLocale("es_es");
$article 	= $entityManager->find('\Entity\Article', 3);
$article->getTitle (); 
//Un día me voy a comprar el mundo

Entity de traduction

Nous avons vu précédemment que les traductions sont par défaut stockées dans la table ext_translations.
Voyons comment utiliser une table dédiée à la traduction d’une entité. Cela permettra en plus d’avoir une structure de base de donnée plus propre, et d’avoir des clés étrangère au sein de votre RDBMS.

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
      xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping">
	<entity name="Entity\Article" table="articles">
		<gedmo:translation entity="Entity\ArticleTranslation" />
		..
	</entity>
</doctrine-mapping>

Créons la class ArticleTranslation qui n’a rien de bien extraordinaire, sauf qu’elle doit étendre AbstractTranslation qui va définir les differentes propriétés de votre table de traduction.

namespace Entity
 
use Gedmo\Translatable\Entity\AbstractTranslation;
use Doctrine\ORM\Mapping as ORM;
 
class ArticleTranslation extends AbstractTranslation
{
 
}

A cela, ajoutons le fichier de mapping.

<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
      xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping">
	<entity name="Entity\ArticleTranslation" table="articles_translation" />
</doctrine-mapping>

Il ne vous reste plus qu’a créer la table article_translation avec les champs énuméré en début d’article.

Conclusion

Comparer à Doctrine 1, la mise en place de l’internationalisation pour votre application peut sembler plus difficile. Par contre, l’exploitation de cette implementation est tout simplement user-friendly.

Mots-clefs :, , , , , , , , , ,
 

Livre – Actionscript Developer’s Guide to Robotlegs

Livres 1 Commentaire »

Actionscript Developer’s Guide to Robotlegs est le premier ouvrage sur le Framework AS3 Robotlegs,

Pour ceux qui ne connaisse pas Robolegs, voici la description officielle :

robotlegs bookRobotlegs is a pure AS3 micro-architecture (framework) with a light footprint and limited scope.
Simply put, Robotlegs is there to help you wire your objects together. It provides the glue that your application needs to easily function in a decoupled way.
Through the use of automated metadata based dependency injection Robotlegs removes boilerplate code in an application.
By promoting loose coupling and avoiding the use of Singletons and statics in the framework Robotlegs can help you write code that is highly testable.

Description

Le livre a été écrit par deux développeurs de Robotlegs : Stray & Joel Hooks.
Les 138 pages sont simple à lire. L’anglais est purement technique et ne sera pas une barriere à votre compréhension. Les exemples sont nombreux ainsi que les schemas qui aident énormément à la compréhension des liaisons entre les différents composants.

Les chapitres

  • Robotlegs is a lightweight framework for ActionScript
  • The Robotlegs dream
  • Anatomy of a Robotlegs application
  • Automated Dependency Injection
  • The Robotlegs context in action
  • The CommandMap in action
  • Models and Services – how are they different?
  • Connecting views with Mediators
  • Working with Robotlegs: Rich Examples
  • Testing your Robotlegs application
  • Power-ups
  • Appendix A: Troubleshooting tips
  • Appendix B: Swiftsuspenders – the power behind the Robotlegs injector

Conclusion

Si vous avez déjà une expertise sur Robotlegs, je vous conseils malgré cela cette lecture. En effet, les 138 pages se lisent tres rapidement. De plus, la confrontation avec d’autres méthodes de travail est toujours constructive.

Pour une description plus détaillée du livre, aller voir le blog de Stray.
Vous povuez l’acheter directement sur Amazon.

Mots-clefs :, , , , , , , ,
 

Livre – IPv6 Essentials

Livres 1 Commentaire »

iPv6 EssentialsLes ouvrages sur IPv6 sont nombreux, ceux de qualité le sont moins.
IPv6 Essentials de Silvia Hagen est un livre précis traitant des fondamentaux IPv6.

Au sommaire :

  • Why IPv6
  • The Structure of the IPv6 Protocol
  • IPv6 Addressing
  • ICMPv6
  • Security with IPv6
  • Quality of Service
  • Networking Aspects
  • Routing Protocols
  • Upper-Layer Protocols
  • Interoperability
  • Mobile IPv6
  • Get Your Hands Dirty
  • RFCs
  • IPv6 Resources
  • Recommended Reading

La présentation de l’oeuvre

IPv6 Essentials, Second Edition provides a succinct, in-depth tour of all the new features and functions in IPv6. It guides you through everything you need to know to get started, including how to configure IPv6 on hosts and routers and which applications currently support IPv6. Aimed at system and network administrators, engineers, network designers, and IT managers, this book will help you understand, plan for, design, and integrate IPv6 into your current IPv4 infrastructure.

En ce qui me concerne

J’ai trouvé ce livre tres pragmatique.
On parle d’un protocol non pas de choses abstraites, vous allez donc lire de nombreuses pages sur les détails des RFCs.
Connaitre les détails d’un protocole peu paraitre futile, mais cela est un passage obligé si vous voulez comprendre le fonctionnement et réaliser des déploiements de qualité.

A mon avis, les chapitres les plus importants sont :

  • Chapitre 2 : The Structure of the IPv6 Protocol
  • Chapitre 3 : IPv6 Addressing.

Au départ, je pensais que le Chapitre 10: Interoperability serai encore du « simple » Dual-Stack, Teredo, 6To4.. Bien que ce soit le cas, j’ai été surpris de voir de nouvelles méthodes comme le NAT-PT.
Aussi, ce chapitre montre differentes études de cas tres interessantes que je vous conseils de lire avec attention.

Le chapitre 8 : Routing Protocols, je l’ai survolé assez vite car je n’éprouvais pas le besoin de connaitre les détails sur les protocoles IGP & EGP avec IPv6. Toujours est-il, pour ceux que cela interesse ce chapitre est complet avec 78 pages.

Le dernier chapitre : Mobile IPv6 est tres charnu. Comme il est dit dans le livre: « Avant de commencer la lecture de ce Chapitre, prendre une aspiration profonde ».

Conclusion

Pour ceux qui ont des bases en IPv4 et qui souhaite faire une mise à jour de compétence, c’est un livre interessant à lire.
Le fait que cette ressource soit en Anglais n’est pas vraiment un probleme si vous avez l’habitude de lire de l’anglais technique.
Mon niveau en Anglais n’est pas des plus haut, et je n’ai eu aucune difficulté à terminer IPv6 Essentials. Apres, est-ce que j’ai tout compris… ;)

Vous pouvez l’acheter sur Amazon.
ISBN : 978-0-596-10058-2

Mots-clefs :, , , , , , , , , ,
 

Linux – Générer des fichiers binaires

Linux 1 Commentaire »

Dans la série des articles post-it, voici comment créer des fichiers binaires de tailles spécifiques.

Un fichier de 100MBytes.

dd if=/dev/zero of=100MB bs=100M count=1

Un fichier de 500MBytes.

dd if=/dev/zero of=500MB bs=500M count=1

Un fichier de 1GBytes.

dd if=/dev/zero of=1GB bs=1G count=1

Et j’ai envie de dire, ainsi de suite…

Mots-clefs :, , , , , , ,
 
Designed by NattyWP Wordpress Themes.
Images by desEXign.