Python à tout faire: de l’administration système aux applications graphiques 3D Fernando Niño – IRD/Legos/OMP.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
CRÉER UNE APPLICATION INTERNET RELIEE A UNE BASE DE DONNEES
Portée des variables VBA & Excel
Transformation de documents XML
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
12/10/2000Cédric Bertho - Comparaison entre Perl et Python1 vs Comparaison.
Exposé de Système - Informatique et Réseau
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Objectifs Présentation et utilisation du langage PERL
JAV - TD 6 Structures de données JAVA
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
simulateur de réseau de machines UML connectées par WiFi mode ad-hoc
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Licence GNU FDL - Version 1.5
Principes de programmation (suite)
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Développement d’applications web
CPI/BTS 2 Programmation Web Introduction au PHP
Retour sur l'allocation d'espace Exemple sur une table facture (sans les tables associées) N° fact, N° Client, N° Cde, date Cde, date fact, date réglement,
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
L’utilisation des bases de données
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre.
Ecole Supérieure Privée de ingénierie et de technologie année universitaire :2013/2014 Cross-Plateform Cours JavaScript.
JDBC ou comment manipuler une base de données en Java ?
Les instructions PHP pour l'accès à une base de données MySql
Python La programmation objet
L’utilisation des bases de données
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Fichiers et entrées / sorties Sauvegarde des programmes dans des fichiers. Compilation. Lecture et écriture de données dans des fichiers. Formatage des.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
CSI2520, Hiver 2007 Python Un langage de programmation par scripting et plus…
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
MySQL Création des sites dynamiques
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Management of Information Technology - e-business
Chapitre 9 Les sous-programmes.
Initiation à la programmation en Python
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
PHP & My SQL.
Gérer la sécurité des mots de passe et les ressources
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
JavaScript.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
Un survol du language C.
 Syntaxe du langage PHP
Les sockets.
SciTools Understand A Source Code Analysis and Metrics Tool
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
Cours LCS N°4 Présenté par Mr: LALLALI
CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)
1 Programmation en C++ Marianne Morris. 2 Intro générale à la programmation On a déjà étudié le langage assembleur Langage de bas niveau Meilleur que.
Fichier=open('monfichier.txt','w') >>> fichier.write('bonjour\n') 8 >>> liste ['le chien', 'le chat', 'le loup'] >>> for s in liste: fichier.write(s+'\n')
Initiation au web dynamique Licence Professionnelle.
Cours n°4M1.ist-ie (S. Sidhom) UE 203 Promo. M1 IST-IE 2006/07 Conception d’un système d'information sur Internet Architecture trois-tiers : technologies.
Architecture Client/Serveur
Les bases de données Séance 8 Jointures.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Python à tout faire: de l’administration système aux applications graphiques 3D Fernando Niño – IRD/Legos/OMP

Les langages ... « Une machine de Turing peut simuler n’importe quelle fonction trouvée dans les langages de programmation, y compris des procédures récursives et tout mécanisme de passage de paramètres » John Hopcroft and Jeffrey Ullman, (1979). Introduction to Automata Theory, Languages and Computation, 1st edition, Addison-Wesley, Reading Massachusets  Tous les langages de programmation sont équivalents Türing-complets: C, Perl, ADA, Fortran, Python, Cobol, ... Non Türing-complets: SQL, expressions rationnelles

Python et les compromis Pouvoir écrire facilement (expressivité); Evidemment cela dépend du domaine, et des librairies disponibles Python est livré en standard avec une fouletitude de librairies (réseau, web, I/O, multithreading...) float **A; int M=30, N=20; A=calloc(M,sizeof(float *)); for (int i=0; i < M; i++) { A[i] = calloc(N,sizeof(float)); for (int j=0; i < N; j++) A[i][j] = 1; } import numpy A=numpy.ones(M,N)

Python et les compromis Etre performant ... en quoi ? A l’éxécution ??? rien ne vaut de l’assembleur optimisé à la main ! ?

Python et les compromis Etre performant... à l’exécution ? Oui, mais encore il faut optimiser ce qu’il doit l’être. La loi de Pareto peut être invoquée (80% du problème est dû au 20% du code). Il faut identifier les goulots d’étranglement Etre performant pendant le développement / la maintenance ? Cela dépend du domaine d’application (on ne gère pas un site web comme on gère un logiciel d’acquisition satellite embarqué), mais vu la durée de vie d’une application la facilité de développement est importante

