are you agile ?

me retrouver : | smartview | twitter | slideshare | linkedin |
3 derniers articles : | Shadoks, freins, changement, cynefin | coach retreat paris, 2012 | Stoos network, un départ, des attentes |

recherche | archives | catégories | à propos

Mais que manque-t-il à Java ?

Il faut éviter : d’avoir des discussions techniques/boulot lors des pauses déjeuners

Il faut éviter : d’avoir des discussions techniques/boulot avec une pression à la main

C’est pourtant le piège dans lequel une fois de plus nous avons chuté, Blazing Nick (c’est son surnom de catcheur, il ne veut pas que j’emploie son vrai nom pour ne pas exploser les stats de mon blog), et moi même. Nous avons donc parlé Java (je devais vouloir lui remonter le moral). Et notamment de la sortie de la version 7 qui semble être comme la marée, elle s’approche, elle s’éloigne. Java / MySQL, même combat, depuis le rachat de Sun par Oracle, tout le monde est sur l’expectative.

Bref nous avons donc parlé Java, futur, amélioration : avec Blazing Nick dans le rôle du gentil (le pro Java) et ma pomme dans le rôle du méchant car Java n’est pas nécessairement ma tasse de thé (en tant que langage, car les solutions métiers comme Liferay, Alfresco ou Lucène entre autres ont largement fait leurs preuves). Qu’est ce qui va donc arriver avec ce Java 7. Rien manifestement, en tous cas rien de bouleversant si j’en crois Blazing Nick. Et d’ailleurs de quoi a-t-il besoin ose-t-il me narguer ?

Amélioration des perfs ? non pas vraiment. Que l’on allège ce langage bien trop déclaratif, ces fichiers de conf bien trop alambiqués ? Ben non ce que nous aimons me dit Retorquing Nick. Un mode “script” ? Il existe si on veut l’utiliser. Alors quoi. On tergiverse, on lance des pistes, etc. (n’oubliez pas on a des pressions à la main). Finalement on se rejoint sur un point: Il faudrait faciliter le déploiement d’une appli Java en la déposant directement dans un dossier et que Apache puisse la lire sans trop poser de question. Qu’il ne soit pas nécessaire d’embarquer un conteneur de servlet genre Tomcat à brancher sur Apache (avec mod_jdk ou autre). Cela aurait pu exister depuis longtemps si la communauté java et la communauté opensource s’étaient trouvés plus d’atomes crochus, ce qui n’est pas vraiment le cas. Je fais mon dev, j’ouvre le navigateur, ça roule. Pas de processus trop lourd pour déployer lors du dev. Bref que l’adhérence entre le système et le moteur java soit invisible.

Pour le coup ce billet est vraiment une brêve de comptoir.

This entry was written by pablo, posted on December 2, 2009 at 5:36 pm, filed under java and tagged , , , , , , , , . Leave a comment or view the discussion at the permalink.

MariaDB un nouveau MySQL

MariaDB c’est le bébé de Monty Widenius : fondateur de MySQL. C’est aussi un fork 100% compatible de MySQL.

“MariaDB is a drop-in replacement of MySQL, with more features, less bugs and better performance”, peut-on lire dans le README du dossier MariaDB 5.1.38 que je viens d’extraire, rien que ça ! MariaDB est un fork officiel de MySQL par l’un de ses fondateurs.Les différences entre MariaDB et MySQL sont listées ici. MariaDB est entièrement compatible MySQL, d’ailleurs toutes la documentation d’installation de MySQL est compatible (pour dire le démon se lance avec libexec/mysqld…bref C’EST MySQL). Essayons ! Je télécharge les sources, je compile. je déploie, je copie ma conf mysql, je fais les changements qui vont bien, je lance le mysql_install_db…

/opt/mariadb5138$ sudo bin/mysql_install_db --defaults-file=/opt/mariadb5138/my.cnf
Installing MariaDB/MySQL system tables...
OK [...]

Et je me retrouve avec :

/opt/mariadb5138$ sudo ls data/
maria_log.00000001  maria_log_control  mysql  test

J’ai toute une petite série d’exécutables MariaDB : maria_chk, maria_dump_log, maria_ftdump, maria_pack, maria_readlog : le moteur de stockage mariadb est sensé être crashproof, contrairement à MyISAM, et à l’instar de InnoDB. Bref je lance le biniou (c’est moi qui ai placé le démon sur le port 3308, et changé la socket).

