12/05/2013

b1 free archiver n'est que 7zip repackagé

b1 free archiver semble intéressant au premier abord il dit:

Best speed to compression ratio

Though classic LZMA compression has been improving for over a decade, there are still some options to explore. For .b1 we designed an improved compression algorithm with much better speed to compression ratio.
 
cependant j'ai regardé le code source quand on veut le compiler il télécharge https://github.com/b1-pack/lzma-sdk-4j qui n'est qu'un pompage de du projet 7-zip

22/10/2011

amélioration de python en version 3

Soit le fichier test.py suivant

from __future__ import print_function
import sys
for line in sys.stdin:
    print ("= "+line)
    sys.stdout.flush()


est-ce  que python test.py et python3 test.py ont le même comportement?
et bien non

xcombelle@xcombelle-laptop:~/Ubuntu One$ python3 test.py
hello
= hello

world
= world

xcombelle@xcombelle-laptop:~/Ubuntu One$ python test.py
hello
world
= hello

= world






python en version 2.7 attend qu'on tape un fin de fichier (Ctrl+D sous linux) avant de faire la boucle il attend même un deuxième fin de fichier sans saisie avant de sortir de la boucle

18/04/2011

De l'utilité d'utiliser les bons outils

Comme j'ai pu le découvrir dans ce post de Stack overflow, utiliser les bons outils peut vous faire gagner  un facteur 237 de vitesse. En résumer, il s'agit en python d'utiliser la base de donnée embarquée de la manière suivante: Au lieu d'écrire toutes les requêtes, passer une seule requête paramétrée avec tous les arguments qui suivent. Ais-je été clair?

08/04/2011

J'ai une crystal Ball

 Comme je l'ai découvert dans ce post  sur Stack Overflow j'ai une boule de cristal. Bien sur je ne vous la prêterai pas. Mais si vous voulez me poser une question je suis à votre disposition

28/11/2010

Ce que j'aime pas chez GNU/Linux

Voilà environ un an que j'utilise GNU/linux et globalement j'en suis satisfait. Le seul truc qui me pose problème c'est le fait que des fois la souris elle se met en mode appuyée et impossible de l'utiliser. Si quelqu'un a une solution, je suis preneur.

17/09/2010

JBoss service PermGen OutOfMemory windows

Après bien des pérégrinations j'ai trouvé le problème qu'on avait sur notre serveur de prod et pas en test. La seule différence c'était que le jboss de prod était lancé en service et pas le jboss de test.

Le problème était le suivant
dans le service.bat il y a deux lignes innocentes
REM Suppress killing service on logoff event
set JAVA_OPTS=-Xrs

Ça parait bien mais là où ca s'aggrave c'est que dans le run.conf.bat

if not "x%JAVA_OPTS%" == "x" goto JAVA_OPTS_SET

qui permet de ne pas prendre en compte les java_opts si elles sont déjà installées.

Ainsi donc pour supprimer le problème de logoff jboss supprime toute sa propre configuration. Belle perf!

tout ça est bien sur tracé dans https://jira.jboss.org/browse/JBAS-7290 mais pour le trouver j'ai du chercher

29/10/2009

L'histoire de python - Introduction et vue d'ensemble

Traduction Xavier Combelle

Introduction

Python est actuellement, avec Perl, Tcl, PHP et le nouveau venu Ruby, l'un des plus populaire langage de programmation dynamique. Bien qu'il soit souvent vu comme un langage de script, c'est en réalité un langage de programmation à visée générale comme le sont Lisp et Smalltalk (comme les autres à propos). Aujourd'hui, Python est utilisé aussi bien pour des scripts jetable que pour des serveurs web extensible qui fournissent un service ininterrompu 24h/24 7j/7. Il est utilisé pour des IHM et de la programmation de base de donnée, de la programmation web aussi bien client que serveur et le test d'application. Il est utilisé par des scientifiques écrivant des application pour les plus rapides superordinateurs et pour les enfants qui débutent l'apprentissage dela programmation.

Dans ce blog, je vais mettre en relief les points marquants de l'histoire de Python. En particulier, comment python s'est développé, les influences majeures de sa conception, les erreurs faites, les leçons apprise et les futures directions envisagées pour le langage.

