Nouvelle année : bilan et nouveaux horizons

2

Posted by Will | Posted on 12-01-2010

 Bilan  Auto-entreprise

Cela fait un petit moment que je n'avais pas écrit. C'est désormais chose faite et la première chose que je compte dire c'est de vous souhaiter une excellente nouvelle année. Pour moi, 2010 va certainement me permettre de découvrir de nouveaux horizons.

 

Bilan

Après 6 mois d'auto-entrepreneuriat, j'ai fait un premier bilan très mitigé de ce statut, de mon activité et de tout ce qui gravite autour. Je m'explique :

- Ce statut s'est, à mon goût, sur-développé à un point qui devient préjudiciable pour certains. Ce n'est en aucun cas une critique des activités des autres auto-entrepreneurs ou encore une pensée purement égoïste.

Pour illustrer, mon domaine d'activité, à savoir le développement web, n'est pas forcément ésotérique et tout le monde peut se lancer dans la création web...

J'en viens alors à une réflexion, moi-même, développeur indépendant je ne ferais jamais de tord à une agence web mais pourrait travailler en collaboration. Qu'en est-il des développeurs en herbe (pas juniors mais des utilisateurs de Dreamwaver) ? C'est une concurrence qui me fait le plus de tord mais comment rivaliser ? Ils coûteront moins cher que moi et pour un travail pouvant être équivalent de visu ! Le client néophyte n'y verra aucune différence, le client aguéri fera cette distinction et là, le problème ne se pose pas.

J'en viens à me dire que ce statut pourrait se dégrader très vite par le manque de professionnalisme (sans aucune critique ici) de ces développeurs en herbe, c'est quelque chose qui me fait peur et qui m'insite à changer de statut, à voir plus grand afin de garder le label "pro" d'un statut juridique.

 

- D'autre part, ce statut n'est pas la perle rare des statuts d'indépendants du point de vue des charges. Il est vrai que pour des petites rémunérations, on ne paye que ce que l'on chiffre mais on verse 23% de ce qui est encaissé, ce qui représente quelque chose d'important au final. Bien sûr, un développeur web n'a guère besoin de matériel, la TVA n'a donc pas trop d'importance pour lui.

Seulement, un statut juridique plus important (EI, EURL, SA) permettrait de faire passer  sur le compte de la société les factures téléphonique, Internet, ... ressources réelles du développeur. D'après mes calculs, si je dégageais un CA supérieur à 16K euros par an, il serait plus bénéfique pour moi de passer en EURL.

 

- Passons le statut, je vais maintenant parler de mon activité. Etant trop pris par mes études, il m'est impossible de me lancer à plein temps dans de gros projets, des projets qui me seraient vraiment bénéfiques. Je réalise donc de petits projets, pas forcément valorisants mais des projets que j'aime car je rend service à ceux qui me le demandent.

 

- Le travail de développeur web n'est pas valorisant pour les non-initiés. C'est quelque chose que je remarque fréquemment. J'ai beau dire que je crée du site web, les gens n'ont pas idée de la difficulté qui peut être rencontrée. Et en tant que développeur, je ne peux valoriser mon code.

Exemple : une architecture MVC ultra générique et optimisée ne fera pas rêver le commun des mortels mais un flash basique et coloré si.

C'est très frustrant et c'est pour ça que j'ai acheté des tas de bouquins afin d'acquérir cette compétence artistique. Après tout, je me fais plaisir sur du code métier, pourquoi  ne pas faire la même chose sur une interface graphique utilisateur !

 

2010, année du changement ?

Si tout se passe bien du côté des études, j'envisage d'étoffer mon activité sur fin 2010 début 2011, changer de statut notamment et me vendre un peu (ce que je ne fais pas pour le moment).

Je devrais également lancer mon portfolio (en cours de réalisation) et dans le même temps revoir mon offre de service : redéfinir ce que je souhaite faire, redéfinir comment je souhaite travailler, redéfinir mes besoins et mon offre de services.

Optimiser son application web en jouant sur PHP, MySQL et Apache2

2

Posted by Will | Posted on 25-11-2009

 PHP  Apache2  Memcached  MySQL  PECL  APC  Ramdisk

Après avoir bien optimisé toute la partie frontend de mon site au sens HTMLCSSJavaScript, etc, je me suis penché sur les aspects plus techniques et technologiques. Je parlerai donc de PHP, de MySQL, de serveur Apache2, de Memcached, d’Opcode mais aussi d’architecture applicative.

 

Pour pouvoir travailler dans de bonnes conditions j’ai loué un serveur dédié virtuel (VPS) chez Gandi. L’offre actuelle est composée de parts, une part représentant environ 1/60ème d’un gros serveur. J’ai choisi ce type de serveur car je n’ai pas réellement besoin d’un full dédié mais aussi pour l’architecture scalable fourni. En effet, il est possible de rajouter des parts à la volée, ponctuellement ou de manière programmée. On peut ainsi pallier une grosse surcharge automatiquement même si le temps de déclenchement est trop élevé (dépassement du seuil défini pendant 20 minutes au moins).

 

Installation et configuration

J’ai donc pris une part, vierge de toute installation à l’exception de la distribution Linux, Debian 5 dans mon cas. J’ai commencé par installer les services web utiles : Apache2MySQLPHP 5.3 et PhpMyAdmin. Ensuite, j’ai installé APC via la commande PECL (pour PHP 5.3 on veillera à bien prendre apc-beta). J’ai également installé Memcached et l’extension qui va bien pour l’utiliser avec PHP. Je passe les aspects configurations de sécurité du serveur en lui-même mais voilà ce que j’ai fait pour chaque application :

 