/opt/mariadb5138$ sudo libexec/mysqld --defaults-file=/opt/mariadb5138/my.cnf --user=mysql
091103 16:23:22 [Note] Event Scheduler: Loaded 0 events
091103 16:23:22 [Note] libexec/mysqld: ready for connections.
Version: '5.1.38-maria-beta'  socket: '/tmp/mariadb.sock'  port: 3308  Source distribution

J’ai plus qu’à dumper mes données mysql vers mariadb(on va essayer une base eZ 4.2.0) (j’ai pris soin de placer comme moteur de stockage par défaut “maria”, sinon je vais devoir faire des alter table en pagaille)

mysqldump -u*** -p*** ez420 | mysql -u*** -p*** -S/tmp/mariadb.sock ez420

mysql> show table status like "ezcontentobject"\G
*************************** 1. row ***************************
 Name: ezcontentobject
 Engine: MARIA
 Version: 10
 Row_format: Page
 [...]

Ah je vois que j’ai un format Page (qui n’existe pas avec MyISAM).  Je note que l’on peut dans processlist analyser les temps des requêtes à la milliseconde prêt (ce que l’on peut faire avec MySQL Proxy, mais pas le mysql “de base”), je note que l’on a une analyse étendue des logs des “slow query”. Et pas mal d’améliorations côté performance. Je vois cela .

Et je vois pas mal de variables associées au moteur de stockage :

mysql> show variables like "%maria%";
+-------------------------------------------+---------------------+
| Variable_name                             | Value               |
+-------------------------------------------+---------------------+
| maria_block_size                          | 8192                |
| maria_checkpoint_interval                 | 30                  |
| maria_force_start_after_recovery_failures | 0                   |
| maria_log_file_size                       | 1073741824          |
| maria_log_purge_type                      | immediate           |
| maria_max_sort_file_size                  | 9223372036853727232 |
| maria_page_checksum                       | ON                  |
| maria_pagecache_age_threshold             | 300                 |
| maria_pagecache_buffer_size               | 8384512             |
| maria_pagecache_division_limit            | 100                 |
| maria_recover                             | OFF                 |
| maria_repair_threads                      | 1                   |
| maria_sort_buffer_size                    | 8388608             |
| maria_stats_method                        | nulls_unequal       |
| maria_sync_log_dir                        | NEWFILE             |
| maria_used_for_temp_tables                | ON                  |
+-------------------------------------------+---------------------+

Si je fais un show create sur l’une de mes tables je vois ce paramètre (nouveau) : PAGE_CHECKSUM=1. Il me dit que cela accroit la sécurité autour de l’intégrité de mes données. Mais je dois aussi ajouter l’option TRANSACTIONAL pour rendre la table “crash safe” (rien à voir avec les transactions, en fait il journalise dans des logs). donc :

mysql> alter table ezcontentobject transactional=1;

Après tout cela mon site test ez420 fonctionne très bien. Le driver php_mysql continue à marcher as usual. Si j’essaye le module mysqli(mproved) ça marche aussi normalement. Bref je peux effectivement faire le remplacement tel quel de MyISAM par MariaDB (oui je sais des petits malins me diront que eZPublish nécessite un moteur InnoDB pour ses fonctionnalités transactionnels et ils auront raison. C’est juste un test sur la première base qui me tombe sous la main).

Tout ceci est très prometteur. Attention pour l’instant mariadb n’est pas un moteur transactionnel, mais, pas bête, la distribution MariaDB intègre XtraDB : la version Fork de InnoDB proposé par les excellentissimes Percona.

l’Open Database Alliance, qui est saluée par la communauté opensource, oeuvre manifestement pour soutenir MariaDB. C’est aussi une vraie réponse au risque que fait planer Oracle sur MySQL. La communauté autour de MariaDB semble assez dynamique et surtout grossir. Monty Widenius interviendra ce 12/13 novembre au Forum PHP Paris 2009 (AFUP).

Encore plein de questions, mais je n’hésiterai pas d’ores et déjà à recommander son utilisation.

Nest ce pas un dauphin qui plonge que je vois là ?

N'est ce pas un dauphin qui plonge que je vois là ?

