Catégorie Technologie

Nouveaux Macbook 13 commentaires

Posté par Cedric, le 24/10/2008 - Technologie

T_1c45ab1e7f3c68d1a29161b8033a397dC'est désormais un processus bien rôdé. Tous les ans, à la même période, Apple annonce des nouveautés produit. La nouveauté la plus attendue de ces derniers mois dans l'univers de la pomme était le renouvellement de la gamme des portables Apple, Macbook et Macbook Pro.

J'ai eu l'occasion de les tester la semaine dernière à l'Apple Store de Londres, et autant ma conversion à Apple s'est faite avec un plaisir non masqué, autant j'ai été un peu déçu par ces évolutions. Voici ce que je n'ai pas aimé:

  • Le bouton de la souris a été remplacé par un grand trackpad avec un bouton général. Où que je sois sur le pad, je peux cliquer. A l'utilisation, il m'a paru gênant de devoir physiquement cliquer, j'aurais pensé qu'un simple toucher léger aurait suffit. D'autant que la pression nécessaire au clic n'est pas anodine. C'est sûrement configurable, mais même dans ce cas, ce n'est pas une révolution. Je n'ai jamais utilisé les boutons de mon trackpad et l'ai simplement configuré de manière à ce qu'une légère pression vale un clic, et deux pressions successives aient valeur de sélection.
     
  • Le trackpad est multi-point. Cela permet théoriquement d'agrandir les images en écartant les doigts, de naviguer en balayant le pad de la main, comme sur l'iPhone. En fait, cela m'a paru beaucoup moins intuitif que sur l'iPhone, j'ai même été décu de voir qu'il réagissait assez mal à mes contrôles.
     
  • L'écran glossy. C'est un sujet de controverse énorme sur la blogosphère Mac. Ayant moi même possédé pendant longtemps le plus glossy des écrans (un Sony Vaio), je ne peux que regretter ce choix. Certes, certains apprécieront la luminosité extrême de l'écran, le rendu quasi-parfait des couleurs, etc. De cet attribut, je ne retiens que la désagréable impression d'être devant un miroir, ce qui devient très problématique dans un train, où vous êtes obligé de réorienter l'écran pour ne pas qu'il se retrouve face à la lumière.
     
  • Le port firewire: Il a été retiré du Macbook (entrée de gamme de la série portable). Ca ne se justifie pas vraiment et parait globalement assez injuste pour tout ceux qui attendaient cette nouvelle gamme pour faire leur achat.

 

Pour résumer, cette nouvelle gamme est plus une évolution design qu'autre chose. La bête reste identique, et même la carosserie est à peu près similaire, si ce n'est quelques millimètres gagnés en hauteur et une finition toujours parfaite propre à l'image de la marque. Mais on aurait pu attendre mieux, d'autant que malgré la crise financière, le prix de ces modèles tend encore à augmenter, Apple ayant refusé de commercialiser un modèle à $800, comme spéculé dans les semaines précédentes.

Et vous, avez-vous pu l'essayer? L'avez-vous aimé?

Convertir des polices PC -> Mac 17 commentaires

Posté par Cedric, le 07/10/2008 - Technologie

T_b7514e92d9f8ebedbef7be7d098689b8Lorsque vous travaillez avec des agences de design, les polices originales sont des fois livrées au format PostScript. Pour pouvoir les exploiter sous Mac, il existe des logiciels gratuits, dont FontForge. Reste que ce programme est assez aride à l'utilisation, surtout si vous avez un grand nombre de polices à convertir.

Ce script de Michel Boyer (téléchargeable ici) est une merveille de simplicité: Vous choisissez le répertoire où se trouvent les fichiers .pfm et .pfb, vous lancez la machine, et vous récupérez de parfaits .otf, que vous n'avez plus qu'à recopier dans /Library/Fonts.

Et pour ne rien gâcher à la fête, c'est gratuit.

Full I18N with ysfDimensionsPlugin 53 commentaires

Posté par Cedric, le 14/07/2008 - Technologie

One of the recurring concern when developing an internationalized application, is to not let any element untranslated. This is natively complicated, even with the brand new symfony 1.1. You often end up with untranslated URLs or meta tags. But using the Framework in conjonction with the Yahoo!'s plugin ysfDimensionsPlugin will fill all the blanks you could have experienced once.