Apache2

Niveau configuration, rien n’a été modifié mis à part les vhosts et un paramètre dont je donnerai les détails plus bas. Du côté des modules, j’ai installé ceux qui vont bien : deflate,expiresheadersmem_cacherewrite et php5.

 

MySQL

Aucune modification, sauf l’activation des logs lors des phases de test. Pour cela, on modifie le fichier my.cnf dans /etc/mysql/.

 

APC

Il faut l’activer dans le fichier php.ini :

extension=apc.so

 

Puis le configurer :

[APC]
apc.enabled=1
apc.stat=0
apc.mmap_file_mask = /media/ramdisk1/apc.XXXXXX

 

apc.stat=0 Permet d’éviter les appels disque.

apc.mmap_file_mask = /media/ramdisk1/apc.XXXXXX Définit l’endroit où sont stockés les fichiers de cache. Ici j’utilise un Ramdisk de 32Mo même si ce n’est pas forcément utile car APC utilise de base un segment de mémoire partagé. A voir plus bas une note à ce sujet.

 

Pour créer un Ramdisk, il faut utiliser le système de fichier tmpfs. Un exemple de ligne à insérer dans /etc/fstab :

tmpfs   /media/ramdisk1      tmpfs   defaults,size=8M      0       0

 

Memcached

On ne touche à rien excepté la taille alloué que j’ai passé de 32Mo à 16Mo : suffisant et avec 256Mo de base, le mieux est de se restreindre.

 

Une approche du temps réel avec PHP et JavaScript

1

Posted by Will | Posted on 06-11-2009

 AJAX  Long Polling  Push Ajax  APE

Récemment j’ai pu tester un serveur push AJAX grâce à @LaFermeDuWeb qui a fait quelques essais sur son serveur. Il s’agissait là d’APE (Ajax Push Engine), un système push AJAX comprenant grossièrement un module Apache côté serveur et un bout de script JS côté client. Ce système permet de réaliser des applications temps réel, l’exemple classique est un tchat en ligne type IRC. J’ai toujours été intéressé par ces principes, me documentant autant que je le peux sur une application web mondialement connue : Facebook. J'ai donc fait de nouvelles recherches afin d'en savoir un peu plus.
 

Les suppositions et la théorie

J’ai voulu en savoir un peu plus sur ce système de push AJAX. Selon moi, c’est un serveur qui gère les données et un client qui reçoit ces données. A ma connaissance il n’est pas possible d’envoyer une donnée depuis le serveur directement vers le client au sens où le client deviendrait un écouteur du serveur.
Pour résoudre ce problème, une solution est de procéder à l’envers et simuler un écouteur client. En somme, le client doit requêter le serveur en permanence et le serveur doit fournir à chaque fois un nouveau contenu. Mais là, le client travaillerait sans interruption et occuperait une partie importante de la bande passante utilisateur. Il faut donc affiner ce procédé. Pour cela, admettons que ce soit le serveur qui fasse le requêtage permanent. Comment ? En temporisant nos requêtes clientes grâce à un blocage serveur.
 
Attention tout de même, ici on parlera de long polling et non de push ajax réel mais selon certains les deux technologies bien que différentes peuvent se confondre.
Le push AJAX utilise un autre principe qui est d'avoir un pseudo client  sur le serveur, ainsi la communication va pouvoir s'établir du serveur vers le client. Ce pseudo client permet de conserver une liaison ouverte entre le serveur et le client, permettant ainsi l'envoi de données sans problème.
 

La vision technique

De manière plus concrète, j’envoie une requête cliente, le serveur va boucler tant qu’aucune nouvelle donnée n’est disponible. Le gain côté client est évident : économie de requêtes donc de bande passante, de charge processeur, de mémoire, etc… Une fois la donnée récupérée côté client, on va réinvoquer le serveur en lui demandant une nouvelle donnée.
Le serveur boucle sur la datasource, à la recherche d’une nouvelle donnée. On peut choisir de ne pas le faire boucler indéfiniement. Pour cela, on va fixer un timeout de 10 secondes mais également un pas de boucle d’une seconde (utilisation de la fonction usleep() par exemple). Ainsi, le serveur interroge la datasource toutes les secondes pendant dix secondes au maximum. Soit il y a une nouvelle donnée et on la renvoit, soit il n’y en a pas et alors on ne renvoit rien.
On a ainsi une bonne approche du temps réel mais il reste bien évidemment les soucis d’implémentation et de choix dans les technologies à notre disposition.

 

Une version iPhone et mobile de son site tout en CSS

2

Posted by Will | Posted on 26-10-2009

 CSS  Mobile  iPhone

Jusqu'à présent, je n'avais pas trouvé d'intérêt à porter mon site sur iPhone et sur toute version mobile en général. En effet, il s'affichait correctement à quelques imperfections graphiques prêts. Mais après réflexion, je me suis dit qu'il serait mieux de créer une version plus adaptée.

J'ai choisi de développer cette spécificité en CSS. J'aurai pu créer une nouvelle application web spécifique à l'iPhone (comme Facebook mobile par exemple) mais ce n'était pas forcément utile. CSS a donc été la solution simple et rapide.