This entry was written by pablo, posted on November 4, 2009 at 10:58 am, filed under database, mysql and tagged , , , , , , , . Leave a comment or view the discussion at the permalink.

Elgg, REST API

Petit retour sur Elgg. A l’occasion d’une petite (mini) mission je me suis penché sur l’API REST. L’objectif étant de brancher Elgg et son moteur (engine/lib) en utilisant son API REST à un service WS Soap tiers pour l’alimenter. En quelques mots : brouillon mais prometteur.

Pour rentrer plus précisément sur le sujet je devais générer des groupes dynamiquement en puisant les infos dans un WebService SOAP externe. Ce que mon proto met en avant : il est tout à fait possible d’”exposer” (selon la terminologie elgg) toutes les fonctions liées aux entités de Elgg. C’est à dire que l’on rend accessible via une API REST les fonctionnalités des briques de Elgg. Pour cela il faut créer un plugin (du moins je m’y suis pris ainsi). Créer un plugin c’est deux coups de cuillère à pot :  un fichier manifest.xml qui dit qui/licence/version, un fichier start.php qui permet de générer ses fonctions et surtout de les enregister au sein du fonctionnement de Elgg. Je n’ai pas creusé l’aspect MVC du produit mais après si je regarde les autres plugins tout semble couler assez de source : dossier view, dossier action, etc. Le fait de manipuler les librairies Elgg depuis son infrastructure rend tout plus simple : on accède à toutes les librairies tous les objets/entités, toutes les fonctions. Y’a plus qu’à.

Il ressort cependant que l’API n’est pas très propre au niveau du codage et que pas mal de petits bugs sont présents.J’adore à ce sujet le passage du wiki :

Note: Elgg’s REST API has many bugs so developers need to beware that development with it will take longer than expected as you run up against these bugs

Par exemple dans mon code, j’ai eu besoin de faire un accès direct  à la base de données (ce qui n’est pas vraiment conseillé…) l’API de l’entité “group” ne fonctionnant pas pour l’attribut owner_guid. Enfin j’ai aussi par exemple supprimé des validations de paramètres dans l’API REST qui fonctionnaient de manières incohérentes. Enfin si il semble dans la documentation que les questions de sécurité soient bien prises en charge, j’ai eu la surprise de noter que suite à mon installation on pouvait déclencher la fonctionnalité sans aucune restriction via un url / méthode GET (alors que j’avais préparé un script mettant en place des headers/entêtes http spécifiques pour palier à cette question d’authentification). Alors soit c’est un leurre (la sécurité de l’API). Soit j’ai raté un épisode et j’ai pas compris ou activé la sécurisation de l’API (la bonne hypothèse probablement). A fouiller donc.

Ces divers désagréments ne sont cependant pas bloquants. Elgg et son “engine” et API REST sont très prometteurs. Le code va aller en s’améliorant, il est déjà correct. Les questions de sécurité peuvent être traitées à un autre niveau : sécurisation des urls REST via Apache par exemple.

Pour tout cela il s’agit de développement php/mysql relativement classique, donc efficace et productif. Il faut cependant mettre un bémol sur cette productivité en raison de la jeunesse de la plate-forme Elgg et des anomalies qu’on y trouve toujours encore régulièrement.

quelques urls intéressants :
des exemples de codes et infos concernant l’API :
http://trac.elgg.org/elgg/browser/trunk/mod/apitest/start.php?rev=430
http://www.danielansari.com/wordpress/2008/12/how-to-use-the-rest-api-in-elgg-11/

Quelques bouts de code :

le plugin :fichier start.php

<?php
function haras_init()
 {
 /** j'expose ma fonction  au travers de l'api REST */
 expose_function(
 'group.create', //method
 'createGroup', //function
 array (
  "user_guid" => array('type'=>'string'),
 "montrucnumber" => array('type'=>'string')
   ), // parameters
 elgg_echo('group.create'),  // description
 "GET", // call_method
 false, // auth token
 true // anonymous   <-- sûrement cette ligne mes questions sur l'authentification :)  :)
  );
  }