The role of the plugin is to let you define specific dimensions (can be cultures, can be themes, etc.), and to make it possible to override any part of your application (actions, templates, config) by simply adding a subdirectory, with the name of your dimension.

Let's have a quick exemple.

First of all, you will have to link your existing project to the plugin SVN.

svn propedit svn:externals plugins/

Then append to the file:

ysfDimensionsPlugin http://svn.symfony-project.com/plugins/ysfDimensionsPlugin/branches/1.1/

Update everything:

svn up

Configuration

Let's say we want to internationalize the application in english and french. That means we will add a "culture" dimension with two possibilities in it: en, and fr. To do that, create a /config/dimensions.yml file and write:

allowed:
  culture: [en, fr]

Now, we have to edit the main configuration script, so the plugin can add our brand new configuration levels.

require_once '/path/to/your/project/lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

require_once '/path/to/your/project/plugins/ysfDimensionsPlugin/lib/config/ysfProjectConfiguration.class.php';

class ProjectConfiguration extends ysfProjectConfiguration
{
	public function setup()
	{
	}
}

Notice that the ProjectConfiguration class now extends ysfProjectConfiguration (against sfProjectConfiguration, the y stands for yahoo!).

The dimension will be set up on an application level. In my example, the user culture is determined by the domain he is browsing. French will be something like fr.mydomain.com, and his culture will be set to english otherwise. To industrialize this behaviour, we have to edit our application configuration file.

Edit /apps/YOURAPP/config/yourAppConfiguration.class.php. First, manually require the plugin library.

require_once(dirname(__FILE__).'/../../../plugins/ysfDimensionsPlugin/lib/config/ysfApplicationConfiguration.class.php');

Then, make your class extend the Yahoo! Application configuration class, instead of the core symfony one.

class frontConfiguration extends ysfApplicationConfiguration // instead of sfApplicationConfiguration

Ok. Now, let's define the dimension, in the configure method.

public function configure()
{	
    //-- hacky. Demonstration purpose only.
	$host_part = explode('.', $_SERVER['HTTP_HOST']);
	$culture = (
		strLen($host_part[0])==2 && 
		(in_array($host_part[0], array('fr', 'en')))
	)?$host_part[0]:'en';
	
	$this->setDimension(array('culture' => $culture));
	parent::configure();
}

Note: this should go with an appropriate filter, like the one used here in symfonians.

Cool, we're almost done. If you have an APC extension up and running on your environment, you can pretty safely trigger a symfony cc command. If everything goes as usual, try to browse your app, and if you nothing weird happens, you're good to go.

If you don't have APC, you have good chance it won't work. Indeed, the plugin natively caches the configuration directories in the memory, using the PHP6 core library APC (you can grab it with "pecl install apc").

If you can't make it work, this is your last hope: override the main construction call, to make use of local cache or, if in debug mode, no cache at all (bad for production of course).

There you go:

class frontConfiguration extends ysfApplicationConfiguration
{
	public function configure()
	{
		$this->debug = true;
		
		//-- Hacky. Demonstration purpose only. 
		$host_part = explode('.', $_SERVER['HTTP_HOST']);
		$culture = (
			strLen($host_part[0])==2 && 
			(in_array($host_part[0], array('fr', 'en')))
		)?$host_part[0]:'en';
		
		
		// setup dimensions before calling parent::configure();
		$this->dimension = new ysfConfigDimension(
			$this->getEventDispatcher(),
			(!isset($this->debug) || (isset($this->debug) && $this->debug === true)) 
			? new sfNoCache() : 
			new sfCache(
				array(
					'prefix' => 'symfony.dimensions.config.default:'.$this->application.':'.$this->environment,
					'automatic_cleaning_factor' => 0, 'lifetime' => 86400)
			)
		);
		
		$this->setDimension(array('culture' => $culture));
		parent::configure();
	}
}

I had to force the $this->debug = true; because I had mysterious bugs on my development machine (Mac OSX). Try to remove it, if it works without that, it's even better.

Now, let's trigger a clear cache (symfony cc) and hit a fresh browser pointing to your application. Everything works as expected? Congrats, now we can go to the fun part.