Python s’adapte aux systèmes La performance s’obtient en sachant s’adapter: aux systèmes – Python est conçu dès le départ pour l’intégration interprété, avec introspection (le code peut se voir lui-même) facilement étendu (SWIG ...) import numpy if numpy.__version__ == '1.5.0': apply_patch()

Python et le peopleware Plus que le hardware ou le software, le facteur humain est essentiel faciliter la compréhension (éviter les candidats à l’Obfuscated Perl Contest) et le code « write-only » Python a un héritage C, comme beaucoup d’autres langages, il est donc facilement lisible, avec l’indentation significative (it’s not a bug, its a feature !) Gestion automatique de mémoire évite beaucoup de problèmes ! #:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :|| open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\| /:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n"; #.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:| def lire(monfichier): f=open(monfichier,’r’) for ligne in f.readlines(): print ligne

Le langage Python Instruction C’est un langage dynamique: toutes les instructions sont exécutées au fur et à mesure, y compris les déclarations. import sys # Module d’accès au systeme print sys.path monchemin=’/sw/lib/’ sys.path.append(monchemin) on peut modifier le chemin de recherche de modules, comme avec PYTHONPATH. C’est un langage où l’indentation est significative import sys print sys.path #---> ERREUR de syntaxe Instruction Commentaire Variable

Python – la forme (indentation) L’indentation est celle de l’utilisateur: n espaces d’indentation. C’est bien: ce qu’on voit est ce qu’il éxecute (pas de problème d’accolade fermée trop tôt comme en C...) for(i=0; i < n; i++) { for (j=0; j < n; j++) x=x*j; y=y*i+j; } for i in range(0,n): for j in range(0,n): x=x*j y=y*i+j piège

Python – les types Python est un langage faiblement typé Donc, le type d’une variable dépend de son contenu i=10 # i est un entier i=’voici’ # i est une chaîne de caractères Pour avoir des informations sur un objet: Son type type(i) De quoi est-il capable (méthodes applicables) ? dir(i) Virgule flottante , nombres complexes x=0.001 y=1.2E-9 u=5j v=3 + 4.5j

Python – séquences et dictionnaires Tuples Ce sont des séquences qui ont des éléments hétérogènes ils ne peuvent pas être modifiés donc, copie si modification nécessaire In [20]: tuple=('un',1,'deux',2) In [21]: tuple[2]='3' --------------------------------- exceptions.TypeError Traceback (most recent call last)

Python – les listes La seule séquence modifiable est la liste: Comme le tuple, mais se créé avec des [ ] liste=[] # vide liste = range(0,100) # génère 0, 1, 2, 3, ... 99 Opérations interessantes: liste.append(element) liste.extend(liste2) liste.insert(position,element) liste.remove(element) liste.pop(position) liste.index(element) liste.count(element) liste.sort()

Python – les dictionnaires Dictionnaires ou hash arrays ou associative arrays. Ce sont des associations de clés et valeurs In [23]: dict={'a':1, 'b':2, 'c':None } In [24]: dict Out[24]: {'a': 1, 'c': None, 'b': 2} Remarquez que l’ordre est quelconque Pour le parcourir In [25]: dict.keys() Out[25]: ['a', 'c', 'b'] In [26]: dict.values() Out[26]: [1, None, 2] In [27]: dict['b'] Out[27]: 2

Python objet Encapsulation Héritage Surcharge Structure de données va ensemble avec ses procédures de traitement liste.append(element) Héritage Eviter la duplication de code fichier fichierZip fichierTexte Surcharge Un même nom pour différentes fonctions (distinguées par contexte - ou signature) mafonction(a,b,c) / mafonction(a) ça n’existe pas en Python ! Un seul nom admis !

Morceaux choisis