Remerciements: Je suis redevable à Dave Beazley pour beaucoup des meilleurs phrases de ce blog. (Pour l'origine de ce blog voir mon autre blog.)

Un survol de Python

Quand on est pour la première fois exposé à Python, on est souvent frappé par le fait que le code ressemble en surface à du code similaire écrit dans d'autre langage de programmation conventionnel tel que le C ou le Pascal. Ce n'est pas un accident, la syntaxe de Python emprunte largement au C. Par exemple beaucoup de mot clef de Python (if, else, while, for, etc.) sont identique à ceux du C, Les identifiants de Pythons ont les même règles de nommage que le C et la plus part des opérateurs standard ont le même sens qu'en C. Bien sur, Python n'est évidemment pas du C et l'une des majeurs parties ou il diffère est qu'au lieu d'utiliser des accolades pour regrouper les instructions, il utilise l'indentation. Par exemple, au lieu d'écrire les instruction en C comme ceci:

  if (a < b) {
max = b;
} else {
max = a;
}

Python supprime seulement les accolades (ainsi que les points-virgules finaux pour faire bonne mesure) et utilise la structure suivante

  if a < b:
max = b
else:
max = a

L'autre majeur partie où Python diffère des langages tel que le C est son utilisation du typage dynamique. En C, les variables doivent toujours être explicitement déclarées et assignées à un type spécifique tel que int ou double. Cette information est ensuite utilisée pour exécuter des vérification du programme de façon statique lors de la compilation ainsi que pour allouer des espaces mémoires utilisés pour stocker les valeurs des variables. En Python, les variables sont simplement des noms qui se réfèrent aux objets. Les variables n'ont pas besoin d'être déclarée avant d'être assignées et peuvent même changer de type au milieu d'un programme. Comme d'autres langages dynamiques, toutes les vérifications de types sont faites lors de l'exécution du programme par un interpréteur au lieu de se dérouler dans une étape de compilation séparée.

Les types primitifs (natifs) de Python incluent les booléens, kes nombres (entier de taille machine, entier à taille arbitraire, nombre réels et complexes à virgule flottante), et les chaines de caractère (8 bits et unicode). Ces objets sont tous des types non modifiable et leur valeurs sont représentées par des objets qui ne peuvent pas être modifiés après leur création. Les types composés (natifs) incluent les tuples (tableaux non modifiables), les listes (tableaux redimentionnables) et les dictionnaires (tables de hachage).

Pour organiser les programmes, Python supporte les package (groupes de modiles et/ou package), modules (code cohérent regroupé dans un seul code source), classes, méthodes et fonctions. Pour le contrôle de flux , il fournit les if/else, while, et une instruction for de haut niveau qui boucle sur n'importe quel objet "itérable". Pour la gestion des erreurs, Python utilise des exceptions (non récupérables). Une instruction raise lance une exception, et les instruction try/except/finally spécifient les gestionnaire d'exception. Les opérations natives rejettent des exceptions quand des conditions d'erreurs sont rencontrées.

En python, tous les objets qui peuvent être nommés sont dit de "première classe". Ce qui signifie que les fonctions, les classes, les méthodes, les modules, et tous les autres objets nommés peuvent être passé en paramètre, inspecté, et placé dans des structures de données variées (par exemple les liste ou les dictionnaires) au moment de l'exécution. En parlant des objets, Python a également un complet support des la programmation orientée objet incluant les classes définies par l'utilisateur, l'héritage, et la liaison lors de l'execution de méthode à un objet.

Python a une librairie standard étendue, qui est l'une des principales raisons de sa popularité. La librairie standard a plus de 100 modules et est toujours en évolution. Certains de ces modules incluent les expressions rationnelles, les fonctions mathématique standard, les threads, les interfaces avec le système d'exploitation, la programmation réseau, les protocoles interne standard (HTTP, FTP, SMTP, etc.), la gestion des email, la manipulation de fichier XML, le parsing de fichier HTML, et une boite à outil de gestion d'IHM (Tcl/tk).

En plus, il y a une large fourniture de modules et packages tiers qui sont pour la pluspart open source. On peut trouver des framework web (top pour être listé), d'autre boite à outil de gestion d'IHM, des librairies numériques efficaces (incluant des wrappers pour de nombreux packages Fortran populaires) des interfaces à des bases de données relationnelles (Oracle, MySQL, et d'autres), SWIG (un outil pour mettre des librairies C++ arbitraires comme des modules python), et plus encore.

Un des majeurs avantages de Python (et d'autres langages dynamique pour ce qui est important) est que des taches qui peuvent sembler compliquées ssont souvent expriçmées en peu de lignes de code. Comme exemple, voici un simple script Python qui va chercher une page web, cherche les référneces aux URL et affiche les 10 premières d'entre elles.

  # Scan the web looking for references

import re
import urllib

regex = re.compile(r'href="([^"]+)"')

def matcher(url, max=10):
"Print the first several URL references in a given url."
data = urllib.urlopen(url).read()
hits = regex.findall(data)
for hit in hits[:max]:
print urllib.basejoin(url, hit)

matcher("http://python.org")

Ce programme peut être facilement modifié pour faire un robot d'indexation, et en fait Scott Hassan m'a dit qu'il avait écrit le premier robot d'indexation de Google en Python. Aujourd'hui, Google emploie des millions de lignes de code Python popur gérer beaucoup d'aspect de ses opérations, depuis l'automatisation des build jusqu'à la gestion des publicités (Averissement: Je suis actuellement un employé de Google.)

Sous le capot, Python est typiquement implémenté en utilisant une combinaison de compilateur de bytecode et un interpréteur. La compilation est implicitement executée lorsque les modules sont chargés, et plusieurs primitives du langage nécessitent que le compilateur soit disponibles à l'exécution. Bien que l'implémentatoin standard de fait soit écrite en C, et disponible pour toutes les plateformes matérielles et logicielles imaginables, plusieurs a&utres implémentations sont devenues populaires. Jython est une version qui tourne sur la JVM et qui s'intègre sans frein à Java. IronPython est une version pour la plateforme .NET de microsoft et qui s'intègre similairement avec les autres langages tournant sur .NET. Pypy est un compilateur/interpreteur optimisant écrit en python (encore à l'état de projet de recherche, financé par l'Union Européenne). Il existe aussi Stackless Python, une variante de l'implémentation en C qui réduit la dépendance à la pile d'appel C pour les appels de fonctions et de méthodes qui permte les coroutines, les continuation et les microthreads.

Guido van Rossum