function getMontruc($montruc)
 {
  /** je récupère l'objet vers le service SOAP tiers */
}
function createGroup($user_guid, $numtruc)
 {
[...]

 $montruc = getMontruc($numtruc)
/** je crée dynamiquement un groupe */
 $group = new ElggGroup();

 $user = get_entity((int)$user_guid);

 $group->name = $montruc->name;
 $group->description = $description;
 $group->access_id = 2;
 $group->membership = ACCESS_PUBLIC;
 $group->files_enable = get_input('files_enable', 'yes');
 $group->pages_enable = get_input('pages_enable', 'yes');
 $group->forum_enable = get_input('forum_enable', 'yes');

 $group->save();

 $group->join($user); // toujours créer un utilisateur après la création du groupe

 /** l'API ne fonctionne pas je dois manipuler
 // sale mais nécessaire, api bugguée
 $dblink = get_db_link('write');
 $query = "update elggentities set owner_guid =" . $user_guid . " where guid=" . $group->guid;
 $result = execute_query("$query", $dblink); 

 return 'group ' . $group->name . ' ' . $group->owner_guid . ' created';  // ouh là là le proto
 }
/** très important, on enregistre le service/handler auprès de Elgg */
 register_elgg_event_handler('init','system','haras_init');
?>

This entry was written by pablo, posted on October 8, 2009 at 2:57 pm, filed under php, technologies and tagged , , , , . Leave a comment or view the discussion at the permalink.

MySQL dans la tourmente mais toujours en progrès

MySQL

MySQL

Où en est MySQL ? en plein paradoxe a priori. D’abord les choses qui fâchent : La société est rachetée voilà à peu près 1 an et demi par SUN. Manifestement elle reste KO debout. On ne connait ni la roadmap qu’envisage Sun, ni si ils vont garder le modèle économique de la base de données opensource la plus répandue au monde. En décidant un silence radio de 6 mois suivant le rachat Sun n’arrange rien. Et ça bouge, en interne, certaines grosses pointures quittent le navire. Pas mal de choses assez excitantes semblent oubliées ou dans une impasse : par exemple Google devait intervenir sur une partie du code de MySQL (des plugins de recherches et d’analyses syntaxiques probablement), disparu, oublié. Heureusement rassurent certains, Sun est une boite qui va comprendre MySQL, et ce n’est pas l’un des gros comme Oracle ou Microsoft ou IBM. A ce sujet -bien embarrassé d’avoir laissé filer InnoDB chez l’ennemi (racheté par Oracle il ya quelques années)- MySQL s’est lancé dans la réalisation d’un moteur transactionnel maison : Falcon. Démarrage poussif de ce dernier qui reste encore en Alpha et dont les progrès paraissent trop lents pour rassurer. On se demande même si il n’est pas gelé. Compétition en interne, on sent bien que les ingénieurs de Sun ont décidés de se la jouer “pro” contre les savants fous créatifs de la communauté (si je caricature). Ca remue je vous dis. Monty Widenius se lance dans Maria (un moteur de stockage myisam évolué), en sent bien qu’il est exclu, il ne tarde pas à quitter MySQL, et fonde récemment avec les excellentissimes Percona l’Open Database Alliance. Et patatras, voilà 6 mois, Oracle rachète Sun… Et c’est reparti pour un tour : pas de visibilité, pas de plan, l’inconnu.

drizzle

Drizzle

Et pourtant beaucoup de bonnes choses : malgré un silence insistant de 6 mois les ingénieurs de chez Sun sortent soudain une version 5.4 de MySQL qui, si l’on en croit les benchmarks, pulvérisent les performances de ses prédécesseurs. On commence aussi à comprendre la position de Sun concernant le marché : ils offrent des solutions packagés/optimisés hardware/serveur de données. Et puis Oracle, ni Sun, n’osent bouger : le moteur Maria est déjà devenu un projet opensource à part, Percona offre des releases de MySQL patchées et propose aujourd’hui son propre moteur stockage et son propre outil de backup basés sur InnoDB. Drizzle (là aussi des anciens de MySQL) apparaît (comme très prometteur). Bref au moindre mouvement la communauté risque de faire un fork, si ce n’est déjà le cas.

Enfin autour de ma petite fenêtre je vois bien que les projets opensource n’ont jamais eu autant de succès, je vois bien que MySQL pénètre chez des clients qui ne juraient jusqu’à présent que par Oracle ou DB2.

This entry was written by pablo, posted on September 11, 2009 at 5:38 am, filed under database, opensource and tagged , , , , , , , , , . Leave a comment or view the discussion at the permalink.