Administration Système Distributions linux « Python is pervasive in Fedora. Everything from yum to system-config-* to anaconda to pungi is written in Python.  » http://fedoraproject.org/wiki/Features/Python_2.6 Analyse forensique Python Volatility (https://www.volatilesystems.com/default/volatility) analyse des dumps mémoire pour obtenir des informations sur: Image date and time / Running processes/ Open network sockets / Open network connections / DLLs loaded for each process / Open files for each process / Open registry handles for each process / A process' addressable memoryOS kernel modules / Mapping physical offsets to virtual addresses (strings to process) / Virtual Address Descriptor information / Scanning examples: processes, threads, sockets, connections,modules / Extract executables from memory samples / Transparently supports a variety of sample formats (ie, Crash dump, Hibernation, DD) / Automated conversion between formats

Administration Système – le shell Remplacement de scripts shell Pourquoi ? Bash et consorts est très limité, avec une gestion d’erreurs très minimaliste, à la C (vérifier le code e retour à chaque fois). try: # tout un bloc except: # gestion de l’erreur Construction de modules, organisés de façon cohérente

Administration système - example Vérification de mots de passe import pwd #initialize counters erroruser = [] errorpass = [] #get password database passwd_db = pwd.getpwall() try: #check each user and password for validity for entry in passwd_db: username = entry[0] password = entry [1] if len(username) < 6: erroruser.append(username) if len(password) < 8: errorpass.append(username) print "The following users have an invalid userid (less than six characters):" for item in erroruser: print item print "\nThe following users have invalid password(less than eight characters):" for item in errorpass: except: print "There was a problem running the script."

Python – Web et réseaux Serveur web inclus dans Python import SimpleHTTPServer import SocketServer PORT = 8000 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever()

Python Web – Le CMS Plone Système de gestion de contenu web: Plone + Deliverance

Python – Web et calcul scientifique

Python Bases de Données La sérialisation Python: pickle import pickle data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close() import pprint, pickle pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()

Python et bases de données PostgreSQL, .... try: self.conn = psycopg2.connect(dsn) self.conn.set_isolation_level(ISOLATION_LEVEL_READ_COMMITTED) self.cur = self.conn.cursor() except: print "Unable to connect to database with dsn %s" % dsn raise #... sql = "UPDATE CYCLE SET cycle_startdate = %s, cycle_enddate = %s WHERE cycle_id = %d" % \ (adapt(mind), adapt(maxd), cycle_id) self.cur.execute(sql) self.conn.commit()

Python Applications Scientifiques Numpy pour remplacer Matlab Syntaxe très proche de matlab Primitives graphiques (matplotlib) calquées de Matlab La logique: vectoriser les calculs, utilisant des librairies C/C++ au mieux (i.e. lapack). De ce fait, les performances sont très bonnes: l’interface est gérée par Python, les calculs lourds sont faits par des librairies optimisées. Exemple: Venμs, un micro-satellite pour surveiller la végétation et l'environnement: maquettage Python from mpl_toolkits.mplot3d import Axes3D import matplotlib import numpy as np from matplotlib import cm from matplotlib import pyplot as plt step = 0.04 maxval = 1.0 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # create supporting points in polar coordinates r = np.linspace(0,1.25,50) p = np.linspace(0,2*np.pi,50) R,P = np.meshgrid(r,p) # transform them to cartesian system X,Y = R*np.cos(P),R*np.sin(P) Z = ((R**2 - 1)**2) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet) ax.set_zlim3d(0, 1) ax.set_xlabel(r'$\phi_\mathrm{real}$') ax.set_ylabel(r'$\phi_\mathrm{im}$') ax.set_zlabel(r'$V(\phi)$') ax.set_xticks([]) plt.show()

Example de visualisation 3D mayavi/matplotlib

Applications Graphiques Blender privilégie Python pour extensions

Interaction avec SIG, DAP, etc. DAP: Data Access Protocol : extraction de données en ligne avec des critères de sélection spatiotemporels

Conclusion Python est un langage très complet fournit avec beaucoup de librairies: traitement des exceptions : gestion élégante des erreurs conception orientée objet : modularité, encapsulation facile à lire, facile à maintenir permet d’intégrer beaucoup de solutions disparates Mode de développement en boucle courte: coder par petits morceaux tester intégrer tests d’intégration Un langage pour beaucoup de choses: traitement de données (fichiers/bases de données) visualisation (2D/3D, IHM, rapports) aussi à l’aise côté serveur que côté client