XAMPP : régler le problème de lancement d’Apache sous Windows 10

XAMPP2

Windows 10 est le dernier né des OS de Microsoft. Comme à chaque fois, certains décident (comme moi) de se lancer et d’installer la dernière version sur sa machine. Et c’est là que les ennuis commencent !
Je ne rentrerai pas dans les détails en ce qui concerne les différents problèmes que l’on peut rencontrer sur cette dernière version sauf un qui me paraît assez gênant: l’erreur de lancement d’Apache sous XAMPP.

Magento et IPv6 ?

magento_logo

Magento et IPv6 ?

De prime à bord, on pourrait se dire que Magento est une application sur une plateforme LAMP, et qu’ainsi la question ne se pose pas. Néanmoins, Magento utilise à certains endroits des IP (comme par exemple dans la possibilité de définir les IP des développeurs pour réduire le champ d’application des aides aux développeurs), et donc il est quand même intéressant de vérifier si l’on trouve ou non des incompatibilités. Ma démarche s’est divisée en trois temps : maquetter un environnement IPv6, passer les services Mysql et Apache en IPv6, puis essayer de voir les points qui pourraient poser problème lors de l’utilisation de Magento en IPv6.

SOLR : Améliorer votre recherche

Solr

SOLR est une plateforme de recherche basée sur le langage Java et s’appuyant sur le moteur de recherche Lucene (http://fr.wikipedia.org/wiki/Lucene). L’ensemble a été créé par la Fondation Apache sous licence libre.

Pour fonctionner, SOLR doit être exécuté via un conteneur de servlets (nous utilisons Tomcat). Il communique avec le client à l’aide d’une programmation en XML et JSON, généralement via le protocole http.

Predicate In Action

Habituellement, la recherche d’éléments dans une liste consiste à écrire une boucle de parcours d’éléments, un test pour savoir si l’élément parcouru est un de ceux que l’on cherche, puis à ajouter cet élément dans la liste de résultats. L’écriture de ce code est redondant, source d’erreurs et peut devenir complexe à lire et à maintenir.

Les prédicats permettent de simplifier l’écriture de méthodes de recherche d’éléments dans une liste.

En effet, l’interface Predicate permet d’externaliser la méthode de sélection des éléments recherchés.

Nous nous concentrons sur l’intention : que les éléments trouvés correspondent bien à ce que nous cherchons.

Ainsi, nous verrons une recherche classique de livres correspondant à certains critères. Ensuite nous verrons comment les bibliothèques common-collections d’Apache et guava de Google nous permettent de simplifier l’écriture de cette recherche à l’aide notamment de l’interface Predicate.

Exemple de recherche

Nous allons prendre comme exemple une bibliothèque qui dispose d’une liste de livre.

Pour chaque livre, nous disposons des informations suivantes : le titre, l’auteur et l’année de publication.

Nous recherchons les livres répondant aux critères suivant :

  • auteur : Rudyard Kipling
  • titre : le titre comporte les mots « jungle » et « grand »

Voyons comment nous pouvons effectuer cette recherche.

Un serveur Apache et des versions de PHP à la douzaine

Ça y est, vous êtes un développeur PHP heureux – voir même comblé : on vous a enfin confié un développement en PHP 5.4 ! A vous les joies des traits et autres dé-référencements de tableaux (et la super syntaxe [‘hey’ => ‘you’]) sans oublier l’amélioration des fonctions anonymes et la disparition des magic quotes !

Oui mais… comment comptez-vous développer avec cette nouvelle version sur votre serveur (ou VM) qui carbure en 5.3 et sert toujours pour les anciens projets ? Bien-sûr vous pouvez toujours faire un nouveau serveur (ou VM) avec la bonne version mais cette solution me laisse un petit goût de pas fini – pas vous ? Ce que je vous propose de voir ici c’est comment installer cette version 5.4 (et possiblement toute autre version de PHP) en parallèle avec votre 5.3 : sur la même machine et avec le même Apache. Tout ça grace aux CGI !

Traitement d’une réponse HTTP avec le client apache

Devant faire une requête HTTP dans android, j’ai commencé par écrire le code suivant en utilisant l’API du client HTTP apache (inclus en standard dans android) :

final HttpClient httpClient = ……; // création et initialisation du client http apache
HttpPost httppost = ……; // création et initialisation de la requête http
ResponseHandler rh = new ResponseHandler() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
HttpEntity entity = response.getEntity();
if (entity != null) {
StringBuilder out = new StringBuilder();
byte[] b = EntityUtils.toByteArray(entity);
out.append(new String(b, 0, b.length));
return out.toString();
} else {
return "";
}
}
};
String responseString = httpClient.execute(httppost, rh);

Suite à une problème, j’ai découvert que le serveur retournait une erreur http 403 (accès interdit). J’ai donc rajouté le code en gras ci-dessous afin de gérer le cas où celui-ci ne retourne pas OK :

final HttpClient httpClient = ……; // création et initialisation du client http apache
HttpPost httppost = ……; // création et initialisation de la requête http
ResponseHandler rh = new ResponseHandler() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if (entity != null) {
StringBuilder out = new StringBuilder();
byte[] b = EntityUtils.toByteArray(entity);
out.append(new String(b, 0, b.length));
return out.toString();
} else {
return "";
}
} else {
StatusLine sl = response.getStatusLine();
String message = "Erreur HTTP " + sl.getStatusCode() + " Raison: " +
sl.getReasonPhrase();
throw new HttpErrorException(message);
}
}
};
String responseString = httpClient.execute(httppost, rh);

remarque : J’ai créé la classe HttpErrorException qui hérite de IOException pour rester conforme avec la spécification de la méthode handleResponse dans l’interface ResponseHandler.
Après cette modification, l’appelant doit faire un catch (HttpErrorException) pour traiter spécifiquement le cas où le serveur ne retourne pas OK.

Trucs & Astuces : Librairie org.apache.poi

Dans cet article, je vais vous donner quelques astuces pour agrémenter la construction de votre export Excel.

Comment générer un fichier Excel via JAVA en verrouillant certaines cellules ?

Comment figer un volet avec POI ?

Comment créer un menu déroulant (liste de valeurs ou Drop Down List) ?

Un billet qui peut vous apporter quelques astuces et vous épargner quelques mauvaises surprises au moment de votre développement.

Controverse sur l’utilisation de POI : Il est dit dans la littérature trouvée sur Internet que POI consomme jusqu’à deux fois plus de mémoire que la librairie Jexcel. A vous donc d’utiliser la librairie la plus adaptée à votre projet, sachant que POI est à mon avis plus complet  et gère aussi les documents Word et XML.