Internalization with sfDimensionPlugin

In a big scale project, you generally have four types of I18N:

  • Stored data (work of ORMs to make this easy)
  • Localized short strings (handled natively by the symfony I18n support, enhanced in 1.1 with symfony i18n:extract --auto-save)
  • Configuration data (routing, meta tags, etc.)
  • And the last, often neglicted but rarely optional: long static (graphical) pages that are not made to be integrated in the DB or in the XLIFF file (about us, credit, contacts). They have to stay HTML fragments.

 

symfony natively supports nb 1 (thanks to Doctrine or Propel), nb 2, and that's pretty much it. Let's go back to our little project. You're working hard on it, and the whole project is almost done. You have written pretty short SEO-friendly URL in /apps/YOUR_APP/config/routing.yml, and nice metas in your /apps/YOUR_APP/modules/YOUR_MOD/config/view.yml. Last, but not least, you decided to put all the static content in a "static" module, where you have empty actions and 5 to 10 HTML fragments.

Let's internationalize everything:

routing.yml
homepage:
  url: /
  param: { module: home, action: index } 

team:
  url: /team
  param: { module: team, action: index }

about_us:
  url: /about-us
  param: { module: static, action: about }

Obviously, we don't need to translate the first routing rule (@homepage). So let's create a routing.yml file in /apps/YOUR_APP/config/fr/routing.yml. (create the fr directory if it doesn't exist yet).

team:
  url: /equipe

about_us:
  url: /a-propos

And that's it! The plugin is smart enough to automatically inherit your main routing file, and as we gave them the same names, you can restrict your work to defining only the elements that change.

Now, try to go to http://fr.yoursite.dev, and hover a link to @team. It should show the french version now. Now point to the @about_us page. The URL is in french, but the content is in english, right? Remember, it's a static page we created in a dedicated module. Let's correct that:

Create a fr directory in

/apps/YOUR_APP/modules/static/templates


Now, copy the aboutSuccess.php template in that directory, and translate all its content. When it's done, refresh your page. And boom, you should now have the french version.

 

This process can be done for almost anything in your website. It's especially useful for metas. Just create a fr directory in /apps/YOUR_APP/modules/YOUR_MOD/config/fr/, and a view.yml file in it, and enjoy:

indexSuccess:
  metas:
    title: My French Title
[etc..]

When you've done that work once, you can reproduce a fully I18n environnement very quickly for your new project. Don't forget that this ysfDimensionsPlugin is very powerful, and can be the perfect solution when you need to build many websites using the same engine (like a white label).

If you have any tip with I18N or ysfDimensionsPlugin, feel free to leave a comment.

Premier aperçu d'Androïd 9 commentaires

Posté par Cedric, le 09/06/2008 - Technologie

Voila déja plusieurs mois que l'on connait le projet d'OS mobile de Google, nommé Androïd. Mais très peu d'informations concrètes avaient filtré.

Jusqu'à la semaine dernière, moment choisi par Google pour dévoiler ce qui sera certainement leur produit technologique phare dans les années à venir. Un moment très bien choisi, à quelques jours seulement de la présentation par Steve Jobs de l'iPhone 3G.

J'ai été absolument stupéfait par cette vidéo. Google semble avoir réussi à égaler Apple sur son terrain, celui de la convivialité de l'interface utilisateur, sans toutefois tomber comme la pomme dans le piège du logiciel propriétaire. Ainsi, la firme de Mountain View a dès les premiers pas de l'OS fait participer les développeurs autour de son SDK, et ainsi fédérer une forte base de "geeks", pourtant éperdument amoureux de l'iPhone à ses débuts. Ce crowd-sourcing a fait émerger des idées géniales, et je me demande vraiment si la fabuleuse boussole intégrée au Google OS n'est pas inspirée du fabuleux projet Enkin, pourtant recalé au concours d'innovation Google Android.

Stratégiquement, ce projet est la conclusion de quatre année extrêmement bien calculées de la part de Google. Tout est parti de l'innovation fondamentale que fût Google Maps, qui les place aujourd'hui idéalement pour attaquer la monétisation des annonceurs offline (commencé avec AdWords pour mobile, que va faire littéralement exploser l'arrivée d'Androïd, comme Windows a fait exploser Internet Explorer). En effet, grâce à ces OS mobile de nouvelle génération, la frontière entre Internet et le monde réel va être de plus en plus fine, puisque des technologies embarquées permettront de connecter l'ensemble de la planète sans aucune connaissance technologique préalable.

Un coup de maitre aussi par rapport à Apple, qu'on pourrait illustrer de la manière suivante: c'est un peu comme si Google avait, lors de la sortie d'OS X, sorti un système qui reprend ses qualités et les poussent encore plus loin, mais sans la contraindre à une machine (le macintosh dans cet exemple), et tout en Open Source. On aurait alors pu installer ce Google OS X sur Mac comme sur PC, complètement gratuitemet, et le géant californien aurait logiquement raflé le marché du système d'exploitation.

C'est exactement ce qui risque d'arriver pour le marché du mobile.

I love my Mac! 41 commentaires

Posté par Cedric, le 20/05/2008 - Technologie

T_a5251a67fd7d23d4b4535c90da7474c6Je n'aurais jamais pensé écrire ce genre d'article il y a encore six mois. J'ai en effet toujours fait partie des méfiants vis-à-vis des Mac ; les produits élitistes, design, bénéficiant d'un fort consensus auprès de populations non-nerds me rendent toujours un peu sceptiques.

Mais voilà que depuis quelques années déjà, j'observe qu'une majorité de développeurs et autres administrateurs réseaux passent progressivement au Mac. Le délaissement du PC semble même s'être accéléré depuis la sortie de la catastrophe Windows Vista.

Rattrapé par des problèmes récurrents de pertes de performances sur mon PC, dûs à la très mauvaise gestion de la mémoire vive sous Windows, j'essayai Linux Ubuntu comme un baroud d'honneur (j'utilisais jusque là Linux Redhat/Debian/Gentoo uniquement en serveurs web). Mon goût pour Linux et mon amour de la ligne de commande n'ont cependant pas réussi à me faire oublier une interface graphique que je n'arrive définitivement pas à apprécier. Pas assez de fluidité, pas assez de design, quand son PC est son outil de travail, cela devient vite désagréable.

Alors j'ai cédé pour un portable Mac. Et plutôt qu'un long discours, sachez que j'ai rapidement compris pourquoi autant de développeurs ont fait le pas. Voici ce que j'en retiens après un mois de (joyeuse) utilisation :

Trucs de nerds :

  • Mac OS X est basé sur un système Unix. Il est donc très stable et gère parfaitement la mémoire vive. Pour faire simple, quand on ferme une application, la mémoire est bel et bien libérée, ce qui fait que l'ordinateur ne ralentit pas subitement au bout de quelques heures.
  • Je peux faire des synchronisations rSync entre mes serveur et mon disque dur externe 1To (qui me sert aussi de sauvegarde Time Machine). Je peux programmer des tâches cron pour lancer les sauvegardes à intervalles réguliers. Certes utiliser rSync sous Windows est faisable en utilisant Cygwin, mais ce n'est pas natif et on sent que Fenêtres n'aime pas ca.
  • Je peux switcher entre la ligne de commande et l'interface visuelle. Par exemple, j'ai un répertoire où je stocke l'ensemble de mes mots de passe. Je bascule sur Terminal et exécute un chmod et un chown root:root, et voilà que le répertoire devient illisible sans mon mot de passe administrateur. Allez faire ca sous Windows :)
  • Léopard est livré avec Apache 2, PHP5, cURL, etc… En gros, une petite installation de MySQL et j'obtiens un serveur local très performant en quelques minutes. Comme Subversion est également installé par défaut, je rapatrie et synchronise mes projets en quelques lignes de commandes SVN, sans aucune installation nécessaire. Un environnement UNIX très proche de mes environnements de production Linux en somme.
  • TextmateL'éditeur TextMate est à la fois très bien fait et très joli. Les tabulations sont propres et il fait même un peu d'autocomplétion. En revanche je regrette mon EditPlus pour le support intégré du FTP (je dois passer par Transmit). Mais si vous marchez par miroirs SVN ce n'est plus trop un problème.

 


Trucs de gens normaux:

  • L'autonomie de la batterie. Si vous prenez souvent l'avion, sachez que j'ai réussi à le faire tenir plus de 8h sans recharger. Pour cela, enlevez le CD du lecteur, éteignez le WIFI, le BlueTooth, et réduisez la luminosité de l'écran. En utilisation normale il tient 4h30 environ. (soit 4 fois plus que les portables PC que j'ai eu, Vaio haut de gammes compris).
  • Le système d'installation des programmes. Ici, pas de dll obscure, de registre, et de "c:\Program Files". On télécharge l'application, on la copie dans le répertoire « Application », et c'est tout. Pour désinstaller, on l'amène gentillement vers la corbeille et c'est fait.
  • Il y a un paquet de logiciels gratuits et extrêmement bien faits. Voici un site qui répertorie les plus utiles d'entre elles : http://www.opensourcemac.org/
  • Voici les applications gratuites que j'utilise le plus : Adium (Multi-Messenger), Colloquy (IRC), QuickSilver (lanceur d'applications), SeaShore (mini-photoshop ultra léger), Senuti (pour copier le contenu du iPod sur le disque dur), Burn (graveur CD/DVD).
  • Il y a également beaucoup de programmes pour Mac disponibles sur Azureus. J'ai ainsi pu retrouver hum… Microsoft Office dont je n'arrivais définitivement pas à faire le deuil. (je n'ai jamais aimé Open Office et ne pense pas que Google Docs soit vraiment une initiative au Desktop pour ce genre de choses… plutôt un complément)
  • La beauté du design, bien sur. Le Mac est avant tout un beau produit fini, à l'extérieur et à l'intérieur. Léopard est une vraie merveille d'interface utilisateur. C'est simple, ca réagit toujours de la même manière, et l'affichage est minimaliste, et s'étend en fonction de nos actions. Un vrai modèle à reproduire sur le web.... Quand on voit une vidéo avec QuickTime, qu'on active le mode plein écran, et que celui-ci se développe progressivement, au lieu de la brutalité Windows, ca ne change pas nos vies, mais c'est le genre de détail qui rend le système si agréable à utiliser. Mac OS X est plein de choses comme cela.
  • L'ergonomie : l'ordinateur est très bien fait, la première fois qu'on branche la batterie et qu'on se rend compte que c'est aimanté, on est bluffé, ni plus ni moins.
  • iSight : Tous les portables Mac sont livrés avec une webcam et un micro intégré. Ca ne leur coûte quasiment rien (c'est intégré dans le dernier ds téléphones portables), mais ca vous évite d'acheter un casque, et surtout d'avoir à la brancher et de ressembler à un opérateur téléphonique dans un film des années 50 à chaque fois que Skype sonne. Bref, c'est le genre de truc qui facilite la vie.
  • Et en vrac : exposé (toutes les fenêtres mises cotes à cote quand on ne sait plus où on est ; je l'ai configuré pour apparaître quand la souris va dans le coin bas gauche – très pratique), Time Machine (sauvegarde par snapshot de votre système, permet de le restaurer exactement comme il était il y a X jours), le Dashboard et les widgets, le coverflow, etc..

Bien sûr, il y a toujours des choses que je n'aime pas sous Mac. Ne pas pouvoir mettre une fenêtre en plein écran, l'obligation d'utiliser le menu « fenêtres » pour naviguer entre les différentes fenêtres d'un même programme (Windows permet de les changer dans le ALT TAB, même si on peut utiliser Exposé pour contourner le problème), et évidemment je n'aime pas l'absence du clic droit... même si là encore on peut configurer le TouchPad de manière à déclencher le menu contextuel quand deux doigts appuient dessus en même temps. Enfin, le prix du matériel simplement trop cher. J'ai pour la part acquis l'ensemble aux Etats-Unis, car les prix sont les mêmes là bas, et avec un dollar aussi faible qu'en ce moment le calcul est vite fait. Cependant, les accessoires vous couterons très cher ici en France (et 3 à 4 fois plus au Maghreb), comme les 19 euros à débourser pour un simple connecteur DVI/VGA.

Des détails parmi l'océan d'avantages que j'ai découvert depuis l'acquisition de cette machine. Je suis donc ravi d'avoir fait le pas, et attend désormais mon prochain passage en Allemagne où l'iPhone est à 99 euros pour achever ma conversion